Game/2D/Gameplay/MilestoneCatalog.cs

Defines WaveMilestone data class and a static MilestoneCatalog that contains a hardcoded list of milestones for specific waves and a lookup method GetForWave.

File Access
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);
}