fa5fa6dbce557eb208223e78d4cdbae27b99309f
19
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
fa5fa6dbce |
the golden sweep gains two hand-framed spots and stops faking green
- Two new golden-capture spots framed by a human eye rather than a lane list: the Goldshire inn common room (the interior everyone actually stands in) and a Felwood vista. The sweep also captures the world-map field now. - An honest-tooling fix: a scenario that failed to produce its image used to vanish from the diff and the sweep still read green. A missing shot is now its own loud failure — a clean sweep means every frame was actually compared. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
993adf79b9 |
an idle frame skips the quiet UI, and a lighting hunt closes clean
- The UI stopped paying to discover that nothing changed. Layout used to hash ~1,900 frames' worth of inputs every frame just to decide "quiet"; it now tracks a mutation epoch and answers with one integer compare, and a settled frame reuses last frame's rendered quads instead of re-rasterizing every glyph. ~0.9 ms off every idle frame — with a verify mode, forced on across all 489 UI tests, that re-runs every skipped resolve in full and asserts it would have produced identical results. - Across this run of snapshots, the one number everything is graded by: CPU work per frame at the crowded dungeon spot went from ~29 ms to ~16.5 ms. - A lighting question got the full treatment and an honest answer. Units briefly took a different day/night lighting law; it read wrong on screen the same evening, and a build-by-build hunt a full week back confirmed the world's look never regressed in the first place — the change is reverted, nothing about the look changes in this snapshot, and the question stays parked until the one remaining unknown in the reference client is pinned. - The character pane's model booth grew a headless eye — a dump of exactly what it draws, no live session needed — built for that hunt, kept for the next one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
80978df983 |
the loading screen gets a lifecycle, and stops lying at both ends
- Entering the world used to show an uncovered, movable world before the screen
came up — seconds of it on a slower machine ("like the Stormwind intro
video", as one report with video put it). The screen also cleared onto bare
terrain with the buildings still streaming in, and could hang forever if you
arrived swimming or flying. It has a real lifecycle now: it rises at the
entry edges (character pick, transfer, teleport), clears only when the scene
is actually presentable — terrain, buildings, props and their collision all
resident — and its physics hold releases in every movement mode, not just
walking. The progress bar counts buildings too.
- A far teleport flashed a frame of the destination before the screen rose.
The "swap never flashes" guarantee existed only in comments — a streamer
rework had silently dropped the scheduling constraint that enforced it; it
is structural now. And logout got its missing cover: the original's plain
black cut, not a frame of torn-down world.
- Animation parking now governs everything with a rig. ~350 animated objects
(braziers, doors, chests) were sampling their loops off-screen forever, and
a patrolling parked mob kept writing pose data nothing could read — ~620 rig
refreshes a frame became 7, and creatures in rooms the camera can't reach
through any portal park too.
- The engine's own tax got measured: bare Bevy spends ~3.9 CPU ms a frame on
this machine drawing nothing at all, which resets what "fast enough"
honestly means for everything built on top of it. A shipping build profile
(fat LTO) landed alongside — worth about −1 ms at the pin, kept out of
everyday builds.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
5166756571 |
every effect rides one stream, and the bag tooltip costs nothing
- Particles, ribbon trails, blob shadows, the selection ring, ground decals, water foam and the weather all push their quads into one shared vertex stream now — one buffer, batched draws, indices built per frame in draw order. ~1,100 emitters at the crowded dungeon spot stopped being ~1,100 mesh assets the engine reallocated every frame, no material asset is ever mutated for an effect again, and adjacent draws merge like the original's own batches (its measured shape: 793 quads in 23 draws). Vertices went camera-relative on the way — the fix for streaks and flakes vanishing in far zones, where the raw coordinates get big. - Hovering an item in your bags cost +14 CPU ms for as long as the tooltip sat open. The tooltip's refresh loop is faithful 1.12 behaviour (the bag button re-runs its hover every frame, unthrottled, so a late-arriving item fills in without a re-hover) — but each rebuild dropped the text measuring cache, so every frame re-shaped every line. One line keeps the cache: +14 → +0.1 ms, and the paperdoll, inspect and merchant tooltips stop paying the same tax as spikes. - "Which room is this creature in" walks one anchor per model instead of every lit part — ~13,700 part visits a frame became ~1,700 anchor rows. The frame-time win was honestly flat (the cost had already moved elsewhere); it lands for the structure, and the old sweep's repair duties became event-driven with it. - The perf probe defends its own window now — always-on-top from the first tick, occlusion counted on the measurement line — after two long overnight runs were silently destroyed by the display going to sleep. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
39df11ee64 |
the teleport tour leak dies: a map you leave actually leaves
- A tester handed us a clean repro: note your framerate, tour a few dungeons, come back — the client never recovers until restart. The cause: every dedup cache held its assets for the life of the process, and two material tickers touch every cached material every frame — so every map you visited made every later frame more expensive, everywhere. Caches are map-scoped now: one hop out of a dungeon measurably kills its whole payload (2,069 materials, ~300 models), and the perf probe grew a residency meter so this class of leak is machine-checked from here on. - Printed honestly: a second, far smaller retention (~25 models of toured display payload) survives the teardown, holder still unknown — the hunt continues, and the reporter's retest is the decisive check on the big one. - The sky stopped re-uploading its materials every frame at rest — sun, both moons, the star dome, the sky dome: ~17 uploads a frame with nothing moving on screen, now zero until a displayed byte actually changes. - The liquid animator sleeps on maps with no water, and the physics solver runs one substep instead of six — the world has no dynamic bodies to solve for. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
06e9457582 |
GM flight works, and creatures are clickable on the body again
- .cheat fly flies now. The find, read straight out of the 1.12 binary: there is no flight mover at all. Flying is the swim mover plus one flag that stops dry ground from cancelling it — the client's per-frame water check opens by testing LEVITATING and bails before either arm can run. So you float where you stand and aim-and-hold-forward to climb or dive, exactly like swimming. Jumping breaches you out and you fall until you re-toggle: the original traps the very same way, so ours does too. - Clicking a creature's body selects it again. The skinning move one snapshot ago left the picker reading the engine's old joint attributes — absent from every mesh since — so only nameplates could select. It reads our attributes now, and a test pins the picker to the same constants the meshes are built with. - A run that never connected to a server announces it in the log now. A "clean run" in capture mode proves nothing about the packet path, and one of those had already stood in for a live check once. - The network apply loop's last inline handlers moved out beside their families — same behaviour, one shape for all of them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
63efec188f |
the skinning code catches up, and 59k bone entities become arrays
- An honest correction first: the previous snapshot's message announced the owned skinning lane, but the code itself missed that snapshot by minutes — two sessions landed at once and the export carried the older tree. The skinning lane actually ships here, together with its follow-up. - The follow-up is the bone-entity collapse. A creature's ~75-bone skeleton existed as ~75 world entities, each paying transform propagation and bookkeeping every frame, to serve the ~5 bones anything actually hangs off (held weapons, glow emitters, the mount seat, overhead markers). A rig's pose now lives in plain arrays on the model itself; only the consumer anchor points remain as entities. At the crowded dungeon spot ~59,000 entities became ~28,000 anchors (80k total → 50k), palette uploads coalesce into a handful of writes, and another ~3 CPU ms came off the frame. - The movement echo the server sends about your own character is applied now, the way the original client always applied it — groundwork that GM flight cashes in later today. - The capture harness pins its clock per frame now, not just its frame count — a slow run used to drift every animation out from under a golden image. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
90efd4efad |
the voidwalker's eyes come back, and skinning becomes ours
- 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> |
||
|
|
d00912edd0 |
crowded dungeons back to 60 fps: two per-NPC costs collapse
- 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> |
||
|
|
fd54ea9197 |
walkers keep walking, and dungeon entrances stop dropping you
- 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> |
||
|
|
1531628a28 |
copy and paste works everywhere, and the sun keeps its colour
- 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> |
||
|
|
7823f6a47a |
underwater only when you're in the water, and druid forms work
- A pool belongs to a room now. Uldaman read as deep underwater because a mushroom cave's pool 186 yards up claimed every position beneath it forever; Undercity's NPCs swam on dry stone because Tirisfal's lake — 95 yards of rock overhead — still answered for them, and the camera took the whole screen underwater with it. Every liquid query (player, camera eye, every unit) is now scoped to the building that owns the water, verified against the real 1.12.1 files at both reported spots. - Druid forms work. A live display change — shapeshift, GM morph, revive — was only ever read at spawn; now the model swaps instantly and a size change eases over the real client's two seconds. A bear-form druid shows no weapon, exactly like the original: only a character body attaches held items. - 126 NPCs across the world were bald and earless. An amulet's display row sits in their head slot, and its "tuck the hair under the helm" mask fired with no helm to tuck under. A mask now needs an actual helm model; the gnome suppliers get their pigtails, ears and earrings back. - The pouring lava in Blackrock Mountain and the Great Forge came back. A prop that spans several rooms (a lava fall is named by up to 19) was culled with only the first room that names it, so it blinked in and out by camera angle. A prop now draws while any of its rooms is visible. - The Undercity entrance lightshafts dim to their authored 10% instead of flooding the throne room with blinding white columns. - An indoor pool fogs with its room now, instead of hazing with the outdoor scene while the wall beside it hazed with the room. Magma and slime take fog too — "fullbright" in the data meant unlit, never unfogged. - Backing the camera out through the Deadmines entrance swirl no longer blanks the whole dungeon: the sealed pocket behind the portal has a detail-only floor the room-finder couldn't stand on, so it declared you outside. A third fallback leg now names the room from the camera-collision faces. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
0d945c4fe8 |
particles keep time, and the maps with no terrain appear
- 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> |
||
|
|
2c55790ec1 |
portals work, GameObjects animate, and the tent stops flickering
- 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> |
||
|
|
c887170b37 |
the social window, the escape menu, and items that work from the bar
- The social window: friends, ignore and `/who`, in the reference's own two-level arrangement with its inner tabs and per-row right-click menus. The lists ride the real wire — guid-keyed with no names, resolved through the name cache, and capped at 50 friends / 25 ignores because those are the client's own caps — and the ignore list does its actual job: an ignored speaker's chat is dropped silently, a whisper additionally tells the sender, and a duel challenge is auto-declined. Guild ships as a disabled tab, which is what a guildless character sees. - The escape menu: ESC's last rung finally opens something. The game menu lands at the reference's own size and ladder, and leaving works — logout and quit with the server owning the clock (instant at an inn, refused in combat, or the 20-second countdown), narrated by the real camp/quit dialogs. While the menu holds the center nothing else opens, and the bag bar greys out under it. - Items on the action bar act like items. An equipped trinket was a dead button; the reference's use law is two stages — not equippable means use, equippable and already worn means use in place — over its exact search order (equipment first, then the bags, then the backpack, then the keyring; never the bank). What can go on the bar is now the reference's own two filters, byte-read: an item with an on-use spell or one you can equip, and no passive spells — and dropping a passive there speaks the real client's own line, "You can't put a passive ability in the action bar." - A quest-starter item opens its quest instead of "The item was not found." The question goes to the item's own guid, never through item-use — which the server refuses for every one of the 215 quest-starter items — and refusing the quest says what the client says, then closes the window. - For the toolbox: a pixel pick that reports everything under the cursor all the way back, a lens that says which render phase a draw landed in, and switches that separate "discarded" from "lost depth" from "never drawn" — built while cornering a flickering tent, whose fix ships in the next snapshot. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
c1ba444119 |
the micro menu, the ping meter, and the PvP flag
- 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> |
||
|
|
959fb8ba08 |
duels, inspecting other players, and water that ends at the bank
- Duels. Challenge another player from their right-click menu, or with `/duel`, and `/forfeit` to give it up. Both popups are there — the challenge you accept or decline, and the warning when you leave the field — with the flag countdown between them, and the outcome printed in chat when someone is knocked out or flees. Read off the reference client's own duel packets and the three globals it keeps client-side, which is why the challenger reads "You have requested a duel." even though the server never echoes that back. - Inspect. Right-click a player and open their paper doll: their nineteen publicly visible equipment slots with icon, name, quality and a linkable item, and their body standing in the pane, which follows along if you retarget while the window is open. No stack counts and no durability — those are not fields another player publishes, which is exactly why the reference client's inspect doll has never shown them either. - Water knows where it stops. Swimming used to trigger in the dry tunnel thirty yards under Stormwind's canal, and in mid-air over Blackrock's lava. A liquid is now the grid the map file actually stores — one wet flag per cell, and the surface height a bilinear over the four corners of the cell you are standing in, the same sample the reference client takes — so the water starts at the bank and its surface sits where your eye puts it. Lava is a liquid you swim in, an indoor liquid asks the building you are inside, and `/liquid` prints every surface claiming your feet and where each one came from. - Creature parts authored to appear only on death — the voidwalker, the banshee, the ooze, the stone elemental, the infernal — were drawing the whole time: material alpha now bakes per animation sequence and the unit lane actually evaluates it. The character and inspect model panes are lit by the reference widget's own single light instead of blowing out white, the rotate arrows spin while you hold them, and the transparent sort ladder had its sign backwards, so overhead names draw over water again instead of being painted out by a canal behind them. Underneath, the protocol writer's 95-verb drawer and its thousand-line spell module split into per-family files — no behaviour change, just a tree you can find things in. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
c48d8c6b7e |
other players walk the world, and NPCs speak your name
- Other players walk the world. A watched player's motion between server updates now runs through the same grounded movement resolve as your own character — same capsule, same colliders, same step-up and ground election — so they follow terrain every frame instead of every packet, and stop at a wall instead of walking into it and being snapped back. Their jumps are swept against the world too, and a standstill jump steered mid-air reports that steer, the one mid-air press the reference client broadcasts rather than defers. - The move relay rebuilt: relayed moves ride a per-unit chain on real time, a due move never jumps ahead of its unit's queue, and SMSG_COMPRESSED_MOVES — the batched carrier the server sends under load — is decoded rather than skipped. Our own send path now matches the reference client's: facing streams while moving, Nagle is off so each packet is one write, and the strafe axis nets so left and right can never ride the same packet. - NPC and quest text speaks the whole $-macro grammar, carved from the reference bytes — your name, class and race, the gendered forms, and the server's live world states — and the same substitution feeds gossip, quest text, the quest log and unit frames. Greetings are a weighted draw, rolled per NPC per open, and a quest giver with no quest to give is no longer clickable, where it used to open a dialog holding nothing but a placeholder greeting. - Spell tooltips finish the reference's line law: cast time and cooldown behind the real passive gate, the required tool or form, the reagents block, the chance-to-X line, a multi-bit equipped-item requirement named properly instead of by raw bits, and a buff's dispel class. - The UI layout engine got a dense, reusable anchor solver, and a change gate that skips the resolve entirely on frames where no layout input moved — in practice, almost every idle frame. Pets are named by their pet number rather than a creature-template entry, so the client asks the query the server can actually answer. And the asset extractor grew a stray-geometry census for tracking down geometry that renders where it should not. This snapshot replaces the six dated `sync` commits that stood here before it, whose subjects said nothing but the date. If you cloned before now: `git fetch && git reset --hard origin/main`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
2ad0043523 |
benilla: initial public release
A from-scratch World of Warcraft 1.12.1 client in Rust + Bevy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |