balance: smooth prestige income cliff, quadratic milestones, exponential combat scaling (#170, #171)
CI / Lint, Build & Test (pull_request) Failing after 52s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m7s

Reduce income_10 cost 30k→22.5k and income_11 80k→60k (25% cut each)
to ease the late-prestige runestone cliff without collapsing the timeline.

Change prestige milestone bonus from linear (n×25) to quadratic (n²×25)
so high-prestige milestones feel meaningful (P100 = 10k stones).

Replace linear prestige combat multiplier (1 + count×0.1) with exponential
(4^count) in both the tick engine and server-side boss route. Without this
the final boss (2×10^145 HP) was unreachable by ~112 orders of magnitude;
base-4 makes it achievable around P190, consistent with the 6-month target.
This commit is contained in:
2026-03-31 15:05:41 -07:00
committed by Naomi Carrigan
parent f83728df57
commit 9cff54cfcd
5 changed files with 24 additions and 14 deletions
+8 -2
View File
@@ -24,6 +24,13 @@ import { updateChallengeProgress } from "../services/dailyChallenges.js";
import { logger } from "../services/logger.js";
import type { HonoEnvironment } from "../types/hono.js";
/**
* Exponential base for the prestige combat multiplier: Math.pow(base, prestigeCount).
* Replaces the former linear formula (1 + count * 0.1) to enable late-game zone progression.
* Must be kept in sync with prestigeCombatBase in apps/web/src/engine/tick.ts.
*/
const prestigeCombatBase = 4;
const bossRouter = new Hono<HonoEnvironment>();
bossRouter.use("*", authMiddleware);
@@ -38,8 +45,7 @@ const calculatePartyStats = (
}
}
// eslint-disable-next-line stylistic/no-mixed-operators -- prestige count * factor is clear
const prestigeMultiplier = 1 + state.prestige.count * 0.1;
const prestigeMultiplier = Math.pow(prestigeCombatBase, state.prestige.count);
// Apply equipped weapon's combat bonus
// eslint-disable-next-line capitalized-comments -- v8 ignore