From 218a150540afed18ba70698857ea67dc78f885bb Mon Sep 17 00:00:00 2001 From: Hikari Date: Tue, 31 Mar 2026 18:00:16 -0700 Subject: [PATCH] feat: add missing achievement milestones and fix reward types (#188, #189, #190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add quest_hero milestone at 75 quests (closes gap between 50 and 122) - Add boss_legend milestone at 50 bosses (closes gap between 30 and 72) - Replace crystal rewards on P50/P100/P150/P200 prestige achievements with runestones (100/500/2000/10000) — crystals become worthless by the time these are earned, runestones remain meaningful throughout --- apps/api/src/data/achievements.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/apps/api/src/data/achievements.ts b/apps/api/src/data/achievements.ts index 1d70349..bbc7693 100644 --- a/apps/api/src/data/achievements.ts +++ b/apps/api/src/data/achievements.ts @@ -315,6 +315,15 @@ export const defaultAchievements: Array = [ 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: 122, type: "questsCompleted" }, description: "Complete all 122 quests across the known multiverse.", @@ -343,6 +352,15 @@ export const defaultAchievements: Array = [ 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.", @@ -396,7 +414,7 @@ export const defaultAchievements: Array = [ icon: "✨", id: "prestige_transcendent", name: "Transcendent", - reward: { crystals: 10_000 }, + reward: { runestones: 100 }, unlockedAt: null, }, { @@ -405,7 +423,7 @@ export const defaultAchievements: Array = [ icon: "💎", id: "prestige_eternal", name: "Eternal Looper", - reward: { crystals: 25_000 }, + reward: { runestones: 500 }, unlockedAt: null, }, { @@ -414,7 +432,7 @@ export const defaultAchievements: Array = [ icon: "🌟", id: "prestige_immortal", name: "Immortal Cycler", - reward: { crystals: 50_000 }, + reward: { runestones: 2000 }, unlockedAt: null, }, { @@ -423,7 +441,7 @@ export const defaultAchievements: Array = [ icon: "👑", id: "prestige_absolute", name: "Absolute Champion", - reward: { crystals: 100_000 }, + reward: { runestones: 10_000 }, unlockedAt: null, }, ];