feat: initial prototype — core game systems (#30)
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m1s
CI / Lint, Build & Test (push) Successful in 1m6s

## Summary

This PR represents the full v1 prototype, implementing the core game systems for Elysium.

- Full idle/clicker RPG loop: resource collection, crafting, boss fights, exploration, and quests
- Adventurer hiring with batch size selector and progressive tier cost scaling
- Prestige, transcendence, and apotheosis systems with auto-prestige support
- Character sheet, titles, leaderboards, companion system, and daily login bonuses
- Auto-quest and auto-boss toggles
- Discord webhook notifications on prestige/transcendence/apotheosis
- Discord role awarded on apotheosis
- Responsive design and overarching story/lore system
- In-game sound effects and browser notifications for key events
- Support link button in the resource bar
- Full test coverage (100% on `apps/api` and `packages/types`)
- CI pipeline: lint → build → test

## Closes

Closes #1
Closes #2
Closes #3
Closes #4
Closes #5
Closes #6
Closes #7
Closes #8
Closes #9
Closes #10
Closes #11
Closes #12
Closes #13
Closes #14
Closes #16
Closes #19
Closes #20
Closes #21
Closes #22
Closes #23
Closes #24
Closes #25
Closes #26
Closes #27
Closes #29

 This issue was created with help from Hikari~ 🌸

Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com>
Reviewed-on: #30
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #30.
This commit is contained in:
2026-03-08 15:53:39 -07:00
committed by Naomi Carrigan
parent c69e155de3
commit 29c817230d
172 changed files with 50706 additions and 0 deletions
+366
View File
@@ -0,0 +1,366 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
import type { Achievement } from "@elysium/types";
export const defaultAchievements: Array<Achievement> = [
// Click milestones
{
condition: { amount: 1, type: "totalClicks" },
description: "Click the Guild Hall for the first time.",
icon: "👆",
id: "first_click",
name: "First Strike",
reward: { crystals: 5 },
unlockedAt: null,
},
{
condition: { amount: 100, type: "totalClicks" },
description: "Click the Guild Hall 100 times.",
icon: "🖱️",
id: "click_enthusiast",
name: "Click Enthusiast",
reward: { crystals: 25 },
unlockedAt: null,
},
{
condition: { amount: 1000, type: "totalClicks" },
description: "Click the Guild Hall 1,000 times.",
icon: "⚡",
id: "click_master",
name: "Click Master",
reward: { crystals: 100 },
unlockedAt: null,
},
{
condition: { amount: 10_000, type: "totalClicks" },
description: "Click the Guild Hall 10,000 times.",
icon: "🌩️",
id: "click_legend",
name: "Click Legend",
reward: { crystals: 300 },
unlockedAt: null,
},
// Gold milestones
{
condition: { amount: 100, type: "totalGoldEarned" },
description: "Earn your first 100 gold.",
icon: "🪙",
id: "first_gold",
name: "First Gold",
reward: { crystals: 5 },
unlockedAt: null,
},
{
condition: { amount: 10_000, type: "totalGoldEarned" },
description: "Earn 10,000 gold in total.",
icon: "💰",
id: "wealthy",
name: "Wealthy",
reward: { crystals: 25 },
unlockedAt: null,
},
{
condition: { amount: 1_000_000, type: "totalGoldEarned" },
description: "Earn 1,000,000 gold in total.",
icon: "👑",
id: "rich",
name: "Rich",
reward: { crystals: 100 },
unlockedAt: null,
},
{
condition: { amount: 1_000_000_000, type: "totalGoldEarned" },
description: "Earn 1,000,000,000 gold in total.",
icon: "🏦",
id: "billionaire",
name: "Billionaire",
reward: { crystals: 500 },
unlockedAt: null,
},
{
condition: { amount: 1_000_000_000_000, type: "totalGoldEarned" },
description: "Earn 1,000,000,000,000 gold in total.",
icon: "💎",
id: "trillionaire",
name: "Trillionaire",
reward: { crystals: 2000 },
unlockedAt: null,
},
// Quest milestones
{
condition: { amount: 1, type: "questsCompleted" },
description: "Complete your first quest.",
icon: "📜",
id: "first_quest",
name: "Adventurous Spirit",
reward: { crystals: 10 },
unlockedAt: null,
},
{
condition: { amount: 5, type: "questsCompleted" },
description: "Complete 5 quests.",
icon: "📚",
id: "quest_veteran",
name: "Quest Veteran",
reward: { crystals: 50 },
unlockedAt: null,
},
{
condition: { amount: 15, type: "questsCompleted" },
description: "Complete 15 quests.",
icon: "🗺️",
id: "quest_master",
name: "Quest Master",
reward: { crystals: 200 },
unlockedAt: null,
},
// Boss milestones
{
condition: { amount: 1, type: "bossesDefeated" },
description: "Defeat your first boss.",
icon: "⚔️",
id: "boss_slayer",
name: "Boss Slayer",
reward: { crystals: 25 },
unlockedAt: null,
},
{
condition: { amount: 5, type: "bossesDefeated" },
description: "Defeat 5 bosses.",
icon: "🗡️",
id: "boss_veteran",
name: "Boss Veteran",
reward: { crystals: 150 },
unlockedAt: null,
},
{
condition: { amount: 10, type: "bossesDefeated" },
description: "Defeat 10 bosses.",
icon: "🏆",
id: "legendary_hunter",
name: "Legendary Hunter",
reward: { crystals: 500 },
unlockedAt: null,
},
{
condition: { amount: 18, type: "bossesDefeated" },
description: "Defeat all 18 bosses, including the Devourer of Worlds.",
icon: "🌟",
id: "devourer_slayer",
name: "World Saver",
reward: { crystals: 2000 },
unlockedAt: null,
},
// Adventurer milestones
{
condition: { amount: 50, type: "adventurerTotal" },
description: "Recruit a total of 50 adventurers.",
icon: "🏰",
id: "guild_master",
name: "Guild Master",
reward: { crystals: 50 },
unlockedAt: null,
},
{
condition: { amount: 500, type: "adventurerTotal" },
description: "Recruit a total of 500 adventurers.",
icon: "🛡️",
id: "army_commander",
name: "Army Commander",
reward: { crystals: 200 },
unlockedAt: null,
},
{
condition: { amount: 5000, type: "adventurerTotal" },
description: "Recruit a total of 5,000 adventurers.",
icon: "⚜️",
id: "army_legend",
name: "Legendary Commander",
reward: { crystals: 750 },
unlockedAt: null,
},
// Prestige milestones
{
condition: { amount: 1, type: "prestigeCount" },
description: "Prestige for the first time.",
icon: "⭐",
id: "first_prestige",
name: "Born Again",
reward: { crystals: 100 },
unlockedAt: null,
},
// Collection milestones
{
condition: { amount: 4, type: "equipmentOwned" },
description: "Acquire your first piece of boss-dropped equipment.",
icon: "🎒",
id: "collector",
name: "Collector",
reward: { crystals: 10 },
unlockedAt: null,
},
{
condition: { amount: 12, type: "equipmentOwned" },
description: "Own 12 pieces of equipment.",
icon: "🗃️",
id: "arsenal",
name: "Arsenal",
reward: { crystals: 200 },
unlockedAt: null,
},
{
condition: { amount: 25, type: "equipmentOwned" },
description: "Own 25 pieces of equipment.",
icon: "⚔️",
id: "well_armed",
name: "Well Armed",
reward: { crystals: 1000 },
unlockedAt: null,
},
{
condition: { amount: 40, type: "equipmentOwned" },
description: "Own 40 pieces of equipment.",
icon: "🛡️",
id: "fully_equipped",
name: "Fully Equipped",
reward: { crystals: 10_000 },
unlockedAt: null,
},
// Higher click milestones
{
condition: { amount: 100_000, type: "totalClicks" },
description: "Click the Guild Hall 100,000 times.",
icon: "💥",
id: "click_obsessed",
name: "Click Obsessed",
reward: { crystals: 1000 },
unlockedAt: null,
},
{
condition: { amount: 1_000_000, type: "totalClicks" },
description: "Click the Guild Hall 1,000,000 times.",
icon: "☄️",
id: "click_deity",
name: "Click Deity",
reward: { crystals: 5000 },
unlockedAt: null,
},
// Endgame gold milestones
{
condition: { amount: 1e15, type: "totalGoldEarned" },
description: "Earn 1 quadrillion gold in total.",
icon: "✨",
id: "quadrillionaire",
name: "Quadrillionaire",
reward: { crystals: 10_000 },
unlockedAt: null,
},
{
condition: { amount: 1e18, type: "totalGoldEarned" },
description: "Earn 1 quintillion gold in total.",
icon: "🌀",
id: "void_hoarder",
name: "Void Hoarder",
reward: { crystals: 50_000 },
unlockedAt: null,
},
// Higher quest milestones
{
condition: { amount: 30, type: "questsCompleted" },
description: "Complete 30 quests.",
icon: "🏅",
id: "quest_champion",
name: "Quest Champion",
reward: { crystals: 1000 },
unlockedAt: null,
},
{
condition: { amount: 50, type: "questsCompleted" },
description: "Complete 50 quests.",
icon: "🎖️",
id: "quest_grandmaster",
name: "Quest Grandmaster",
reward: { crystals: 5000 },
unlockedAt: null,
},
{
condition: { amount: 72, type: "questsCompleted" },
description: "Complete all 72 quests across the known multiverse.",
icon: "🌌",
id: "quest_eternal",
name: "Quest Eternal",
reward: { crystals: 25_000 },
unlockedAt: null,
},
// Higher boss milestones
{
condition: { amount: 20, type: "bossesDefeated" },
description: "Defeat 20 bosses.",
icon: "🦁",
id: "boss_champion",
name: "Champion of the Realm",
reward: { crystals: 1000 },
unlockedAt: null,
},
{
condition: { amount: 30, type: "bossesDefeated" },
description: "Defeat 30 bosses.",
icon: "🔱",
id: "boss_grandmaster",
name: "Grandmaster Hunter",
reward: { crystals: 5000 },
unlockedAt: null,
},
{
condition: { amount: 60, type: "bossesDefeated" },
description: "Defeat all 60 bosses across every plane of existence.",
icon: "💀",
id: "boss_eternal",
name: "Eternal Vanquisher",
reward: { crystals: 50_000 },
unlockedAt: null,
},
// Higher adventurer milestones
{
condition: { amount: 50_000, type: "adventurerTotal" },
description: "Recruit a total of 50,000 adventurers.",
icon: "⚡",
id: "army_titan",
name: "Titan Commander",
reward: { crystals: 5000 },
unlockedAt: null,
},
// Higher prestige milestones
{
condition: { amount: 5, type: "prestigeCount" },
description: "Prestige 5 times.",
icon: "🌟",
id: "prestige_veteran",
name: "Veteran of Ages",
reward: { crystals: 1000 },
unlockedAt: null,
},
{
condition: { amount: 10, type: "prestigeCount" },
description: "Prestige 10 times.",
icon: "💫",
id: "prestige_master",
name: "Master of Cycles",
reward: { crystals: 5000 },
unlockedAt: null,
},
{
condition: { amount: 25, type: "prestigeCount" },
description: "Prestige 25 times.",
icon: "🌠",
id: "prestige_legend",
name: "Legend of Eternity",
reward: { crystals: 25_000 },
unlockedAt: null,
},
];
+395
View File
@@ -0,0 +1,395 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
import type { Adventurer } from "@elysium/types";
export const defaultAdventurers: Array<Adventurer> = [
{
baseCost: 10,
class: "warrior",
combatPower: 1,
count: 0,
essencePerSecond: 0,
goldPerSecond: 0.1,
id: "peasant",
level: 1,
name: "Peasant",
unlocked: true,
},
{
baseCost: 100,
class: "warrior",
combatPower: 3,
count: 0,
essencePerSecond: 0,
goldPerSecond: 0.5,
id: "militia",
level: 2,
name: "Militia",
unlocked: false,
},
{
baseCost: 750,
class: "mage",
combatPower: 8,
count: 0,
essencePerSecond: 0.01,
goldPerSecond: 1.5,
id: "apprentice",
level: 3,
name: "Apprentice Mage",
unlocked: false,
},
{
baseCost: 5000,
class: "rogue",
combatPower: 20,
count: 0,
essencePerSecond: 0.02,
goldPerSecond: 4,
id: "scout",
level: 4,
name: "Scout",
unlocked: false,
},
{
baseCost: 35_000,
class: "cleric",
combatPower: 50,
count: 0,
essencePerSecond: 0.05,
goldPerSecond: 10,
id: "acolyte",
level: 5,
name: "Acolyte",
unlocked: false,
},
{
baseCost: 250_000,
class: "ranger",
combatPower: 120,
count: 0,
essencePerSecond: 0.1,
goldPerSecond: 25,
id: "ranger",
level: 6,
name: "Ranger",
unlocked: false,
},
{
baseCost: 1_750_000,
class: "warrior",
combatPower: 300,
count: 0,
essencePerSecond: 0.2,
goldPerSecond: 75,
id: "knight",
level: 7,
name: "Knight",
unlocked: false,
},
{
baseCost: 12_000_000,
class: "mage",
combatPower: 800,
count: 0,
essencePerSecond: 0.5,
goldPerSecond: 200,
id: "archmage",
level: 8,
name: "Archmage",
unlocked: false,
},
{
baseCost: 85_000_000,
class: "paladin",
combatPower: 2000,
count: 0,
essencePerSecond: 1,
goldPerSecond: 600,
id: "paladin",
level: 9,
name: "Paladin",
unlocked: false,
},
{
baseCost: 600_000_000,
class: "ranger",
combatPower: 6000,
count: 0,
essencePerSecond: 3,
goldPerSecond: 2000,
id: "dragon_rider",
level: 10,
name: "Dragon Rider",
unlocked: false,
},
{
baseCost: 4_000_000_000,
class: "rogue",
combatPower: 18_000,
count: 0,
essencePerSecond: 6,
goldPerSecond: 5000,
id: "shadow_assassin",
level: 11,
name: "Shadow Assassin",
unlocked: false,
},
{
baseCost: 28_000_000_000,
class: "mage",
combatPower: 45_000,
count: 0,
essencePerSecond: 15,
goldPerSecond: 14_000,
id: "arcane_scholar",
level: 12,
name: "Arcane Scholar",
unlocked: false,
},
{
baseCost: 200_000_000_000,
class: "rogue",
combatPower: 130_000,
count: 0,
essencePerSecond: 35,
goldPerSecond: 40_000,
id: "void_walker",
level: 13,
name: "Void Walker",
unlocked: false,
},
{
baseCost: 1_400_000_000_000,
class: "paladin",
combatPower: 400_000,
count: 0,
essencePerSecond: 100,
goldPerSecond: 120_000,
id: "celestial_guard",
level: 14,
name: "Celestial Guard",
unlocked: false,
},
{
baseCost: 10_000_000_000_000,
class: "warrior",
combatPower: 1_200_000,
count: 0,
essencePerSecond: 300,
goldPerSecond: 400_000,
id: "divine_champion",
level: 15,
name: "Divine Champion",
unlocked: false,
},
{
baseCost: 70_000_000_000_000,
class: "paladin",
combatPower: 4_000_000,
count: 0,
essencePerSecond: 800,
goldPerSecond: 1_200_000,
id: "seraph_knight",
level: 16,
name: "Seraph Knight",
unlocked: false,
},
{
baseCost: 500_000_000_000_000,
class: "rogue",
combatPower: 12_000_000,
count: 0,
essencePerSecond: 2000,
goldPerSecond: 3_500_000,
id: "abyss_diver",
level: 17,
name: "Abyss Diver",
unlocked: false,
},
{
baseCost: 3_500_000_000_000_000,
class: "warrior",
combatPower: 35_000_000,
count: 0,
essencePerSecond: 5000,
goldPerSecond: 10_000_000,
id: "infernal_warden",
level: 18,
name: "Infernal Warden",
unlocked: false,
},
{
baseCost: 25_000_000_000_000_000,
class: "mage",
combatPower: 100_000_000,
count: 0,
essencePerSecond: 12_000,
goldPerSecond: 30_000_000,
id: "crystal_sage",
level: 19,
name: "Crystal Sage",
unlocked: false,
},
{
baseCost: 175_000_000_000_000_000,
class: "rogue",
combatPower: 300_000_000,
count: 0,
essencePerSecond: 30_000,
goldPerSecond: 90_000_000,
id: "void_sentinel",
level: 20,
name: "Void Sentinel",
unlocked: false,
},
{
baseCost: 1_200_000_000_000_000_000,
class: "warrior",
combatPower: 900_000_000,
count: 0,
essencePerSecond: 80_000,
goldPerSecond: 270_000_000,
id: "eternal_champion",
level: 21,
name: "Eternal Champion",
unlocked: false,
},
{
baseCost: 8_500_000_000_000_000_000,
class: "mage",
combatPower: 2_700_000_000,
count: 0,
essencePerSecond: 220_000,
goldPerSecond: 800_000_000,
id: "aether_weaver",
level: 22,
name: "Aether Weaver",
unlocked: false,
},
{
baseCost: 60_000_000_000_000_000_000,
class: "warrior",
combatPower: 8_000_000_000,
count: 0,
essencePerSecond: 600_000,
goldPerSecond: 2_500_000_000,
id: "titan_warrior",
level: 23,
name: "Titan Warrior",
unlocked: false,
},
{
baseCost: 420_000_000_000_000_000_000,
class: "mage",
combatPower: 24_000_000_000,
count: 0,
essencePerSecond: 1_600_000,
goldPerSecond: 7_500_000_000,
id: "nexus_sage",
level: 24,
name: "Nexus Sage",
unlocked: false,
},
{
baseCost: 3_000_000_000_000_000_000_000,
class: "paladin",
combatPower: 72_000_000_000,
count: 0,
essencePerSecond: 4_500_000,
goldPerSecond: 22_000_000_000,
id: "cosmos_knight",
level: 25,
name: "Cosmos Knight",
unlocked: false,
},
{
baseCost: 21_000_000_000_000_000_000_000,
class: "warrior",
combatPower: 200_000_000_000,
count: 0,
essencePerSecond: 12_000_000,
goldPerSecond: 65_000_000_000,
id: "astral_sovereign",
level: 26,
name: "Astral Sovereign",
unlocked: false,
},
{
baseCost: 150_000_000_000_000_000_000_000,
class: "mage",
combatPower: 600_000_000_000,
count: 0,
essencePerSecond: 35_000_000,
goldPerSecond: 200_000_000_000,
id: "primordial_mage",
level: 27,
name: "Primordial Mage",
unlocked: false,
},
{
baseCost: 1_000_000_000_000_000_000_000_000,
class: "paladin",
combatPower: 1_800_000_000_000,
count: 0,
essencePerSecond: 100_000_000,
goldPerSecond: 600_000_000_000,
id: "reality_warden",
level: 28,
name: "Reality Warden",
unlocked: false,
},
{
baseCost: 7_000_000_000_000_000_000_000_000,
class: "ranger",
combatPower: 5_500_000_000_000,
count: 0,
essencePerSecond: 300_000_000,
goldPerSecond: 1_800_000_000_000,
id: "infinity_ranger",
level: 29,
name: "Infinity Ranger",
unlocked: false,
},
{
baseCost: 50_000_000_000_000_000_000_000_000,
class: "paladin",
combatPower: 16_000_000_000_000,
count: 0,
essencePerSecond: 850_000_000,
goldPerSecond: 5_500_000_000_000,
id: "oblivion_paladin",
level: 30,
name: "Oblivion Paladin",
unlocked: false,
},
{
baseCost: 350_000_000_000_000_000_000_000_000,
class: "rogue",
combatPower: 50_000_000_000_000,
count: 0,
essencePerSecond: 2_500_000_000,
goldPerSecond: 16_000_000_000_000,
id: "transcendent_rogue",
level: 31,
name: "Transcendent Rogue",
unlocked: false,
},
{
baseCost: 2_500_000_000_000_000_000_000_000_000,
class: "warrior",
combatPower: 150_000_000_000_000,
count: 0,
essencePerSecond: 7_000_000_000,
goldPerSecond: 50_000_000_000_000,
id: "omniversal_champion",
level: 32,
name: "Omniversal Champion",
unlocked: false,
},
];
File diff suppressed because it is too large Load Diff
+71
View File
@@ -0,0 +1,71 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { DailyChallengeType } from "@elysium/types";
interface DailyChallengeTemplate {
type: DailyChallengeType;
label: string;
target: number;
rewardCrystals: number;
}
export const dailyChallengeTemplates: Array<DailyChallengeTemplate> = [
// Clicks — always requires active play
{ label: "Click 500 times", rewardCrystals: 50, target: 500, type: "clicks" },
{
label: "Click 1,000 times",
rewardCrystals: 100,
target: 1000,
type: "clicks",
},
{
label: "Click 5,000 times",
rewardCrystals: 300,
target: 5000,
type: "clicks",
},
// Boss defeats — requires active combat
{
label: "Defeat 1 boss",
rewardCrystals: 75,
target: 1,
type: "bossesDefeated",
},
{
label: "Defeat 3 bosses",
rewardCrystals: 200,
target: 3,
type: "bossesDefeated",
},
{
label: "Defeat 5 bosses",
rewardCrystals: 400,
target: 5,
type: "bossesDefeated",
},
// Quest completions — requires starting quests
{
label: "Complete 3 quests",
rewardCrystals: 100,
target: 3,
type: "questsCompleted",
},
{
label: "Complete 5 quests",
rewardCrystals: 200,
target: 5,
type: "questsCompleted",
},
{
label: "Complete 10 quests",
rewardCrystals: 400,
target: 10,
type: "questsCompleted",
},
// Prestige — the big one
{ label: "Prestige once", rewardCrystals: 750, target: 1, type: "prestige" },
];
+771
View File
@@ -0,0 +1,771 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
/* eslint-disable stylistic/max-len -- Data content */
import type { Equipment } from "@elysium/types";
export const defaultEquipment: Array<Equipment> = [
// ── Weapons ───────────────────────────────────────────────────────────────
{
bonus: { combatMultiplier: 1.1 },
description: "A battered blade, but still sharp enough to draw blood.",
equipped: true,
id: "rusty_sword",
name: "Rusty Sword",
owned: true,
rarity: "common",
type: "weapon",
},
{
bonus: { combatMultiplier: 1.25 },
description: "A sturdy weapon issued to veterans of the guild.",
equipped: false,
id: "iron_sword",
name: "Iron Sword",
owned: false,
rarity: "rare",
setId: "iron_vanguard",
type: "weapon",
},
{
bonus: { combatMultiplier: 1.5 },
description:
"A sword imbued with ancient magic that makes every strike count.",
equipped: false,
id: "enchanted_blade",
name: "Enchanted Blade",
owned: false,
rarity: "epic",
type: "weapon",
},
{
bonus: { combatMultiplier: 1.65 },
cost: { crystals: 0, essence: 500, gold: 0 },
description:
"Forged in the Shadow Marshes from condensed darkness. It strikes before it is seen.",
equipped: false,
id: "shadow_dagger",
name: "Shadow Dagger",
owned: false,
rarity: "epic",
setId: "shadow_infiltrator",
type: "weapon",
},
{
bonus: { combatMultiplier: 1.7 },
description:
"A spear tipped with a shard of the Primordial Forge's eternal fire.",
equipped: false,
id: "flame_lance",
name: "Flame Lance",
owned: false,
rarity: "epic",
setId: "volcanic_forger",
type: "weapon",
},
{
bonus: { combatMultiplier: 2 },
description: "A legendary blade that severs even the strongest bonds.",
equipped: false,
id: "vorpal_sword",
name: "Vorpal Sword",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { combatMultiplier: 2.5 },
cost: { crystals: 300, essence: 0, gold: 0 },
description:
"A scythe that harvests not flesh but essence itself. Every swing drains the will to resist.",
equipped: false,
id: "soul_reaper",
name: "Soul Reaper",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { combatMultiplier: 3 },
description:
"Forged from the heart of a dying star by the Cosmic Horror itself. Its edge exists in three realities simultaneously.",
equipped: false,
id: "celestial_blade",
name: "Celestial Blade",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { combatMultiplier: 2.75 },
cost: { crystals: 500, essence: 2000, gold: 0 },
description:
"A blade made of compressed nothingness. It does not cut — it simply unmakes.",
equipped: false,
id: "void_edge",
name: "Void Edge",
owned: false,
rarity: "legendary",
type: "weapon",
},
// ── Armour ────────────────────────────────────────────────────────────────
{
bonus: { goldMultiplier: 1.1 },
description:
"Simple protection that keeps your adventurers moving efficiently.",
equipped: true,
id: "leather_armour",
name: "Leather Armour",
owned: true,
rarity: "common",
type: "armour",
},
{
bonus: { goldMultiplier: 1.25 },
description: "Interlocked rings that guard against most mundane threats.",
equipped: false,
id: "chainmail",
name: "Chainmail",
owned: false,
rarity: "rare",
setId: "iron_vanguard",
type: "armour",
},
{
bonus: { goldMultiplier: 1.35 },
description:
"Cured hide from a Forest Giant, worked into armour that radiates primal authority.",
equipped: false,
id: "hide_armour",
name: "Giant's Hide Armour",
owned: false,
rarity: "rare",
type: "armour",
},
{
bonus: { goldMultiplier: 1.5 },
description: "Full plate protection that inspires confidence — and gold.",
equipped: false,
id: "plate_armour",
name: "Plate Armour",
owned: false,
rarity: "epic",
type: "armour",
},
{
bonus: { goldMultiplier: 1.75 },
cost: { crystals: 0, essence: 400, gold: 0 },
description:
"A cloak woven from the fabric of the Shadow Marshes itself. Wealth flows to those hidden from sight.",
equipped: false,
id: "void_shroud",
name: "Void Shroud",
owned: false,
rarity: "epic",
setId: "shadow_infiltrator",
type: "armour",
},
{
bonus: { combatMultiplier: 1.15, goldMultiplier: 1.65 },
description:
"Armour quenched in magma that hardened into something neither metal nor stone. Burns with inner heat.",
equipped: false,
id: "volcanic_plate",
name: "Volcanic Plate",
owned: false,
rarity: "epic",
setId: "volcanic_forger",
type: "armour",
},
{
bonus: { goldMultiplier: 2 },
description: "Armour forged from the scales of a defeated elder dragon.",
equipped: false,
id: "dragon_scale",
name: "Dragon Scale Armour",
owned: false,
rarity: "legendary",
type: "armour",
},
{
bonus: { goldMultiplier: 2.5 },
cost: { crystals: 250, essence: 0, gold: 0 },
description:
"A shield-armour hybrid blessed by the celestials. Its bearer becomes a fortress.",
equipped: false,
id: "titan_aegis",
name: "Titan's Aegis",
owned: false,
rarity: "legendary",
type: "armour",
},
{
bonus: { goldMultiplier: 2.25 },
description:
"Woven from threads of pure starlight harvested by the Astral Wraith. Income flows like cosmic energy.",
equipped: false,
id: "astral_robe",
name: "Astral Robe",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Trinkets ──────────────────────────────────────────────────────────────
{
bonus: { clickMultiplier: 1.1 },
description: "A coin that always lands on the side you need.",
equipped: true,
id: "lucky_coin",
name: "Lucky Coin",
owned: true,
rarity: "common",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.25 },
description: "A crystal lens that sharpens magical precision.",
equipped: false,
id: "mages_focus",
name: "Mage's Focus",
owned: false,
rarity: "rare",
setId: "iron_vanguard",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.3 },
description:
"A rune carved from bone-ice by the Bone Colossus. It amplifies strikes with cold precision.",
equipped: false,
id: "frost_rune",
name: "Frost Rune",
owned: false,
rarity: "rare",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.5 },
description: "An orb humming with concentrated arcane energy.",
equipped: false,
id: "arcane_orb",
name: "Arcane Orb",
owned: false,
rarity: "epic",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.45, goldMultiplier: 1.15 },
description:
"An amulet carved from ancient runestones found in the plague ruins. Its inscriptions hum with forgotten power.",
equipped: false,
id: "runestone_amulet",
name: "Runestone Amulet",
owned: false,
rarity: "epic",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.55, goldMultiplier: 1.1 },
description:
"A fragment of the Mud Kraken's crystallised essence. Focuses raw power into devastating strikes.",
equipped: false,
id: "crystal_shard",
name: "Crystal Shard",
owned: false,
rarity: "epic",
setId: "volcanic_forger",
type: "trinket",
},
{
bonus: { clickMultiplier: 1.6 },
cost: { crystals: 0, essence: 350, gold: 0 },
description:
"A compass that points not north but toward the greatest concentration of power — wherever that may be.",
equipped: false,
id: "void_compass",
name: "Void Compass",
owned: false,
rarity: "epic",
setId: "shadow_infiltrator",
type: "trinket",
},
{
bonus: { clickMultiplier: 2, goldMultiplier: 1.2 },
description:
"A perfectly formed crystal harvested from the Ice Queen's throne room. Cold enough to burn.",
equipped: false,
id: "frost_crystal",
name: "Frost Crystal",
owned: false,
rarity: "legendary",
type: "trinket",
},
{
bonus: { clickMultiplier: 2, goldMultiplier: 1.25 },
description:
"The legendary stone that grants mastery over gold and combat alike.",
equipped: false,
id: "philosophers_stone",
name: "Philosopher's Stone",
owned: false,
rarity: "legendary",
type: "trinket",
},
{
bonus: { clickMultiplier: 2.25, goldMultiplier: 1.15 },
description:
"A flame that has never been extinguished, sealed in crystal by the Phoenix Lord. It burns with the power of rebirth.",
equipped: false,
id: "eternal_flame",
name: "Eternal Flame",
owned: false,
rarity: "legendary",
type: "trinket",
},
{
bonus: {
clickMultiplier: 2.5,
combatMultiplier: 1.25,
goldMultiplier: 1.3,
},
description:
"A gem that contains a universe within it. Those who hold it become more than mortal.",
equipped: false,
id: "infinity_gem",
name: "Infinity Gem",
owned: false,
rarity: "legendary",
type: "trinket",
},
// ── Celestial Reaches ─────────────────────────────────────────────────────
{
bonus: { combatMultiplier: 3.5 },
description:
"A weapon forged from a fallen seraph's primary feather — impossibly sharp, burning with divine light.",
equipped: false,
id: "seraph_wing",
name: "Seraph's Wing",
owned: false,
rarity: "legendary",
setId: "celestial_guardian",
type: "weapon",
},
{
bonus: { clickMultiplier: 2.75, goldMultiplier: 1.3 },
description:
"Torn from the Fallen Archangel. It radiates with grief and power in equal measure.",
equipped: false,
id: "angels_halo",
name: "Angel's Halo",
owned: false,
rarity: "legendary",
setId: "celestial_guardian",
type: "trinket",
},
{
bonus: { goldMultiplier: 2.75 },
description:
"Forged in heavenly smithies from light compressed so hard it became solid. Your gold flows like sunbeams.",
equipped: false,
id: "celestial_armour",
name: "Celestial Armour",
owned: false,
rarity: "legendary",
setId: "celestial_guardian",
type: "armour",
},
{
bonus: { combatMultiplier: 4 },
description:
"The First Light's own blade — a weapon of pure divine will given form. It does not cut. It declares.",
equipped: false,
id: "divine_edge",
name: "The Divine Edge",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 3 },
description:
"The outermost garment of the celestial realm, woven from captured starlight and divine intention.",
equipped: false,
id: "heaven_mantle",
name: "Heaven's Mantle",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Abyssal Trench ────────────────────────────────────────────────────────
{
bonus: { combatMultiplier: 4.5 },
description:
"Crystallised from the Depth Leviathan's venom — a weapon that strikes through armour as if it were water.",
equipped: false,
id: "depth_blade",
name: "The Depth Blade",
owned: false,
rarity: "legendary",
setId: "abyssal_predator",
type: "weapon",
},
{
bonus: { clickMultiplier: 3, goldMultiplier: 1.35 },
description:
"The Elder Kraken's eye, preserved in brine from the deepest trench. It sees through all deception.",
equipped: false,
id: "leviathan_eye",
name: "The Leviathan's Eye",
owned: false,
rarity: "legendary",
setId: "abyssal_predator",
type: "trinket",
},
{
bonus: { goldMultiplier: 3.25 },
description:
"Armour forged under conditions that would crush a city. Nothing that wears it can be broken by ordinary force.",
equipped: false,
id: "pressure_plate",
name: "Pressure Plate",
owned: false,
rarity: "legendary",
setId: "abyssal_predator",
type: "armour",
},
{
bonus: { combatMultiplier: 5 },
description:
"The Elder Abomination's own appendage, reshaped by your artificers into something that passes for a weapon.",
equipped: false,
id: "abyssal_edge",
name: "The Abyssal Edge",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 3.5 },
description:
"Woven from the darkness at the very bottom of everything. Gold flows to those who wear the dark.",
equipped: false,
id: "abyss_shroud",
name: "The Abyss Shroud",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Infernal Court ────────────────────────────────────────────────────────
{
bonus: { goldMultiplier: 3.75 },
description:
"The Demon Prince's own hide, worked into armour that whispers the strategies of ten thousand campaigns.",
equipped: false,
id: "demon_hide",
name: "Demon Hide Armour",
owned: false,
rarity: "legendary",
setId: "infernal_conqueror",
type: "armour",
},
{
bonus: { combatMultiplier: 5.5 },
description:
"A fragment of the Hellfire Titan's core — constantly burning with a heat that ignores armour.",
equipped: false,
id: "hellfire_edge",
name: "The Hellfire Edge",
owned: false,
rarity: "legendary",
setId: "infernal_conqueror",
type: "weapon",
},
{
bonus: { clickMultiplier: 3.25, goldMultiplier: 1.4 },
description:
"Crystallised from the Lord of Sin's tears — which had never been shed before. The rarest thing in the infernal court.",
equipped: false,
id: "soul_gem",
name: "The Soul Gem",
owned: false,
rarity: "legendary",
setId: "infernal_conqueror",
type: "trinket",
},
{
bonus: { combatMultiplier: 6 },
description:
"Forged from what The Fallen once was — something good, hardened into a weapon of absolute purpose.",
equipped: false,
id: "infernal_edge",
name: "The Infernal Edge",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 4 },
description:
"Armour assembled from The Fallen's regrets. Every piece of it remembers what righteousness felt like.",
equipped: false,
id: "sinslayer_aegis",
name: "The Sinslayer Aegis",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Crystalline Spire ─────────────────────────────────────────────────────
{
bonus: { combatMultiplier: 6.5 },
description:
"A sword that refracts into thousands of simultaneous strikes. Defenders cannot guard against every angle.",
equipped: false,
id: "prism_blade",
name: "The Prism Blade",
owned: false,
rarity: "legendary",
setId: "crystal_domain",
type: "weapon",
},
{
bonus: { goldMultiplier: 4.5 },
description:
"Armour that intersects with adjacent realities — attacks pass through versions of you that chose differently.",
equipped: false,
id: "faceted_armour",
name: "The Faceted Armour",
owned: false,
rarity: "legendary",
setId: "crystal_domain",
type: "armour",
},
{
bonus: { clickMultiplier: 3.5, goldMultiplier: 1.5 },
description:
"A lens from the Diamond Colossus's own perception — through it, your guild sees every moment simultaneously.",
equipped: false,
id: "prism_eye",
name: "The Prism Eye",
owned: false,
rarity: "legendary",
setId: "crystal_domain",
type: "trinket",
},
{
bonus: { combatMultiplier: 7 },
description:
"The Crystal Sovereign's own instrument of computation — repurposed for something it calculated was inevitable.",
equipped: false,
id: "crystal_sovereign_blade",
name: "The Sovereign's Blade",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 5 },
description:
"Armour compressed from crystallised possibilities — the optimal defensive configuration across all timelines.",
equipped: false,
id: "diamond_plate",
name: "Diamond Plate",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Void Sanctum ──────────────────────────────────────────────────────────
{
bonus: { combatMultiplier: 8 },
description:
"A weapon of pure absence — it does not strike, it simply removes the thing it is aimed at from existence.",
equipped: false,
id: "void_annihilator",
name: "The Void Annihilator",
owned: false,
rarity: "legendary",
setId: "void_emperor",
type: "weapon",
},
{
bonus: { goldMultiplier: 5.5 },
description:
"Woven from the Eternal Shade itself — armour that exists in every moment simultaneously, impossible to find.",
equipped: false,
id: "eternal_shroud",
name: "The Eternal Shroud",
owned: false,
rarity: "legendary",
setId: "void_emperor",
type: "armour",
},
{
bonus: { clickMultiplier: 4, goldMultiplier: 1.6 },
description:
"Crystallised from the Void Progenitor's core — the original absence, given form. It makes the impossible routine.",
equipped: false,
id: "void_heart_gem",
name: "The Void Heart Gem",
owned: false,
rarity: "legendary",
setId: "void_emperor",
type: "trinket",
},
{
bonus: { combatMultiplier: 9 },
description:
"The Void Emperor's own sceptre of authority, seized in the moment of its defeat. It commands even nothingness.",
equipped: false,
id: "sanctum_breaker",
name: "The Sanctum Breaker",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 6 },
description:
"The armour the Void Emperor wore for all of existence — now worn by something that dared to challenge all of existence.",
equipped: false,
id: "void_emperor_plate",
name: "Void Emperor's Plate",
owned: false,
rarity: "legendary",
type: "armour",
},
// ── Eternal Throne ────────────────────────────────────────────────────────
{
bonus: { goldMultiplier: 7 },
description:
"The Throne Warden's own defensive shell — protection that has never been breached across all of time.",
equipped: false,
id: "eternal_armour",
name: "Eternal Armour",
owned: false,
rarity: "legendary",
setId: "eternal_throne",
type: "armour",
},
{
bonus: { combatMultiplier: 10 },
description:
"The Eternal Knight's sword — a weapon that has served the throne since the concept of service was invented.",
equipped: false,
id: "throne_blade",
name: "The Throne Blade",
owned: false,
rarity: "legendary",
setId: "eternal_throne",
type: "weapon",
},
{
bonus: { combatMultiplier: 12 },
description:
"The Apex's own instrument — not a weapon in any sense your guild understands, but it functions as one now.",
equipped: false,
id: "apex_sword",
name: "The Apex Sword",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { goldMultiplier: 8 },
description:
"Armour assembled from the Eternal Throne itself — the absolute seat of power, now serving those who claimed it.",
equipped: false,
id: "apex_plate",
name: "The Apex Plate",
owned: false,
rarity: "legendary",
type: "armour",
},
{
bonus: { clickMultiplier: 5, combatMultiplier: 1.5, goldMultiplier: 2 },
description:
"The source of the Apex's power — the thing that makes the Eternal Throne eternal. It is yours now. All of it.",
equipped: false,
id: "eternity_stone",
name: "The Eternity Stone",
owned: false,
rarity: "legendary",
setId: "eternal_throne",
type: "trinket",
},
// ── Purchasable endgame sinks ─────────────────────────────────────────────
{
bonus: { clickMultiplier: 2.5 },
cost: { crystals: 0, essence: 20_000_000, gold: 0 },
description:
"A lens of compressed celestial light that sharpens every strike with divine precision.",
equipped: false,
id: "celestial_focus",
name: "Celestial Focus",
owned: false,
rarity: "legendary",
type: "trinket",
},
{
bonus: { goldMultiplier: 3 },
cost: { crystals: 0, essence: 50_000_000, gold: 0 },
description:
"A book written in the language of the deep — reading it aligns your guild's operations with abyssal efficiency.",
equipped: false,
id: "abyssal_tome",
name: "Abyssal Tome",
owned: false,
rarity: "legendary",
type: "armour",
},
{
bonus: { combatMultiplier: 4 },
cost: { crystals: 0, essence: 100_000_000, gold: 0 },
description:
"A weapon that channels void energy — the absence of resistance makes every strike devastating.",
equipped: false,
id: "void_conduit",
name: "Void Conduit",
owned: false,
rarity: "legendary",
type: "weapon",
},
{
bonus: { clickMultiplier: 3.5, goldMultiplier: 1.5 },
cost: { crystals: 5_000_000, essence: 0, gold: 0 },
description:
"A gem forged in the heart of the Infernal Court — it burns with productivity and righteous fury in equal measure.",
equipped: false,
id: "infernal_gem",
name: "Infernal Gem",
owned: false,
rarity: "legendary",
type: "trinket",
},
{
bonus: { goldMultiplier: 4 },
cost: { crystals: 20_000_000, essence: 0, gold: 0 },
description:
"Armour structured around a crystalline lattice of optimal income calculations. Every gold piece finds you faster.",
equipped: false,
id: "crystal_matrix",
name: "Crystal Matrix",
owned: false,
rarity: "legendary",
type: "armour",
},
{
bonus: { clickMultiplier: 5, combatMultiplier: 1.5, goldMultiplier: 2 },
cost: { crystals: 100_000_000, essence: 0, gold: 0 },
description:
"An artifact from beyond all known planes — it refracts power through all dimensions simultaneously.",
equipped: false,
id: "eternal_prism",
name: "The Eternal Prism",
owned: false,
rarity: "legendary",
type: "trinket",
},
];
+111
View File
@@ -0,0 +1,111 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable stylistic/max-len -- Data content */
/* eslint-disable @typescript-eslint/naming-convention -- Numeric keys required by EquipmentSet type */
import type { EquipmentSet } from "@elysium/types";
export const defaultEquipmentSets: Array<EquipmentSet> = [
{
bonuses: {
2: { goldMultiplier: 1.1 },
3: { combatMultiplier: 1.1 },
},
description:
"The armaments of a seasoned guild soldier — proven steel, reliable gold.",
id: "iron_vanguard",
name: "Iron Vanguard",
pieces: [ "iron_sword", "chainmail", "mages_focus" ],
},
{
bonuses: {
2: { goldMultiplier: 1.15 },
3: { clickMultiplier: 1.2 },
},
description:
"Gear forged from the Shadow Marshes themselves — unseen, unstoppable.",
id: "shadow_infiltrator",
name: "Shadow Infiltrator",
pieces: [ "shadow_dagger", "void_shroud", "void_compass" ],
},
{
bonuses: {
2: { combatMultiplier: 1.15 },
3: { goldMultiplier: 1.15 },
},
description:
"Weapons and armour tempered in the depths of the Volcanic Reaches.",
id: "volcanic_forger",
name: "Volcanic Forger",
pieces: [ "flame_lance", "volcanic_plate", "crystal_shard" ],
},
{
bonuses: {
2: { combatMultiplier: 1.2 },
3: { goldMultiplier: 1.2 },
},
description:
"Relics of the Celestial Reaches — divine power made manifest.",
id: "celestial_guardian",
name: "Celestial Guardian",
pieces: [ "seraph_wing", "celestial_armour", "angels_halo" ],
},
{
bonuses: {
2: { goldMultiplier: 1.2 },
3: { clickMultiplier: 1.25 },
},
description:
"Trophies reclaimed from the deepest trenches of the Abyssal Reaches.",
id: "abyssal_predator",
name: "Abyssal Predator",
pieces: [ "depth_blade", "pressure_plate", "leviathan_eye" ],
},
{
bonuses: {
2: { combatMultiplier: 1.25 },
3: { goldMultiplier: 1.25 },
},
description:
"Forged in the heart of the Infernal Court from the essence of the defeated.",
id: "infernal_conqueror",
name: "Infernal Conqueror",
pieces: [ "hellfire_edge", "demon_hide", "soul_gem" ],
},
{
bonuses: {
2: { clickMultiplier: 1.25 },
3: { goldMultiplier: 1.25 },
},
description:
"Instruments of the Crystalline Spire — reality refracted into absolute efficiency.",
id: "crystal_domain",
name: "Crystal Domain",
pieces: [ "prism_blade", "faceted_armour", "prism_eye" ],
},
{
bonuses: {
2: { goldMultiplier: 1.3 },
3: { combatMultiplier: 1.3 },
},
description:
"The regalia of the Void Sanctum's lord — power carved from absolute nothingness.",
id: "void_emperor",
name: "Void Emperor",
pieces: [ "void_annihilator", "eternal_shroud", "void_heart_gem" ],
},
{
bonuses: {
2: { combatMultiplier: 1.35, goldMultiplier: 1.25 },
3: { clickMultiplier: 1.35 },
},
description:
"The armaments of the Eternal Throne — weapons and armour that have endured all of time.",
id: "eternal_throne",
name: "Eternal Throne",
pieces: [ "throne_blade", "eternal_armour", "eternity_stone" ],
},
];
File diff suppressed because it is too large Load Diff
+106
View File
@@ -0,0 +1,106 @@
/**
* @file Initial game state data.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { defaultAchievements } from "./achievements.js";
import { defaultAdventurers } from "./adventurers.js";
import { defaultBosses } from "./bosses.js";
import { defaultEquipment } from "./equipment.js";
import { defaultExplorations } from "./explorations.js";
import { defaultQuests } from "./quests.js";
import { currentSchemaVersion } from "./schemaVersion.js";
import { defaultUpgrades } from "./upgrades.js";
import { defaultZones } from "./zones.js";
import type {
ApotheosisData,
ExplorationState,
GameState,
Player,
PrestigeData,
TranscendenceData,
} from "@elysium/types";
const initialPrestige: PrestigeData = {
count: 0,
productionMultiplier: 1,
purchasedUpgradeIds: [],
runestones: 0,
};
const initialTranscendence: TranscendenceData = {
count: 0,
echoCombatMultiplier: 1,
echoIncomeMultiplier: 1,
echoMetaMultiplier: 1,
echoPrestigeRunestoneMultiplier: 1,
echoPrestigeThresholdMultiplier: 1,
echoes: 0,
purchasedUpgradeIds: [],
};
const initialApotheosis: ApotheosisData = {
count: 0,
};
const initialExploration: ExplorationState = {
areas: defaultExplorations.map((area) => {
return {
id: area.id,
status:
area.zoneId === "verdant_vale"
? ("available" as const)
: ("locked" as const),
};
}),
craftedClickMultiplier: 1,
craftedCombatMultiplier: 1,
craftedEssenceMultiplier: 1,
craftedGoldMultiplier: 1,
craftedRecipeIds: [],
materials: [],
};
/**
* Builds an initial game state for a new player.
* @param player - The player data from Discord OAuth.
* @param characterName - The character name chosen by the player.
* @returns A fresh GameState object.
*/
const initialGameState = (
player: Player,
characterName: string,
): GameState => {
return {
achievements: structuredClone(defaultAchievements),
adventurers: structuredClone(defaultAdventurers),
apotheosis: { ...initialApotheosis },
baseClickPower: 1,
bosses: structuredClone(defaultBosses),
companions: { activeCompanionId: null, unlockedCompanionIds: [] },
equipment: structuredClone(defaultEquipment),
exploration: structuredClone(initialExploration),
lastTickAt: Date.now(),
player: {
...player,
characterName: characterName,
totalClicks: 0,
totalGoldEarned: 0,
},
prestige: initialPrestige,
quests: structuredClone(defaultQuests),
resources: {
crystals: 0,
essence: 0,
gold: 0,
runestones: 0,
},
schemaVersion: currentSchemaVersion,
transcendence: { ...initialTranscendence },
upgrades: structuredClone(defaultUpgrades),
zones: structuredClone(defaultZones),
};
};
export { initialExploration, initialGameState };
+25
View File
@@ -0,0 +1,25 @@
/**
* @file Login bonus reward data.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
export interface DayReward {
day: number;
goldBase: number;
crystals?: number;
}
/**
* Rewards for days 17 of a login streak. The cycle repeats every 7 days
* with a multiplier equal to the week number (week 1 = ×1, week 2 = ×2, etc.).
*/
export const dailyRewards: Array<DayReward> = [
{ day: 1, goldBase: 500 },
{ day: 2, goldBase: 1000 },
{ day: 3, goldBase: 2500 },
{ day: 4, goldBase: 5000 },
{ day: 5, goldBase: 10_000 },
{ day: 6, goldBase: 25_000 },
{ crystals: 5, day: 7, goldBase: 50_000 },
];
+479
View File
@@ -0,0 +1,479 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
/* eslint-disable stylistic/max-len -- Data content */
import type { Material } from "@elysium/types";
export const defaultMaterials: Array<Material> = [
// Zone 1: verdant_vale
{
description:
"Sticky resin tapped from ancient heartwood trees. Smells faintly of spring rain and something older beneath.",
id: "verdant_sap",
name: "Verdant Sap",
rarity: "common",
zoneId: "verdant_vale",
},
{
description:
"A translucent gem found buried near the roots of old-growth trees. Pulses with gentle life energy when held.",
id: "forest_crystal",
name: "Forest Crystal",
rarity: "uncommon",
zoneId: "verdant_vale",
},
{
description:
"Bark from a tree that has stood since before the kingdom. Harder than iron and warmer to the touch than it has any right to be.",
id: "elder_bark",
name: "Elder Bark",
rarity: "rare",
zoneId: "verdant_vale",
},
// Zone 2: shattered_ruins
{
description:
"Fine powder ground from fallen masonry. Still carries traces of the civilisation it once was — if you know how to read the patterns.",
id: "ruin_dust",
name: "Ruin Dust",
rarity: "common",
zoneId: "shattered_ruins",
},
{
description:
"A shard of enchanted stonework. The enchantment is broken, but something lingers in the grain of the stone, waiting.",
id: "cursed_fragment",
name: "Cursed Fragment",
rarity: "uncommon",
zoneId: "shattered_ruins",
},
{
description:
"A fragment of scale shed during the elder dragon's long reign over the ruins. Resistant to fire and magic alike.",
id: "dragonscale_chip",
name: "Dragonscale Chip",
rarity: "rare",
zoneId: "shattered_ruins",
},
// Zone 3: frozen_peaks
{
description:
"Ice from a glacier that has not moved in ten thousand years. Impossibly cold and perfectly clear, with something almost visible within.",
id: "glacial_ice",
name: "Glacial Ice",
rarity: "common",
zoneId: "frozen_peaks",
},
{
description:
"A crystal that formed inside the glacier itself over millennia. It never melts, not even near fire.",
id: "frost_crystal",
name: "Frost Crystal",
rarity: "uncommon",
zoneId: "frozen_peaks",
},
{
description:
"A fragment of the reality tear. It hums with wrongness that the fingers instinctively recognise before the mind does.",
id: "void_shard",
name: "Void Shard",
rarity: "rare",
zoneId: "frozen_peaks",
},
// Zone 4: shadow_marshes
{
description:
"Roots from the strangler plants that thrive in the fog-choked depths. Toxic without extensive preparation. Worth it, usually.",
id: "marsh_root",
name: "Marsh Root",
rarity: "common",
zoneId: "shadow_marshes",
},
{
description:
"Distilled darkness, caught in a vial before it could dissipate. Heavy and cold, and absolutely lightless.",
id: "shadow_essence",
name: "Shadow Essence",
rarity: "uncommon",
zoneId: "shadow_marshes",
},
{
description:
"Bone from something that died in the marsh so long ago it has become part of it. The curse runs deep through the marrow.",
id: "cursed_bone",
name: "Cursed Bone",
rarity: "rare",
zoneId: "shadow_marshes",
},
// Zone 5: volcanic_depths
{
description:
"Cooled lava that retained its internal heat. Warm to the touch even centuries after solidifying from whatever it once was.",
id: "magma_stone",
name: "Magma Stone",
rarity: "common",
zoneId: "volcanic_depths",
},
{
description:
"A crystal grown in the heart of a cooling magma chamber. Burns without being consumed, endlessly.",
id: "ember_crystal",
name: "Ember Crystal",
rarity: "uncommon",
zoneId: "volcanic_depths",
},
{
description:
"Ore from a seam that the fire elementals guard jealously. What it forges into is extraordinary by any measure.",
id: "legendary_ore",
name: "Legendary Ore",
rarity: "rare",
zoneId: "volcanic_depths",
},
// Zone 6: astral_void
{
description:
"Particulate matter from dying stars, collected from the void between worlds. Glitters even in total darkness.",
id: "stardust",
name: "Stardust",
rarity: "common",
zoneId: "astral_void",
},
{
description:
"Filaments of solidified probability. Handle with care — they remember every possible future they passed through.",
id: "astral_thread",
name: "Astral Thread",
rarity: "uncommon",
zoneId: "astral_void",
},
{
description:
"A crystal that formed in the spaces between spaces. Technically exists in several places simultaneously. Don't think too hard about it.",
id: "void_crystal",
name: "Void Crystal",
rarity: "rare",
zoneId: "astral_void",
},
// Zone 7: celestial_reaches
{
description:
"Residue from the celestial host's passing. Warm as sunlight and infinitely patient, as if waiting for something to happen.",
id: "celestial_dust",
name: "Celestial Dust",
rarity: "common",
zoneId: "celestial_reaches",
},
{
description:
"A chip of something the celestials discarded as imperfect. By mortal standards, it is extraordinary beyond measure.",
id: "divine_fragment",
name: "Divine Fragment",
rarity: "uncommon",
zoneId: "celestial_reaches",
},
{
description:
"A crystallised harmonic from the celestial choir. Resonates with a sound felt in the chest rather than heard with the ears.",
id: "choir_shard",
name: "Choir Shard",
rarity: "rare",
zoneId: "celestial_reaches",
},
// Zone 8: abyssal_trench
{
description:
"Coral from the deepest trenches where no light reaches and no warmth remains. Black as the water around it.",
id: "trench_coral",
name: "Trench Coral",
rarity: "common",
zoneId: "abyssal_trench",
},
{
description:
"A gem compressed by aeons of unimaginable pressure at the bottom of all things. Impossibly dense for its size.",
id: "pressure_gem",
name: "Pressure Gem",
rarity: "uncommon",
zoneId: "abyssal_trench",
},
{
description:
"A tooth from whatever has been waiting in the trench since before your world was made. It is very large.",
id: "ancient_tooth",
name: "Ancient Tooth",
rarity: "rare",
zoneId: "abyssal_trench",
},
// Zone 9: infernal_court
{
description:
"Sulphur residue from the court's perpetual fires. The smell never fully fades, no matter how carefully it is stored.",
id: "brimstone_flake",
name: "Brimstone Flake",
rarity: "common",
zoneId: "infernal_court",
},
{
description:
"Extracted from the court's refuse. Corrosive, powerful, and deeply unpleasant in every measurable way.",
id: "demon_ichor",
name: "Demon Ichor",
rarity: "uncommon",
zoneId: "infernal_court",
},
{
description:
"What remains after a soul has been fully processed by the court. Carries faint echoes of what it was before.",
id: "soul_residue",
name: "Soul Residue",
rarity: "rare",
zoneId: "infernal_court",
},
// Zone 10: crystalline_spire
{
description:
"Ground from the spire's outer facets. Each particle contains a compressed possibility that has not yet resolved.",
id: "prism_dust",
name: "Prism Dust",
rarity: "common",
zoneId: "crystalline_spire",
},
{
description:
"A fragment of the spire's core intelligence. Still running calculations on something that may or may not have an answer.",
id: "calculation_shard",
name: "Calculation Shard",
rarity: "uncommon",
zoneId: "crystalline_spire",
},
{
description:
"A crystal that contains a future that never happened. Treat carefully. The future remembers being possible.",
id: "possibility_crystal",
name: "Possibility Crystal",
rarity: "rare",
zoneId: "crystalline_spire",
},
// Zone 11: void_sanctum
{
description:
"Matter that exists in the space between spaces. Lacks most standard properties in ways that should not be possible.",
id: "null_matter",
name: "Null Matter",
rarity: "common",
zoneId: "void_sanctum",
},
{
description:
"A shard of the call that drew your guild here. Still resonant, still reaching toward something none of you can name.",
id: "resonance_fragment",
name: "Resonance Fragment",
rarity: "uncommon",
zoneId: "void_sanctum",
},
{
description:
"From the heart of the sanctum itself. What it does is undefined. What it is cannot be satisfactorily described.",
id: "sanctum_core",
name: "Sanctum Core",
rarity: "rare",
zoneId: "void_sanctum",
},
// Zone 12: eternal_throne
{
description:
"Residue from the base of the eternal throne. Old beyond any measurement that applies to things your guild understands.",
id: "throne_dust",
name: "Throne Dust",
rarity: "common",
zoneId: "eternal_throne",
},
{
description:
"A chip from one of the throne's crown-like spires. Authority made into something your hands can hold.",
id: "crown_fragment",
name: "Crown Fragment",
rarity: "uncommon",
zoneId: "eternal_throne",
},
{
description:
"From the throne's arm. Carries the weight of every decision ever made here, compressed into splinter-form.",
id: "eternity_splinter",
name: "Eternity Splinter",
rarity: "rare",
zoneId: "eternal_throne",
},
// Zone 13: primordial_chaos
{
description:
"A solidified moment of chaos. Still undecided about its own properties, which change depending on how you look at it.",
id: "chaos_fragment",
name: "Chaos Fragment",
rarity: "common",
zoneId: "primordial_chaos",
},
{
description:
"A fragment from when something was being made here. What was being made is unclear. Something important, probably.",
id: "creation_shard",
name: "Creation Shard",
rarity: "uncommon",
zoneId: "primordial_chaos",
},
{
description:
"The raw stuff of creation, before it became anything specific. Handle with care. It wants to become things.",
id: "primordial_essence",
name: "Primordial Essence",
rarity: "rare",
zoneId: "primordial_chaos",
},
// Zone 14: infinite_expanse
{
description:
"Gathered from somewhere in the expanse. Direction is uncertain. Distance from the collection point is uncertain.",
id: "expanse_dust",
name: "Expanse Dust",
rarity: "common",
zoneId: "infinite_expanse",
},
{
description:
"A crystal that contains compressed distance. It weighs more than its size suggests. Much more. Do not drop it.",
id: "distance_crystal",
name: "Distance Crystal",
rarity: "uncommon",
zoneId: "infinite_expanse",
},
{
description:
"A fragment of the expanse's edge, which the expanse does not technically have. This should not exist. It does anyway.",
id: "infinity_shard",
name: "Infinity Shard",
rarity: "rare",
zoneId: "infinite_expanse",
},
// Zone 15: reality_forge
{
description:
"Ash from the forge's fires. Contains fragments of unrealised realities that never quite made it to existence.",
id: "forge_ash",
name: "Forge Ash",
rarity: "common",
zoneId: "reality_forge",
},
{
description:
"A worn tool left by whatever worked here before your universe existed. Still functional in ways that are difficult to explain.",
id: "creation_tool",
name: "Creation Tool",
rarity: "uncommon",
zoneId: "reality_forge",
},
{
description:
"A flawed reality, discarded by the forge as below standard. Still contains everything a universe needs.",
id: "reality_shard",
name: "Reality Shard",
rarity: "rare",
zoneId: "reality_forge",
},
// Zone 16: cosmic_maelstrom
{
description:
"Debris from a galaxy that got too close to the maelstrom. Compressed to a size your guild can actually carry.",
id: "maelstrom_debris",
name: "Maelstrom Debris",
rarity: "common",
zoneId: "cosmic_maelstrom",
},
{
description:
"A crystal that formed at the intersection of several fundamental forces that should never have been in the same place.",
id: "force_crystal",
name: "Force Crystal",
rarity: "uncommon",
zoneId: "cosmic_maelstrom",
},
{
description:
"A fragment from the maelstrom's eye. Impossibly calm. Whatever is at the centre has been there since the beginning.",
id: "cosmic_fragment",
name: "Cosmic Fragment",
rarity: "rare",
zoneId: "cosmic_maelstrom",
},
// Zone 17: primeval_sanctum
{
description:
"Dust from the oldest place. Has been here since before the concept of 'here' had been invented.",
id: "ancient_dust",
name: "Ancient Dust",
rarity: "common",
zoneId: "primeval_sanctum",
},
{
description:
"A shard of something that remembers the moment before the first moment. The memory is in the material itself.",
id: "memory_shard",
name: "Memory Shard",
rarity: "uncommon",
zoneId: "primeval_sanctum",
},
{
description:
"An artefact from the first thing to exist in this place. What it did is unknown. That it mattered is beyond doubt.",
id: "primeval_relic",
name: "Primeval Relic",
rarity: "rare",
zoneId: "primeval_sanctum",
},
// Zone 18: the_absolute
{
description:
"A fragment of the final truth. It is difficult to look at directly, and impossible to look away from once you start.",
id: "absolute_fragment",
name: "Absolute Fragment",
rarity: "common",
zoneId: "the_absolute",
},
{
description:
"From the edge of everything. On one side: everything. On the other: nothing. This is from the very boundary between them.",
id: "boundary_shard",
name: "Boundary Shard",
rarity: "uncommon",
zoneId: "the_absolute",
},
{
description:
"The last crystal. After this, there are no more. It knows this. You can tell from the way it sits in your hand.",
id: "omega_crystal",
name: "Omega Crystal",
rarity: "rare",
zoneId: "the_absolute",
},
];
+241
View File
@@ -0,0 +1,241 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable stylistic/max-len -- Data content */
import type { PrestigeUpgrade } from "@elysium/types";
export const defaultPrestigeUpgrades: 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-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-Upgrade ────────────────────────────────────────────────
{
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,
},
];
File diff suppressed because it is too large Load Diff
+479
View File
@@ -0,0 +1,479 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
/* eslint-disable stylistic/max-len -- Data content */
import type { CraftingRecipe } from "@elysium/types";
export const defaultRecipes: Array<CraftingRecipe> = [
// Zone 1: verdant_vale
{
bonus: { type: "gold_income", value: 1.05 },
description:
"Sap from ancient heartwood trees, refined and bound with forest crystal. The resulting tincture accelerates the flow of wealth through your guild in ways the alchemists cannot fully explain.",
id: "heartwood_tincture",
name: "Heartwood Tincture",
requiredMaterials: [
{ materialId: "verdant_sap", quantity: 5 },
{ materialId: "forest_crystal", quantity: 3 },
],
zoneId: "verdant_vale",
},
{
bonus: { type: "combat_power", value: 1.08 },
description:
"A ward fashioned from bark older than the kingdom. Its presence on the battlefield is not merely physical — something ancient watches through it.",
id: "elder_bark_shield",
name: "Elder Bark Shield",
requiredMaterials: [
{ materialId: "elder_bark", quantity: 2 },
{ materialId: "verdant_sap", quantity: 8 },
],
zoneId: "verdant_vale",
},
// Zone 2: shattered_ruins
{
bonus: { type: "essence_income", value: 1.05 },
description:
"The ruin dust and cursed fragments, carefully worked into a binding that borrows the essence-drawing power of the fallen civilisation's final enchantments.",
id: "runic_binding",
name: "Runic Binding",
requiredMaterials: [
{ materialId: "ruin_dust", quantity: 8 },
{ materialId: "cursed_fragment", quantity: 4 },
],
zoneId: "shattered_ruins",
},
{
bonus: { type: "gold_income", value: 1.08 },
description:
"A charm set with a chip of the elder dragon's scale. The dragon would be furious if he knew. He would also be impressed.",
id: "dragon_scale_charm",
name: "Dragon Scale Charm",
requiredMaterials: [
{ materialId: "dragonscale_chip", quantity: 2 },
{ materialId: "ruin_dust", quantity: 10 },
],
zoneId: "shattered_ruins",
},
// Zone 3: frozen_peaks
{
bonus: { type: "click_power", value: 1.08 },
description:
"Glacial ice ground and shaped into a lens that clarifies and focuses. Holding it, your guild's actions become sharper, more precise, more effective per motion.",
id: "glacial_lens",
name: "Glacial Lens",
requiredMaterials: [
{ materialId: "glacial_ice", quantity: 8 },
{ materialId: "frost_crystal", quantity: 4 },
],
zoneId: "frozen_peaks",
},
{
bonus: { type: "gold_income", value: 1.1 },
description:
"The void shard set in frost crystal, creating something that should not be possible: a stable window into the spaces between spaces. Profitable beyond what physics suggests.",
id: "void_fragment_amulet",
name: "Void Fragment Amulet",
requiredMaterials: [
{ materialId: "void_shard", quantity: 2 },
{ materialId: "frost_crystal", quantity: 6 },
],
zoneId: "frozen_peaks",
},
// Zone 4: shadow_marshes
{
bonus: { type: "essence_income", value: 1.08 },
description:
"Marsh roots processed with shadow essence into a refined compound that somehow makes the essence of things flow more freely toward your guild hall.",
id: "shadow_extract",
name: "Shadow Extract",
requiredMaterials: [
{ materialId: "marsh_root", quantity: 8 },
{ materialId: "shadow_essence", quantity: 4 },
],
zoneId: "shadow_marshes",
},
{
bonus: { type: "combat_power", value: 1.1 },
description:
"The cursed bone and shadow essence combined into a focus that doesn't so much help your party fight as make things afraid of them before the battle begins.",
id: "cursed_focus",
name: "Cursed Focus",
requiredMaterials: [
{ materialId: "cursed_bone", quantity: 2 },
{ materialId: "shadow_essence", quantity: 6 },
],
zoneId: "shadow_marshes",
},
// Zone 5: volcanic_depths
{
bonus: { type: "gold_income", value: 1.1 },
description:
"A seal forged in the volcanic depths, using the eternal heat of the magma stone and ember crystal to create something that burns wealth into existence continuously.",
id: "magma_core_seal",
name: "Magma Core Seal",
requiredMaterials: [
{ materialId: "magma_stone", quantity: 8 },
{ materialId: "ember_crystal", quantity: 4 },
],
zoneId: "volcanic_depths",
},
{
bonus: { type: "combat_power", value: 1.12 },
description:
"The legendary ore, smelted in the volcanic forges with magma stone as fuel. What emerges is something the fire elementals recognise — and fear slightly.",
id: "elemental_ore_ingot",
name: "Elemental Ore Ingot",
requiredMaterials: [
{ materialId: "legendary_ore", quantity: 2 },
{ materialId: "magma_stone", quantity: 10 },
],
zoneId: "volcanic_depths",
},
// Zone 6: astral_void
{
bonus: { type: "click_power", value: 1.12 },
description:
"Stardust arranged along astral threads into a map of the void that somehow, impossibly, shows your guild where to press and how to press it for maximum effect.",
id: "star_chart",
name: "Star Chart",
requiredMaterials: [
{ materialId: "stardust", quantity: 10 },
{ materialId: "astral_thread", quantity: 4 },
],
zoneId: "astral_void",
},
{
bonus: { type: "gold_income", value: 1.12 },
description:
"A void crystal suspended in a matrix of stardust — something that exists in several places simultaneously and draws gold from all of them at once.",
id: "void_crystal_matrix",
name: "Void Crystal Matrix",
requiredMaterials: [
{ materialId: "void_crystal", quantity: 2 },
{ materialId: "stardust", quantity: 12 },
],
zoneId: "astral_void",
},
// Zone 7: celestial_reaches
{
bonus: { type: "essence_income", value: 1.12 },
description:
"Celestial dust and divine fragments ground into a lens that sees the essence in all things and draws a portion of it — gently, as the celestials would prefer.",
id: "celestial_lens",
name: "Celestial Lens",
requiredMaterials: [
{ materialId: "celestial_dust", quantity: 10 },
{ materialId: "divine_fragment", quantity: 4 },
],
zoneId: "celestial_reaches",
},
{
bonus: { type: "gold_income", value: 1.15 },
description:
"A choir shard set in divine fragments, still humming with the celestial harmonic. The resonance makes gold flow in its direction — not compelled, simply invited.",
id: "choir_resonator",
name: "Choir Resonator",
requiredMaterials: [
{ materialId: "choir_shard", quantity: 2 },
{ materialId: "divine_fragment", quantity: 6 },
],
zoneId: "celestial_reaches",
},
// Zone 8: abyssal_trench
{
bonus: { type: "combat_power", value: 1.15 },
description:
"Trench coral and pressure gem combined under conditions that should have destroyed both. The result is something that survived conditions nothing should survive, which is ideal for combat.",
id: "pressure_forged_core",
name: "Pressure-Forged Core",
requiredMaterials: [
{ materialId: "trench_coral", quantity: 10 },
{ materialId: "pressure_gem", quantity: 4 },
],
zoneId: "abyssal_trench",
},
{
bonus: { type: "click_power", value: 1.15 },
description:
"A talisman set with the ancient tooth, suspended in trench coral carvings. Your party fights differently with this at their chest. More deliberately. More completely.",
id: "ancient_fang_talisman",
name: "Ancient Fang Talisman",
requiredMaterials: [
{ materialId: "ancient_tooth", quantity: 2 },
{ materialId: "trench_coral", quantity: 12 },
],
zoneId: "abyssal_trench",
},
// Zone 9: infernal_court
{
bonus: { type: "gold_income", value: 1.15 },
description:
"A seal of infernal court authority, forged from brimstone and ichor. The court doesn't know you have this. It's better that way. It does make trade extremely efficient.",
id: "court_seal",
name: "Court Seal",
requiredMaterials: [
{ materialId: "brimstone_flake", quantity: 10 },
{ materialId: "demon_ichor", quantity: 5 },
],
zoneId: "infernal_court",
},
{
bonus: { type: "essence_income", value: 1.15 },
description:
"Soul residue and demon ichor worked into a catalyst that draws the essence from everything around it — gently, without drawing the court's attention. Usually.",
id: "soul_bound_catalyst",
name: "Soul-Bound Catalyst",
requiredMaterials: [
{ materialId: "soul_residue", quantity: 2 },
{ materialId: "demon_ichor", quantity: 8 },
],
zoneId: "infernal_court",
},
// Zone 10: crystalline_spire
{
bonus: { type: "click_power", value: 1.18 },
description:
"Prism dust and calculation shards assembled into an array that the spire's intelligence would call elegant, if it had aesthetic preferences, which it might.",
id: "prism_array",
name: "Prism Array",
requiredMaterials: [
{ materialId: "prism_dust", quantity: 10 },
{ materialId: "calculation_shard", quantity: 4 },
],
zoneId: "crystalline_spire",
},
{
bonus: { type: "gold_income", value: 1.18 },
description:
"A possibility crystal contained within a calculation shard framework. It runs through every possible outcome of every guild action and finds the one with the highest gold yield.",
id: "possibility_engine",
name: "Possibility Engine",
requiredMaterials: [
{ materialId: "possibility_crystal", quantity: 2 },
{ materialId: "calculation_shard", quantity: 6 },
],
zoneId: "crystalline_spire",
},
// Zone 11: void_sanctum
{
bonus: { type: "combat_power", value: 1.18 },
description:
"Null matter and resonance fragments assembled into something that generates a field where the laws governing how hard things are to kill become negotiable.",
id: "null_field_generator",
name: "Null Field Generator",
requiredMaterials: [
{ materialId: "null_matter", quantity: 10 },
{ materialId: "resonance_fragment", quantity: 4 },
],
zoneId: "void_sanctum",
},
{
bonus: { type: "essence_income", value: 1.18 },
description:
"A sanctum core and resonance fragments shaped into a key to something. The essence flows through it like it was designed to carry essence, which it may have been.",
id: "sanctum_key",
name: "Sanctum Key",
requiredMaterials: [
{ materialId: "sanctum_core", quantity: 2 },
{ materialId: "resonance_fragment", quantity: 6 },
],
zoneId: "void_sanctum",
},
// Zone 12: eternal_throne
{
bonus: { type: "gold_income", value: 1.2 },
description:
"Throne dust pressed into throne dust-lacquered crown fragments, shaped into a circlet. Wearing it — metaphorically — makes gold accumulate with the inevitability of authority.",
id: "crown_circlet",
name: "Crown Circlet",
requiredMaterials: [
{ materialId: "throne_dust", quantity: 10 },
{ materialId: "crown_fragment", quantity: 4 },
],
zoneId: "eternal_throne",
},
{
bonus: { type: "combat_power", value: 1.2 },
description:
"An eternity splinter set into crown fragments, shaped into a ring. What it binds is unclear. Whatever it is, it makes your party significantly harder to kill.",
id: "eternity_bound_ring",
name: "Eternity-Bound Ring",
requiredMaterials: [
{ materialId: "eternity_splinter", quantity: 2 },
{ materialId: "crown_fragment", quantity: 6 },
],
zoneId: "eternal_throne",
},
// Zone 13: primordial_chaos
{
bonus: { type: "click_power", value: 1.2 },
description:
"Chaos fragments and creation shards arranged into a lens that hasn't decided what it wants to focus on yet, which somehow makes every click land harder than it should.",
id: "chaos_lens",
name: "Chaos Lens",
requiredMaterials: [
{ materialId: "chaos_fragment", quantity: 10 },
{ materialId: "creation_shard", quantity: 4 },
],
zoneId: "primordial_chaos",
},
{
bonus: { type: "gold_income", value: 1.22 },
description:
"Primordial essence held in a creation shard framework. It hums constantly. Gold flows toward it with the enthusiasm of something that wants to become something.",
id: "creation_core",
name: "Creation Core",
requiredMaterials: [
{ materialId: "primordial_essence", quantity: 2 },
{ materialId: "creation_shard", quantity: 6 },
],
zoneId: "primordial_chaos",
},
// Zone 14: infinite_expanse
{
bonus: { type: "essence_income", value: 1.2 },
description:
"Expanse dust wound around distance crystals into a coil that draws essence from distances too vast to measure, compressing it into something your guild can actually use.",
id: "distance_coil",
name: "Distance Coil",
requiredMaterials: [
{ materialId: "expanse_dust", quantity: 10 },
{ materialId: "distance_crystal", quantity: 4 },
],
zoneId: "infinite_expanse",
},
{
bonus: { type: "gold_income", value: 1.22 },
description:
"An infinity shard mounted in a distance crystal frame. The prism reflects gold from an infinite number of directions simultaneously. The math works out favourably.",
id: "infinity_prism",
name: "Infinity Prism",
requiredMaterials: [
{ materialId: "infinity_shard", quantity: 2 },
{ materialId: "distance_crystal", quantity: 6 },
],
zoneId: "infinite_expanse",
},
// Zone 15: reality_forge
{
bonus: { type: "combat_power", value: 1.22 },
description:
"Forge ash smelted with creation tools into an ingot of compressed reality. Your party hits harder when carrying it. Reality does not enjoy being concentrated like this.",
id: "reality_ingot",
name: "Reality Ingot",
requiredMaterials: [
{ materialId: "forge_ash", quantity: 10 },
{ materialId: "creation_tool", quantity: 4 },
],
zoneId: "reality_forge",
},
{
bonus: { type: "click_power", value: 1.22 },
description:
"A reality shard carefully shaped with creation tools into something that could, theoretically, become a universe. Instead it makes your clicks unreasonably effective.",
id: "universe_seed",
name: "Universe Seed",
requiredMaterials: [
{ materialId: "reality_shard", quantity: 2 },
{ materialId: "creation_tool", quantity: 6 },
],
zoneId: "reality_forge",
},
// Zone 16: cosmic_maelstrom
{
bonus: { type: "gold_income", value: 1.25 },
description:
"Maelstrom debris and force crystals ground into a lens at the intersection of fundamental forces. Gold flows toward it with the same inevitability that galaxies flow toward gravity.",
id: "force_lens",
name: "Force Lens",
requiredMaterials: [
{ materialId: "maelstrom_debris", quantity: 10 },
{ materialId: "force_crystal", quantity: 4 },
],
zoneId: "cosmic_maelstrom",
},
{
bonus: { type: "essence_income", value: 1.22 },
description:
"A cosmic fragment suspended in a force crystal matrix — a piece of the maelstrom's impossible calm, holding the eye of the storm. Essence accumulates in its vicinity.",
id: "maelstrom_eye",
name: "Maelstrom Eye",
requiredMaterials: [
{ materialId: "cosmic_fragment", quantity: 2 },
{ materialId: "force_crystal", quantity: 6 },
],
zoneId: "cosmic_maelstrom",
},
// Zone 17: primeval_sanctum
{
bonus: { type: "combat_power", value: 1.25 },
description:
"Ancient dust and memory shards arranged into something that remembers how to fight before fighting was invented. Your party benefits from this instinct enormously.",
id: "ancient_memory_array",
name: "Ancient Memory Array",
requiredMaterials: [
{ materialId: "ancient_dust", quantity: 10 },
{ materialId: "memory_shard", quantity: 4 },
],
zoneId: "primeval_sanctum",
},
{
bonus: { type: "click_power", value: 1.25 },
description:
"The primeval relic, set into a memory shard framework. What function it originally served is unknowable. In your guild's hands, it makes every action more deliberate and more powerful.",
id: "first_artefact",
name: "First Artefact",
requiredMaterials: [
{ materialId: "primeval_relic", quantity: 2 },
{ materialId: "memory_shard", quantity: 6 },
],
zoneId: "primeval_sanctum",
},
// Zone 18: the_absolute
{
bonus: { type: "gold_income", value: 1.3 },
description:
"Absolute fragments and boundary shards ground into a lens that sees to the end of all things — and in seeing, draws the wealth inherent in finality toward your guild.",
id: "final_truth_lens",
name: "Final Truth Lens",
requiredMaterials: [
{ materialId: "absolute_fragment", quantity: 10 },
{ materialId: "boundary_shard", quantity: 4 },
],
zoneId: "the_absolute",
},
{
bonus: { type: "combat_power", value: 1.3 },
description:
"The last omega crystal, set at the convergence of boundary shards in the precise arrangement of an ending. What it does to combat is what endings do to everything: make it final.",
id: "omega_convergence",
name: "Omega Convergence",
requiredMaterials: [
{ materialId: "omega_crystal", quantity: 2 },
{ materialId: "boundary_shard", quantity: 6 },
],
zoneId: "the_absolute",
},
];
+11
View File
@@ -0,0 +1,11 @@
/**
* @file Schema version tracking for game state.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/**
* The current game state schema version. Bump this whenever a breaking change is made to GameState.
*/
export const currentSchemaVersion = 1;
+141
View File
@@ -0,0 +1,141 @@
/**
* @file Game title definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { Title } from "@elysium/types";
export const gameTitles: Array<Title> = [
// Quest milestones
{
condition: { amount: 1, type: "questsCompleted" },
description: "Complete your first quest.",
id: "the_adventurous",
name: "The Adventurous",
},
{
condition: { amount: 100, type: "questsCompleted" },
description: "Complete 100 quests in a single run.",
id: "the_persistent",
name: "The Persistent",
},
// Boss milestones
{
condition: { amount: 1, type: "bossesDefeated" },
description: "Defeat your first boss.",
id: "boss_slayer",
name: "Boss Slayer",
},
{
condition: { amount: 10, type: "bossesDefeated" },
description: "Defeat 10 bosses in a single run.",
id: "dungeon_master",
name: "Dungeon Master",
},
// Gold milestones
{
condition: { amount: 1_000_000, type: "totalGoldEarned" },
description: "Earn 1,000,000 gold in a single run.",
id: "the_wealthy",
name: "The Wealthy",
},
{
condition: { amount: 1_000_000_000, type: "totalGoldEarned" },
description: "Earn 1,000,000,000 gold in a single run.",
id: "the_rich",
name: "The Rich",
},
// Click milestones
{
condition: { amount: 10_000, type: "totalClicks" },
description: "Click the Guild Hall 10,000 times in a single run.",
id: "click_maniac",
name: "Click Maniac",
},
// Adventurer milestones
{
condition: { amount: 100, type: "adventurerTotal" },
description: "Recruit 100 adventurers.",
id: "commander",
name: "Commander",
},
{
condition: { amount: 1000, type: "adventurerTotal" },
description: "Recruit 1,000 adventurers.",
id: "warlord",
name: "Warlord",
},
// Social
{
condition: { type: "guildFounded" },
description: "Give your guild a name.",
id: "guild_founder",
name: "Guild Founder",
},
// Prestige milestones
{
condition: { amount: 1, type: "prestigeCount" },
description: "Achieve your first Prestige.",
id: "the_undying",
name: "The Undying",
},
{
condition: { amount: 5, type: "prestigeCount" },
description: "Achieve 5 Prestiges.",
id: "battle_hardened",
name: "Battle Hardened",
},
{
condition: { amount: 25, type: "prestigeCount" },
description: "Achieve 25 Prestiges.",
id: "legend",
name: "Legend",
},
// Transcendence milestones
{
condition: { amount: 1, type: "transcendenceCount" },
description: "Achieve your first Transcendence.",
id: "transcendent",
name: "Transcendent",
},
{
condition: { amount: 5, type: "transcendenceCount" },
description: "Achieve 5 Transcendences.",
id: "beyond_mortal",
name: "Beyond Mortal",
},
// Apotheosis milestones
{
condition: { amount: 1, type: "apotheosisCount" },
description: "Achieve your first Apotheosis.",
id: "apotheosised",
name: "Apotheosised",
},
{
condition: { amount: 5, type: "apotheosisCount" },
description: "Achieve 5 Apotheoses.",
id: "ascendant",
name: "Ascendant",
},
// Achievement milestone
{
condition: { amount: 40, type: "achievementsUnlocked" },
description: "Unlock all achievements.",
id: "completionist",
name: "Completionist",
},
// Longevity
{
condition: { amount: 30, type: "playedDays" },
description: "Play Elysium for 30 days.",
id: "veteran",
name: "Veteran",
},
{
condition: { amount: 365, type: "playedDays" },
description: "Play Elysium for a full year.",
id: "timeless",
name: "Timeless",
},
];
+155
View File
@@ -0,0 +1,155 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable stylistic/max-len -- Data content */
import type { TranscendenceUpgrade } from "@elysium/types";
export const defaultTranscendenceUpgrades: Array<TranscendenceUpgrade> = [
// ── Income multipliers ──────────────────────────────────────────────────────
{
category: "income",
cost: 5,
description:
"The echoes of past runs linger, amplifying your guild's income by 25%.",
id: "echo_income_1",
multiplier: 1.25,
name: "Whisper of Power",
},
{
category: "income",
cost: 10,
description:
"Your transcendent experience resonates through your guild, boosting income by 50%.",
id: "echo_income_2",
multiplier: 1.5,
name: "Resonance",
},
{
category: "income",
cost: 20,
description:
"The harmony of multiple timelines surges through your guild, doubling its income.",
id: "echo_income_3",
multiplier: 2,
name: "Harmonic Surge",
},
{
category: "income",
cost: 40,
description:
"Ethereal energy overflows from your transcendence, tripling your guild's income.",
id: "echo_income_4",
multiplier: 3,
name: "Ethereal Overflow",
},
{
category: "income",
cost: 80,
description:
"The infinite chorus of every run you've ever played amplifies your guild fivefold.",
id: "echo_income_5",
multiplier: 5,
name: "Infinite Chorus",
},
// ── Combat multipliers ──────────────────────────────────────────────────────
{
category: "combat",
cost: 5,
description:
"Memories of countless battles harden your adventurers, increasing party DPS by 25%.",
id: "echo_combat_1",
multiplier: 1.25,
name: "Battle-Hardened",
},
{
category: "combat",
cost: 15,
description:
"Veterans of transcendence know how to fight smarter, boosting party DPS by 50%.",
id: "echo_combat_2",
multiplier: 1.5,
name: "Veteran's Edge",
},
{
category: "combat",
cost: 35,
description:
"Your warriors carry the strength of every fallen timeline, doubling party DPS.",
id: "echo_combat_3",
multiplier: 2,
name: "Transcendent Warrior",
},
// ── Prestige threshold reductions ──────────────────────────────────────────
{
category: "prestige_threshold",
cost: 8,
description:
"Experience from past lives shortens the road to prestige — threshold reduced by 10%.",
id: "echo_prestige_threshold_1",
multiplier: 0.9,
name: "Accelerated Path",
},
{
category: "prestige_threshold",
cost: 20,
description:
"You've walked this path so many times you know every shortcut — threshold reduced by 20%.",
id: "echo_prestige_threshold_2",
multiplier: 0.8,
name: "Shortcut Through Time",
},
// ── Prestige runestone multipliers ─────────────────────────────────────────
{
category: "prestige_runestones",
cost: 8,
description:
"Transcendent insight attunes you to the runestones, earning 50% more per prestige.",
id: "echo_prestige_runestones_1",
multiplier: 1.5,
name: "Runic Attunement",
},
{
category: "prestige_runestones",
cost: 20,
description:
"You have mastered the art of runestone crafting, doubling your prestige runestone yield.",
id: "echo_prestige_runestones_2",
multiplier: 2,
name: "Master Runesmith",
},
// ── Echo meta multipliers ───────────────────────────────────────────────────
{
category: "echo_meta",
cost: 10,
description:
"Your transcendence resonates deeper, amplifying future echo yields by 25%.",
id: "echo_meta_1",
multiplier: 1.25,
name: "Resonant Awakening",
},
{
category: "echo_meta",
cost: 25,
description:
"Each loop of existence makes the next more powerful — future echo yields +50%.",
id: "echo_meta_2",
multiplier: 1.5,
name: "Transcendent Loop",
},
{
category: "echo_meta",
cost: 50,
description:
"You have mastered the infinite spiral of transcendence, doubling all future echo yields.",
id: "echo_meta_3",
multiplier: 2,
name: "Infinite Spiral",
},
];
+770
View File
@@ -0,0 +1,770 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable max-lines -- Data file */
/* eslint-disable stylistic/max-len -- Data content */
import type { Upgrade } from "@elysium/types";
export const defaultUpgrades: Array<Upgrade> = [
// ── Click upgrades ────────────────────────────────────────────────────────
{
costCrystals: 0,
costEssence: 0,
costGold: 100,
description: "Your strikes find weak points. Doubles click power.",
id: "click_1",
multiplier: 2,
name: "Keen Eye",
purchased: false,
target: "click",
unlocked: true,
},
{
costCrystals: 0,
costEssence: 0,
costGold: 1000,
description:
"Years of combat sharpen your instincts. Doubles click power again.",
id: "click_2",
multiplier: 2,
name: "Battle Hardened",
purchased: false,
target: "click",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 10,
costGold: 50_000,
description: "A weapon of ancient power. Triples click power.",
id: "click_3",
multiplier: 3,
name: "Legendary Weapon",
purchased: false,
target: "click",
unlocked: false,
},
{
costCrystals: 100,
costEssence: 0,
costGold: 0,
description:
"Channel crystallised power into every strike. Doubles click power.",
id: "crystal_focus",
multiplier: 2,
name: "Crystal Focus",
purchased: false,
target: "click",
unlocked: true,
},
// ── Global gold upgrades ──────────────────────────────────────────────────
{
costCrystals: 0,
costEssence: 0,
costGold: 500,
description: "Formalising the guild structure increases all income by 25%.",
id: "global_1",
multiplier: 1.25,
name: "Guild Charter",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 5,
costGold: 10_000,
description: "Trade routes boost all income by 50%.",
id: "global_2",
multiplier: 1.5,
name: "Merchant Alliance",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 100,
costGold: 1_000_000,
description: "The king himself backs your guild. All income doubled.",
id: "global_3",
multiplier: 2,
name: "Royal Patronage",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 50,
costGold: 50_000,
description:
"Forge partnerships with mage guilds across the realm. All income +50%.",
id: "essence_guild",
multiplier: 1.5,
name: "Essence Guild",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 250,
costGold: 500_000,
description:
"A council of the realm's greatest minds organises your operations. All income doubled.",
id: "grand_council",
multiplier: 2,
name: "Grand Council",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 250,
costEssence: 0,
costGold: 0,
description:
"Align crystalline frequencies across your guild. All income +50%.",
id: "crystal_resonance",
multiplier: 1.5,
name: "Crystal Resonance",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 600,
costEssence: 0,
costGold: 0,
description: "Master the art of crystal amplification. All income doubled.",
id: "crystal_mastery",
multiplier: 2,
name: "Crystal Mastery",
purchased: false,
target: "global",
unlocked: false,
},
// ── Adventurer-specific upgrades ──────────────────────────────────────────
{
adventurerId: "peasant",
costCrystals: 0,
costEssence: 0,
costGold: 200,
description: "Peasants work twice as hard with proper equipment.",
id: "peasant_1",
multiplier: 2,
name: "Better Tools",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "militia",
costCrystals: 0,
costEssence: 0,
costGold: 1000,
description: "Formal training doubles militia effectiveness.",
id: "militia_1",
multiplier: 2,
name: "Militia Training",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "apprentice",
costCrystals: 0,
costEssence: 2,
costGold: 5000,
description: "Ancient books of magic double mage output.",
id: "mage_1",
multiplier: 2,
name: "Arcane Tomes",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "acolyte",
costCrystals: 0,
costEssence: 3,
costGold: 8000,
description: "Sacred ceremonies double the output of your clerics.",
id: "cleric_1",
multiplier: 2,
name: "Holy Rites",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "ranger",
costCrystals: 0,
costEssence: 5,
costGold: 15_000,
description: "Advanced scouting techniques double ranger effectiveness.",
id: "scout_1",
multiplier: 2,
name: "Stealth Training",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "knight",
costCrystals: 0,
costEssence: 10,
costGold: 50_000,
description:
"Superior forging techniques double the output of your knights.",
id: "knight_1",
multiplier: 2,
name: "Tempered Steel",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "archmage",
costCrystals: 0,
costEssence: 75,
costGold: 100_000,
description: "Tap into the world's leylines to double archmage output.",
id: "archmage_1",
multiplier: 2,
name: "Leyline Binding",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "paladin",
costCrystals: 0,
costEssence: 150,
costGold: 200_000,
description:
"Divine blessings from the gods themselves double paladin output.",
id: "paladin_1",
multiplier: 2,
name: "Holy Vanguard",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "dragon_rider",
costCrystals: 0,
costEssence: 200,
costGold: 500_000,
description:
"The unbreakable bond between rider and dragon doubles their combined output.",
id: "dragon_rider_1",
multiplier: 2,
name: "Bond of Wings",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "shadow_assassin",
costCrystals: 0,
costEssence: 50,
costGold: 0,
description: "Mastery of the shadow arts doubles assassin effectiveness.",
id: "shadow_assassin_1",
multiplier: 2,
name: "Shadow Arts",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "arcane_scholar",
costCrystals: 0,
costEssence: 150,
costGold: 0,
description: "Access to forbidden libraries doubles scholar output.",
id: "arcane_scholar_1",
multiplier: 2,
name: "Ancient Tomes",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "void_walker",
costCrystals: 0,
costEssence: 300,
costGold: 0,
description:
"Walking through the void itself doubles the output of your void walkers.",
id: "void_walker_1",
multiplier: 2,
name: "Void Step",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "celestial_guard",
costCrystals: 0,
costEssence: 750,
costGold: 0,
description:
"A blessing from the celestials themselves doubles guard output.",
id: "celestial_guard_1",
multiplier: 2,
name: "Divine Ward",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "divine_champion",
costCrystals: 0,
costEssence: 2000,
costGold: 0,
description: "An unbreakable oath to the divine doubles champion output.",
id: "divine_champion_1",
multiplier: 2,
name: "Champion's Oath",
purchased: false,
target: "adventurer",
unlocked: false,
},
// ── Click upgrades (new zones) ────────────────────────────────────────────
{
costCrystals: 0,
costEssence: 5_000_000,
costGold: 100_000_000,
description:
"Blessed by the celestials themselves. Click power quadrupled.",
id: "click_4",
multiplier: 4,
name: "Celestial Strike",
purchased: false,
target: "click",
unlocked: false,
},
{
costCrystals: 10_000_000,
costEssence: 0,
costGold: 0,
description:
"A strike that burns with infernal fire. Click power quintupled.",
id: "click_5",
multiplier: 5,
name: "Infernal Slash",
purchased: false,
target: "click",
unlocked: false,
},
// ── Global upgrades (new zones) ───────────────────────────────────────────
{
costCrystals: 0,
costEssence: 10_000_000,
costGold: 500_000_000,
description:
"A covenant with celestial forces multiplies your guild's potential. All income doubled.",
id: "divine_covenant",
multiplier: 2,
name: "Divine Covenant",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 50_000_000,
costGold: 100_000_000_000,
description:
"The empire formally sponsors your guild at the highest level. All income x2.5.",
id: "global_4",
multiplier: 2.5,
name: "Imperial Decree",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 2_000_000,
costEssence: 0,
costGold: 0,
description:
"A pact with the denizens of the deepest trench. All income doubled.",
id: "abyssal_pact",
multiplier: 2,
name: "Abyssal Pact",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 100_000_000_000,
costGold: 50_000_000_000_000,
description:
"The celestials themselves decree your guild's dominion over all realms. All income x3.",
id: "celestial_mandate",
multiplier: 3,
name: "Celestial Mandate",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 10_000_000,
costEssence: 0,
costGold: 0,
description: "Transcend mortal limits through void energy. All income x3.",
id: "void_ascendancy",
multiplier: 3,
name: "Void Ascendancy",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 0,
costEssence: 500_000_000_000,
costGold: 1_000_000_000_000_000,
description:
"Perfect harmony with celestial forces amplifies all output. All income x2.5.",
id: "divine_harmony",
multiplier: 2.5,
name: "Divine Harmony",
purchased: false,
target: "global",
unlocked: false,
},
{
costCrystals: 50_000_000,
costEssence: 0,
costGold: 0,
description: "Channel infernal rage into production. All income doubled.",
id: "infernal_fury",
multiplier: 2,
name: "Infernal Fury",
purchased: false,
target: "global",
unlocked: false,
},
// ── Purchasable essence/crystal sink upgrades ─────────────────────────────
{
costCrystals: 0,
costEssence: 5_000_000,
costGold: 0,
description: "Tap into a vast network of essence flows. All income +50%.",
id: "essence_nexus",
multiplier: 1.5,
name: "Essence Nexus",
purchased: false,
target: "global",
unlocked: true,
},
{
costCrystals: 0,
costEssence: 50_000_000,
costGold: 0,
description:
"Flood your guild's operations with raw essence power. All income doubled.",
id: "essence_overdrive",
multiplier: 2,
name: "Essence Overdrive",
purchased: false,
target: "global",
unlocked: true,
},
{
costCrystals: 0,
costEssence: 500_000_000,
costGold: 0,
description: "Harness the oldest essence in existence. All income x3.",
id: "primal_essence",
multiplier: 3,
name: "Primal Essence",
purchased: false,
target: "global",
unlocked: true,
},
{
costCrystals: 50_000_000,
costEssence: 0,
costGold: 0,
description:
"Push crystal resonance beyond its limits. All income doubled.",
id: "crystal_overdrive",
multiplier: 2,
name: "Crystal Overdrive",
purchased: false,
target: "global",
unlocked: true,
},
{
costCrystals: 200_000_000,
costEssence: 0,
costGold: 0,
description: "Forge an eternal pact that triples all income permanently.",
id: "eternal_bond",
multiplier: 3,
name: "Eternal Bond",
purchased: false,
target: "global",
unlocked: true,
},
{
costCrystals: 1_000_000_000,
costEssence: 0,
costGold: 0,
description:
"The supreme decree from the Eternal Throne itself. All income x5.",
id: "apex_mandate",
multiplier: 5,
name: "Apex Mandate",
purchased: false,
target: "global",
unlocked: true,
},
// ── New adventurer upgrades ───────────────────────────────────────────────
{
adventurerId: "seraph_knight",
costCrystals: 0,
costEssence: 10_000_000,
costGold: 0,
description:
"Seraph knights gain divine flight, doubling their effectiveness.",
id: "seraph_knight_1",
multiplier: 2,
name: "Seraphic Wings",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "abyss_diver",
costCrystals: 0,
costEssence: 25_000_000,
costGold: 0,
description:
"Full adaptation to abyssal pressure doubles diver effectiveness.",
id: "abyss_diver_1",
multiplier: 2,
name: "Pressure Adaptation",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "infernal_warden",
costCrystals: 2_000_000,
costEssence: 0,
costGold: 0,
description:
"Tempered in hellfire itself, warden effectiveness is doubled.",
id: "infernal_warden_1",
multiplier: 2,
name: "Infernal Tempering",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "crystal_sage",
costCrystals: 5_000_000,
costEssence: 0,
costGold: 0,
description:
"Complete mastery of prismatic crystallomancy doubles sage output.",
id: "crystal_sage_1",
multiplier: 2,
name: "Prismatic Mastery",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "void_sentinel",
costCrystals: 15_000_000,
costEssence: 0,
costGold: 0,
description:
"Perfect resonance with the void doubles sentinel effectiveness.",
id: "void_sentinel_1",
multiplier: 2,
name: "Void Resonance",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "eternal_champion",
costCrystals: 50_000_000,
costEssence: 0,
costGold: 0,
description: "An oath that transcends time itself doubles champion output.",
id: "eternal_champion_1",
multiplier: 2,
name: "Eternal Oath",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "aether_weaver",
costCrystals: 200_000_000,
costEssence: 0,
costGold: 0,
description:
"Complete mastery of aetheric forces doubles the weaver's output.",
id: "aether_weaver_1",
multiplier: 2,
name: "Aetheric Mastery",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "titan_warrior",
costCrystals: 700_000_000,
costEssence: 0,
costGold: 0,
description:
"The fury of a titan unleashed — warrior effectiveness doubled.",
id: "titan_warrior_1",
multiplier: 2,
name: "Titanic Fury",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "nexus_sage",
costCrystals: 2_500_000_000,
costEssence: 0,
costGold: 0,
description:
"The sage converges all ley lines through their body — output doubled.",
id: "nexus_sage_1",
multiplier: 2,
name: "Nexus Convergence",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "cosmos_knight",
costCrystals: 9_000_000_000,
costEssence: 0,
costGold: 0,
description:
"Tempered by the heat of dying stars, the knight's effectiveness is doubled.",
id: "cosmos_knight_1",
multiplier: 2,
name: "Cosmic Tempering",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "astral_sovereign",
costCrystals: 3e10,
costEssence: 0,
costGold: 0,
description:
"Ascension to true sovereignty over the astral plane doubles output.",
id: "astral_sovereign_1",
multiplier: 2,
name: "Sovereign Ascension",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "primordial_mage",
costCrystals: 1e11,
costEssence: 0,
costGold: 0,
description:
"Awakening of the mage's primordial heritage doubles their power.",
id: "primordial_mage_1",
multiplier: 2,
name: "Primordial Awakening",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "reality_warden",
costCrystals: 4e11,
costEssence: 0,
costGold: 0,
description:
"The warden binds themselves to the structure of reality — effectiveness doubled.",
id: "reality_warden_1",
multiplier: 2,
name: "Reality Binding",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "infinity_ranger",
costCrystals: 1.5e12,
costEssence: 0,
costGold: 0,
description:
"The ranger's arrows travel through infinity itself — output doubled.",
id: "infinity_ranger_1",
multiplier: 2,
name: "Infinite Aim",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "oblivion_paladin",
costCrystals: 5e12,
costEssence: 0,
costGold: 0,
description:
"Consecrated by the void between all things — paladin effectiveness doubled.",
id: "oblivion_paladin_1",
multiplier: 2,
name: "Oblivion Consecration",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "transcendent_rogue",
costCrystals: 2e13,
costEssence: 0,
costGold: 0,
description:
"The rogue becomes one with the space between states — effectiveness doubled.",
id: "transcendent_rogue_1",
multiplier: 2,
name: "Transcendent Shadow",
purchased: false,
target: "adventurer",
unlocked: false,
},
{
adventurerId: "omniversal_champion",
costCrystals: 8e13,
costEssence: 0,
costGold: 0,
description:
"Dominion over all versions of all universes — champion output doubled.",
id: "omniversal_champion_1",
multiplier: 2,
name: "Omniversal Dominion",
purchased: false,
target: "adventurer",
unlocked: false,
},
];
+191
View File
@@ -0,0 +1,191 @@
/**
* @file Game data definitions.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable stylistic/max-len -- Data content */
import type { Zone } from "@elysium/types";
export const defaultZones: Array<Zone> = [
{
description:
"Rolling green hills and ancient forests stretch to the horizon. This is where your guild takes its first steps — trade roads in need of clearing, goblin camps to rout, and an undead queen stirring in the north.",
emoji: "🌿",
id: "verdant_vale",
name: "The Verdant Vale",
status: "unlocked",
unlockBossId: null,
unlockQuestId: null,
},
{
description:
"The remnants of a civilisation long lost to war and dragonfire. Crumbling towers and cursed lakes hide treasures — and an elder dragon who claims these lands as his own.",
emoji: "🏛️",
id: "shattered_ruins",
name: "The Shattered Ruins",
status: "locked",
unlockBossId: "forest_giant",
unlockQuestId: "ancient_ruins",
},
{
description:
"At the edge of the world, where the sun barely rises and the cold is a living thing, a tear in reality has drawn something ancient and terrible. Only the mightiest guilds dare tread here.",
emoji: "❄️",
id: "frozen_peaks",
name: "The Frozen Peaks",
status: "locked",
unlockBossId: "elder_dragon",
unlockQuestId: "dragon_lair",
},
{
description:
"A vast, fog-choked wetland where the sun never fully rises. Dark magic seeps from the earth itself, and things far older than the kingdom lurk beneath the murky waters.",
emoji: "🌑",
id: "shadow_marshes",
name: "The Shadow Marshes",
status: "locked",
unlockBossId: "void_titan",
unlockQuestId: "storm_citadel",
},
{
description:
"A chain of active volcanoes whose caverns plunge deep into the earth's molten heart. Legendary forges burn here, tended by fire elementals who serve no master — yet.",
emoji: "🌋",
id: "volcanic_depths",
name: "The Volcanic Depths",
status: "locked",
unlockBossId: "mud_kraken",
unlockQuestId: "plague_ruins",
},
{
description:
"Beyond the veil of the mortal world lies a realm of pure possibility and absolute terror. Stars are born and die here in moments, and the beings that call this place home have never known mortality.",
emoji: "🌌",
id: "astral_void",
name: "The Astral Void",
status: "locked",
unlockBossId: "phoenix_lord",
unlockQuestId: "the_forge",
},
{
description:
"Beyond the astral void, where reality gives way to pure divinity. The celestial host holds court here in towers of light older than stars, but their idea of order is as alien and terrifying as the chaos below.",
emoji: "✨",
id: "celestial_reaches",
name: "The Celestial Reaches",
status: "locked",
unlockBossId: "the_devourer",
unlockQuestId: "the_end",
},
{
description:
"At the bottom of all things, where no light reaches and pressure could crush continents, something old and patient waits. It has been waiting since before your world was made — and it has never been interrupted.",
emoji: "🌊",
id: "abyssal_trench",
name: "The Abyssal Trench",
status: "locked",
unlockBossId: "the_first_light",
unlockQuestId: "celestial_archive",
},
{
description:
"The courts of the underworld, where demon lords scheme across aeons. Power here is measured in souls and suffering — your guild deals in neither, but you will have to speak their language before this is over.",
emoji: "👿",
id: "infernal_court",
name: "The Infernal Court",
status: "locked",
unlockBossId: "elder_abomination",
unlockQuestId: "abyssal_chronicle",
},
{
description:
"A tower of living crystal that pierces every boundary between planes. Its facets reflect possibilities that have never existed and futures that cannot be. The intelligence at its core has been calculating since before this universe existed.",
emoji: "💎",
id: "crystalline_spire",
name: "The Crystalline Spire",
status: "locked",
unlockBossId: "the_fallen",
unlockQuestId: "infernal_codex",
},
{
description:
"Not a place but a state of being — the space between the spaces between things. Existence grows thin here. Your guild is the first to find it, drawn by a power that should not be able to call to anything that lives.",
emoji: "🌀",
id: "void_sanctum",
name: "The Void Sanctum",
status: "locked",
unlockBossId: "crystal_sovereign",
unlockQuestId: "the_prism_vault",
},
{
description:
"The seat of ultimate power at the centre of all creation. Whoever sits here has sat here since the beginning. They have watched countless guilds rise and fall across uncounted ages. Your guild has come to take the throne. It does not yield.",
emoji: "👑",
id: "eternal_throne",
name: "The Eternal Throne",
status: "locked",
unlockBossId: "void_emperor",
unlockQuestId: "heart_of_void",
},
{
description:
"Beyond the throne lies the raw stuff of creation itself — not a place but an ongoing argument between existence and non-existence that has never been resolved. Your guild enters the argument.",
emoji: "🌪️",
id: "primordial_chaos",
name: "The Primordial Chaos",
status: "locked",
unlockBossId: "the_apex",
unlockQuestId: "eternal_dominion",
},
{
description:
"A realm without edges, without centre, without reference — where distance is a concept that does not apply and your guild must define their own coordinates to navigate at all. Everything here is further than it looks.",
emoji: "♾️",
id: "infinite_expanse",
name: "The Infinite Expanse",
status: "locked",
unlockBossId: "primordial_titan",
unlockQuestId: "chaos_chronicle",
},
{
description:
"The workshop where the original universe was hammered into shape — still hot, still humming, still producing realities as a byproduct of its idle operation. The things that work here have never stopped.",
emoji: "⚒️",
id: "reality_forge",
name: "The Reality Forge",
status: "locked",
unlockBossId: "expanse_sovereign",
unlockQuestId: "expanse_codex",
},
{
description:
"A confluence of every force in existence, spinning in patterns that reduce galaxies to debris. Your guild navigates currents of energy that, on a good day, merely shatter planets.",
emoji: "🌀",
id: "cosmic_maelstrom",
name: "The Cosmic Maelstrom",
status: "locked",
unlockBossId: "reality_architect",
unlockQuestId: "forge_chronicle",
},
{
description:
"The oldest place that has ever existed — older than time, older than space, older than the concept of age itself. It holds something that remembers the moment before the first moment.",
emoji: "🗿",
id: "primeval_sanctum",
name: "The Primeval Sanctum",
status: "locked",
unlockBossId: "cosmic_annihilator",
unlockQuestId: "maelstrom_codex",
},
{
description:
"There is nothing beyond this. Not because nothing has been found — because nothing exists to find. The Absolute is the final truth: the end of all things that are and the beginning of all things that never were. Your guild stands at the edge of everything.",
emoji: "⚫",
id: "the_absolute",
name: "The Absolute",
status: "locked",
unlockBossId: "primeval_god",
unlockQuestId: "sanctum_chronicle",
},
];