balance: increase runestone yield and reduce income_10/11 costs (closes #166, #170)

This commit is contained in:
2026-04-06 18:44:44 -07:00
committed by Naomi Carrigan
parent 4e2bc2cb98
commit 55a521a759
4 changed files with 11 additions and 11 deletions
+2 -2
View File
@@ -96,7 +96,7 @@ export const defaultPrestigeUpgrades: Array<PrestigeUpgrade> = [
id: "income_10",
multiplier: 200,
name: "Eternal Rune I",
runestonesCost: 22_500,
runestonesCost: 15_000,
},
{
category: "income",
@@ -105,7 +105,7 @@ export const defaultPrestigeUpgrades: Array<PrestigeUpgrade> = [
id: "income_11",
multiplier: 500,
name: "Eternal Rune II",
runestonesCost: 60_000,
runestonesCost: 35_000,
},
// ── Click Power ───────────────────────────────────────────────────────────
{
+1 -1
View File
@@ -15,7 +15,7 @@ import type {
} from "@elysium/types";
const basePrestigeGoldThreshold = 1_000_000;
const runestonesPerPrestigeLevel = 15;
const runestonesPerPrestigeLevel = 20;
const milestoneInterval = 5;
const milestoneRunestonesPerInterval = 25;
+7 -7
View File
@@ -102,25 +102,25 @@ describe("isEligibleForPrestige", () => {
describe("calculateRunestones", () => {
it("calculates basic runestones formula", () => {
// floor(cbrt(4_000_000 / 1_000_000)) × 15 = floor(cbrt(4)) × 15 = 1 × 15 = 15
// floor(cbrt(4_000_000 / 1_000_000)) × 20 = floor(cbrt(4)) × 20 = 1 × 20 = 20
const result = calculateRunestones({ totalGoldEarned: 4_000_000, prestigeCount: 0, purchasedUpgradeIds: [] });
expect(result).toBe(15);
expect(result).toBe(20);
});
it("applies echo runestone multiplier", () => {
// floor(cbrt(4)) × 15 = 15; × 2 = 30
// floor(cbrt(4)) × 20 = 20; × 2 = 40
const result = calculateRunestones({ totalGoldEarned: 4_000_000, prestigeCount: 0, purchasedUpgradeIds: [], echoRunestoneMultiplier: 2 });
expect(result).toBe(30);
expect(result).toBe(40);
});
it("applies purchased runestone upgrade multiplier", () => {
// With "runestone_gain_1" purchased (multiplier 1.25): floor(15 × 1.25) = 18
// With "runestone_gain_1" purchased (multiplier 1.25): floor(20 × 1.25) = 25
const result = calculateRunestones({ totalGoldEarned: 4_000_000, prestigeCount: 0, purchasedUpgradeIds: ["runestone_gain_1"] });
expect(result).toBe(18);
expect(result).toBe(25);
});
it("caps base runestones before multipliers", () => {
// cbrt(9_261_000_000 / 1_000_000) = cbrt(9261) = 21 → 21 × 10 = 210, capped at 200
// cbrt(9_261_000_000 / 1_000_000) = cbrt(9261) = 21 → 21 × 20 = 420, capped at 200
const result = calculateRunestones({ totalGoldEarned: 9_261_000_000, prestigeCount: 0, purchasedUpgradeIds: [] });
expect(result).toBe(200);
});
+1 -1
View File
@@ -451,7 +451,7 @@ export const computePartyCombatPower = (state: GameState): number => {
};
const basePrestigeThreshold = 1_000_000;
const runestonesPerPrestigeLevelClient = 15;
const runestonesPerPrestigeLevelClient = 20;
const maxBaseRunestones = 200;
/**