boss-scaling.ts

Multi-dimensional level scaling for bosses. Each stat has a per-level growth factor and one of three cap behaviors. Level 1 yields no scaling (multiplier = 1).

Overview

  • Level input is game._currentLevel, 1-based, clamped via Math.max(1, level).
  • Raw growth is dim.perLevel ^ (lvl - 1).
  • Cap behavior reshapes raw growth into the final multiplier.

Cap Types

CapType = 'uncapped' | 'soft_cap' | 'hard_cap'

  • uncapped — returns raw directly. Exponential, no ceiling. Used for HP, damage.
  • soft_cap — asymptotic approach to capValue. Formula: 1 + (capValue - 1) * (1 - exp(-capSteepness * (raw - 1))). Higher capSteepness reaches cap faster. If capValue <= 1, returns 1.
  • hard_capMath.min(raw, capValue). Brick-wall ceiling. Used for projectile speed.

Unknown cap type throws Unknown cap type: <value>.

Types

ScalingDimension

FieldTypeNotes
perLevelnumberMultiplicative growth per level. <1 shrinks (enrage timer).
capValuenumberSoft cap asymptote or hard cap ceiling. Ignored for uncapped.
capSteepnessnumberSoft cap approach rate. Typical 0.15–0.5.
capTypeCapTypeCap behavior selector.

BossScalingConfig

Nine ScalingDimension slots: hp, damage, turretFireRate, moveSpeed, limbSweepSpeed, spawnerFrequency, projectileSpeed, effectRadius, enrageTimer.

ResolvedBossScaling

Nine *Mult: number outputs, one per dimension above.

Functions

computeDimension(dim, level): number

Computes a single dimension’s final multiplier. Branches on capType.

resolveBossScaling(config, level): ResolvedBossScaling

Calls computeDimension for all nine slots. Returns the resolved mult object.

DEFAULT_BOSS_SCALING

DimensionperLevelcapValuecapSteepnesscapType
hp2.000uncapped
damage2.1500uncapped
turretFireRate1.253.00.3soft_cap
moveSpeed1.102.00.25soft_cap
limbSweepSpeed1.152.50.2soft_cap
spawnerFrequency1.203.00.25soft_cap
projectileSpeed1.122.00hard_cap
effectRadius1.102.50.2soft_cap
enrageTimer0.880.250.3soft_cap

Constants

  • BASE_ENRAGE_TIMER_SEC = 120 — base enrage timer in seconds at level 1. Per-boss defs may override.

Behavior Notes

  • HP doubles each level (uncapped 2.0).
  • Damage grows +115%/level (uncapped 2.15) — fastest stat.
  • Projectile speed hard-caps at 2.0x — prevents unreadable shots.
  • Enrage timer uses perLevel < 1 (0.88) shrinking toward 25% of base (30s) via soft cap.

EXTRACT-CANDIDATE

  • Soft cap formula 1 + (capValue - 1) * (1 - exp(-k * (raw - 1))) could move to code/math/soft-cap.md if reused outside boss scaling.
  • CapType enum semantics (uncapped / soft_cap / hard_cap) may generalize to a shared scaling primitives page if other systems adopt the pattern.
  • BASE_ENRAGE_TIMER_SEC is a tuning constant — could move to a central tuning constants page alongside other level-1 baselines.