Files
elysium/apps/api/src/data/achievements.ts
T
hikari e7164257c5
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m9s
CI / Lint, Build & Test (push) Successful in 1m12s
feat: comprehensive balance pass (#239)
## Summary

Working through all 15 open balance tickets in a coordinated multi-pass approach.

### Pass 1 — Quest failure rates (closes #172)
- Capped all zone quest failure chances at 15% (down from up to 40%)
- Proportional scaling preserved (harder zones still fail more than easier ones)

### Pass 2 — Crystal economy (closes #165, #173, #215)
- Added `crystal_pulse` (3,000 crystals), `crystal_surge` (20,000), `crystal_tempest` (150,000) upgrades to fill the dead zone between 600 and 2M crystal sinks
- Bumped `click_deity`, `prestige_master`, and `prestige_legend` achievement crystal rewards (5K→15K, 5K→15K, 25K→75K)
- Added crystal rewards to `first_steps` (+5) and `goblin_camp` (+10) early quests

### Pass 3 — Runestone/prestige loop (closes #166, #170)
- Bumped `runestonesPerPrestigeLevel` from 15 → 20 (~33% yield increase for mid-game runs)
- Reduced `income_10` cost from 22,500 → 15,000 and `income_11` from 60,000 → 35,000
- Kept client/server parity: `runestonesPerPrestigeLevelClient` in tick.ts updated to match

### Pass 4 — Quest content (#175, #178)
- Both already resolved in commit 666a5b2: quests now reach 5e141 CP across reality_forge, cosmic_maelstrom, primeval_sanctum, and the_absolute — fully covering P60–P212

### Pass 5 — Daily challenges (closes #167)
- Added `crafting` as a new `DailyChallengeType`
- Added 3 crafting challenge templates (craft 1/2/3 recipes)
- Changed generation to guarantee: 1 clicks + 1 crafting + 1 from progression pool
- Added crafting challenge tracking in `craft.ts` (awards crystals on recipe craft)
- Stuck players now have 2/3 daily challenges always completable

### Pass 6 — Transcendence costs (#179)
- Already resolved in commit 666a5b2: echo meta costs are 15/45/100 (was 25/75/200)

### Also closed as stale
- #171 (milestone bonus already quadratic)
- #174 (production multiplier already 1.3^n)
- #176 (expanse_sovereign HP already at 3e39)
- #177 (recipe costs already in expected range)
- #178 (post-absolute quests already present)
- #179 (echo meta costs already reduced)

 This PR was created with help from Hikari~ 🌸

Reviewed-on: #239
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
2026-04-06 18:58:04 -07:00

457 lines
13 KiB
TypeScript

/**
* @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 the 18 bosses of the mortal realms.",
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: 78, type: "equipmentOwned" },
description: "Own all 78 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: 15_000 },
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,
},
{
condition: { amount: 1e30, type: "totalGoldEarned" },
description: "Earn 1 nonillion gold in total.",
icon: "🌌",
id: "cosmic_wealthy",
name: "Cosmic Wealthy",
reward: { crystals: 100_000 },
unlockedAt: null,
},
{
condition: { amount: 1e60, type: "totalGoldEarned" },
description: "Earn a vigintillion gold in total.",
icon: "♾️",
id: "infinite_hoarder",
name: "Infinite Hoarder",
reward: { crystals: 250_000 },
unlockedAt: null,
},
{
condition: { amount: 1e90, type: "totalGoldEarned" },
description: "Earn a trigintillion gold in total.",
icon: "🔮",
id: "omniversal_tycoon",
name: "Omniversal Tycoon",
reward: { crystals: 1_000_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: 75, type: "questsCompleted" },
description: "Complete 75 quests.",
icon: "🌠",
id: "quest_hero",
name: "Quest Hero",
reward: { crystals: 10_000 },
unlockedAt: null,
},
{
condition: { amount: 100, type: "questsCompleted" },
description: "Complete 100 quests.",
icon: "💫",
id: "quest_legend",
name: "Quest Legend",
reward: { crystals: 15_000 },
unlockedAt: null,
},
{
condition: { amount: 122, type: "questsCompleted" },
description: "Complete all 122 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: 50, type: "bossesDefeated" },
description: "Defeat 50 bosses.",
icon: "⚡",
id: "boss_legend",
name: "Legendary Vanquisher",
reward: { crystals: 15_000 },
unlockedAt: null,
},
{
condition: { amount: 72, type: "bossesDefeated" },
description: "Defeat all 72 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: 15_000 },
unlockedAt: null,
},
{
condition: { amount: 25, type: "prestigeCount" },
description: "Prestige 25 times.",
icon: "🌠",
id: "prestige_legend",
name: "Legend of Eternity",
reward: { crystals: 75_000 },
unlockedAt: null,
},
{
condition: { amount: 50, type: "prestigeCount" },
description: "Prestige 50 times.",
icon: "✨",
id: "prestige_transcendent",
name: "Transcendent",
reward: { runestones: 100 },
unlockedAt: null,
},
{
condition: { amount: 100, type: "prestigeCount" },
description: "Prestige 100 times.",
icon: "💎",
id: "prestige_eternal",
name: "Eternal Looper",
reward: { runestones: 500 },
unlockedAt: null,
},
{
condition: { amount: 150, type: "prestigeCount" },
description: "Prestige 150 times.",
icon: "🌟",
id: "prestige_immortal",
name: "Immortal Cycler",
reward: { runestones: 2000 },
unlockedAt: null,
},
{
condition: { amount: 200, type: "prestigeCount" },
description: "Prestige 200 times.",
icon: "👑",
id: "prestige_absolute",
name: "Absolute Champion",
reward: { runestones: 10_000 },
unlockedAt: null,
},
];