- Add reverse_engineered.md section 47 covering the full
CMsgMagicEffect_Process -> CMsgMagicEffect_DispatchVisual ->
CMagicEffectNewArrow_ctor pipeline. Twelve subsections:
packet field layout, the Process call flow with the
CMagicData_FindSpell gate, the caster-only PlaySpellAnimationOnSelf
hot path, the full ClientRepresent (property 10) -> effect file
case dispatch table for sub_95B2DD, the case 97 NewArrow observer
filter root cause + 1-byte fix, why MagicEffect.ini edits did not
fix it, the off_CC8B08 property name table dump (46 entries),
the IsAOEHaloSpell hardcoded allowlist, an SQL cross-check showing
LevelHu2 is universally 0 in the reference DB so matching it is
parity-only and not a fix for observer-blindness, and a complete
binary address table
- Rewrite PACKET_MIGRATION_6609.md section 2.3 (MsgMagicEffect 1105)
with the binary-verified layout. Document the per-target stride
bug, the Eff2 typo, and the SpellEffect = 1 footgun that were
fixed during the RE work. Note the new IReadOnlyList
API. Cross-link to reverse_engineered.md section 47 for the
case 97 client patch
- Rewrite the stale 03_PACKETS/Combat.md MsgMagicEffect section
(was: 12-byte targets, max 55, count at offset 16) with the
actual 6609 layout, the per-target slot table, the new MagicTarget
struct API note, and warnings about the SoulLevel byte and the
case-97 filter