Files
benilla-octo/crates
gromandClaude Opus 5 fc4eb2c827 app: the rest of nampower's CVar table — 49/49, five of them live
`strings nampower.dll | grep -oE '\bNP_[A-Za-z]+\b'` is the DLL's whole
CVar table and `comm -23` against `cvars.rs` now prints nothing. Fifteen
names were missing, for the same reason the function list started wrong:
the first pass took them off `NampowerSettings`' writes rather than off
the binary.

Live: `NP_ChatBubbleDistance` (the same `BubbleConfig::range_sq`
SuperWoW's `ChatBubbleRange` writes — both DLLs hook one cull, so last
write wins there too), the three `NP_ChatBubbles*` kind toggles, and
`NP_EnableLocalSetRaidTarget`, which routes a solo `SetRaidTarget` to the
local board instead of a packet the server has nobody to echo to.

Two deliberate deviations, both about what a player who never touched a
setting gets:

`NP_ChatBubbleDistance` ships 20 yd, the reference's own cull, not
upstream's 60. Tripling the distance bubbles appear at is a visible
change to the game nobody asked for; writing 60 gets 60.

The six `NP_EnableUnitEvents*` rows keep a default of 0, where upstream's
README says 1 and its own `EVENTS.md` says 0. The disagreement costs
nothing under the registration rule the event family uses: a family is
wanted when its CVar is set or something registered the event.

Nine stored-only rows each say what building them would take. One is a
real gap rather than a shrug: `NP_PreventMountingWhenBuffCapped`
defaults ON upstream, so a real install refuses a mount cast at 32 buffs
instead of letting the server eat it. Everything it needs is here; the
test belongs inside `send_spell_cast`, which already takes 22 parameters
and none of them is the player's own descriptor — and it refuses a press,
so it wants a live test rather than being bolted on at the end of a
round.

`KEY_DOWN`/`KEY_UP` stay unbuilt, which leaves nampower's event table at
57 of 59 with both absences explained. They need the client's numeric
`KEY_*` enum, a table in `WoW.exe` this round did not read: the DLL
publishes four of its values, enough to see the shape (ASCII in bank 0,
specials at 0x200, function keys at 0x300) and not enough to name a key
in bank 2 past the first. A guessed code is worse than no event, since an
addon switching on arg1 would silently never match — and they are the
keyboard hook the press-interception queue uses, so they belong with that
decision.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
2026-10-24 17:19:35 -06:00
..