Static partial ProgressManager method that defines quest groups and quest definitions used by the game. It builds an array of QuestGroup objects, each with Tab, Name, and a list of QuestDef entries containing ids, display strings, stats, level targets, rewards, icons, and colors.
using Sandbox;
public static partial class ProgressManager
{
private static QuestGroup[] GetQuestGroups()
{
var cc = new Color( 0.85f, 0.25f, 0.25f ); // combat
var ec = new Color( 0.25f, 0.65f, 0.85f ); // exploration
var lc = new Color( 0.85f, 0.75f, 0.20f ); // collection
var sc = new Color( 0.35f, 0.80f, 0.40f ); // survival
return new QuestGroup[]
{
new QuestGroup( Tab: 0, Name: "Combat", Quests: new QuestDef[]
{
new QuestDef
{
Id = QuestId.KillEnemies,
Name = "Kill {0} Enemies",
Description = "",
Stat = ProgressStat.EnemyKills,
LevelTargets = new[] { 100, 250, 500, 1000, 2000, 3000, 4000, 5000, 10000 },
RewardAmounts = new[] { 2, 3, 4, 5, 6, 7, 8, 9, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillMinibosses,
Name = "Kill {0} Minibosses",
Description = "Minibosses are the elite enemies with a health bar.",
Stat = ProgressStat.MinibossKills,
LevelTargets = new[] { 1, 5, 20 },
RewardAmounts = new[] { 5, 9, 14 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillBosses,
Name = "Kill {0} Bosses",
Description = "Defeat the final boss at the end of a run.",
Stat = ProgressStat.BossKills,
LevelTargets = new[] { 1, 3 },
RewardAmounts = new[] { 8, 16 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DealDamage,
Name = "Deal {0} Damage",
Description = "",
Stat = ProgressStat.DamageDealt,
LevelTargets = new[] { 10000, 50000 },
RewardAmounts = new[] { 4, 8 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.ExecuteEnemies,
Name = "Execute {0} Enemies",
Description = "Requires the Execution perk.",
Stat = ProgressStat.EnemiesExecuted,
LevelTargets = new[] { 10, 50, 200 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillWithExplosions,
Name = "Kill {0} Enemies with Explosions",
Description = "",
Stat = ProgressStat.ExplosionKills,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.BounceWithBullets,
Name = "Bounce Bullets {0} Times",
Description = "Requires a perk that grants bullet bounces.",
Stat = ProgressStat.BulletBounces,
LevelTargets = new[] { 500, 2000, 5000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.PierceWithBullets,
Name = "Pierce Bullets {0} Times",
Description = "Requires a perk that grants bullet piercing.",
Stat = ProgressStat.BulletPierces,
LevelTargets = new[] { 500, 2000, 5000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.TakeDamage,
Name = "Take {0} Damage",
Description = "",
Stat = ProgressStat.DamageTaken,
LevelTargets = new[] { 5000, 20000, 50000 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.TakeSelfDamage,
Name = "Deal {0} Self Damage",
Description = "Damage you deal to yourself.",
Stat = ProgressStat.SelfDamageTaken,
LevelTargets = new[] { 500, 2000, 5000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.BlockDamageWithArmor,
Name = "Block {0} Damage with Armor",
Description = "",
Stat = ProgressStat.ArmorDamageBlocked,
LevelTargets = new[] { 1000, 5000, 15000 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.FreezeEnemies,
Name = "Freeze {0} Enemies",
Description = "Requires a perk or loadout that applies freeze.",
Stat = ProgressStat.EnemiesFrozen,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DealPoisonDamage,
Name = "Deal {0} Poison Damage",
Description = "Damage dealt by poison status counts.",
Stat = ProgressStat.PoisonDamageDealt,
LevelTargets = new[] { 1000, 5000, 20000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DealBuzzsawDamage,
Name = "Deal {0} Buzzsaw Damage",
Description = "Damage dealt by orbiting blade perks.",
Stat = ProgressStat.BuzzsawDamageDealt,
LevelTargets = new[] { 500, 2500, 10000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DealFireDamage,
Name = "Deal {0} Fire Damage",
Description = "Deal damage with fire sources.",
Stat = ProgressStat.FireDamageDealt,
LevelTargets = new[] { 1000, 5000, 20000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillWithBoomerangs,
Name = "Kill {0} Enemies with Boomerangs",
Description = "Requires a boomerang loadout or perk.",
Stat = ProgressStat.BoomerangKills,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DestroyFlyingSkullsDashing,
Name = "Destroy {0} Flying Skulls by Dashing",
Description = "Dash through homing flying skulls to destroy them.",
Stat = ProgressStat.FlyingSkullsDashDestroyed,
LevelTargets = new[] { 10, 50, 200 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.ScareEnemies,
Name = "Scare {0} Enemies",
Description = "Apply the Fear status to enemies.",
Stat = ProgressStat.EnemiesScared,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.DealRadiationDamage,
Name = "Deal {0} Radiation Damage",
Description = "Requires the Radiation perk.",
Stat = ProgressStat.RadiationDamageDealt,
LevelTargets = new[] { 5000, 25000, 100000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.LandCriticalHits,
Name = "Land {0} Critical Hits",
Description = "Critical hits from any source count.",
Stat = ProgressStat.CriticalHits,
LevelTargets = new[] { 250, 1000, 3000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillWithShock,
Name = "Kill {0} Enemies with Shock",
Description = "Enemies finished by shock damage count.",
Stat = ProgressStat.ShockKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteZombies,
Name = "Kill {0} Elite Zombies",
Description = "",
Stat = ProgressStat.ZombieEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteChargers,
Name = "Kill {0} Elite Chargers",
Description = "",
Stat = ProgressStat.ChargerEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteSpikers,
Name = "Kill {0} Elite Spikers",
Description = "",
Stat = ProgressStat.SpikerEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteSpitters,
Name = "Kill {0} Elite Spitters",
Description = "",
Stat = ProgressStat.SpitterEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteWerewolves,
Name = "Kill {0} Elite Werewolves",
Description = "",
Stat = ProgressStat.RunnerEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillEliteExploders,
Name = "Kill {0} Elite Exploders",
Description = "",
Stat = ProgressStat.ExploderEliteKills,
LevelTargets = new[] { 25, 100, 400 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.KillExploderMinis,
Name = "Kill {0} Mini Exploders",
Description = "",
Stat = ProgressStat.ExploderMiniKills,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
new QuestDef
{
Id = QuestId.GetHitByProjectiles,
Name = "Get Hit by {0} Projectiles",
Description = "Spitter projectiles, flying skulls, and tossed fireballs count.",
Stat = ProgressStat.ProjectileHits,
LevelTargets = new[] { 100, 500, 2000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = cc,
},
} ),
new QuestGroup( Tab: 1, Name: "Exploration", Quests: new QuestDef[]
{
new QuestDef
{
Id = QuestId.CompleteRuns,
Name = "Complete {0} Runs",
Description = "Counts win or loss — just finish the run.",
Stat = ProgressStat.TotalRuns,
LevelTargets = new[] { 3, 10, 25, 50 },
RewardAmounts = new[] { 5, 8, 12, 18 },
RewardIcon = "/textures/ui/coin.png",
Color = ec,
},
//new QuestDef
//{
// Id = QuestId.WinRuns,
// Name = "Win {0} Runs",
// Description = "",
// Stat = ProgressStat.RunsWon,
// LevelTargets = new[] { 3, 5, 15, 20 },
// RewardAmounts = new[] { 100, 500 },
// RewardIcon = "/textures/ui/coin.png",
// Color = ec,
//},
new QuestDef
{
Id = QuestId.DestroyBarrels,
Name = "Destroy {0} Barrels",
Description = "Normal and exploding barrels both count.",
Stat = ProgressStat.BarrelsDestroyed,
LevelTargets = new[] { 25, 100, 300 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = ec,
},
new QuestDef
{
Id = QuestId.OpenChests,
Name = "Open {0} Chests",
Description = "",
Stat = ProgressStat.ChestsOpened,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = ec,
},
new QuestDef
{
Id = QuestId.OpenEvilChests,
Name = "Open {0} Evil Chests",
Description = "The dark chests that spawn hazards when opened.",
Stat = ProgressStat.EvilChestsOpened,
LevelTargets = new[] { 5, 20, 50 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = ec,
},
new QuestDef
{
Id = QuestId.DisturbMushrooms,
Name = "Disturb {0} Mushrooms",
Description = "Get close enough to trigger a mushroom explosion.",
Stat = ProgressStat.MushroomsDisturbed,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = ec,
},
} ),
new QuestGroup( Tab: 2, Name: "Collection", Quests: new QuestDef[]
{
new QuestDef
{
Id = QuestId.CollectPerks,
Name = "Collect {0} Perks",
Description = "",
Stat = ProgressStat.PerksCollected,
LevelTargets = new[] { 1, 10, 50, 100 },
RewardAmounts = new[] { 2, 4, 8, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.CollectItems,
Name = "Collect {0} Items",
Description = "Pick up health packs, rerolls, magnets, and other items.",
Stat = ProgressStat.ItemsCollected,
LevelTargets = new[] { 25, 100, 300 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.GetUniquePerks,
Name = "Get {0} Unique Perks",
Description = "The rare yellow perks.",
Stat = ProgressStat.UniquePerksCollected,
LevelTargets = new[] { 1, 10, 30 },
RewardAmounts = new[] { 5, 9, 15 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.GetCurses,
Name = "Get {0} Curses",
Description = "",
Stat = ProgressStat.CursesCollected,
LevelTargets = new[] { 5, 25, 75 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.GetMagnets,
Name = "Collect {0} Magnets",
Description = "",
Stat = ProgressStat.MagnetsCollected,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.RerollPerks,
Name = "Reroll {0} Times",
Description = "",
Stat = ProgressStat.Rerolls,
LevelTargets = new[] { 25, 100, 300 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.BanishPerks,
Name = "Banish {0} Perks",
Description = "",
Stat = ProgressStat.PerksBanished,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.CollectXpCoins,
Name = "Collect {0} XP Coins",
Description = "Pick up XP coins dropped by enemies.",
Stat = ProgressStat.XpCoinsCollected,
LevelTargets = new[] { 500, 2000, 5000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.MaxOutPerks,
Name = "Max Out {0} Perks",
Description = "Upgrade a perk to its maximum level.",
Stat = ProgressStat.PerkMaxedOut,
LevelTargets = new[] { 10, 25, 50, 100 },
RewardAmounts = new[] { 2, 4, 6, 8 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
new QuestDef
{
Id = QuestId.CollectHealthPacks,
Name = "Collect {0} Health Packs",
Description = "Pick up health packs during runs.",
Stat = ProgressStat.HealthPacksCollected,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = lc,
},
} ),
new QuestGroup( Tab: 3, Name: "Survival", Quests: new QuestDef[]
{
new QuestDef
{
Id = QuestId.StandStill,
Name = "Stand Still for {0} Seconds",
Description = "Cumulative across all runs.",
Stat = ProgressStat.SecondsStandingStill,
LevelTargets = new[] { 3600, 10800, 36000 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.HealHp,
Name = "Heal {0} HP",
Description = "",
Stat = ProgressStat.HpHealed,
LevelTargets = new[] { 2000, 10000, 30000 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.DieDeaths,
Name = "Die {0} Times",
Description = "Progress carries across all runs.",
Stat = ProgressStat.Deaths,
LevelTargets = new[] { 5, 20, 50 },
RewardAmounts = new[] { 2, 5, 8 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.DodgeTimes,
Name = "Dodge {0} Times",
Description = "Requires a perk or loadout that grants dodge chance.",
Stat = ProgressStat.TimesDodged,
LevelTargets = new[] { 50, 250, 1000 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.LoseShield,
Name = "Lose your Shield {0} Times",
Description = "Requires a perk that grants shields.",
Stat = ProgressStat.ShieldsLost,
LevelTargets = new[] { 10, 50, 150 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.DashTimes,
Name = "Dash {0} Times",
Description = "",
Stat = ProgressStat.TimesDashed,
LevelTargets = new[] { 1000, 5000, 20000 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.SurviveAfterBoss,
Name = "Survive {0} Seconds After the Boss Arrives",
Description = "Cumulative across all runs.",
Stat = ProgressStat.SecondsAfterBoss,
LevelTargets = new[] { 60, 300, 900 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.SurviveAtOneHp,
Name = "Survive {0} Seconds at 1 HP",
Description = "Only full seconds while exactly 1 HP count.",
Stat = ProgressStat.SecondsAtOneHp,
LevelTargets = new[] { 30, 120, 300 },
RewardAmounts = new[] { 4, 7, 12 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.ReviveTimes,
Name = "Revive {0} Times",
Description = "Come back to life during a run.",
Stat = ProgressStat.Revives,
LevelTargets = new[] { 5, 20, 50 },
RewardAmounts = new[] { 3, 6, 10 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
new QuestDef
{
Id = QuestId.HealOtherPlayers,
Name = "Restore {0} HP to Teammates",
Description = "Healing done to other players counts.",
Stat = ProgressStat.HpHealedOthers,
LevelTargets = new[] { 500, 2500, 10000 },
RewardAmounts = new[] { 4, 7, 11 },
RewardIcon = "/textures/ui/coin.png",
Color = sc,
},
} ),
new QuestGroup( Tab: 4, Name: "Achievements", Quests: new QuestDef[] { } ),
};
}
}