161 lines
9.7 KiB
Markdown
161 lines
9.7 KiB
Markdown
# 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.
|