Files
healer-man/docs/ROM_FIVE_MECHANIC_GAPS_2026-10-04.md
T
2026-10-04 22:51:21 -04:00

9.0 KiB

Native RoM five mechanics gap audit — 2026-10-04

Scope and finding

This targeted audit covers the five active native identities in src/game/romFiveIdentities.ts: Knight/Scout Rorik, Priest/Knight Serenna, Rogue/Warrior Veyra, Scout/Rogue Caelan, and Mage/Warlock Durnik. It checks the current source inputs and translated effects that reach player and owned-NPC casts, including pair skills actually learnable in each selected build. RoM remains Needs Testing; this is not a readiness or balance promotion.

The native stat and combat-input route already contains the active-five source channels audited in the recent native passes, including HolyHeal and supported DotMagic healing, player/owned-NPC source bindings, training weapons, Throw, ShieldDef, native target resolution, and target-count falloff. This review found one concrete pair-effect mismatch: the Knight/Scout Blood Punishment rider still used RuneWaker's old 50% healing-received child and omitted current CoA's Light damage bonus. It now modifies the caster's existing Blood Arrow aura with current CoA's 15% healing-received and 5% Light/Holy damage benefits. No separate passive timer is created.

The owned-party direct-damage adapter also had two gaps that hid this rider in NPC play: it inferred native RoM damage school from presentation text, and its deterministic no-roll direct path did not resolve generic caster damage auras. The party path now uses abilityDamageSchool for Runewaker spells and prefers an explicit direct effect school when the translated source component supplies one; the ability-level school remains the fallback. This preserves source-described mixed packets without inferring from presentation text, while WoW school selection is unchanged. Active actor-owned damage modifiers are also applied to no-roll Runewaker direct hits. The dedicated Holy Blessing modifier is excluded from that generic pass because Priest already resolves it through its source-specific path. Native statRuleset: "rom" hits continue through the existing combat-roll resolver.

Blood Punishment source and identity

The generated RuneWaker catalog identifies 499923 as the learnable level-70 Knight/Scout passive Blood Punishment, with raw prerequisite ID 490420 (Joint Blow, not Blood Arrow); the source general active is Scout Blood Arrow 490434. Current CoA publishes the Knight/Scout class variant as 499924. The local learnmagic.db, magiccollectobject.db, and magicobject.db SHA-256 values match the generated catalog's recorded hashes. Local component 623167 links its one-second onTimeMagicId to 499910 for 30 seconds. Resource/luascript/02708.lua's lua_bico_kni_sco_es_70_blood checks owner buff 500871 and cancels 623167 when that Blood Arrow marker is absent; this is the old child-timer behavior.

The current CoA Knight/Scout skill list still identifies Blood Punishment as Knight/Scout 499923, the Knight/Scout variant of Blood Arrow as 499924, and says Blood Arrow increases received healing by 15% and Light damage by 5% while active. The 10.2.1 patch history records the 15% healing-received reduction for Knight/Scout Blood Punishment. The passive identity and pairing match the local row, so the current CoA rider replaces the stale local 50%/30-second child. The current page's level-105 examples do not change Healer Man's level-80 cap.

The runtime attaches both modifiers directly to the existing caster aura tagged rom-self-health-drain for source skill 490434. That keeps the rider actor-local and ties its lifetime to the active Blood Arrow aura already modeled by the simulator. The simulator still models the local Blood Arrow 30-second lifetime and 3%-of-maximum-HP periodic cost; this change does not claim full CoA toggle, deactivation cooldown, or per-ranged-skill HP/MP cost parity. The local 623167/499910 timer is intentionally not layered onto the current CoA rider.

Blood Arrow base-contract work at the time of this pass

Identity correction from the subsequent continuation: CoA list 1-2 is Warrior/Scout, and its Blood Arrow 499998 must not be treated as the Scout general skill. Scout/Rogue list 2-3 identifies 490434; Knight/Scout list 6-2 identifies its variant 499924. The local prerequisite 490420 is Joint Blow. See docs/ROM_BLOOD_ARROW_TOGGLE_2026-10-04.md for the subsequent pair-aware toggle/cost work and its current limits. The paragraph below records the earlier pending base-contract state.

