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

161 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Stormwind Stockade enemy-mechanics playtest — 2026-10-05
**Outcome: verified full Stockade clear with live Chain Lightning, Rend, hostile
buff, and Demoralizing Shout cast evidence.** The successful run used the
normal dungeon UI and ordinary movement, targeting, attacks, party commands,
and healing. It was a focused browser playtest, not a balance certification.
## Final run and immutable build
The successful run is preserved under
[`playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/`](../playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/).
It ran from `2026-10-05T16:09:15.713Z` to `2026-10-05T16:31:15.761Z` and
completed with child exit code 0. The profile was created through the normal
offline character UI as a Priest, then prepared in the isolated profile as a
native-stat level-30 Priest/Knight before entering Stockade through the normal
picker and healer-role flow. Four
NPC companions filled the party. No enemy, damage, health, aura, cast, or combat
store state was seeded; there was no teleport, collision bypass, boss-test
entry, loot interaction, or readiness promotion.
The frozen distribution was
`artifacts/stockade-enemy-mechanics-2026-10-05/frozen-dist-20261005-153220`
with aggregate SHA-256
`296f26c1a58d096b925977f8a0f4aebc5a2de20ba4ce804592188a87102f99e0` over
5,964 files. The before and after manifests match that exact fingerprint. The
read-only `content/` source manifest also stayed unchanged at SHA-256
`d3d553aa7443bf444c87b0c0e923357df02756d0822db2e1a0a908d3f257fdb8`; all
2,124 distinct requested hash-addressed objects returned HTTP 200 and their
local bytes matched their object-address hashes. See
[`run-record.json`](../playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/run-record.json),
[`content-source-evidence.json`](../playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/content-source-evidence.json),
and the before/after manifests in the same run folder.
The game loaded these production modules:
`index-D-xYtSuF.js`, `combatStore-BmIrp-s1.js`, `GameRuntime-DJd285mw.js`,
`dungeonSession-Bzyqicra.js`, `PartyFrames-DU0sDQaZ.js`,
`romAbilityCatalog-CBkQytej.js`, and `dungeonWorldInteraction-4rtL_sSb.js`.
The native result UI reported **FULL DUNGEON CLEAR**, `21:32.5` to final boss,
and 5/5 defeated: Targorr the Dread (`creature-84027`), Kam Deepfury
(`creature-79088`), Hamhock (`creature-79098`), Bazil Thredd (`creature-79124`),
and Dextren Ward (`creature-79116`). The player finished at level 40 with all
four level-39 NPCs alive. This was not a no-casualty run: Rorik had three
casualty/recovery observations and the party issued three ordinary “Rez dead
members” actions. The player death count was zero. The native result text and
boss IDs are recorded in `run-record.json` and the campaign `results.json`.
## Enemy mechanics observed
The preserved read-only evidence contains 41,116 mob samples, 5,622 raw combat
events, 761 source-attributed enemy damage events, and 175 combat-aura samples.
The full raw evidence is in
[`enemy-mechanics-evidence.json`](../playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/enemy-mechanics-evidence.json).
**Hamhock Chain Lightning, spell 421.** Four unique active-cast windows were
captured on Hamhock, source `creature-79098`, each interruptible and 1,500 ms
long. There are five cast samples because the first window was sampled twice.
The event stream attributes ten damage events to Hamhock’s
`smart-1717-0-chain-lightning` attack ID:
| Target | Hits | Raw damage | Effective damage | Event times (ms) |
| --- | ---: | ---: | ---: | --- |
| Mage `party-damage-3-rom-mage` | 1 | 579 | 512 | 1791217137627 |
| Scout `party-damage-2-rom-scout` | 1 | 347 | 347 | 1791217137627 |
| Player `__player__` | 1 | 208 | 208 | 1791217137627 |
| Tank `party-tank-0-rom-knight` | 3 | 1,737 | 1,348 | 1791217143836–1791217170624 |
| Rogue `party-damage-1-rom-rogue` | 3 | 1,041 | 1,041 | 1791217143836–1791217170624 |
| Mage summon `party-damage-3-rom-mage:summon-4` | 1 | 208 | 208 | 1791217143836 |
Cast windows (`startedAt`–`completesAt`, ms): `1791217136023–1791217137523`,
`1791217142234–1791217143734`, `1791217152437–1791217153937`, and
`1791217169029–1791217170529`.
**Rend, spells 6547 and 16509.** The raw stream contains 359 source-attributed
enemy damage events. Spell 6547 produced 153 pulses, 2,172 raw / 2,060
effective damage, with individual raw hits of 14–16 from Defias Inmates. Spell
16509 produced 206 pulses, 8,823 raw / 8,331 effective damage, with individual
raw hits of 38–52 from Defias Prisoners, Captives, and Convicts. Spell 6547
events targeted the tank (112), mage (24), scout (12), and rogue (5). Spell
16509 events targeted the tank (196), mage (5), and scout (5). No Rend active
cast state was sampled; the live raw damage events establish the pulses without
depending on cast-state sampling.
**Enemy-source buffs.** The legacy `mob.auras` projection was empty, but the
separate combat-aura stream records eight unique applications whose source and
target are both sampled enemies. The initial run summary incorrectly equated
the empty legacy projection with no enemy buffs; the evidence summary and
status note have been corrected without changing the raw route file.
| Aura instance / spell | Source → target | Applied (ms) |
| --- | --- | ---: |
| `creature-84027:enemy-source-spell-8599:creature-84027` — Enrage | Targorr `creature-84027` → Targorr | 1791216791350 |
| `creature-79040:enemy-source-spell-9128:creature-79040` — Battle Shout | Insurgent `creature-79040` → self | 1791217027326 |
| `creature-79045:enemy-source-spell-9128:creature-79040` — Battle Shout | Insurgent `creature-79040` → Captive `creature-79045` | 1791217027326 |
| `creature-79070:enemy-source-spell-9128:creature-79049` — Battle Shout | Insurgent `creature-79049` → Convict `creature-79070` | 1791216941320 |
| `creature-79074:enemy-source-spell-9128:creature-79049` — Battle Shout | Insurgent `creature-79049` → Convict `creature-79074` | 1791216950039 |
| `creature-79097:enemy-source-spell-9128:creature-79085` — Battle Shout | Insurgent `creature-79085` → Inmate `creature-79097` | 1791216972232 |
| `creature-79100:enemy-source-spell-9128:creature-79085` — Battle Shout | Insurgent `creature-79085` → Inmate `creature-79100` | 1791216963628 |
| `creature-79101:enemy-source-spell-9128:creature-79101` — Battle Shout | Insurgent `creature-79101` → self | 1791217182924 |
**Demoralizing Shout (“Demo”).** Live active-cast telemetry captured 44 unique
cast windows: 20 for spell 13730 from six Defias Insurgent actor IDs, and 24
for spell 16244 from nine Defias Convict actor IDs. The sampled casts were
interruptible. This harness captured combat aura instances only when the
target was an enemy, so it does not independently establish the party-side
Demoralizing Shout effect. The cast state itself was observed live.
## Visual and runtime review
Screenshots are in
[`campaign/final-build-20261005-160915922/`](../playtest-artifacts/stockade-enemy-mechanics/20261005-160913676/campaign/final-build-20261005-160915922/).
The entry, equipped-player/native-party, route 25/50/75%, and boss-arrival
screens show loaded native characters, full party frames, buffs, ability HUD,
and the changing level HUD. Root also reviewed the 50% and 75% captures. Scene
and HUD rendering appeared normal, while bodies and name labels overlapped or
were partly occluded; this playtest did not attempt a visual fix. The
`stormwind-stockade-boss-arrival.png` filename is historical: its pixels show
the native “Stormwind Stockade complete” results overlay, `21:32.5`, all five
named bosses defeated, and the level-40 player/four level-39 NPC party. The
same result text is recorded in `results.json`.
There were no page errors. The only console error was a local `/favicon.ico`
404. Three Rorik recoveries were recorded as described above. The ordinary
native UI accepted the configured party and completed the full route.
## Preserved failed and superseded attempts
These attempts remain intact and are not counted as the final result:
1. `20261005-152510407` used the earlier authorized frozen copy, which was
superseded after the owner found a Chain leash-edge bug. The owner stopped it
during roster/picker setup before dungeon entry.
2. `20261005-153314575` used the replacement hash but had an isolated content
source setup error: `/content/manifest.json` returned 404, and role selection
timed out before entry. The owner clarified that `contentDir` is read-only
catalog/object input. The corrected run used the project content directory
with the disposable profile/data directory kept separate.
3. `20261005-154226103` reached checkpoint 88 after defeating only Targorr
(1/5 bosses). Ordinary movement inputs overshot and reversed around the
checkpoint tolerance; the route stopped there. The attempt is preserved as
incomplete, not a full clear.
4. `20261005-155657325` reached the dungeon route but failed while serializing
evidence because the wrapper referenced `contentSourceResponses` outside
its scope. Its `failure.json` retains the error and browser diagnostics; no
campaign route JSON was written, so its endpoint and boss count are
inconclusive.
The final successful retry used adaptive short movement inputs near route
checkpoints while retaining the authored checkpoint sequence and tolerance.
No further run or source/build change was needed.
## Harness checks
The scoped wrapper is
[`scripts/playtest-stockade-enemy-mechanics.cjs`](../scripts/playtest-stockade-enemy-mechanics.cjs).
`node --check scripts/playtest-stockade-enemy-mechanics.cjs` passed, and
`node scripts/playtest-stockade-enemy-mechanics.cjs --prepare-only` validated
the source and transformed harness syntax without launching a server or
browser. No full suite or build was run by this playtest agent.