generated from nhcarrigan/template
balance: smooth prestige income cliff, quadratic milestones, exponential combat scaling (#170, #171)
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:
@@ -84,6 +84,12 @@ const checkAchievements = (state: GameState): Array<Achievement> => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
export const PRESTIGE_COMBAT_BASE = 4;
|
||||
|
||||
/**
|
||||
* Maximum value any resource can accumulate to. Beyond this JS floats lose all useful precision.
|
||||
*/
|
||||
@@ -296,8 +302,7 @@ export const computeEffectiveAdventurerStats = (
|
||||
|
||||
const runestonesIncome = state.prestige.runestonesIncomeMultiplier ?? 1;
|
||||
const runestonesEssence = state.prestige.runestonesEssenceMultiplier ?? 1;
|
||||
// eslint-disable-next-line stylistic/no-mixed-operators -- prestige count * factor is clear
|
||||
const prestigeCombatMultiplier = 1 + state.prestige.count * 0.1;
|
||||
const prestigeCombatMultiplier = Math.pow(PRESTIGE_COMBAT_BASE, state.prestige.count);
|
||||
const echoIncome = state.transcendence?.echoIncomeMultiplier ?? 1;
|
||||
const echoCombatMultiplier = state.transcendence?.echoCombatMultiplier ?? 1;
|
||||
const craftedGoldMultiplier
|
||||
@@ -378,8 +383,7 @@ export const computePartyCombatPower = (state: GameState): number => {
|
||||
}
|
||||
}
|
||||
|
||||
// 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(PRESTIGE_COMBAT_BASE, state.prestige.count);
|
||||
|
||||
const equipmentCombatMultiplier = state.equipment.
|
||||
filter((item) => {
|
||||
|
||||
Reference in New Issue
Block a user