Files
healer-man/docs/STOCKADE_ENEMY_MECHANICS_2026-10-05.md
T
2026-10-06 22:25:34 -04:00

9.2 KiB

Stockade enemy mechanics and Chronomancer — 2026-10-05

The later stance/blocking continuation supersedes this batch's remaining NPC stance and ordinary auto-block omissions.

The approved batch implements source-backed Chain Lightning jumps, Rend pulses, Enrage and supported shouts, and the existing Chronomancer mana mismatch. Independent workers use GPT-6 Luna with extra-high reasoning. The level cap, loot wiring and readiness policy remain unchanged. Full Stormwind Stockade is the explicit full-source fixture in this report; routine live QA now defaults to Stormwind Stockade: Cellblock Rush (bite-sized-stormwind-stockade). Record its run-selected boss. Future full-campaign wrapper runs require --full-stockade.

Behavior and ownership

enemyChainTargeting.ts selects the explicit Chain Lightning victim followed by up to two nearest visible living targets within 10 m of the previous hit. No recipient repeats. Secondary selection uses spell geometry independently of the caster's home leash; primary aggro eligibility remains unchanged. Ascension uses damage factors 1/0.6/0.36; Epoch uses 1/0.7/0.49. Threat changes during a cast preserve its explicit victim. The first packet retains the established enemy amount policy; this change does not claim that its baseline amount is an exact DBC damage calculation.

enemyPeriodicDamage.ts owns profile-specific Rend 6547/16509 source data. The compiler serializes source identity; combatStore.ts resolves the verified amount and five three-second bleed pulses through actor-local defenses. Application uses the shared hit gate. There is no immediate packet. Ordinary same-caster recasts replace the schedule with a fresh full three-second delay; different casters remain independent. Bleeds bypass armor and have no magic dispel category. Caster damage-done modifiers snapshot at application while target damage-taken modifiers remain dynamic. The 16509 level ratio uses strict pinned creature BaseDamage rows, excluding template attack scaling/AP/swing time; missing required inputs fail closed. Outer enemy damage scaling remains a separate game layer.

enemySourceAuras.ts owns the exact source profiles for Enrage, stances, shouts and blocking. Supported Enrage lasts 120 seconds, boosts physical damage by 30% Ascension / 10% Epoch and speeds melee autos by 30%; the scheduler rescales remaining swing time on gain/removal and leaves ability cooldowns unchanged. Demoralizing Shout affects living visible hostile actors within 10 m; Battle Shout affects the caster and living visible enemy allies within 20 m. Physical damage and flat/percent AP remain distinct. Reviewed percentage modifiers opt into multiplication in combatAuras.ts; other existing modifiers retain their sum. Same-spell nonperiodic source copies cannot stack across casters. Another area caster preserves an existing recipient's aura/timer; self-owned replacement and same-caster refresh remain explicit.

classPassiveResourceModifiers.ts adds structured permanent automatic-passive resource percentages and removes matching parsed duplicates. Aura 132's MiscValue identifies Mana/Rage/Energy/Focus/Runic Power independently from the class primary resource. Chrono Sorcery's +12% Mana gives the expected 414 at level 1. Timed, other-recipient or hit/crit-gated riders remain excluded.

compile-campaign-catalog.mjs pins source signatures before enabling these effects. Regeneration changes 37 spell rows across 34 creature definitions, all restricted to the seven approved spell IDs, and adds three corresponding SmartAI mechanic links. Structural comparison against the working baseline confirms no health pools, placements, unrelated attack rows or other dungeon fields changed. The report is in the ignored task artifact directory.

Source limits

Both client profiles use the established patch-S duration/radius support-table fallback; neither is described as an untouched client-table set. This report records the earlier Chain/Rend/buff pass. The later stance and blocking pass implements the verified forms and ordinary creature block baseline. The weapon utility continuation owns Bloodlust, Disarm, Infected Wound, explicit Dual Wield and queued Thrash. Ascension stance DUMMY behavior, unbound automatic offhand equipment and separate-target triggered shouts still require source support. Unsupported effects remain omitted instead of producing damage.

