155 lines
9.4 KiB
Markdown
155 lines
9.4 KiB
Markdown
# Enemy weapon utilities — 2026-10-05
|
||
|
||
## Scope
|
||
|
||
This continuation implements the authorized Bloodlust, Disarm/Infected Wound
|
||
and Dual Wield/Thrash groups. Separate GPT-6 Luna extra-high subprocesses own
|
||
their source helpers and tests; shared runtime and catalog integration preserve
|
||
the existing level-80 cap, loot scope and Ready-five certification.
|
||
Routine browser proof uses Stormwind Stockade: Cellblock Rush and records the
|
||
actual seeded boss. Full Stockade campaigns remain separately selected.
|
||
|
||
## Source contracts
|
||
|
||
| Mechanic | Verified behavior |
|
||
| --- | --- |
|
||
| Bloodlust 6742 | One selected friendly creature, 30 seconds, +30% melee haste, Magic dispel. No party-wide aura radius. Separate source haste factors multiply: Bloodlust and Enrage give interval factor 100/169. |
|
||
| Disarm 6713, Ascension | Five seconds; main-hand and ranged channels. Offhand and casting remain available subject to exact equipped-item requirements. |
|
||
| Disarm 6713, Epoch | Five seconds; main-hand channel only. |
|
||
| Infected Wound 17230 | Five minutes; Disease dispel; +6 flat physical damage taken before armor, block and absorbs. Its own Nature school does not determine the damage modifier's school. |
|
||
| Dual Wield 674/29651 | Non-damaging persistent creature capability. Explicit enabled mode uses the source creature baseline for an independent offhand, with the core's 0.5 damage factor. |
|
||
| Thrash 3391 | Two queued main-hand extra swings on the next unit update, separate ordinary hit/mitigation results. The spell itself is not a direct-damage packet. |
|
||
|
||
The pinned Ascension and Epoch rows, shared support tables, core consumers and
|
||
source limitations are in the subprocess audits:
|
||
|
||
- [Bloodlust](ENEMY_BLOODLUST_2026-10-05.md)
|
||
- [Disarm and Infected Wound](ENEMY_WEAPON_DEBUFFS_2026-10-05.md)
|
||
- [Dual Wield and Thrash](ENEMY_EXTRA_ATTACKS_2026-10-05.md)
|
||
|
||
Hamhock's raw SmartAI has a five-second, one-time self Bloodlust event with
|
||
`SMARTCAST_AURA_NOT_PRESENT`, plus an independent event-16 missing-buff check
|
||
within 30 yards and ten-second repeat. The latter selects one engaged living
|
||
friendly creature. Targorr's raw Dual Wield event is in combat; Bazil's is out
|
||
of combat, despite conflicting SQL comments. Numeric event IDs are authoritative.
|
||
Targorr's template lists Thrash but this source set does not supply a SmartAI
|
||
Thrash cast schedule. Any retained generic template cadence is simulator policy,
|
||
not a recovered source schedule.
|
||
|
||
## Integration
|
||
|
||
The compiler emits source-bound utility effects instead of false direct hits.
|
||
It retains both sourced Hamhock Bloodlust rules while suppressing the duplicate
|
||
template fallback. Ordinary source auras use the shared authoritative aura
|
||
array. Disarm state uses explicit channel tags; it does not become a blanket
|
||
crowd-control state or remove equipped items. Weapon damage masking is temporary;
|
||
non-weapon item stats and persisted equipment remain intact.
|
||
|
||
The WotLK ability importer had exported equipment metadata from fields 67/68.
|
||
Independent raw Spell.dbc probes establish fields 68/69/70 for item class,
|
||
subclass mask and inventory mask. The scoped refresh must preserve all other
|
||
rank fields, including costs, effects, progression and spell-defense metadata.
|
||
Classic Ascension equipment metadata requires the same field correction.
|
||
|
||
The metadata-only CoA refresh compares parsed current input/output before its
|
||
write, allowing only the three equipment fields and synchronization timestamp.
|
||
No persistent pre-refresh snapshot was retained; the former dirty working tree
|
||
cannot now be independently reconstructed from HEAD. The final formatting-only
|
||
rewrite was separately checked for parsed equality.
|
||
|
||
Timed direct Bloodlust, Disarm and Infected Wound auras on another actor survive
|
||
caster death/removal or return-home cleanup. Removing the recipient and resetting
|
||
the encounter still clears them. Existing cleanup for other aura families stays
|
||
outside this change. Disarm target eligibility uses currently usable resolved
|
||
weapons, so an unavailable weapon cannot refresh the debuff.
|
||
|
||
WoW-ruleset unarmed main-hand autos retain the core's 1–2 base, two-second delay,
|
||
AP and other item stats. This includes RoM characters using WoW compatibility.
|
||
Native RoM unarmed amounts, complete weapon-dependent aura removal and permitted
|
||
generic weapon formulas remain source/runtime limits. Explicit source utility
|
||
support does not supply missing automatic/flag-driven virtual equipment.
|
||
|
||
The existing enemy-team simulation does not model core faction hostility,
|
||
map phase or object-size-expanded range. Selected friendly recipients therefore
|
||
use the represented enemy team, engaged/living state, point distance and LOS.
|
||
This is an explicit simulator boundary rather than an exact faction search.
|
||
|
||
## Validation
|
||
|
||
Completed focused checks cover 360 distinct Vitest cases, five Node cases and
|
||
twenty Python cases. Repeated regression runs do not inflate these totals.
|
||
|
||
| Scope | Result |
|
||
| --- | --- |
|
||
| Shared aura/source contracts, imported aura execution and Bloodlust (six files) | 32 Vitest |
|
||
| Selected source/Stockade campaign assertions | 11 Vitest; 22 unrelated cases skipped |
|
||
| Avatar and equipment rendering invariants | 56 Vitest |
|
||
| Shared combat results, stance/block/spell metadata and native exclusions (eight files) | 57 Vitest |
|
||
| Actual imported Disarm application, unusable reapplication and expiry | 2 Vitest |
|
||
| Dual Wield/Thrash helpers and imported runtime | 14 Vitest |
|
||
| Disarm contracts/runtime/player-party execution plus affected party/combat files | 171 Vitest |
|
||
| Actual imported Wound, physical packet kinds, mitigation, Cure Disease and caster removal | 10 Vitest |
|
||
| Ready-five | 7 Vitest + 20 Python |
|
||
| Equipment-column parser and pinned utility drift | 5 Node |
|
||
|
||
The standard 8GB TypeScript compilation passes. A default-output build reached
|
||
Vite but hit Windows `EPERM` clearing the shared `dist/assets` folder. The same
|
||
8GB TypeScript/Vite pipeline succeeds with the isolated output
|
||
`artifacts/enemy-weapon-utilities-2026-10-05/production-dist`; standard prebuild
|
||
asset audits, precompression and release-bundle verification pass. The shared
|
||
build already had a restored index when checked and was preserved.
|
||
Earlier test-fixture seed/timestamp type errors were corrected before this build.
|
||
|
||
The validated output is copied and checked before/after freezing. Its 5,964-file
|
||
aggregate SHA-256 is
|
||
`58dfe50765b0635caeae50bd3eca2fd079cd69cce0e571ff6cb2dd5aeec77b39`.
|
||
Entry is `index-nDB7zewy.js`; combat is `combatStore-NW7YcPHP.js`.
|
||
Frozen build/content live under
|
||
`artifacts/enemy-weapon-utilities-2026-10-05/frozen-20261006-011726964/`.
|
||
Content version is `content-62324661bc5f7a0e`, manifest SHA-256
|
||
`36614a23f3b98b4289bc3726c8a9bdb075445ada50dfce6504ade4e36325be1f`.
|
||
All 27,571 referenced objects (6,489,458,993 bytes; 21,597 logical files) were
|
||
copied and independently verified against their manifest hashes.
|
||
|
||
The final Luna review found missing attribute pins for 674/29651/3391. The
|
||
compiler now rejects profile-specific attribute drift and Thrash die-roll drift;
|
||
its three tests pass. Regeneration validates both clients and leaves campaign
|
||
JSON and compressed TypeScript byte-identical. Source spell availability does
|
||
not establish missing Thrash timing.
|
||
|
||
Frozen Cellblock Rush run `20261006-012123000` selects Hamhock
|
||
(`entry-1717`, `creature-79098`) and verifies its native 1/1 clear in 3:14.6.
|
||
The level-30 Discipline player and four Ready companions enter normally; there
|
||
are no observed player or party deaths. The build and content manifest remain
|
||
unchanged, and all 2,124 served manifest-referenced objects were independently
|
||
rehashed by root. The roster, dungeon equipment silhouettes and results capture
|
||
were visually inspected. There are no page exceptions; the console records one
|
||
`favicon.ico` 404.
|
||
|
||
This first run's checkpoint projection omits the new weapon fields even though
|
||
the live-state reader captures them. All-null summarized weapon state therefore
|
||
establishes a harness gap, not an absent game mechanic. The recorder now retains
|
||
those fields through the checkpoint reducer and captures the three direct
|
||
utility aura IDs globally, including player and party recipients.
|
||
|
||
Corrected run `20261006-013934624` uses the same frozen inputs and selects
|
||
Bazil Thredd (`entry-1716`, `creature-79124`). It verifies the native 1/1 clear
|
||
in 3:20.7 without player or party deaths. All 328 mob snapshots retain weapon
|
||
fields; 35 show Bazil's Dual Wield capability enabled. All captured offhand
|
||
timers are zero, no hand-specific swing is captured, and no nonempty extra
|
||
queue is observed. Capability evidence does not establish an offhand hit.
|
||
The global aura store supplies 26 snapshots of the tank's single Wound instance,
|
||
with four distinct source/application-time tuples. Each is one stack, Disease,
|
||
and exactly 300,000 ms; these are four observed applications/refreshes, not
|
||
26 applications. Bloodlust and Disarm auras remain unobserved in this retest.
|
||
Deterministic imported-runtime tests cover those mechanics and queued Thrash.
|
||
|
||
Root independently verifies unchanged build/content inputs, all 2,124 served
|
||
objects and the actual entry/combat/runtime chunks again, and inspects the
|
||
new roster, dungeon and native results captures. No page exceptions; one
|
||
favicon 404. Both runs' `root-evidence-audit.json` files retain the audit scope.
|
||
Final release hygiene passes, including untracked files; game and vault
|
||
changes are reviewed separately. No full-source campaign or readiness promotion
|
||
is inferred from these two ordinary one-boss routes.
|
||
See [the scoped live report](STOCKADE_WEAPON_UTILITIES_PLAYTEST_2026-10-05.md).
|