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

7.3 KiB
Raw Permalink Blame History

Enemy stances and NPC blocking — 2026-10-05

The approved continuation implements NPC Defensive/Battle Stance and Improved Blocking for ordinary source-backed WoW creatures. Separate GPT-6 Luna workers with extra-high reasoning supplied source helpers, integration tests and live QA. The level cap remains 80; loot and readiness promotion are outside scope.

enemyStances.ts binds NPC forms 18/17 to core-owned passives 7376/21156 using the selected Ascension/Epoch client. The shared source aura is the only owner of its stance modifiers. Defensive lasts 180 seconds and multiplies all-school damage taken by 0.9 and dealt by 0.95. Battle is permanent until replacement or removal. The exclusive group prevents both forms remaining active. Reset, evade and expiry remove the owned modifiers. Ascension Battle has zero numeric child effects but retains its form identity. Epoch threat modifiers are stored without altering the incoming party threat table; this runtime has no hostile NPC outgoing-threat consumer. Ascension Defensive's DUMMY +42 remains unsupported because no source handler was established.

enemyBlocking.ts provides an ordinary Creature baseline of 5% plus block aura percentage points, and block value floor(level / 2). Historical Creature Strength stays zero; the loaded class-level Strength column is not assigned to ordinary creatures. This baseline has no equipment/shield requirement. The shared player/companion damage resolver applies the level-based skill adjustment once, real target facing, active cast/control and evade gates, and the pinned template flags_extra NO_BLOCK bit. Improved Blocking adds 75 percentage points for six seconds. Its effect expires exactly at the aura boundary. Native RoM attackers use the same ordinary WoW target defense path; native RoM defenders and character/summoned defenders retain their own models.

This initial stance pass enables the sourced auto-attack block baseline. The subsequent spell continuation imports per-rank defense attributes and enables direct physical spell mitigation for player and party casts, including crit-plus-block. Periodic and non-direct full-hit spell blocks remain excluded. Missing source flags, levels outside 1–80 or missing spatial evidence disable this block baseline. Runtime Totems/Guardians are outside ordinary-creature scope; template type is not a safe Totem identifier. Ignore-hit-direction auras are not newly imported by this batch. The source CONTROLLED set is stun/fear/confuse. The runtime additionally treats sleep/blind/knockdown/freeze as unable to defend, matching its incapacitation model; this is a simulator approximation. A plain root still permits blocking.

The world importer now preserves flags_extra without changing any other reference fields: all 1,671 selected templates have an exact mask. None of the selected masks sets NO_BLOCK; that gate is verified through the importer fixture and pure helper, rather than claimed as a live Stockade case. The campaign compiler validates form and profile-specific child signatures, including raw duration indices, attributes, equipped-item masks, targets, school masks, triggers and effect amounts before enabling the three reviewed parent spells. Both source profiles must be present; fallback cannot substitute one for the other. Generated JSON and compressed TypeScript are refreshed together.

Reviewed SmartAI self auras preserve one-shot flags and combat timing. Stockade Inmates apply Battle Stance after one idle second, before the pull; it is excluded from in-combat selection. Kam Deepfury applies Defensive once and repeats Improved Blocking on its source schedule. Reset re-arms the idle schedule. Non-boss SmartAI expansion is restricted to these three self auras. Catalog comparison against the preserved working baseline changes 14 entities in seven dungeons, with unrelated attacks, health and placements unchanged.

Focused checks, production build and live evidence are recorded below. Source details: stances, blocking. Live report: full Stockade.

Validation

  • All 102 checks across the twelve affected Vitest files pass, including actual imported aura casts, idle preparation, player/companion block results, exact-boundary expiry, geometry, unsupported packets and source exclusions.
  • Ready-five passes seven Vitest and twenty Python checks. The world importer tests pass seven cases; compiler regeneration passes both strict profiles.
  • Independent Luna review confirms formulas, source boundaries, skill applied once, stance pins and idle timing. Its control-label precision finding is recorded as the explicit simulator approximation above.
  • Production build passes with its content/asset prechecks, 8GB TypeScript/Vite and compression/release-bundle hooks. An incorrect test type import and a separate concurrent test's ClassId annotation were corrected before the final passing build; no runtime behavior changed in those corrections.
  • Pre-live release check passes (211 changed paths including unrelated work). One unrelated file's mixed CRLF/LF was normalized to LF for required hygiene. Final release check passes 240 changed paths, including concurrent unrelated work; the count is not a claim that every path belongs to this continuation.
  • Frozen full Stockade live validation passes on 5,964 files / 116,405,610 bytes, aggregate SHA-256 1fcd021af0ef90c8d994cf1ab853ef0e62f4d4767fa3acaab698b14121194310. Mutable dist stayed unchanged during the verified copy; the frozen aggregate stayed identical before and after live QA.
  • Run 20261005-184333429 enters the normal full dungeon as a level-30 Discipline Priest with four Ready companions. The native results screen confirms all five exact boss IDs, Easy/Normal, at 24:25.4. No observed player or party deaths or resurrection recoveries occurred; all finish alive. Natural progression ends at player level 40 / companions 39, within cap 80.
  • Live state contains Defensive/Battle and Improved Blocking auras, plus eight party attacks blocked by hostile NPCs and 141 hostile attacks blocked by the party. Blocked amounts are retained only for the 33 samples matching the latest damage event's outcome/raw amount; this is sampled correlation, not a stronger actor-and-event-linked packet assertion. Remaining outcomes keep their amount unknown. Deterministic tests supply unobserved boundaries and melee/player/native-RoM attacker cases. Reconstruction keys aura applications by instance ID plus application time: one Defensive, 34 Battle and one preserved Improved Blocking application. Additional short Improved Blocking applications remain unverified by live sampling. The corrected wrapper and prepare-only syntax checks pass.
  • Root reviewed the 25/50/75-percent scene captures and native full-clear image. Bodies and weapon/shield silhouettes render; existing overlap/edge occlusion remains. There are zero page errors and one missing-favicon console 404. All 2,124 fetched hash-addressed content objects verify. The overall content manifest changed during the run, so whole-content immutability is not claimed. The live report records source-provenance and sampling limits, along with the preserved superseded first attempt. The run-owned runner/browser have exited and temporary harnesses are removed.