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.