fix: runestone formula, prestige/transcendence rebalance, exploration fixes, and comprehensive balance audit #135

Merged
naomi merged 53 commits from fix/stones into main 2026-03-31 19:57:53 -07:00
2 changed files with 65 additions and 2 deletions
Showing only changes of commit 2827ddef72 - Show all commits
+63
View File
@@ -269,6 +269,33 @@ export const defaultAchievements: Array<Achievement> = [
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" },
@@ -363,4 +390,40 @@ export const defaultAchievements: Array<Achievement> = [
reward: { crystals: 25_000 },
unlockedAt: null,
},
{
condition: { amount: 50, type: "prestigeCount" },
description: "Prestige 50 times.",
icon: "✨",
id: "prestige_transcendent",
name: "Transcendent",
reward: { crystals: 10_000 },
unlockedAt: null,
},
{
condition: { amount: 100, type: "prestigeCount" },
description: "Prestige 100 times.",
icon: "💎",
id: "prestige_eternal",
name: "Eternal Looper",
reward: { crystals: 25_000 },
unlockedAt: null,
},
{
condition: { amount: 150, type: "prestigeCount" },
description: "Prestige 150 times.",
icon: "🌟",
id: "prestige_immortal",
name: "Immortal Cycler",
reward: { crystals: 50_000 },
unlockedAt: null,
},
{
condition: { amount: 200, type: "prestigeCount" },
description: "Prestige 200 times.",
icon: "👑",
id: "prestige_absolute",
name: "Absolute Champion",
reward: { crystals: 100_000 },
unlockedAt: null,
},
];
+2 -2
View File
@@ -476,8 +476,8 @@ export const computeProjectedRunestones = (state: GameState): number => {
? 1.5
: 1;
const runestoneMult = gain1Mult * gain2Mult;
/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- optional chained game state field */
const echoMult: number = state.transcendence?.echoPrestigeRunestoneMultiplier ?? 1;
const echoMult: number
= state.transcendence?.echoPrestigeRunestoneMultiplier ?? 1;
return Math.floor(base * runestoneMult * echoMult);
};