Defines WaveMilestone data class and a static MilestoneCatalog that contains a hardcoded list of milestones for specific waves and a lookup method GetForWave.
using System.Collections.Generic;
public class WaveMilestone
{
public int Wave { get; set; }
public string Title { get; set; } // i.e : "PRESSURE BEGINS GANG!"
public string Subtitle { get; set; } // i.e : "Wave 25 reached"
public string Description { get; set; } // what actually changes
public string Icon { get; set; } // emoji
public string AccentColor { get; set; } // CSS color for the flash
}
public static class MilestoneCatalog
{
public static readonly List<WaveMilestone> All = new()
{
new WaveMilestone {
Wave = 25,
Icon = "⏱️",
Title = "PRESSURE BEGINS",
Subtitle = "Wave 25",
Description = "The timer shrinks faster from now on buddy. Plan your placements carefully.",
AccentColor = "rgba(251,191,36,0.90)"
},
new WaveMilestone {
Wave = 50,
Icon = "📐",
Title = "GRID EXPANDS",
Subtitle = "Wave 50",
Description = "The grid grows to 5×6. More chests, more chains — more chaos incoming!",
AccentColor = "rgba(96,165,250,0.90)"
},
new WaveMilestone {
Wave = 75,
Icon = "🔒",
Title = "IRON CHESTS APPEAR",
Subtitle = "Wave 75",
Description = "Locked chests require 3 hits to destroy — but reward triple score.",
AccentColor = "rgba(167,139,250,0.90)"
},
new WaveMilestone {
Wave = 100,
Icon = "💀",
Title = "NIGHTMARE BEGINS",
Subtitle = "Wave 100",
Description = "Cursed chests now appear. Destroying them costs you 2 timer seconds..",
AccentColor = "rgba(239,68,68,0.90)"
},
new WaveMilestone {
Wave = 150,
Icon = "📐",
Title = "GRID EXPANDS",
Subtitle = "Wave 150",
Description = "The grid grows to 6×6. The board is getting CROWDED man!",
AccentColor = "rgba(96,165,250,0.90)"
},
new WaveMilestone {
Wave = 200,
Icon = "🌑",
Title = "VOID AWAKENS",
Subtitle = "Wave 200",
Description = "Void chests appear. Destroying one REMOVES all chests in a 2×2 area around it.",
AccentColor = "rgba(88,28,135,0.90)"
},
new WaveMilestone {
Wave = 300,
Icon = "💀",
Title = "NIGHTMARE MODE",
Subtitle = "Wave 300",
Description = "Timer floor drops to 3 seconds. Only the best survive from here..!",
AccentColor = "rgba(239,68,68,0.90)"
},
new WaveMilestone {
Wave = 500,
Icon = "🌟",
Title = "YOU ARE THE STORM",
Subtitle = "Wave 500",
Description = "You've reached the legend tier. That's where History is made. — How far can you go?",
AccentColor = "rgba(251,191,36,0.90)"
},
};
public static WaveMilestone GetForWave(int wave) =>
All.Find(m => m.Wave == wave);
}