Defines shop data for the game: a ShopConsumable DTO and a static ShopCatalog containing lists of ShopModifier entries (catalog) and ShopConsumable entries (consumables) with IDs, names, icons, costs, rarities and other small properties.
using System.Collections.Generic;
public class ShopConsumable
{
public string Id { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public int Cost { get; set; }
public int Lives { get; set; }
public int StartWave { get; set; }
}
public static class ShopCatalog
{
/* Catalog List - Season 1 */
public static readonly List<ShopModifier> All = new()
{
// ── Bomb Slots — unlock progressively, cheap-to-expensive ──
new ShopModifier {
Id = ModifierId.BombSlot2,
Name = "Twin Loader",
Description = "Start each wave with 2 bombs instead of 1.",
Icon = "💣",
Cost = 100,
Rarity = ModifierRarity.Common,
},
new ShopModifier {
Id = ModifierId.BombSlot3,
Name = "Triple Loader",
Description = "Start each wave with 3 bombs. Requires Twin Loader.",
Icon = "💣💣",
Cost = 500,
Rarity = ModifierRarity.Rare,
},
new ShopModifier {
Id = ModifierId.BombSlot4,
Name = "Quad Payload",
Description = "Start each wave with 4 bombs — maximum loadout.",
Icon = "💣💣💣",
Cost = 3000,
Rarity = ModifierRarity.Epic,
},
// ── Common tier — basic upgrades ──
new ShopModifier {
Id = ModifierId.TimerBonus,
Name = "Slow Fuse",
Description = "Extra +5 seconds on wave 1 to plan your opening.",
Icon = "⏱️",
Cost = 500,
Rarity = ModifierRarity.Common,
},
new ShopModifier {
Id = ModifierId.SniperRange,
Name = "Long Shot",
Description = "Sniper bombs gain +1 range in their direction.",
Icon = "🎯",
Cost = 800,
Rarity = ModifierRarity.Common,
},
new ShopModifier {
Id = ModifierId.GemsOneHit,
Name = "Gem Cutter",
Description = "Gem chests break in 1 hit instead of 2.",
Icon = "💎",
Cost = 1000,
Rarity = ModifierRarity.Common,
},
new ShopModifier {
Id = ModifierId.FirstChainDouble,
Name = "Overcharged",
Description = "First chain reaction of each wave gives 2× score.",
Icon = "⚡",
Cost = 1500,
Rarity = ModifierRarity.Common,
},
// ── Rare tier — meaningful changes ──
new ShopModifier {
Id = ModifierId.BombChestsNearChest,
Name = "Magnetized",
Description = "Bomb chests spawn next to other chests for easier chains.",
Icon = "🧲",
Cost = 2500,
Rarity = ModifierRarity.Rare,
},
new ShopModifier {
Id = ModifierId.CrossRangeAfterWave5,
Name = "Cross Master",
Description = "Cross bombs gain +1 range from wave 5 onwards.",
Icon = "✛",
Cost = 3000,
Rarity = ModifierRarity.Rare,
},
new ShopModifier {
Id = ModifierId.GemScoreBonus,
Name = "Gem Polish",
Description = "Destroying gem chests gives 2× score from that hit.",
Icon = "✨",
Cost = 3500,
Rarity = ModifierRarity.Rare,
},
};
/* Consumables — per-run items (not yet wired into shop UI) */
public static readonly List<ShopConsumable> Consumables = new()
{
new ShopConsumable { Id = "extra_life_1", Name = "Extra Life", Icon = "❤️", Cost = 40, Lives = 1 },
new ShopConsumable { Id = "extra_life_3", Name = "Life Pack", Icon = "💖", Cost = 100, Lives = 3 },
new ShopConsumable { Id = "head_start", Name = "Head Start", Icon = "⚡", Cost = 60, StartWave = 3 },
};
}