balance: early crystal access and smoother production scaling (#173, #174)
CI / Lint, Build & Test (pull_request) Failing after 52s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m2s

Give Troll King 5 crystals (was 0) to signal the crystal economy from
the first boss kill, and halve crystal_focus cost from 100 to 50 so it
is reachable within the first zone's boss chain (#173).

Increase production multiplier base from 1.25 to 1.3 so each prestige
provides more perceptible run-time reduction in the P1-P30 window where
the treadmill effect was most pronounced (#174).
This commit is contained in:
2026-03-31 15:10:33 -07:00
committed by Naomi Carrigan
parent 9cff54cfcd
commit 952e9d6299
4 changed files with 7 additions and 7 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ export const defaultBosses: Array<Boss> = [
// ── Verdant Vale ──────────────────────────────────────────────────────────
{
bountyRunestones: 1,
crystalReward: 0,
crystalReward: 5,
currentHp: 1000,
damagePerSecond: 5,
description:
+1 -1
View File
@@ -48,7 +48,7 @@ export const defaultUpgrades: Array<Upgrade> = [
unlocked: false,
},
{
costCrystals: 100,
costCrystals: 50,
costEssence: 0,
costGold: 0,
description:
+2 -2
View File
@@ -146,7 +146,7 @@ const calculateRunestones = (parameters: RunestoneParameters): number => {
/**
* Calculates the new prestige production multiplier.
* Formula: 1.25^prestigeCount — exponential scaling per prestige that eventually
* Formula: 1.3^prestigeCount — exponential scaling per prestige that eventually
* overtakes the polynomial threshold growth, making late prestiges progressively easier.
* @param prestigeCount - The new prestige count.
* @returns The production multiplier for the new prestige level.
@@ -154,7 +154,7 @@ const calculateRunestones = (parameters: RunestoneParameters): number => {
const calculateProductionMultiplier = (
prestigeCount: number,
): number => {
return Math.pow(1.25, prestigeCount);
return Math.pow(1.3, prestigeCount);
};
/**
+3 -3
View File
@@ -131,12 +131,12 @@ describe("calculateProductionMultiplier", () => {
expect(calculateProductionMultiplier(0)).toBe(1);
});
it("returns 1.25 at count 1", () => {
expect(calculateProductionMultiplier(1)).toBeCloseTo(1.25);
it("returns 1.3 at count 1", () => {
expect(calculateProductionMultiplier(1)).toBeCloseTo(1.3);
});
it("scales exponentially", () => {
expect(calculateProductionMultiplier(10)).toBeCloseTo(Math.pow(1.25, 10));
expect(calculateProductionMultiplier(10)).toBeCloseTo(Math.pow(1.3, 10));
});
});