- spells shake the camera: `SpellEffectCameraShakes.dbc` loads beside `CameraShakes.dbc` as the group table, `SpellVisualKit` field 14 is the shake column (58 of 1772 kits carry one — War Stomp, Thunder Clap, Kodo Stomp, the ~50 Knockdown/Slam/Charge impacts, every summon, Sapper Charge, Earthquake, Sapphiron's death), and the kit shake fires exactly once per play from the first effect node's one-time arm pass (`0x620e11`), the same leg that plays the kit sound one field over — the older "fires only if nothing else did" reading would have silenced every kit with a populated effect slot; `$SHK` markers fire from GameObject and DynamicObject hosts only (the titan chest, the bomb wagon); one deliberate deviation — the reference reads a bone-attached node's position twelve instructions before it is written, so 26 of its 58 shake kits shake at the world origin and are culled by the 80 yd cut, which is an uninitialised field, not a design; 21 of 24 presets now have a live producer, up from 6
- the sound keeps playing when the window loses focus, if you want it to: 1.12 mutes everything on `WM_ACTIVATE` and offers no way out, so benilla ships that as the default (`Sound_EnableSoundWhenGameIsInBG` "0") and puts an Audio-page checkbox on it — a gate appended LAST in the main-track chain, downstream of every tap, so an unattended capture still records; wow-re's round settled that music is not exempt and that it is a mute, not a pause
- a building's far side no longer draws through its own walls: the camera-inside leg has three passes and we had one and a half — Pass 2 admits an exterior-shell group only against a frustum clipped to ONE deferred window (we marked every such group visible against the full view, under a comment calling it a benign over-draw), and Pass 3, which we had none of, draws the 24 `0x10000` groups (14 in Stormwind, 6 across Dire Maul, Razorfen's four 450–520 yd shells) from anywhere, frustum-tested on both legs by byte-identical setup; there is no antiportal branch in 5875 and no such flag in its data (815/815 roots and 5220/5220 groups censused, no bit above 18 ever set)
- the macro window is the reference's own `Blizzard_MacroUI`, and `GlobalStrings.lua` — line 1 of the reference's own toc — was missing from our manifest entirely (the app loaded it out of band at startup, so the client was right and every harness that loaded the manifest was not); exactly one `<OnLoad>` runs, the most-derived, because `SetScript` releases the slot before it looks at the new body — which is why the reference re-states the template's width line in tab 1 and not tab 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- the foam still washed past the waterline onto the sand after the shore fix: the slope-scaled depth bias ported from the reference's `glPolygonOffset(-4.0, …)` pulls toward the eye as the square of view distance, and what it spends is the wet-cell skirt — whole cells are the unit of liquid geometry, so a shoreline carries liquid-lattice triangles over dry sand (23 cells, up to 7.1 yd inland at the reported beach) held back by nothing but the terrain having drawn first; the tie it would settle does not exist here (our foam patch IS the liquid surface's own triangles — same cells, same winding, identity transform — so the depths agree exactly), and −4.0 is a hardcoded immediate every consumer of that state gets, not the foam lane's number; the slope term is disarmed with an `== 0.0` assert, reproduced three ways at the director's pin (slope 0 stops dead at the waterline, 4.0 washes onto the sand, 64.0 does it wide)
- weapon and defense skill bonuses showed the halves the wrong way round: the reader every skill-shaped binding goes through (`0x5ea460`) writes `value + permBonus` and `tempBonus`; ours returned `(value, temp + perm)` — right total, wrong split, which is why no fixture caught it — so a 300 weapon skill with a +5 talent and a +10 aura read 300 (+15) where the reference prints 305 (+10), on the sheet's Attack row and in the Defense tooltip's `(base +x)`; `UnitRangedAttack` is also pinned as a direct call gated on the PLAYER typemask alone, so a pet gets `(0, 0)`
- instruments: `water_here` also reports WET cells the ground climbs out of (the skirt a depth bias spends), the foam wake can be laid along a bank (`WOW_WFX_HEAD`) since no shoreline in the game is axis-aligned, `fxview` can stand its subject at any world point (`WOW_FX_AT`) so a blob shadow can be photographed on any terrain, and `WOW_MAP` refuses a name instead of silently falling through to Eastern Kingdoms — `WOW_MAP=Kalimdor` had produced a subject floating in empty ocean that read as a renderer bug
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- the step in the water at the shore, which travelled with you as you walked: `WATER_BIAS` (−2e4) exists to give the water pass its sort slot, and bevy's `StandardMaterial` also packs that f32 into the rasterizer's depth bias, so every water surface in the game shipped with a −20000 depth pull — on the one world surface that meets the ground at a grazing angle over tens of yards that does not settle a tie, it moves the waterline, and a float depth buffer's bias unit doubles at every exponent boundary, so two water triangles either side of one stopped agreeing about where the shore is, at a fixed distance from the eye; the bias is out of the rasterizer (a ~17 px jog at the reported Stranglethorn beach, present before and absent after)
- the foam wake went dull under the next water chunk and painted onto dry sand: it sorted against ONE water surface with a coplanar epsilon (the chunk 33 yd nearer the eye outranked it thirty times over, while the reference drains every liquid queue before it draws foam, `0x6816d0`), and its coplanar settle was a 0.03 yd geometric LIFT, which on a 29% beach is 0.10 yd of dry sand painted and proportionally more on every flatter shore; it is a rung above the whole water band now and sits exactly on the plane, and the RE on its depth state came back: a depth-buffer bias (`footstepBias × [0x810390]`), depth-tested LEQUAL with write off — the "−2048 GL units polygon offset" our comment justified the lift with existed nowhere in wow-re
- a unit standing in a room the camera's chain does not reach wore the building's fog while the walls around it wore the scene's: the reference's unit test has a second conjunct (`[P+0x98]`, the same `[0xca7f00]` chain gate the walls use), so the attach ray now returns the room it claimed and the gate is re-read every frame because it moves with the CAMERA — at Shadowfang, from inside the pinned room, three true interiors are in frame across the courtyards and a mob in g13, 91 yd out, wore the keep's teal at ~84% against a scene fog of ~3%
- two instruments for the shore class of report: `water_here <map> <x> <y>` reads a shoreline offline (the wet-cell lattice, the plane on it, the terrain under it, and the four scans that tell an authored defect from a rendered one), and `WOW_CAPTURE=waterfx WOW_WFX_AT=x,y,z` wades the foam rig in the REAL streamed water at a pin, where the synthetic square had no bank to clip against
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- from inside a building the open-world water outside draws only through a doorway you can see, as terrain and trees already did — the Caverns of Time lake is gone from the cavern's ceiling: there was never a second visibility lane for open-world liquid (the old deferral said "it already has an authority"; a sweep of every visibility writer found none, so Bevy's frustum test was the lake's only gate), an ADT liquid layer is tagged exterior scene at spawn and the existing window cull owns it, one 33 yd chunk layer at a time — which the reference's bytes then confirmed is its unit too (`CChunkLiquid`, reachable only from the per-window walk, a sealed room's supply discarded not deferred); a building's own pool also rides the Map Objects toggle now, so switching buildings off no longer leaves the canals hanging in the air
- the Thunder Bluff elevators and every other Kalimdor lift were invisible for the whole session whenever you logged in on that continent: the lift arm snapshotted the current map one stage before the login frame had written it, so every lift compared itself against map 0 and hid as off-map — a lift carries no map at all now (it is only ever streamed to players standing on its own map), the off-map term stays for the boats it was written for, and `WOW_LIFT_CENSUS` prints each transport's arm state, cycle and visibility (13 transports, 11 hidden → 0)
- the lightning across Razorgore's room and Chain Lightning's mob-to-mob hop drew as hairlines: the chain renderer took each hop's cross-section as the world-horizontal perpendicular, where the reference takes `(−d.y, d.x, 0)` in eye space — the ribbon is view-plane aligned and keeps its authored 2 × halfWidth yards at every angle, so a long level beam watched from its own plane no longer thins to a line (the "a hop seen end-on genuinely collapses" note was wrong and is gone)
- a display that names a model builds even when it draws no batch — Naxxramas' Unholy Axe / Swords / Staff are an invisible stalker holding a Monster weapon, and the held weapon had nowhere to hang; the same gate was keeping 43 emitter-only GameObjects dark (house and blacksmith smoke, Ironforge's lava steam, Stratholme's embers, every firework), and a name sits at the authored PlayerName attachment instead of at the feet; and a vendor's foot-shuffle on turning to you now blends the whole way in and runs to its own clip window — a 500 ms step on 1100 of 1130 shipped shuffle records — where the latch had tested the gap left against a band sixty times too wide, and nothing ever ended the step
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the world-state readout — the top-centre counters a battleground or Silithus keeps up — takes the reference's real geometry: every icon those rows name is a sprite authored into the upper-left corner of a power-of-two canvas (`AllianceTower` is 16×16 of ink at (3,2) in a 32×32 file), nothing anywhere crops it, and the reference compensates geometrically — a 42×42 slot hung 6 units off the row's left edge with the label seated 10 above its centreline, taken as one system; our snug 20×20 box stripped exactly that compensation, so the art drew at half size floating away from its own `0/200` label — and an empty icon column now reserves its rect instead of sliding the text left, which straightens the readout's left edge
- the dynamic icon is a second slot, not a swap: `Icon` and `DynamicIcon` feed two different regions and shipped content never mixes them, so the flag is a 32×32 button off the row's right edge with an ADD-blend flash overlay pulsing 0.5 s in / 0.5 s out, lit only at `uiState == 2` — the flag-taken value; before, any non-zero state replaced the static art, which fires on the ordinary state 1 and hid a faction shield that should never have moved, and the pulse's alpha ramp is now pinned by a test, not just its art
- the dev cost pill yields the band: the readout is the game, the pill is scaffolding, and a stock 1.12 UI has no free corner to move house to — so it steps below whatever the readout draws, reading `WorldStateAlwaysUpFrame:GetBottom()` on its own 4 Hz cadence and only while it is drawing, rather than mirroring the frame's row pitch in Rust; the probe's cost is stated at the site (an edge read settles the layout — up to one graph solve, ~47 µs, four times a second)
- the Hearthglen ballista's bolt heads and shields stop flickering: a shine layer is a second batch over its base's own triangles, and ours split the pair across lanes — the base rode the retained lane's f64 CPU bake while the env-mapped, additive, no-depth-write shine stayed on the entity path's f32 GPU rotate, and a few ULPs between coplanar surfaces turns the depth test into a per-pixel coin flip re-rolled by every camera move; a batch now names the M2 skin section it draws, neither member of a shared section diverts into a consolidator (depths equal by construction), and a corpus census bounds the cost — 1,080 of 9,691 models draw a section more than once, 264 such sections across 221 `World\` doodads — with toggling pixels at the pin dropping 0.26% to 0.14%, matching the consolidators-off arm bit-for-bit
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the auction house end to end: right-clicking an auctioneer opens Browse/Bids/Auctions on the server's reply — search, the category tree from your own DBCs, the reference's 50-a-page pager, multi-key sorting (directions corrected at the bytes), bid/buyout, the sell slot with deposit and duration, cancel with its fee popup; prices sit on the reference's own money-frame kit in lined-up columns, the twenty auction messages split refusals-red / outcomes-to-chat, and a won or sold auction reads as a proper mail receipt — the window's Lua re-worded in our own terms after the overlap ratchet caught the first cut leaning on the reference's text
- the PvP honor system whole: the Honor tab and the inspect page over a real wire model, with current rank and highest-ever rank correctly two different fields
- a day of reported fixes: WASD survives a /logout re-entry, addon settings save on a window close and Cmd+Q (exactly once — a mac close could fire the tail twice), clams open again, random-enchant items name themselves on every surface, the loot window's rows hold their seats with legible counts, idle players stop sinking through building floors, the shooter re-pulls between Auto Shots, portraits loosen ~19% to the client's own aspect-1.0 matrix, and big creatures thump the camera off the CameraShakes table
- character select clicks like 1.12 — captions whiten on hover, buttons fire on release, Humans face straight ahead off the stage bone's real yaw, the facing is per-character, and hunter/warlock pets stand beside you at their family-ramp size with their own emitters (the imp's flames), the Voidwalker's sequence-hidden shackles culled
- the smaller player-facing set: nameplate on/off rows in Options with the CanAttack category gate (emissaries stop plating), the bonus bar slides up with igBonusBarOpen, the camera's framing height glides on a shapeshift, the open letter evicts the centre seat, the far-band fog hull stops printing a pale horizon stripe at low view distance, the guide arrow is gold with per-source rim art, error text fades through its shadow too, and /convertraid converts the party
- README: the auction house and PvP honor move out of "not built yet"
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the Stormwind/Orgrimmar minimap lines are gone, at the cause: a group's boundary tile is authored 1.0 yd larger on that side alone, so touching groups overlap by 2 yd — without the bleed a LINEAR-filtered silhouette loses ≈0.38 texel at every abutment and the black clear reads through as a dashed line; with it, disc black goes 4.49% → 3.69% and no lines, inside the reference's own band
- the tile sampler stays LINEAR but filters in gamma space (`GL_SKIP_DECODE_EXT`, as the reference's trace has it) — a terrain underlay and a NEAREST sampler both reproduced the symptom and were both retracted as wrong once wow-re refuted them
- the canal-surface line in the world was a second defect: Stormwind's canal groups genuinely overlap (14,416 lattice points claimed wet twice), so the translucent sheet composited twice — the MLIQ `0x80` shared-tile gate now resolves each shared cell to one owner at load, pixel-identical and zero double-claimed points, not one wet point lost
- the interior composite is probeable headless now: `WOW_MM_PROBE` synthesises the minimap slot server-less, and an offline rebuilder reproduces the defect and the fix from the shipped art
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- WMO water stops running the terrain-liquid program: the material key names WHICH renderer a pool takes, and the two WMO arms land — Blackfathom Deeps' interior pools take their authored per-vertex opacity and the material's own body colour (34, 38, 57 there — the dark blue-grey in the reference shot) instead of coming out opaque and daylit on the zone's river swatch
- the exterior WMO arm bands at sub-17, not sub-16 — teal, not olive — which is what the Stormwind canals actually read as
- a hole corner's authored height no longer counts as a height, and a corpus-wide instrument reports which WMO water arm every pool takes
- the ADT/Felwood golden sweep is bit-identical: open-world water is provably untouched
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the terrain's impassable-chunk flag is parsed and fenced the way the binary fences it — all four sides, floored, rising only — so movement stops exactly where 1.12.1 stops
- a vertex normal authored as all zeros is legal content: the normalize is guarded, and the flat-black sleeves and skirts get their lighting back — a corpus sweep found 73 affected models nobody had filed
- Caverns of Time's asteroid belts turn: a rigid bone needs no rig
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- a player build ships beside the dev one — dev chords and probe surfaces go dark, and a gate enforces what a player can still reach, by medium not by module
- the binary carries its own shaders and its shipped UI, finds the WoW folder by itself, and keeps its local state in one benilla-config folder
- the glue screens get a capture shutter, and the engine stops depending on the protocol crate
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- timed quests get their countdown — a Quest Timers box under the minimap and a Time Remaining line in the quest log, kept against the server's own clock
- interiors go honest: footsteps stop crunching the terrain's snow through a building's floor, and tavern voices are authored dry, so the fake cave echo is gone
- snow is the reference's again — point-sprite flakes at the era's pixel size, and a spawn slab that leans into your run so a runner no longer outruns the field
- Stormwind stops drawing Elwynn through its walls, a looted quest crate's lid settles, cold zones puff visible breath, and the collect-quest toast fires only on a real advance
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the step-up and step-down budgets are the client's own verified numbers, and the step regime is chosen by the blocking edge
- walking off a kerb follows the surface down instead of diving past the edge; steep ground supports you only while you are descending onto it
- a ride on a moving platform survives the ground snap, and a vertical wall no longer depends on a float's sign
- trainer and craft rows sort with the real client's own comparators, one per window — Beast Training lists a skill's ranks in ascending order again
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- clicking a book in the world opens it and turns its pages: letters and world books share one reader
- the cursor's object rules are the client's own 31-row strategy table now, so decorative objects stop pretending to be usable
- trainer and tradeskill windows draw each row's icon by the reference's own law, and the trainer's filter dropdown toggles again
- water color follows the zone's light blend, so lakes stop snapping between area tints
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the whole loop plays: the line arcs rod tip to bobber, the bite splashes with its own sound, and clicking the bobber reels in
- the verdicts read like 1.12: yellow "your fish got away" lines, the reel-in sound, the fishing loot window
- "You feel rested." prints on the transition, rest states come from the client's own Exhaustion table, and level 60 trades the XP strip for the max-level rail
- the Skills pane lists what the real client lists: the hidden rows, the sort, gray numberless single-rank lines
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the spellbook's pet tab lists what the pet knows, with autocast toggled right on the page
- pet ability cooldowns sweep on the pet bar, and the bar binds to 1.12's Secondary Action Button keys
- the options window scrolls its pages in a real trough with seated arrows, nothing overflows the frame anymore
- Esc un-queues a queued strike, and a hostile unit's frame stops showing buffs the real client hides
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- every rebindable key runs through one chord-to-command engine, set in the era Key Bindings window, and buttons show their real keys
- a spell aimed at the ground sends its projectile to that spot, arcing to the point instead of a target
- a pet ordered onto something it can't attack refuses cleanly, and its frame shows the happiness face read from the client's own data
- a window's tabs clamp to the drawn edge and highlight exactly where they sit
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the pet gets its own unit frame beside yours, and an Attack order no longer latches as the standing command
- five rooms that always read bone dry hold their water now, the Deeprun Tram's flooded stretches among them
- macros fire through the client's own chat door, and the macro window fits its tabs and scrolls its icon chooser
- the options window grows a Nameplates page and its first dropdown, and the name-display switches apply live in the world
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- lava renders outside Blackrock at last: the mesher was dropping every open-world lava and slime surface, and 28 river mouths get their missing sea back in the same sweep
- Undercity's broken corridor returns, geometry and color both: a one-byte file overrun dropped the whole room, and a paint job one record short was being thrown away entire
- collision goes one-sided like the real client: walls stop you from the front and let you pass from behind
- the Booty Bay entrance is wood and rope again instead of a black cutout, glass picks up a real reflection, and models far from the map's center stop trembling
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the beam is on screen: Chain Lightning arcs outward hop by hop and Drain Life ropes from hand to victim — a write-order edge was erasing the finished geometry every frame, and a tripwire now guards the whole class
- the Controls page lands (sticky targeting, auto loot, invert mouse), UI scale waits for the era Apply button, and the terrain-distance slider retires
- with auto-loot in effect a lootable corpse shows the triple-pouch cursor, the real client's tell
- the character-screen freeze before a loading screen is gone: the shader warm-up hides behind a fully presented cover and tears down only its own roots
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- a building's transition corridors carry the reference's bright-doorway fade: the black tunnel between sunlit outside and a lit interior is gone
- the Options window gets its first real pages: seven 1.12 sound rows on Audio and the two 1.12 Video Options sliders on Graphics, all live CVars
- terrain culls like the real client: the ground is one-sided, so from underneath you see through it exactly as 1.12.1 does
- the beam system's data plane lands: 48 live chain, drain and funnel beams read off the real patch chain, with a byte-exact wire golden — the renderer follows
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- spell shimmer timing is right: shared clocks tick together, each cast anchors its own
- the flickering ground items in Orgrimmar are fixed, a transparent draw-order tie
- static scenery answers the mouse again, and the freeze debuff's crackle rings at the target
- bug reports moved to Discord, GitHub issues are closed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- root and snare state visuals are read from the spell kit's tenth effect slot and planted in the world at the unit's feet, where they belong
- Arcane Intellect's flare is one size cast to cast now: a joint-lane card was taking the sequence twinkle twice (joint and card), sometimes swelling it to 2.5 yards
- refusing a gear piece now names the reason instead of printing a bare count
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- buff durations count down properly: the bar polls the remaining time every frame and a server-sent span reads as real seconds
- ground-targeted spells find the floor: Consecration's and Flamestrike's hovering discs ride the decal projector, and Frost Nova's births ride its expanding ring (the emitter params are per-frame tracks now)
- a spell or action stuck on the cursor lets go on a left click, and a macOS hardware-cursor drift heals itself in-process
- a stealthed weapon fades right: the fade twin's cutout follows the source blend, so an opaque batch never alpha-tests mid-fade
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- stealth reads as stealth now: the body fades to the reference's 30 % and creeps with the proper stealth walk and stand poses
- the item and enchant glow subsystem exists: permanent weapon glows and enchant visuals show in the world and at character select
- the character-select background's colour banding (the reported "16-bit" look) is fixed at the render target, and the tauren stage's black corners with it
- aura body tints got a real per-instance channel, so a spell can tint the whole unit without touching its neighbours
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The voidwalker's eye glow vanished whenever the camera rose above eye level.
Three investigations said depth; measuring the depth buffer inside the live
quads said otherwise — the fragments reached the framebuffer every frame, and
the body's own transparent batches painted over them. The real client draws a
model's particles after that model's batches, always. Ours now does: every
effect carries a draw-order rung sized to clear exactly its own model.
- Widened to every effect family after asking "what else does this fix": ribbon
trails (a wisp's streamers wove six batches deep into its own body and
flickered as the head whipped) and 3-D model particles (Cone of Cold's
shards). A census over all 9,691 models found 967 whose own body could paint
over their effects; all take the rung now.
- The skinning lane is ours end to end: every rig's joint matrices live in our
shared GPU buffer, written only when a rig actually moved, and our shader
reads them. The engine's lane rewrote the entire joint buffer every frame and
swept every entity in the world for changed transforms — that machinery now
runs against empty sets. Another 6.7 CPU ms off the worst reported dungeon
spot, which now holds a flat 60 fps with p99 under 19 ms.
- Getting around while developing: Ctrl+Cmd+G lands your character where the
free-fly camera is, and Alt-clicking the world map teleports you there (both
ride the server's own teleport, GM-gated). The frozen-body coordinates the
panel used to copy while flying now follow the camera.
- A stuck main thread now diagnoses itself: a watchdog samples our own stacks
and prints where the time went, and a hung teardown names its last system
instead of hanging the window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The dungeon framerate reports were right about the mechanism: the cost is
CPU-side and it scales with NPC count, not with what's drawn. Two per-unit
lanes were each 30–100x more expensive than the work they do. Measured at the
reported Lower Blackrock Spire spot: 29.7 ms/frame, 72 CPU ms, before.
- "Which room is this NPC in" scanned whole dungeon groups triangle by
triangle — a spire stacks several 15k-face groups into any vertical column,
so 37 moving NPCs cost 1.2 million triangle tests per frame. Each group's
faces now sit in a column index built at load; same verdicts (pinned by
exactness tests), 88k tests, the lane drops from 11.3 ms to 1.1 ms.
- Animating one creature cost ~190 microseconds per frame in generic per-bone
animation machinery — hash lookups and boxed curves per bone, mostly to
produce constants. A direct pose evaluator now does the same math into the
same joints for ~16 microseconds per rig, checked bone-for-bone against the
old output across crossfades, overlays and masks. The reference animates
every in-range unit with no view cull, and now so can we: a raid's worth of
animating rigs (~450) costs ~4 CPU ms where it used to cost ~85.
- Net at the reported spot: a flat 60 fps. The performance probes also learned
to report CPU work (ms and %) instead of wall-clock fps, which is what makes
these numbers repeatable on a busy machine — and comparable to the Mac
report's own units.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- A creature that was already walking when it came into view stood frozen at
its spawn point, then teleported — up to a full wander leg, 30 yards in the
worst measured case — when its next movement packet arrived. The create
packet carries the live path (where the unit is along it, how much is left)
and we parsed all of it into the void. The unit now joins its walk exactly
where the server has it: measured before/after, 13% of movement starts were
over-a-yard teleports, now effectively zero.
- Walking into Zul'Gurub or Stratholme through the portal dropped you straight
through the world. The landing check asks "is there a floor under me?" — but
on the arrival frame the loaded world is still the map you just left, and an
instance entrance is a copy of its outdoor ground at the same coordinates,
0.23 yards under your feet. The old floor said yes, then despawned. The hold
now waits for the destination's own ground to arrive, and a world that never
arrives keeps the loading screen instead of dropping you into the void.
- Same fix covers a decoder hazard found on the way: a plain two-point path
announces two points but ships only the destination, and trusting the count
over-ran the packet — it never fires on our server's pathfinder, but now it
can't.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- One text-input law for every field. Login, character create and the delete
dialog each improvised their own tiny keyboard handling — no caret movement,
no selection, no clipboard, and Ctrl/Cmd+V typed a literal "v" into the
password box. All of them now run the same byte-verified edit-box law as
chat: clipboard, select-all, word moves, shift-selection, the real 0.5 s
caret blink. The password box masks what you copy off it, like the original.
- Copy/paste on Linux had two independent causes, one per direction: our window
is Wayland but the clipboard backend spoke X11 only, and a copy relinquished
the X11 selection the moment it returned (an X11 clipboard lives only as long
as its owning connection). Both fixed — Wayland windows get a real Wayland
clipboard, X11 keeps a held handle. AltGr is not Ctrl anymore either, so
Polish and German layouts can type ą, ć and ź in chat instead of triggering
select-all. Compile-checked on Linux; wants a real-session retest.
- The exterior sun keeps its colour. A per-channel clamp saturated the warm
continental sun to pale yellow-white on every sunlit fence, post and doodad;
the clamp now happens once, at the sum, so the fiery orange survives — the
reported Silverpine fence and Blackrock steps match the reference's own
arithmetic.
- A pool has a floor. Undercity's upper slime channels claimed the dry room a
storey below them — 115 yards down still read as submerged. A pool now stops
at its own room's floor; a sweep of every building in the shipped world found
51 such stacked sites across 6 buildings, all closed.
- Ctrl/Cmd+Z hides the whole UI layer for clean screenshots, and instrumented
debug runs open their window in the background instead of stealing focus.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Twenty of the game's forty-three maps are not made of terrain at all — Molten
Core, Onyxia's Lair, Dire Maul, Gnomeregan, Uldaman, the Deeprun Tram and both
Blackrocks among them. Their whole world is one building named by the map file,
and that line was being thrown away, so those maps loaded nothing and a teleport
in fell forever. The building is now placed as an ordinary WMO placement — so
collision, props, liquid, interior lighting and portals all come along on the
existing path — verified on seven of the twenty against the server's own
independent floor heights.
- Particles keep the model's time. Emitter rate and on/off now bake per animation
sequence and follow the clip that is actually playing, so a quest object's
explosion choreography no longer burns at full roar while the object idles. And
the flipbook cell ramp is computed the way the reference computes it: sheets
that play backwards no longer crash the client (a certain Winterspring brazier
fired this on every approach), the tail streak reads its own ramp instead of the
head's, and the per-segment repeat count works — the Insect Swarm's wings
finally flap.
- A culled dungeon room takes its furniture with it: lanterns, crates, barrels and
cobwebs now cull with the WMO group that owns them, instead of hanging lit in
the void where their room used to be. The group's own liquid goes along too.
- Under the floor: the archive chain pins that a file the patch deletes can never
fall through to the stale copy in a base archive — a silent failure mode that
would serve deleted content looking perfectly healthy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Area triggers exist now, so portals work: every teleport pad, dungeon entrance
and enter-a-place quest volume reports the reference's own way — one exit latch,
first containing volume on the map wins, a sphere or a yawed box. Verified live:
Rut'theran to Darnassus, the Deadmines worldport, and a level-gated entrance
refusing with the server's own "You must be at least level 10 to enter."
- GameObjects animate. Every animated object arms its idle the moment it goes live
(doors and chests used to flash bind pose for a frame), a missing rest pose is
remapped the way the reference remaps it instead of playing nothing — the
Ahn'Qiraj gate's root tangle stood frozen for want of a Closed clip — and the
state machine covers the verified twenty of thirty-one object types instead of
three: fourteen hundred spawns' worth of traps, goobers, books and questgivers
now change pose off the wire.
- The flickering tent is still. Cloth you can see from both sides is authored as
two reversed copies of the same sheet, and the real client backface-culls each
copy from its wrong side so exactly one covers any pixel; we drew every building
batch two-sided, which left the winner to floating-point noise, flickering while
the camera crept. WMO materials now honor their cull flag.
- A sweep of long-standing visual bugs: effects respect the far-clip wall — a
ferry's deck lanterns were drawing from 7,000 yards away; the night-elf eye glow
goes out in first person instead of leaving two orbs burning in mid-air; the
goblins' stray white hair tuft is gone (a duplicated table key resolved last-wins
where the client scans first-wins); lava and slime finally have their own
submerged view — the dense fiery orange and dense green of the real thing, off
two fixed lighting rows nothing in the zone data points at; and the far-horizon
band overlaps the detailed terrain instead of leaving a strip of sky at lowered
view distance.
- Two caught at the keyboard: the backpack icon greys instead of vanishing while
the escape menu is up, and the world map is a real panel now — it can no longer
open over the menu, and ESC closes it first like everything else.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The main menu bar's two empty recesses fill. The micro menu — the eight arched
buttons: character, spellbook, talents, quest log, socials, world map, main menu,
help — sits in the dark panel between the page arrows and the bags, transcribed
from the reference's own layout: the character button wears your portrait, a button
holds itself down while its panel is up, and the talent button appears at level 10.
The latency meter fills the one slot the bar art leaves transparent for exactly it,
tinted green/yellow/red on the reference's 300/600 ms thresholds and drawn UNDER
the bar art, seen through its window, the way 1.12 actually does it. The socials
and main-menu buttons find their panels one snapshot later; help still waits.
- The UI explains itself on hover: 1.12 ships its detailed two-line tooltips ON — a
FrameXML default, not the opt-in extra it is often remembered as — so the micro
buttons, your own portrait, the XP bar, the five bag buttons and the ping meter
all answer a hover with the reference's own explanations.
- The PvP flag, end to end: crossed swords on the player, target and party frames,
driven by the two descriptor bits the wire actually carries, and `/pvp` speaks —
the yellow toast plus the system chat line, the OFF sentence being the one that
warns the flag lingers for five minutes. It really does linger: turning it off
waits out the server's timer, which looks like a bug and is the reference.
- Quest markers stopped freezing. The grey `!` over a questgiver above your level
goes gold the moment you ding, an NPC re-entering view is asked afresh instead of
wearing a session-old answer, and the marker drops when the questgiver bit goes
off — the re-ask triggers mirror the reference's own set, plus one named addition
(your own level changing).
- Water and heights: swimming downhill no longer bounces between swim and fall ten
times a second — the surface line is a two-sided constraint, so the swimmer
settles with the river instead of being left behind by it. And collision height
is per-unit now, read from the unit's own model: a gnome used to swim with a
third of a yard of water over her head because five depth lines were quoting a
human's number.
- A round of pixel honesty in text and chat: the newest chat line no longer wears a
wider drop shadow than every line above it (shadows move in whole pixels now),
keeps its descenders, and hover boxes stop painting over the chat body. The chat
input's history browse survives programmatic edits, a failed script chunk warns
instead of vanishing, and recall deepens to 64 lines. Idle animation got honest
too: a model's idle is Stand resolved through its own lookup table — never
file order, which had the duel flag bobbing on its spawn clip — and an armed idle
is culled on the box its animation authors, not the bind pose, so the flag stops
vanishing at most camera angles.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>