forked from phenom/healer-man
155 lines
9.2 KiB
Markdown
155 lines
9.2 KiB
Markdown
# Stockade enemy mechanics and Chronomancer — 2026-10-05
|
|
|
|
The later [stance/blocking continuation](ENEMY_STANCES_BLOCKING_2026-10-05.md)
|
|
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](ENEMY_STANCES_BLOCKING_2026-10-05.md) implements the
|
|
verified forms and ordinary creature block baseline. The
|
|
[weapon utility continuation](ENEMY_WEAPON_UTILITIES_2026-10-05.md) 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](STOCKADE_CHAIN_LIGHTNING_2026-10-05.md),
|
|
[Rend](STOCKADE_REND_2026-10-05.md), [buff](STOCKADE_ENEMY_BUFFS_2026-10-05.md)
|
|
and [Chronomancer](CHRONOMANCER_RESOURCE_BASELINE_2026-10-05.md) 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](STOCKADE_ENEMY_MECHANICS_PLAYTEST_2026-10-05.md)
|
|
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.
|