feat: add equipment, achievements, and visual polish

- Equipment system: 12 items across weapon/armour/trinket slots with
  common/rare/epic/legendary rarities; starter commons auto-equipped,
  higher tiers drop from boss victories
- Achievement system: 15 milestones with typed conditions; checked
  each tick and crystal rewards applied automatically
- Achievement toast: slide-in notification, auto-dismisses after 4s
- Floating click text: +X gold floats on each manual click
- Expanded quests (9 total) and upgrades (12 total)
- Upgrade panel now shows locked upgrades so players can see their
  progression path
- formatNumber utility (K/M/B/T) used consistently across all panels
- Backfill logic for existing saves to add new content gracefully
- types package now emits .d.ts declarations
This commit is contained in:
2026-03-06 13:27:48 -08:00
committed by Naomi Carrigan
parent a3daed1683
commit e9e0df31fd
33 changed files with 2066 additions and 133 deletions
+47
View File
@@ -58,6 +58,17 @@ export const DEFAULT_UPGRADES: Upgrade[] = [
purchased: false,
unlocked: false,
},
{
id: "global_3",
name: "Royal Patronage",
description: "The king himself backs your guild. All income doubled.",
target: "global",
multiplier: 2,
costGold: 1_000_000,
costEssence: 100,
purchased: false,
unlocked: false,
},
// Adventurer-specific upgrades
{
id: "peasant_1",
@@ -95,4 +106,40 @@ export const DEFAULT_UPGRADES: Upgrade[] = [
purchased: false,
unlocked: false,
},
{
id: "cleric_1",
name: "Holy Rites",
description: "Sacred ceremonies double the output of your clerics.",
target: "adventurer",
adventurerId: "acolyte",
multiplier: 2,
costGold: 8_000,
costEssence: 3,
purchased: false,
unlocked: false,
},
{
id: "scout_1",
name: "Stealth Training",
description: "Advanced scouting techniques double ranger effectiveness.",
target: "adventurer",
adventurerId: "ranger",
multiplier: 2,
costGold: 15_000,
costEssence: 5,
purchased: false,
unlocked: false,
},
{
id: "knight_1",
name: "Tempered Steel",
description: "Superior forging techniques double the output of your knights.",
target: "adventurer",
adventurerId: "knight",
multiplier: 2,
costGold: 50_000,
costEssence: 10,
purchased: false,
unlocked: false,
},
];