# Native RoM combat resolution and enemy damage types — 2026-10-03 This follow-up implements the requested native defense, hit/avoidance/critical, outgoing periodic-damage, special-input and multi-target consumers, and checks enemy damage classifications for both WoW and RoM. It supersedes the open native-combat boundaries in `ROM_NATIVE_COMBAT_PASS_2026-10-03.md`; the earlier report remains historical evidence. The later [enemy equipment, encounter and pressure pass](ROM_NATIVE_ENEMY_ENCOUNTER_PASS_2026-10-03.md) supersedes this report's equipment/manual-enemy-formula limitations and final damage-budget/browser evidence. The measurements below describe this earlier resolution pass; the native health anchors remain current. ## Actor and source boundaries Every player and party member retains their own stat ruleset. Supported canonical active-five native builds resolve against an exact imported RuneWaker NPC using `romNativeCombatResolution.ts`. The incoming path derives the recipient's own secondary class, gender and ruleset before choosing native resolution. WoW-mode recipients keep their compatibility resolver even when another party member uses native stats. Native points are never converted into WoW ratings. `export-rom-native-combat-data.mjs` owns the compact source growth, FIX, skill, spell-binding and population-entity mapping data. `runewakerNpcId` is carried from population registration to combat state independently of WoW creature/server entry IDs. Player level remains capped at 80. The source provider accepts an explicit NPC level 81 in its tests; this does not raise the live scaling cap, and the final diagnostic's enemy levels stay at or below 80. Canonical training gear and the five exact active class pairs are the supported player source scope. Missing source NPCs, custom/unverified gear, ambiguous source equipment or unsupported source calculations retain a declared shared fallback. NPC source derivation does not replace the game's authored/scaled encounter health pools or damage budgets. No loot, matchmaking or readiness promotion is included. ## Damage calculation, hit gate and school These source fields have independent meanings. MagicCollect `EffectType` selects the hit gate. MagicObject `Attack.CalType` selects the direct physical or magical calculation and critical path. MagicBase `MagicType` identifies the native elemental resistance channel. A physical calculation can therefore deal Light damage; classifying every physical calculation as Physical school loses source information. DotMagic retains its own MagicBase `EffectType` semantics. The compact enemy classifier keeps the WoW and RuneWaker spell-ID namespaces separate. WoW packets retain DBC `DmgClass` and the complete `SchoolMask`; the seven single schools map directly, while composite masks retain the existing authored single-school mitigation policy. Missing source spells and non-damaging script placeholders preserve authored packet types. RuneWaker stores the raw six channels separately from their simulator aliases: Earth/Wind → Nature, Water → Frost, Fire → Fire, Light → Holy and Darkness → Shadow. Exact native resistance lookup continues to distinguish Earth from Wind. Source-qualified packets feed the existing structured combat events, immunity checks, absorbs and health application. Enemy ranged attacks no longer depend on a delivery-shape guess to select their hit kind. Classification coverage and source gaps are recorded in `ENEMY_DAMAGE_TYPES_AUDIT_2026-10-03.md`. ## Periodic damage and special inputs `romNativePeriodicDamage.ts` owns source-negative HP/HP_Per DotMagic rank correction and application snapshots. Player casts and companion casts bind the exact skill/component. NPC casts also retain their assigned source MagicLv. Source target defense/resistance and caster power are evaluated at application; ticks reuse stored Buff.Power without new critical, hit, armor or resistance rolls. HP_Per reads the recipient's current maximum HP on every tick. Enemy periodic effects have their own scheduler and are removed by dispels and encounter resets. Natural expiry preserves the final due tick; the source caster can die while an already-applied periodic effect remains. Native tick amounts then pass through ordinary generic dealt/taken modifiers and shields once. Unsupported snapshots retain the existing path. The exact source/runtime cases and unsupported reapplication/resource shapes are documented in `ROM_NATIVE_PERIODIC_DAMAGE_SOURCE_2026-10-03.md`. The direct and periodic components of one source MagicCollect share the per-target application hit gate. Native hit/dodge/miss seeds therefore use a common cast-target key; critical/block/parry rolls retain their individual packet keys. Incoming periodic application also retains the actual attack revision. An exact native gate remains valid even when an unsupported direct calculation needs the shared amount/mitigation adapter: a passed gate disables the adapter's additional miss/dodge roll. The imported Big Ripper CalcType 4 regression covers this boundary. Cross-system WoW `incoming-*-hit` aura adjustments are not mapped into the native source gate; that mixed-aura bridge remains outside the active-five source scope. The active-five source audit found Throw fixed inputs and raw ShieldDef inputs, with no prior-hit fixed types. Canonical training Throw derives the source Fin.Throw_DMG channel, including the second DMG_Per factor; shield calculations use raw BaseEQ shield defense, excluding fixed WearEq DEF. Prior-hit inputs remain explicit unsupported values until a real source consumer needs them. Multi-target source power receives actual recipient count and ordinal in both player and companion loops. Source sharing and ordinal falloff are applied once; the generic AoE falloff does not multiply the native result again. ## Validation The source-resolution diagnostic before the health adjustment cleared all 80 fixed pulls with no deaths or invalid casts, with both selected NPCs source-supported. Trash took 4.5–17.7 seconds and Anglo 24–85.5 seconds. Those measurements justified changing only the native RoM health factors; the compatibility curve, damage budgets, difficulty multipliers and cap remain intact. `before-native-resolution-pacing.json` preserves this distinct baseline. The final native health anchors are [trash, boss]: level 1 [0.4, 0.3], 10 [1.0, 0.6], 30 [1.1, 0.85], 60 [1.5, 1.5], 65 [1.8, 1.9], 66 [2.6, 2.8], and both 79/80 [4.5, 4.8]. Intermediate levels interpolate linearly. These are measured simulator training-party budgets, not RuneWaker monster-health formulas. The static cohort is diagnostic evidence for these five requested builds, not an all-class balance certification. The final report clears all 80 pulls at levels 1/10/30/60/65/66/79/80, with zero invalid casts, player deaths or companion deaths. Both the actual trash NPC and Anglo are native-supported in every sample. Trash is 4.9–8.7 seconds and Anglo 40.5–58.5 seconds. The harness asserts source support, successful kills and absence of invalid casts/deaths; positions remain fixed, so this does not certify encounter movement or every dungeon. Focused validation passed 140 tests across 18 files, followed by six shared-gate/periodic checks after the final result-field cleanup. Native HP/pacing checks passed 7/7. Ready-five checks passed 7 Vitest and 20 Python cases; avatar/equipment checks passed 47 cases during this follow-up. The final production build stages passed: bootstrap and asset audits, TypeScript, Vite, compression and release-bundle verification. The final production browser checks use `index-DyCSc4Cz.js` and `combatStore-nQykOmDD.js`. Stat-ruleset QA covers native defaults, legacy WoW-mode saves, independent player/companion modes, switching guards, equipment panels and a 390×844 viewport. The targeted Boss Testing check covers Anglo's Gulp control effect and Lady Anacondra's Nature-school Lightning Bolt against a native RoM party, with no page errors. It does not cover every boss mechanic or dungeon. Evidence is in `playtest-artifacts/stat-rulesets/results.json` and `playtest-artifacts/native-combat/results.json`; screenshots verify roster/dungeon bodies, staff/shield/weapon silhouettes, native stats and encounter feedback.