This is source-confirmed but intentionally not implemented by the passive-rider fix. The current CoA Warrior/Scout skill page documents Blood Arrow as a toggle that can be deactivated from its buff, with a ten-second cooldown on deactivation and an HP cost on physical attacks. The 10.7.0 patch notes also describe Blood Arrow's per-tick Mana cost. Healer Man's local 490434 instead remains a 30-second aura with a 3%-maximum-HP periodic drain and has no player toggle, deactivation cooldown, or per-offensive-attack HP/Mana charge. The Warrior/Scout page's Blood Arrow row is 499998, while the Knight/Scout page identifies the passive's active as 499924; this audit does not assume those rows have an identical current cost contract. Keep these base-skill differences open and do not describe the pair as fully CoA-parity complete.

Other active identities

Identity Audit result
Priest/Knight The selected pair rows and Devotion Halo are covered by the pair catalog/runtime checks, and the native healing bindings cover supported direct and periodic HolyHeal for player and owned-NPC casts. The source-only Holy Chains child has no measurable player-facing payload; no runtime value is inferred. No comparable source-confirmed player/NPC effect mismatch was found.
Rogue/Warrior The selected pair effects are covered by the pair tests, including Throwing Mastery, Whirlwind Mastery, Poison Spray, Toxic Splash, and Poison Battle Technique. One-Hand Axe Mastery is inapplicable to the canonical dual-dagger loadout. The source does not supply usable values for remaining Reclaim Energy/Toxic Splash chance clauses, so they remain source-blocked instead of guessed. No comparable confirmed mismatch was established.
Scout/Rogue The pair and Poison Powder routes are covered by helper/runtime tests. docs/ROM_SCOUT_REMAINING_PASSIVES_AUDIT.md keeps Exploiting Shot's unspecified stack cap and Deadly Counterattack's missing critical amount/buff duration separate from existing hybrid estimates. These are unresolved source values, not confirmed values that this pass could implement.
Mage/Warlock The ten exact pair skills and source-selected cast/proc branches are covered by pair tests. The Flame Follower identity conflict concerns Mage/Warden, outside Durnik's pairing; it is not mapped by ID alone. No comparable source-confirmed player/owned-NPC mismatch was found for this selected pair.
Knight/Scout Current CoA Blood Punishment was the concrete confirmed mismatch fixed here. Its stale local child timer is not layered onto the current aura rider. The separate base Blood Arrow toggle/cost contract above remains open.

The old Knight/Scout Lua callback is source-confirmed, but current CoA reuses the exact passive identity and publishes replacement benefits. The replacement is attached to the real caster aura, so cancellation and natural expiry remove it with Blood Arrow rather than waiting for a one-second child-timer poll. Unquantified or absent source behaviors remain open rather than receiving guessed values.

Ownership and verification

  • src/game/romKnightScoutBloodPunishment.ts owns the exact caster-aura attachment rule.
  • src/game/romPriestKnightOverrides.ts owns the learned Knight/Scout passive marker and routes Blood Arrow activation through the helper.
  • src/game/partyRuntime.ts resolves RoM direct-hit schools from source ability effects and applies active actor-owned damage modifiers in the no-roll Runewaker compatibility path, excluding Holy Blessing from its dedicated resolver. Native stat-mode hits use the existing roll-based outgoing-aura path.
  • src/game/romPriestKnightPairValidation.test.ts covers the exact passive marker, effect values, aura attachment, and player cast. src/game/romKnightScoutBloodPunishment.integration.test.ts exercises player Holy and physical damage, healing taken, immediate cancellation, owned-NPC healing and damage, natural expiry, owner isolation, and both native and compatibility stat rulesets. It also checks Earth Chain's explicit Nature school and Wind Arrows' explicit Physical school.
  • Focused validation passed: npx vitest run src/game/romKnightScoutBloodPunishment.integration.test.ts src/game/romPriestKnightPairValidation.test.ts src/game/romScoutRoguePairValidation.test.ts src/game/romMageWarlockPairValidation.test.ts (154 tests across four files).

No identity, stat input, health, loot, recovery, level-cap, or readiness scope changed.