your corpse answers the mouse, and a cinematic's last holes close
- a corpse is a body you can hover, cursor and click: it enters the same ray pass as units with the winner switched on type at publish (the reference's own shape — one trace over every object), the cursor classifier is transcribed whole (lootable-by-me → the pickup cursor, grayed by range; else the insignia leg behind the learned-skill latch; your own body falls through to the clear), and right-click is "not mounted AND lootable" → CMSG_LOOT; CORPSE_FIELD_FLAGS bit 5 is the PvP insignia flag, not "reclaimable" as an old note had it; the widening also caught that a GameObject anywhere on screen could steal the click from a nearer corpse, and that a left-click on a body cleared your target as if you had clicked ground
- the cinematic sweep closes eleven holes: a shot plays its sequence band's WIDTH, not its end — two shipped fly-bys band away from zero and ran long with their opening frames frozen (the Night Elf intro measured 102333 → 102000 ms); CMSG_NEXT_CINEMATIC_CAMERA announces every shot, the first included — the old "between shots" reading meant it was sent NEVER, since every 1.12 sequence row carries exactly one camera; the ack invariant is stated once (one CMSG_COMPLETE_CINEMATIC per accepted trigger, over-acking tolerated, under-acking never — a dropped ack despawns the world around you until relog); the hardware cursor hides for the shot; and the music cut lands in the frame that starts it — it was one frame late, exactly long enough for a first login's zone fanfare to start under the narration and be stamped as played
- RunBinding exists, and a fly-by stops handing the world its mouse: CinematicFrame's OnKeyDown hands the SCREENSHOT chord back to its binding through RunBinding, a global we never had, so every press during a fly-by raised and took no picture; and the mouse was fully live under a shot — right-drag turned the character, clicks picked targets through the flying camera, both buttons walked the body — so the pointer now reads as over the UI while a shot plays
- AdvanceTime and ReplaceIconTexture are carved off the bytes: AdvanceTime really is a no-op in the reference (its one reachable call is mov eax,1; ret), ReplaceIconTexture is a material swap over a model's type-14 texture slots that stores nothing on the widget, and SetModel(nil) RAISES — the "documented clear" our binding claimed was invented, not read; and the addon roster now says WHOSE package is short when a .toc names files the folder doesn't hold — nine of the corpus's twenty-nine load failures are the addon's own manifest, which the real client also shrugs off ("Couldn't open %s", carry on), so they stop reading as our defects
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -639,10 +639,13 @@ fn drive_mouseover_tooltip(
|
||||
// and an IN_USE object all show the gold name plate while showing NO interact cursor — 0466's
|
||||
// "no cursor AND no tooltip" coupling was the regression. Transports never reach here — they
|
||||
// are excluded from the pick set itself (0466's correct half).
|
||||
let go = hovered_go
|
||||
.target
|
||||
.zip(hovered_go.guid)
|
||||
.filter(|_| unit.is_none() || go_is_nearest(&hovered, &hovered_go));
|
||||
// "Nothing else was picked, or the GameObject is the nearer pick." **A hovered corpse counts
|
||||
// as something else picked** (decision 1723) — it has no tooltip of its own yet, and the
|
||||
// `unit.is_none()` short-circuit would otherwise hand a farther GameObject the gold plate the
|
||||
// moment the ray landed on a body instead of a unit.
|
||||
let go = hovered_go.target.zip(hovered_go.guid).filter(|_| {
|
||||
(unit.is_none() && hovered.corpse.is_none()) || go_is_nearest(&hovered, &hovered_go)
|
||||
});
|
||||
|
||||
if let Some((guid, state)) = unit.filter(|_| go.is_none()) {
|
||||
// Push first (the engine's builder + the recolor's UnitReaction read the token), then
|
||||
|
||||
Reference in New Issue
Block a user