feat: content expansion, prestige shop, and offline earnings improvements

- Expand content to 18 zones, 72 bosses, 95 quests, 32 adventurer tiers
- Add prestige shop with 24 runestone upgrades across 5 categories
- Add PrestigeUpgrade type, data files, API routes, and frontend panel
- Fix offline earnings to include equipment and runestone multipliers
- Add offline essence calculation alongside offline gold
- Update OfflineModal to display both gold and essence earned
- Add IDEAS.md for tracking planned features
This commit is contained in:
2026-03-06 21:55:42 -08:00
committed by Naomi Carrigan
parent 6bc116a86a
commit 5b4661b398
23 changed files with 2288 additions and 91 deletions
+143
View File
@@ -580,4 +580,147 @@ export const DEFAULT_UPGRADES: Upgrade[] = [
purchased: false,
unlocked: false,
},
{
id: "aether_weaver_1",
name: "Aetheric Mastery",
description: "Complete mastery of aetheric forces doubles the weaver's output.",
target: "adventurer",
adventurerId: "aether_weaver",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 200_000_000,
purchased: false,
unlocked: false,
},
{
id: "titan_warrior_1",
name: "Titanic Fury",
description: "The fury of a titan unleashed — warrior effectiveness doubled.",
target: "adventurer",
adventurerId: "titan_warrior",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 700_000_000,
purchased: false,
unlocked: false,
},
{
id: "nexus_sage_1",
name: "Nexus Convergence",
description: "The sage converges all ley lines through their body — output doubled.",
target: "adventurer",
adventurerId: "nexus_sage",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 2_500_000_000,
purchased: false,
unlocked: false,
},
{
id: "cosmos_knight_1",
name: "Cosmic Tempering",
description: "Tempered by the heat of dying stars, the knight's effectiveness is doubled.",
target: "adventurer",
adventurerId: "cosmos_knight",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 9_000_000_000,
purchased: false,
unlocked: false,
},
{
id: "astral_sovereign_1",
name: "Sovereign Ascension",
description: "Ascension to true sovereignty over the astral plane doubles output.",
target: "adventurer",
adventurerId: "astral_sovereign",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 3e10,
purchased: false,
unlocked: false,
},
{
id: "primordial_mage_1",
name: "Primordial Awakening",
description: "Awakening of the mage's primordial heritage doubles their power.",
target: "adventurer",
adventurerId: "primordial_mage",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 1e11,
purchased: false,
unlocked: false,
},
{
id: "reality_warden_1",
name: "Reality Binding",
description: "The warden binds themselves to the structure of reality — effectiveness doubled.",
target: "adventurer",
adventurerId: "reality_warden",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 4e11,
purchased: false,
unlocked: false,
},
{
id: "infinity_ranger_1",
name: "Infinite Aim",
description: "The ranger's arrows travel through infinity itself — output doubled.",
target: "adventurer",
adventurerId: "infinity_ranger",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 1.5e12,
purchased: false,
unlocked: false,
},
{
id: "oblivion_paladin_1",
name: "Oblivion Consecration",
description: "Consecrated by the void between all things — paladin effectiveness doubled.",
target: "adventurer",
adventurerId: "oblivion_paladin",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 5e12,
purchased: false,
unlocked: false,
},
{
id: "transcendent_rogue_1",
name: "Transcendent Shadow",
description: "The rogue becomes one with the space between states — effectiveness doubled.",
target: "adventurer",
adventurerId: "transcendent_rogue",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 2e13,
purchased: false,
unlocked: false,
},
{
id: "omniversal_champion_1",
name: "Omniversal Dominion",
description: "Dominion over all versions of all universes — champion output doubled.",
target: "adventurer",
adventurerId: "omniversal_champion",
multiplier: 2,
costGold: 0,
costEssence: 0,
costCrystals: 8e13,
purchased: false,
unlocked: false,
},
];