See the individual Chain, Rend, buff and Chronomancer reports.

Validation

Focused enemy and resource checks plus Ready-five pass. The final production build passes its prebuild, TypeScript, Vite and postbuild checks. Its frozen copy contains 5,964 files with aggregate SHA-256 296f26c1a58d096b925977f8a0f4aebc5a2de20ba4ce804592188a87102f99e0. Loaded-build entry is index-D-xYtSuF.js; enemy combat is combatStore-BmIrp-s1.js. The immutable copy is artifacts/stockade-enemy-mechanics-2026-10-05/frozen-dist-20261005-153220. The 15-file affected selection passes 135 checks; the exact resource and Vindication cases pass two more. Ready-five passes seven Vitest and twenty Python checks: 144 distinct required Vitest checks plus twenty Python checks.

Focused files under src/game/ Checks
enemyChainTargeting.test.ts, stockadeEnemyMechanics.integration.test.ts 8
enemyPeriodicDamage.test.ts, enemyPeriodicDamage.integration.test.ts 23
enemySourceAuras.test.ts, enemySourceAuras.integration.test.ts 10
classPassiveResourceModifiers.test.ts 9
combatAuras.test.ts 10
dungeonCampaignCatalog.test.ts 33
enemyCasting.test.ts 15
enemyDamageTypes.integration.test.ts 3
bossGuide.test.ts 3
romScoutAutoShot.integration.test.ts, romNativeAutoAttack.integration.test.ts, romGroupHealRadius.integration.test.ts 21

The two selected combatStore.test.ts cases are "starts with attribute-derived pools including racial and automatic class passives" and "procs Vindication from a Paladin Holy hit with the generated rank chance, amount, duration, and owner"; the other 109 cases were skipped. No full suite or expanded balance sweep was run. A final standalone 8 GiB TypeScript check also passes after the test-file additions.

Final release hygiene passes for 162 changed paths including untracked files. Game and vault Git diff checks pass and their working trees are reviewed separately. All eleven recorded production/compiler/catalog fingerprints still match the inputs tested in the final frozen build.

The final normal Stockade run 20261005-160913676 verifies all five native boss IDs and the visible full-clear results screen in 21:32.5. The native RoM Priest/Knight player and four active-class NPCs finish alive; the tank has three observed casualty/recovery sequences through the normal resurrection UI, and the player has no observed death. This Easy/Normal diagnostic is not balance certification. Route inputs stop at checkpoint 462/481 when the native results overlay opens; remaining movement is unnecessary after the verified clear.

Hamhock has four unique sampled Chain Lightning cast windows. One raw Nature damage group hits three distinct recipients with amounts 579/347/208, matching the imported Ascension decay after rounding. The event stream includes 359 Rend damage events across both source IDs. Authoritative combat-aura samples show Targorr's 120-second Enrage and Battle Shout applications to hostile allies. Demoralizing Shout has 44 unique sampled cast windows across spells 13730/16244; recipient aura effects remain unconfirmed live and use focused integration proof. The run does not prove every supported profile, refresh/snapshot boundary or aura expiry.

Before/after fingerprints match the final frozen distribution and read-only content manifest. All 2,124 served content objects match their hash addresses. There are no page errors; the only console error is the optional favicon 404. Root visually reviews the equipped-entry, 50%, 75% and final-results captures: bodies, HUD and results render; actor overlap and partial occlusion persist. No visual fix is claimed.

Earlier attempts remain preserved: the first copy was superseded before entry for the leash correction; another had a harness content-source 404; one reached only Targorr before keyboard timing caused checkpoint overshoot; and another lost its route JSON to a harness serializer ReferenceError. The final wrapper corrects those harness issues without changing the frozen game build. Legacy mob.auras snapshots can be empty while the authoritative shared combat-aura telemetry contains source auras; coverage uses the latter as well. The scoped playtest report owns screenshot, event-stream and build-fingerprint evidence. Earlier Stockade captures retain their original build identities.

Unrelated concurrent RoM environment/shadow work is preserved. Final live QA uses an immutable copied build to prevent another task's build from changing the assets being tested. No changes are staged or committed by this task.