Static part of ProgressManager that defines quest groups and quest definitions, including IDs, names, descriptions, tracked stats, level targets, rewards, icons and UI colors. It returns an array of QuestGroup instances used to populate the game's quest system.
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[] { } ),
};
}
}