Commit Graph
26 Commits
Author SHA1 Message Date
SamandClaude Fable 5 94de741cb1 /target, /assist and /follow, and right click opens a clam
- /target and /assist find units by name like the original, and /follow walks you behind your target
- right click opens clams and lockboxes, and the tooltip promises it
- the freeze thaws clean, poses release instead of sticking, and you drop to neutral standing before it grips
- unit frame art layers over the bars like the original

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 18:02:44 +07:00
SamandClaude Fable 5 2f40b6a9a0 ice block freezes you solid, and loot lines link their item
- ice block freezes the body the frame it lands, before the arm even rises
- the loot message links the item, so the name wears its quality colour
- a looted item drops into the bag that actually took it
- effect models live their authored life, born, held, decayed, and bar fills sit under their borders

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 18:01:42 +07:00
SamandClaude Fable 5 a3c5b20698 breath and fatigue bars, combo points, and a stun stops everything
- the breath and fatigue bars are in, driven by the server's timers
- combo points show on the target frame, rogue and druid only, per target, and Overpower lights on them
- a stun freezes turning too, and gm fly over water stays in the air
- /sit and the shipped slash commands work, sheathing sounds like the weapon's material, and the bar never holds an outgrown spell rank

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 18:01:15 +07:00
SamandClaude Fable 5 143a734b91 slow fall, levitate and water walking work, and Z sheathes your weapon
- the granted movement modes are one system now: slow fall slows, levitate hovers, water walking holds the surface, a root pins you even mid-air
- casting while moving refuses with the real error, and a jump cast plays its animation in the air
- Z cycles melee, ranged, stowed, every landed swing draws the weapon, and Alt-Z hides the UI
- login faces where you logged out, and the dev shortcuts moved to Ctrl+Shift off the Windows key

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 18:00:46 +07:00
SamandClaude Fable 5 59b4a4f4ce buff timers tick, ground spells find the floor, stuck drags let go
- 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>
2026-07-31 17:01:51 +07:00
SamandClaude Fable 5 ab65981ebf cooldown pies, warmed shaders, and a tamer Frost Nova glow
- the spellbook draws the cooldown pie on a spell that's cooling down, and the active form's slot lights its checked ring
- shader variants warm at startup (with a tripwire if one ever compiles live), so a first cast no longer hitches on shader compile
- additive glow stacks clamp the way the original scene does, taming Frost Nova's blown-out mist, and shoulder cards split only at rigidly separable bones
- the login handshake now reads the same under both SRP encodings, and cooldown events no longer race the net step

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:01:30 +07:00
SamandClaude Fable 5 167f80d92d stealth dims its sparkles, and gear changes stop rebuilding you
- a stealthed unit's particles and ribbons now dim with the body, and a depth-prime pass stops overlapping translucent parts from darkening each other
- changing gear re-dresses the character in place instead of tearing the whole model down and rebuilding it
- terrain tiles furnish cell-by-cell and model render forms build paced across frames, so first contact with fresh ground no longer hitches
- Ghost Wolf renders properly ghostly, and a live toggle swaps its action-bar icon to the active form while it holds

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:01:07 +07:00
SamandClaude Fable 5 9562380a64 deaths dissolve properly and item effects reach every pane
- elementals no longer freeze mid-air as corpses: a one-shot death band's clock now clamps instead of wrapping, so the authored dissolve plays out
- an equipped item's sparkles, cards and glows reach the character-select booth and the character sheet's model pane, and a tint reaches a unit's attached items too
- unit lighting is back on the terrain-shade chain, and light ramps chase a clamped target so walking from sun into shade actually ramps
- test accounts gained a full-roster seeding verb (every class levelled, geared and specced in one command)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:41:05 +07:00
SamandClaude Fable 5 3fbfebd604 stealth you can see, item glows, and smooth character-select skies
- 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>
2026-07-30 19:40:54 +07:00
SamandClaude Fable 5 56c62c7591 point-and-click casting: Blizzard lands where you aim
- ground-targeted spells work end to end: press the button, get the targeting cursor, click the ground, and the cast ships on the wire the way the real client sends it
- a reticle sized to the spell's real radius rides the cursor, and on the click the storm model, falling shards and area sound all land at the point
- character screens: a newly created character comes back selected on the list, and the authored layout scales to small windows instead of clipping the bottom controls off
- blob shadows ride their receiver's clip transform and the raster bias that kept them faint is measured and fixed

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:40:05 +07:00
SamandClaude Fable 5 d3e05f32e5 the world only pays for what's on screen, and the leak is gone
- terrain draws per chunk now, and one authority culls everything outside: buildings, billboard cards, particle emitters
- the fps and memory creep on long flights is fixed twice over: material animations only tick what something draws, and far-away art is released by distance (with a 30 s dwell floor so fast cameras don't thrash it)
- the second crash ever reported (a cast racing a despawning unit at flight speed) is fixed, with a regression test that reproduces the exact panic
- every build now prints which commit it is, so a bug report can say exactly what it ran

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:39:56 +07:00
SamandClaude Fable 5 03aa04e54d no world until a character is in one
- The login screen stops paying for a world nobody is in. It had been
  streaming and simulating all of Elwynn Forest behind a static image — the
  client began life as a terrain viewer and the streamers never had an off
  switch. The world now boots when you enter it, aimed at the map your
  character is actually on, and logging out releases it. Login frame cost:
  p50 18.6 to 10.3 cpu ms, worst paced frame 308 to 20 ms; entering
  Stratholme is a covered 1.2 s load.
- More login-screen honesty: the fullscreen glue image was re-uploaded to
  the GPU every frame — 22 MB a frame for a still picture — and the
  braziers' fire had been invisible since the 25th, simulating perfectly
  into a camera that is off, because two booths had computed the same render
  layer. Both fixed; the flames are back.
- Indoors got truer: the outdoor world draws only through the portal windows
  actually in frame, as the original does; the painted-skybox gate settled
  on the reference's real rule — any sky-flagged room the portal flood
  reaches; and interior objects — gates, hanging signs, chains — take their
  room's baked light, anchored at their box centre instead of an artist
  pivot that often sits under the floor.
- Hovering with a tooltip up takes its full fix: a tooltip content change
  used to run the whole-UI layout solve twice, and it runs once now, on top
  of the morning's fix that made an unchanged tooltip cost nothing at all.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:54:41 +07:00
SamandClaude Fable 5 34fdbd1d16 the keyring lands, keys open doors, and a building can own the sky
- The keyring is built. Your first key makes the keyring button appear by
  the bags, opening the window the original keeps its dungeon keys in — the
  server had been sending the keys all along; nothing had ever shown them.
- Keys open their doors now. The client used to cast the open as a bare
  spell, which the server rightly refuses; it now sends the item-use the
  original sends, carrying which key from which slot. The tooltip plays
  along: "Locked" turns the soft green when something you carry opens it,
  and a key stops inventing a "Use: Opening" line it never had.
- A building can own the sky: a WMO can name its own painted skybox, and
  Stratholme's burning city now draws its near-black-to-red dome instead of
  the zone's khaki gradient. The exact rule for when it applies settles in
  the next snapshot.
- Signpost tooltips follow the cursor again — the tooltip anchor forks per
  object class, corner for doors, cursor for signs — and the Blasted Lands
  lightning stops striking the same spot for ever: a placed doodad re-rolls
  its animation variation every play-window, like the original.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:54:18 +07:00
SamandClaude Fable 5 ac4d859a1b the doodad sun law, read straight from the real client's own draw calls
- Why fences glowed noon-warm at midnight: our sun lane multiplied the
  day/night colour by the client's documented 2.5 for doodads on lit ground,
  which pushes past white and clips to a daylit face. Two days of binary
  archaeology confirmed that multiply is real — on a render path the
  reference machine turns out not to run.
- The settle was an API trace of the actual 1.12.1 client standing at the
  same fences: on its Direct3D path the sun arrives at the day/night colour
  clamped to at most full strength — one for lit ground, half in baked
  shadow, never brighter than the palette. Our lane now commits exactly
  that. Midnight is moonlit blue, and adjacent lit/shaded fences blend the
  way the original does.
- Along the way: a capture-window override for era-resolution A/Bs, and a
  calibration dial that lived exactly one day — the by-eye level it found
  matched the traced law to a few parts in 255, then retired.
- Separately, the $-macro text expander now runs everywhere the original
  runs it: chat lines, mail bodies and item text, not just the UI strings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:53:10 +07:00
SamandClaude Fable 5 73646cbeaf the midnight fence hunt begins, and a spell's ground glow comes back
- Sun-lit fences rendered noon-bright at midnight. The hunt starts here: the
  model sun response switches to the curve read out of the real client's own
  shipped vertex program, the terrain-shadow bit under any doodad became a
  one-command query, and a new golden frame holds a fence lying across the
  shadow boundary — both states of the sun term in a single image (with a
  night twin). The full resolution lands in the next snapshot.
- Arcane Explosion's ground decal drew as a black tile: the additive blend
  was lost when a decal hopped render lanes. A regression, bisected with a
  human grading each build, and fixed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:52:55 +07:00
SamandClaude Fable 5 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>
2026-07-28 21:55:53 +07:00
SamandClaude Fable 5 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>
2026-07-28 21:55:01 +07:00
SamandClaude Fable 5 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>
2026-07-27 19:38:01 +07:00
SamandClaude Fable 5 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>
2026-07-27 19:37:42 +07:00
SamandClaude Fable 5 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>
2026-07-27 19:37:17 +07:00
SamandClaude Fable 5 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>
2026-07-26 19:20:51 +07:00
SamandClaude Fable 5 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>
2026-07-26 19:19:06 +07:00
SamandClaude Fable 5 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>
2026-07-26 19:17:47 +07:00
SamandClaude Opus 5 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>
2026-07-25 18:22:05 +07:00
SamandClaude Opus 5 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>
2026-07-25 14:57:54 +07:00
SamandClaude Fable 5 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>
2026-07-24 14:27:01 +07:00