4.9 KiB
Legacy Boss Pacing Fix — 2026-10-03
Change
The existing 25-second ordinary-boss and 45-second final-boss minimums now hold for the measured legacy cohorts without changing those assertions or reducing encounter timing thresholds.
The Stockades WoW starter health anchors are now 1,800 at enemy level 2 and 2,600 at enemy level 4. Those replace 1,050 and 1,500, respectively. At level 1, the measured Priest plus four Ready companions now clear the ordinary and final bosses in 25.3 and 45.7 seconds. At level 3, they clear in 25.6 and 48.1 seconds.
The compatibility retune documented here uses a separate player-level multiplier only when characterSource === "rom" and statRuleset === "wow": 1.0 through level 7, 1.12 at level 8 through 70, then a linear increase to 2.3 at level 80. This applies to boss health floors only. This compatibility retune did not change trash health, the native RoM health bands, native damage-budget bands, enemy damage, loot, cap 80, actor mode defaults, or Ready policy.
Why the RoM compatibility branch stays separate
The pacing harness calls dungeonEnemyScaling for RoM parties without passing statRuleset, so it intentionally exercises the legacy wow ruleset default for those RoM characters. Generated RoM NPCs still use their native snapshots by default. This is a supported mixed-mode cohort; the harness calls and actor mode defaults remain unchanged.
The compatibility multiplier is gated on that existing legacy statRuleset: "wow" path. At the time of this compatibility retune, native-mode RoM boss health remained exactly 8,330.293333 at player level 8 and 1,312,656 at level 80 for the Stockades regression fixture; nativeDamageBudgetScale remained 1 and 40. A later, independently measured native level-one boss calibration changes the interpolated level-8 value to 7,983.197778 while preserving the level-80 value and both damage-budget values. See the native level-one boss pacing addendum. The compatibility retune did not edit either native table; the later calibration changes only the level-1 boss-health anchor and leaves ROM_NATIVE_DAMAGE_BANDS untouched.
The equipment completion added optional off-hand and bow damage/speed/range values to native NPC snapshots. Those snapshot fields are available to future consumers; they do not make the shared enemy action scheduler emit additional off-hand or bow swings, and they do not automatically increase its shared enemy damage budget. This pacing change does not add extra enemy attacks or claim that the live swing path consumes those channels.
Before and after evidence
The untouched baseline was captured with BOSS_BALANCE_REPORT=1 and NODE_OPTIONS=--max-old-space-size=8192 before retuning. Its 65 samples are archived at artifacts/rom-enemy-followup/before-compatibility-pacing.json. The test suite stopped at the first failing assertion within each affected test, so the baseline has only the first seed for the failures below.
| Cohort and level | Before ordinary / final (health) | After ordinary / final (health) |
|---|---|---|
| WoW Stockades, level 1 | 14.6s / 27.1s (1,050 / 1,995) | 25.3s / 45.7s (1,800 / 3,420) |
| WoW Stockades, level 3 | 15.1s / 28.6s (1,500 / 2,850) | 25.6s / 48.1s (2,600 / 4,940) |
| RoM damage Mage, level 8 | 23.6s / 46.3s (15,619 / 29,677) | 26.8s / 52.9s (17,494 / 33,238) |
| RoM party, level 80 | 11.3s / 23.6s (273,470 / 519,593) | 27.1–28.1s / 53.3–57.1s (628,981 / 1,195,064) |
After retuning, the report contains 83 samples: all three WoW seeds at levels 1, 3, 8, 20, 40, and 80; all five damage-Mage levels; and all 12 standard RoM party seeds at levels 1, 8, 20, 40, and 80. The complete report is archived at artifacts/rom-enemy-followup/after-compatibility-pacing.json.
Across the post-change samples, ordinary/final clear-time ranges were:
| Cohort | Level | Ordinary boss | Final boss |
|---|---|---|---|
| WoW party | 1 | 25.3s | 45.7s |
| WoW party | 3 | 25.6s | 48.1s |
| WoW party | 8 | 33.1s | 61.0s |
| WoW party | 20 | 48.1–49.0s | 93.8–97.0s |
| WoW party | 40 | 40.8–45.4s | 78.4–81.3s |
| WoW party | 80 | 95.3–100.1s | 191.7–193.7s |
| RoM damage Mage | 1 | 42.1s | 109.3s |
| RoM damage Mage | 8 | 26.8s | 52.9s |
| RoM damage Mage | 20 | 30.1s | 62.6s |
| RoM damage Mage | 40 | 35.1s | 69.1s |
| RoM damage Mage | 80 | 27.1s | 57.1s |
| RoM party | 1 | 81.1–92.5s | 191.2–199.4s |
| RoM party | 8 | 41.2–42.6s | 103.7–106.9s |
| RoM party | 20 | 36.6–40.3s | 73.6–75.1s |
| RoM party | 40 | 38.1–42.1s | 78.1–79.6s |
| RoM party | 80 | 27.1–28.1s | 53.3–57.1s |
The full dungeonBossScaling.test.ts suite passed all 18 tests. The additional focused regressions passed all 6 tests across romNativeDungeonPacing.test.ts and biteSizedBossBalance.test.ts. The real-mechanics Priest test also passed its boss-attack, incoming-damage, healing, and survival assertions; its helper does not add that run to the timing report.