Of SuperWoW's whole surface these were the two names grom's corpus calls
that this client lacked (`scripts/dll-surface.py --wanted`), and the first
is load-bearing out of proportion to its size: `SuperCleveRoidMacros`
funnels FIVE subsystems through one `RAW_COMBATLOG` frame — immunity and
resist learning, hidden-CC detection, debuff-duration learning, and the
reactive-proc window that lights Overpower and Revenge. Its own comment
says why the last of those can come from nowhere else: "SPELL_GO only
provides hit/miss COUNTS, not miss TYPES".
`route` is the fire site: the one funnel every combat line already passes
on its way to a window and to WoWCombatLog.txt. `arg1` is the printed
sentence; `arg2` is the same sentence with each unit name spelled as its
GUID, composed a second time through the same `compose_line` so the two
can only differ in the name slots. Fired before the `CHAT_MSG_*`, which is
what "raw" means upstream. Both the fire and the `arg2` composition are
gated on `has_listener` — a raid's combat log is tens of lines a second.
`CombatLogAdd` is also BigWigs' SuperWoW detection (`if CombatLogAdd
then`), so defining it turns that module's path on.
Three corrections came out of reading the DLL's own usage strings, which
it publishes beside the names — the arity and argument meaning of every
remaining SuperWoW function is now measured rather than inferred, and
`docs/ADDON_COMPAT.md` carries the manifest:
- `CombatLogAdd("text" [, addToRawLog])` has a SECOND argument. Nothing
in the corpus passes it; it would have been missed.
- `SUPERWOW_COMBAT_LOG_EVENT` does not exist. The DLL registers exactly
three events, and that name is in no part of its string pool.
- `IsIndoors` is capital-I beside `IsSwimming`/`IsMounted`, not the
lowercase `isIndoors` two files guessed at — all three are already live
off one feed, so that clause of the "blocked" row was already answered.
- The detection pair is `SUPERWOW_STRING="SuperWoW 2.2 by Balake"` and
`SUPERWOW_VERSION="2.2"`, both quoted. Ours had the string without its
author clause and the version as a number.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
19 lines
902 B
Rust
19 lines
902 B
Rust
//! The self player's posture ([`SelfMovement`]): not 1.12 data at all, fed once per tick for
|
|
//! ClassicAPI's `State` namespace (`IsSwimming`/`IsMounted`/`IsIndoors`/`IsOutdoors`/
|
|
//! `GetShapeshiftFormID`).
|
|
//!
|
|
//! **SuperWoW publishes three of these under the same names, not lowercase ones.** Its own string
|
|
//! pool lists `IsSwimming`, `IsMounted` and `IsIndoors` with that exact capitalisation (an earlier
|
|
//! note here guessed at `isIndoors`, which would have been a second global nothing calls), so this
|
|
//! one feed answers both mods and there is nothing to alias. `GetSpeed` is SuperWoW's alone and is
|
|
//! the one posture fact not here — see `docs/ADDON_COMPAT.md`.
|
|
|
|
use super::SelfMovement;
|
|
|
|
impl super::UiScript {
|
|
/// Push this tick's self-movement snapshot.
|
|
pub fn set_self_movement(&mut self, movement: SelfMovement) {
|
|
self.model_mut().self_movement = movement;
|
|
}
|
|
}
|