generated from nhcarrigan/template
e7164257c5
## 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 commit666a5b2: 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 commit666a5b2: 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>
457 lines
13 KiB
TypeScript
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,
|
|
},
|
|
];
|