Files
elysium/apps/web/src/data/prestigeUpgrades.ts
T
hikari 3d114f63d7
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m5s
CI / Lint, Build & Test (push) Successful in 1m9s
feat: post-prestige automation (auto-adventurer) (#76)
## Summary

Closes #61

- Adds the **Autonomous Recruitment** prestige upgrade (50 runestones) to both the API and web data files
- Adds `autoAdventurer?: boolean` to the `GameState` type for backwards-compatible saves
- Adds tick-loop logic in GameContext that automatically purchases the highest-tier unlocked adventurer the player can afford each frame when the toggle is enabled
- Adds `toggleAutoAdventurer` callback and exposes it through the context
- Adds toggle UI in the Prestige Shop (mirrors the existing Auto-Prestige toggle pattern)
- Updates the How to Play guide in the About panel to document the new automation feature

 This issue was created with help from Hikari~ 🌸

Reviewed-on: #76
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
2026-03-19 13:38:25 -07:00

262 lines
8.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file Prestige upgrade data for Elysium.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable @typescript-eslint/naming-convention -- Snake_case IDs and SCREAMING_SNAKE are conventional for game data */
/* eslint-disable stylistic/max-len -- Long description strings cannot be split */
/* eslint-disable import/group-exports -- Multiple exports are required for this data module */
import type { PrestigeUpgrade } from "@elysium/types";
export const PRESTIGE_UPGRADES: Array<PrestigeUpgrade> = [
// ── Global Income Tiers ───────────────────────────────────────────────────
{
category: "income",
description:
"The first runestone awakens dormant power in your guild. All production ×1.25.",
id: "income_1",
multiplier: 1.25,
name: "Runestone Blessing I",
runestonesCost: 10,
},
{
category: "income",
description:
"Deeper runestone resonance amplifies your workforce. All production ×1.5.",
id: "income_2",
multiplier: 1.5,
name: "Runestone Blessing II",
runestonesCost: 25,
},
{
category: "income",
description: "The runes sing with accumulated wisdom. All production ×2.",
id: "income_3",
multiplier: 2,
name: "Runestone Blessing III",
runestonesCost: 60,
},
{
category: "income",
description:
"Runestone energy surges through your guild's operations. All production ×3.",
id: "income_4",
multiplier: 3,
name: "Runic Surge I",
runestonesCost: 150,
},
{
category: "income",
description:
"The surge intensifies, pushing limits thought impossible. All production ×5.",
id: "income_5",
multiplier: 5,
name: "Runic Surge II",
runestonesCost: 350,
},
{
category: "income",
description:
"An overwhelming tide of runic energy floods your operations. All production ×10.",
id: "income_6",
multiplier: 10,
name: "Runic Surge III",
runestonesCost: 800,
},
{
category: "income",
description:
"You decipher ancient runic inscriptions that unlock vast potential. All production ×25.",
id: "income_7",
multiplier: 25,
name: "Ancient Inscription I",
runestonesCost: 2000,
},
{
category: "income",
description:
"Deeper inscriptions reveal secrets of primordial power. All production ×50.",
id: "income_8",
multiplier: 50,
name: "Ancient Inscription II",
runestonesCost: 5000,
},
{
category: "income",
description:
"The full inscription blazes with world-shaping power. All production ×100.",
id: "income_9",
multiplier: 100,
name: "Ancient Inscription III",
runestonesCost: 12_000,
},
{
category: "income",
description:
"The oldest runes, carved before memory began, yield their secrets at last. All production ×500.",
id: "income_10",
multiplier: 500,
name: "Eternal Rune I",
runestonesCost: 30_000,
},
{
category: "income",
description:
"Eternal runes resonate with the heartbeat of creation itself. All production ×1,000.",
id: "income_11",
multiplier: 1000,
name: "Eternal Rune II",
runestonesCost: 80_000,
},
// ── Click Power ───────────────────────────────────────────────────────────
{
category: "click",
description:
"Infuse your personal strikes with runestone energy. Click power ×2.",
id: "click_power_1",
multiplier: 2,
name: "Runic Strike I",
runestonesCost: 15,
},
{
category: "click",
description:
"Your strikes crackle with compounded runic force. Click power ×5.",
id: "click_power_2",
multiplier: 5,
name: "Runic Strike II",
runestonesCost: 75,
},
{
category: "click",
description:
"Every click channels the weight of all your past lives. Click power ×20.",
id: "click_power_3",
multiplier: 20,
name: "Runic Strike III",
runestonesCost: 400,
},
{
category: "click",
description:
"A single click now carries the force of a falling empire. Click power ×100.",
id: "click_power_4",
multiplier: 100,
name: "World-Breaker Click",
runestonesCost: 2500,
},
// ── Essence Production ────────────────────────────────────────────────────
{
category: "essence",
description:
"Runestone resonance amplifies your essence gathering. Essence production ×2.",
id: "essence_1",
multiplier: 2,
name: "Essence Attunement I",
runestonesCost: 20,
},
{
category: "essence",
description:
"Deep attunement draws essence from previously invisible sources. Essence production ×5.",
id: "essence_2",
multiplier: 5,
name: "Essence Attunement II",
runestonesCost: 120,
},
{
category: "essence",
description:
"Your guild breathes essence as naturally as air. Essence production ×20.",
id: "essence_3",
multiplier: 20,
name: "Essence Attunement III",
runestonesCost: 700,
},
{
category: "essence",
description:
"Essence flows in torrents from every corner of every world. Essence production ×100.",
id: "essence_4",
multiplier: 100,
name: "Essence Attunement IV",
runestonesCost: 4000,
},
// ── Crystal Production ────────────────────────────────────────────────────
{
category: "crystals",
description:
"Runestones vibrate in harmony with crystal structures. Crystal rewards ×2.",
id: "crystal_1",
multiplier: 2,
name: "Crystal Resonance I",
runestonesCost: 30,
},
{
category: "crystals",
description:
"The resonance deepens, shattering crystal barriers. Crystal rewards ×5.",
id: "crystal_2",
multiplier: 5,
name: "Crystal Resonance II",
runestonesCost: 200,
},
{
category: "crystals",
description:
"Pure resonance crystallises reality into abundance. Crystal rewards ×25.",
id: "crystal_3",
multiplier: 25,
name: "Crystal Resonance III",
runestonesCost: 1200,
},
// ── Utility Unlocks ───────────────────────────────────────────────────────
{
category: "utility",
description:
"Unlock the Auto-Adventurer toggle. When enabled, the tick engine will automatically purchase the highest-tier adventurer you can currently afford.",
id: "auto_adventurer",
multiplier: 1,
name: "Autonomous Recruitment",
runestonesCost: 50,
},
{
category: "utility",
description:
"Unlock the Auto-Prestige toggle. When enabled, you will automatically ascend the moment you reach the prestige threshold — using your current character name.",
id: "auto_prestige",
multiplier: 1,
name: "Autonomous Ascension",
runestonesCost: 100,
},
// ── Runestone Meta-Upgrades ───────────────────────────────────────────────
{
category: "runestones",
description:
"Your runestone attunement grows with each prestige. Earn 25% more runestones from future prestiges.",
id: "runestone_gain_1",
multiplier: 1.25,
name: "Runic Legacy",
runestonesCost: 50,
},
{
category: "runestones",
description:
"Your legend transcends individual lifetimes. Earn 50% more runestones from future prestiges.",
id: "runestone_gain_2",
multiplier: 1.5,
name: "Eternal Legacy",
runestonesCost: 500,
},
];
export const PRESTIGE_UPGRADE_CATEGORY_LABELS: Record<string, string> = {
click: "👆 Click Power",
crystals: "💎 Crystal Rewards",
essence: "✨ Essence Production",
income: "🪙 Global Income",
runestones: "🔮 Runestone Gain",
utility: "⚙️ Utility",
};