SotA

Chris “Atos” Spears · Work Log

Shroud of the Avatar development at Catnip Games, day by day

Roadmap → Proposals Patch Notes Resources SQUIRREL! RSS

Week of July 13, 2026. This is an archive page; back to the current week.

2026-07-19 · 132 items

Headlines

  • Solved the native Linux client mystery: it never once connected to chaos. A 32-byte cap in the connection handshake rejected the Linux version string (Windows fit with zero bytes to spare), so every native launch stalled at login and our Linux players quietly fell back to Proton. The fix shipped on build 40 and the shard saw its first native Linux login within the hour. That player then hit a rendering crash; a Linux-only mitigation is in for the next build.
  • Player-customizable UI themes shipped: a new Options tab, a live Theme Editor window, named saved themes, and clipboard codes for sharing them.
  • The client runs on macOS. The first Mac build boots to the title screen after two startup fixes, and the tester page now offers a Mac download that refreshes with every release.
  • Same-day catch on the build 42 login blocker: the new loading screen could not start outside the editor and every scene load died with it. Root cause found in the logs, fixed with tests, and a new build sent to chaos within hours.
  • The Social window is the first big window rebuilt on the new UI framework: Friends, Party, and Guild tabs converted whole, plus a new Accept All button for friend requests.
  • The dev portal gained a full character admin page: a complete data viewer, working renames and sex changes with an audit trail, a fairy name generator, and an AI assistant that knows the character.
  • The black screen had a single cause, and it was never anyone's graphics card. One launch in five was deadlocking during startup: a synchronous asset load waiting on a background bundle mount that could only finish on the thread it was blocking. Found it by reading the boot telemetry the last build added, fixed it, and closed the four dead-end theories the bug had collected.

Community

  • Nightly forum sweep filed four wishlist ideas from player threads: loot drop table rebalance for high-effort enemies, a sound/animation payoff for the Bard ability Savage Sonata, optional account MFA, and expanded store payment options (Apple Pay, Google Pay, Cash App Pay, Venmo).

Infrastructure

  • Made the 15-minute tester-verdict sweep run invisibly. It had been opening a console window on the dev box every tick and stealing keyboard focus; it now launches with no window at all. Also cleaned up 146 stray tracker-fetch files the sweep had scattered at the project root and taught it to keep scratch files in a temp folder.
  • Extended the no-window fix to the three nightly scheduled jobs (forum sweep, community sentiment, daily summary). They now launch through the same invisible wrapper as the 15-minute sweep, so overnight runs no longer open console windows on the dev box.
  • Documented two test-runner pitfalls found today: status probes sent to the editor during a test run can fail unrelated tests by logging errors into the console, and long suite runs need the direct tool call rather than the command-line wrapper, which gives up after a minute.
  • Reconnected the Unity editor AI bridge after the development workstation moved to a new machine. The editor connection still pointed at the old computer, so assistant sessions could not reach the editor. Fixed the connection settings, and updated the guard that keeps two assistant sessions from driving the editor at once, which still referenced the old machine's paths.
  • Reworked the shared assistant configuration so machine-specific values no longer live in the shared files: each computer now supplies its own connection values and session-guard paths, and the defaults match the current dev machine. Documented the one-time setup for any future machine, and noted one limitation of the session guard on the new platform: two sessions grabbing the editor at the same instant can both get through, while normal back-to-back use is still serialized.
  • Release job tuning: server report regeneration now runs only on its own nightly schedule. A daytime release build had been pulling a full report pass onto the build machine ahead of the Windows client build; releases now reuse the latest nightly reports unless explicitly asked otherwise.
  • Chaos moved to build 41 in a daytime release (the new one-button job, reports skipped per the new default). It carries the full startup diagnostics for the black-screen investigation, the distant-creature bounce fix, the native Linux login fix, the theme editor work, and the tip jar recipe rework. 57 open tester tasks got the build number.
  • Tracked down why the editor refused to open the project after an interrupted session: a leftover scene-backup folder makes it wait on a confirmation dialog before loading anything, which looks like a silent hang when nobody is at the screen. Cleared the leftover state, verified the editor loads and the AI bridge answers, and documented the diagnosis and fix.

Crafting

  • The Only craftable filter at crafting stations now hides recipes you are missing ingredients for. It had been keeping them in the list, greyed out below the craftable ones, which a tester flagged on build 38 (tracker #826).

Client

  • Added a boot heartbeat and a watchdog to the startup telemetry: every five seconds until the main menu the client reports frame count, boot stage, focus, and display mode to the log server, and a background watchdog writes into the local log whenever the main thread stops responding during boot. One report is now enough to tell a frozen boot from a running game drawing a black screen.
  • Boot telemetry got sharper for the next build: a stalled startup now names the exact bundle or asset it is stuck on in both the heartbeat and the watchdog lines, and engine warnings during boot (shader fallbacks, swapchain complaints) now reach the log server instead of living only in the local log file.
  • Chaos build 42 broke entering the game: the rebuilt loading screen could not start in real game builds (an editor-only fallback hid the problem in every editor test) and the failure crashed each scene load, so updated players hung at login. Fixed the loading screen setup and the scene-loader crash it triggered, with regression tests; the fix build went to chaos the same afternoon.
  • Tried rolling chaos back to build 41 first. The deploy guard refuses a lower build number on a live channel, so the fix shipped forward as the next build instead.
  • Found why the new title screen burn opening never played in built clients even though it worked in the editor: the UI system resolves widget shaders by name, and shaders that ship inside asset bundles are invisible to that lookup in a real build, so the burn shader was silently swapped for a plain one. The material already knows its shader, so the lookup miss now keeps it. Rides the next build.
  • Fixed the startup hang that left players on a black screen with no title screen. The client was running a synchronous asset load from the main thread while a bundle was still mounting in the background, and the mount could only finish on a main thread tick, so the main thread ended up waiting on itself and never recovered. Bundle mounts now track whether they are still in flight, and any pending mount is finished before a blocking load starts.
  • Boot telemetry from the last build made the hang findable: one launch in five was not reaching the title screen (90 boot heartbeats started against 72 that finished over 36 hours), on four different testers and three graphics vendors, which ruled out the per-machine theories the bug had collected. Stalls that recover now report to the log server, so the near misses show up before they turn into a hang.
  • Spread the spell effect prewarm across frames instead of running about 460 prefab loads in a single frame. The window stays responsive while it happens, and the title screen still waits for it to finish so nothing reaches the world with missing effects.
  • Restored a loading-screen fix that a bad code sync had quietly reverted. On DirectX 12 machines with a cold shader cache, the loading bar no longer stalls near the end for minutes, and a slow warmup again suggests switching to DX11.
  • Fixed the Windows and Mac client builds, which had started failing to compile. A recent Linux mouse fix was being pulled into every platform's build, and it referenced a Linux-only system library that Windows and Mac do not have.

Jenkins

  • Diagnosed why the nightly Windows client build ran 43 minutes against 12 for Linux: about 15 minutes was the CI system itself copying the 15 GB build zip to the build server at 17 MB/s through its own encrypted, compressed transfer channel, while the same wire moves 106 MB/s raw. Windows builds now push the zip directly over the network in about 2.5 minutes and hand the deploy a pointer instead; the deploy verifies the file size before using it.

UI

  • The four new UI themes gained ornamental corner graphics: an engraved flourish border derived from the game's book ornament art, drawn in each theme's accent color (molten orange, copper, ink, violet). The standard look is unchanged.
  • Raised window opacity across the new themes after feedback that they read as far more translucent than the standard look, the bright Air theme especially. Panel fills now run near solid and Air's frost art was rebuilt denser.
  • Hardened theme loading against a startup edge case: a failed load now falls back to the standard look and retries later, and can no longer break a window's update loop.
  • Built the Theme Editor: a new Options Themes tab holds the UI Theme dropdown, a Custom Theme dropdown, and a button opening an editor window where the named themes become base values. Every color in the theme contract can be changed with sliders or hex (window opacity included), plus ambient motion, corner ornaments, and title and body fonts. Changes preview live on open windows.
  • Custom themes save locally under player-chosen names, up to 20, and apply across sessions. Copy Code puts a theme on the clipboard as a short text code and Paste Code imports one, so players can trade themes. Codes are parsed defensively: size caps, an allow list for color names, and clamped values, so a damaged code is one error message.
  • The theme editor is itself a new-style window and follows the active theme while you edit, which made it its own test case. Editing works because the base theme sheet is cloned in memory and its color table patched; the engine offers no way to author styles at runtime, and a test pins the internals so an engine upgrade fails loudly instead of silently.
  • Fixed the pet character sheet ignoring summon damage enchants (#830): jewelry with Summoned Water Creature Damage or Summoned Death Creature Damage always raised the summon's real damage, but the sheet's Damage range never moved. The sheet now evaluates the summon's actual attack formula, so the enchant, school mastery, and summon damage bonus all show in the displayed range.
  • Added an EditMode regression suite pinning the water and death summon attack formulas: rune data must keep reading the owner's creature damage stat, and the evaluated damage must scale with it.
  • First real NGUI to UI Toolkit conversion landed: the game's generic confirmation dialogs (Yes/No confirms, type-a-word safety confirms, and pick-an-option prompts) now render through a shared themed modal host on the new UI. The existing game code is untouched; about 70 call sites present the new dialogs automatically.
  • Settled a standing layering question while verifying: UI Toolkit panels draw above the old NGUI UI (the docs said the opposite). Converted dialogs sit correctly on top of legacy windows, and clicks on anything behind an open dialog are blocked, matching the old behavior.
  • Old-style color and bold markup in dialog text now converts to the new UI's rich text, so existing messages render unchanged. 17 new editor tests cover the converter, the type-a-word match rule, and a guard that the retired dialog registrations stay gone.
  • The queued informational popups (permission errors, mail notices, and similar OK boxes) followed the confirmation dialogs onto UI Toolkit. Queue behavior is unchanged: repeated messages are dropped, messages show one after another, urgent ones jump the line, and about 110 calling files present the new popup with no code changes.
  • The zone loading screen moved to UI Toolkit as well: same artwork, loading tips, and progress readout, rebuilt on the new stack and drawn above every other window. The scene-load flow drives it through the same calls as before, verified in the Editor with a full show, progress update, and fade-out pass.
  • Fixed the Options Themes tab from tester feedback: the tab was labeled Interface a second time, both of its dropdowns said Share location, and cloned multiplayer settings (matchmaking buttons, a version line) sat on the tab. It now reads Themes, the dropdowns are UI Theme and Custom Theme, and only theme content remains.
  • Deleted the five old-UI dialog prefabs and four view classes that the conversions replaced (confirmations, informational popup, loading screen), after reference sweeps confirmed nothing loads them. A guard test keeps them from coming back through a sync, so the old-UI inventory genuinely shrinks with each conversion.
  • Fixed popup and confirmation windows ignoring mouse clicks on OK, Yes, and No after the UI Toolkit dialog conversion. A player report on the mail-expiry notice caught it; keyboard Escape and Enter had been masking the bug. The same fault could also deaden clicks in tip jars, game tables, and GM windows opened later in the session. 7caa7f31e4, verify task #863.
  • Fixed the Open Theme Editor button on the Options Themes tab drawing outside the window: it kept a leftover position from the panel row it was cloned from and rendered past the right edge of the frame. It now sits under the theme dropdowns, and a new layout test keeps the tab's controls inside the window.
  • Hardened input for the new UI Toolkit windows after the build 43 report of dead mouse clicks. Every window now starts its input through one shared path that repairs a broken input state instead of inheriting it, so clicks keep working no matter which window or popup opened first. A guard test now fails the build if a future window skips the shared path.
  • The theme editor can now be closed with the Esc key and resized from a new bottom right corner grip with a sensible minimum size. The mouse used to be its only control, so a dead click state could leave it stuck on screen with no way out.
  • Three Tip Jar fixes: the item icons are re-rendered with transparent backgrounds so the drag icon loses its black square, the owner setting for what visitors see is now a button that cycles the three modes instead of a dropdown that spilled outside the window, and the jar window closes itself on zone change (tracker #820).
  • The Body Markings and Face Markings lists in character creation are now translatable, and the raw internal names are gone: BirdPerched reads Bird Perched, TribalFloral1 reads Tribal Floral 1, and so on. 65 marking names and both section labels joined the translation database (tracker #784).
  • Groundwork for moving the Social window (Friends, Party, Guild) to the new UI framework: ported its behavior rules (list sorting, permission gated buttons, party tab flow, pending friend request handling) into a standalone module with full test coverage. The visual rebuild lands next, including a new Accept All button for friend requests.
  • Animal Trainers now appear under Trainers in the overworld town hover info for Aerie, Brittany Fields, Castle Atos, Owls Head, and Port Harmony. Nob in Owls Head (previously titled Stableboy) and Oakley in Brittany Fields (previously untitled) now show the Animal Trainer title like their counterparts elsewhere.
  • Converted the Social window (Friends, Party, Guild) to the new UI framework, the first of the big windows to make the jump. Same tabs, filter, sorting, permissions, and party flows as before; the old window's 1,500-line state machine is retired and the rules now live in a tested module. The F key, window selector, Escape, and pinning all work unchanged.
  • New on the Friends tab: an Accept All button appears when you have pending friend requests and takes every request in one click.

Planning

  • Planned the next step for UI themes: a dedicated Options tab where the named themes become base presets you can tune (colors, opacity, motion, fonts), save under your own name, and share with other players as a short text code.

Bug Fixes

  • Fixed the tip jar follow-ups from the overnight logs: collected tips now show as "Tips collected" in the bank redemption list instead of an error placeholder, depositing a tip no longer throws a client error while updating your gold, and player-written mail opens with a proper letter body. Covered by new automated tests.
  • Tester accounts can now enter test scenes like the Island Challenge. The server refused them before, which made the Island Challenge verify task impossible to run.
  • Removed the retired Kobold Battle Camp zone from the Teleport to Zone destination list (tracker #821). It was an unfinished early version of the kobold camp with no arena fight and no boss, and a player teleported in expecting the wave battle. The finished fight lives in Kobold Expeditionary Camp, which is unchanged. A data test now keeps the old zone delisted.
  • Fixed the in-game tester verification board rejecting Claim This Task for developer accounts with a tracker error. Developer accounts now get the same claim permissions testers already had; tester accounts were never affected.
  • Elder Bodil, the shaman elder of Tanglemire, is a male character but spoke with a woman's voice. Recast him to an older male voice and regenerated 519 clips covering his dialogue, his ambient lines, and one shared villager line. The new voice is live now and needs no client update.
  • Fixed the mixed pronouns around Bodil: one villager line said "Her spirit warders" about him, and lines in German, Spanish, French, Italian, Portuguese, Russian, and Chinese described him as a woman. All of them now refer to him as a man. The text fixes ride the next build.

Server

  • Pulled 10 hours of chaos logs and cleaned up the noise they exposed: the per-hit PvP damage trace no longer floods the warning stream (one duel produced about 500 lines), routine server rejections like the tip jar rate limit no longer log as client errors, and the player-run village false alarm ("no PotInfo") at town spin-up is fixed for all 23 villages.

Networking

  • Dug into why nobody plays the native Linux client: server logs show zero native Linux logins since the channel launched. The two players who do play from Linux run the Windows build through Proton, and one of them keeps the native install synced daily but can never use it.
  • Reproduced it by running the Linux build on the build machine under the test harness: the client threw during the connection handshake and retried forever. The handshake capped the version identity string at 32 bytes; the Windows string is exactly 32 and the Linux one is 34. Raised the cap to 64 and made oversize strings truncate instead of aborting the connect. Windows would have hit the same wall at build 100. Fix rides the next chaos build, with handshake tests covering both strings.
  • The handshake fix shipped on chaos build 40 and worked immediately: within the hour a player was in the world on the native Linux client, the first native Linux login the shard has ever seen. Our automated harness confirmed it too, logging in and running commands end to end.
  • That first Linux player then crashed three times in six minutes. Server logs show clean play then abrupt silence, and a core dump we captured points at a rendering worker thread crash under threaded OpenGL. Shipped a Linux-only mitigation that turns graphics jobs off in the Linux build; Windows keeps its threaded rendering. Awaiting the next build and the player's verdict.
  • Verified the Linux rendering mitigation on chaos build 43: the native client logged in, entered a level, ran commands, and held a 10 minute in-world soak with a clean log. Build 40 sessions could die inside two minutes. Waiting on real player reports to call it fixed.
  • The Linux player confirmed build 43 still drops about ninety seconds into the world, so single-threaded rendering was not the cure. The crash lives in the OpenGL driver path. The shipped build also carries a Vulkan renderer, and it checked out on our test rig (correct rendering, full login to in-world), so the player now has a one-line launch option to switch drivers while we decide whether Vulkan becomes the Linux default.
  • The Linux crash mystery is solved, courtesy of the first automatic Linux crash upload: a native mouse-cursor helper in the game only speaks the older X11 display protocol, and on a Wayland desktop the first call into it, typically closing an in-game window a few minutes in, killed the whole process at the dynamic-linker level. No graphics driver could have mattered, and our X11 test rig could never reproduce it. Rebuilt the helper with proper linkage and Wayland-safe behavior, verified both modes on the build machine; fix rides the next chaos build.

Build Farm

  • Moved the nightly server-reports build from 3:00 AM to 10:00 PM Central. At the old slot it queued behind the midnight chaos release and did not actually start until about 5:00 AM; now the roughly hour-long run has the Windows build machine to itself and finishes before the release window opens.
  • Fixed the new fast artifact upload for Windows client builds: a path quoting bug made the direct copy fail on its first run and fall back to the old slow upload. Also fixed that failed copy wrongly marking an otherwise good build as failed, which cost this morning's release run.
  • Raised the build workstation's network link from 1 Gbps to 2.5 Gbps (the adapter supported it but was capped in driver settings). Measured build artifact transfers at about 250 MB/s; the 15 GB Windows client package should now upload in about a minute instead of 15.

Rendering

  • Imported the Beautify post-processing plugin and the HBAO ambient occlusion plugin into the client project. First step of a post-effect overhaul that will bring per scene visual tuning and post effect trigger volumes.

Scene Analysis

  • Scene cards on the dev portal scene browser now carry a live quick-stat line: frame rate (tinted red under 20, yellow under 30) and average zone load seconds from the last 14 days. New sort orders put the worst FPS or the slowest loads first.
  • The scene analytics feed now reads the newer client performance telemetry: typical and 1% low frame rate, CPU vs GPU frame cost, stall counts, a per-phase zone load breakdown, and scene memory cost. Detail pages show all of it; the load panel names the slowest phases per scene.

Audio

  • Bloodbone Skeletons now speak with a gravelly, hoarse undead voice instead of a normal human voice, fixing a player report. Covers the Footman, Archer, Mage, and Ichor Witch; shipped as a voice data update, so it reaches players on the next game start with no new build.
  • Fixed Captive The Boy in Ardoris speaking with a child's voice despite his grown-man model (tracker #831). The voice casting had read the name "The Boy" as a child and picked a kid's voice; he is recast to a proper adult male voice. Live already, no build needed.
  • Tomas Cucu, the Aerie shrine caretaker, gets his voice: his conversation prefab still carried stale data from an Etceter pilgrim, so the voice pipeline had him filed under the wrong name and never generated his lines (tracker #851).
  • Shrine caretakers now speak their shared lore aloud. The voice generator resolved shared dialogue includes by name only and dropped the Global copy, so lines like the Ardoris shrine responses of Chen and Yen displayed as text but never played. The fix closes the same gap for every NPC with shared dialogue, about 7,000 lines game-wide (tracker #851).
  • NPC voices stop reading stage directions aloud. Natasha in Aerie was saying the word "sniff" in her farewell; sniff, sigh, cough, chuckle and similar asterisk-wrapped directions are now skipped by the voice while the text keeps them (tracker #850).
  • Fixed two wrong-gender NPC voices: Isabel Spalding in Aerie (record marked male, now voiced by a female voice, tracker #848) and the Orator in Soltown Catacombs (record had no gender and fell to a female-sounding voice, now male, tracker #823).
  • The Visitor by the Castle Atos entrance had a male model paired with a female voice record; the spawner now uses a female model to match (tracker #824).
  • Muting one NPC no longer silences the speaking voice of every NPC of the same type. Generic NPCs share a record behind the scenes, so muting a single guard muted face-to-face replies from every guard like him, which is the likely story behind the silent Castle Atos guard (tracker #806). Mute now covers ambient chatter and death cries only.
  • Generated and published the voice update carrying all of the above: 7,571 new spoken lines (about 920k characters of speech) covering Tomas Cucu, the shared shrine-caretaker lore game-wide, the stage-direction fixes, and the recast voices. Live on chaos; clients pick it up on next login with no new build.
  • Ebon Cultists, siege engineers, and the Ravenswood bandits swap their calm narrator voice for a gravelly aggressive one after tester feedback that their combat threats sounded flat (tracker #815).
  • Swapped the overworld ambience at Tanglemire's map marker from the generic cheerful town loop to the bog ambience heard inside the town. Other towns on the travel map keep the standard town sounds.

Mac Client

  • Fixed two startup black screens in the macOS client. Game asset bundles were being packaged into the wrong folder inside the app bundle, and a missing audio library crashed the loading sequence instead of just muting sound. The Mac client now boots to the title screen.
  • First hands-on test of the Mac client, built by the new Mac build agent and verified on an Apple Silicon laptop against the chaos shard. Audio and Steam stay disabled on Mac until updated native libraries land.
  • The tester page now has a direct download for the Mac client. The file refreshes automatically after every release so it always matches the shard. First release through the new pipeline shipped Windows, Linux, and Mac together.

Build Pipeline

  • Nightly releases now also build a Mac client with the matching version number, so a side-loaded Mac client can log into the chaos shard. The Mac step is best-effort and never blocks a release if the Mac build machine is unavailable.
  • After each release deploys, the pipeline now refreshes the Mac client download that the tester page links, so the download always matches the shard version.
  • Fixed the Mac build artifact shipping at twice its size. The app bundle kept obsolete asset copies from older builds inside itself; the packaging step now removes them, cutting the download roughly in half.

Launcher

  • Launcher build 17: fixed a gap in the new bad-exit detection found by watching a live case. The rule only armed once the game had written its clean-shutdown stamp at least once, but a player whose every session freezes never writes it at all. The launcher now decides from the installed game version instead, so the very first stuck session after updating uploads its log.
  • Two more remedies for the startup black screen, ready for the next launcher build: the launcher now sets the Windows per-app GPU preference for the game (the setting a player would otherwise dig out of Windows display options; an explicit player choice is never overwritten), and the debug panel gains a Clear GPU cache button that wipes the NVIDIA driver shader caches, which rebuild on the next start.
  • Launcher build 18 published: the GPU preference write and the Clear GPU cache button are live, and installed launchers update themselves on next start.
  • Added a Graphics picker to the Linux launcher, matching the one Windows players have: OpenGL or Vulkan, remembered between sessions, applied at game start. Vulkan is the recommended setting for the players hitting the OpenGL crash while we decide on the long-term default. Shipped as launcher version 19; installed launchers update themselves on next start.
  • Vulkan did not save the Linux player either: both graphics drivers crash the same way a couple of minutes into the world, while the same machine plays for hours through the Windows compatibility layer. That moves the suspect from graphics to the native client itself, and the missing piece is the log file the crash leaves on the player machine. The launcher crash reporter, previously Windows-only, now runs on Linux too: launcher version 20 detects an unclean exit and uploads the session log automatically, including retroactively for the last crash. Shipped and self-updating.

Investigations

  • The startup telemetry paid off on its first day: the black-screen tester ran chaos build 39 three times and every session reported its boot stage before going quiet. The freeze is during the login scene load itself, before the title screen, shader warmup, or menu are ever reached, and it happens on both DirectX 11 and DirectX 12. Waiting on the automatic log upload for the exact stopping line.
  • The first automatic startup-failure reports arrived within minutes of launcher build 17 going out: the stuck player retried twice and both session logs uploaded themselves. The freeze point is now pinned to the early shader loading pass, his log always ends at the same shader, and a second player with near identical laptop hardware hit the same stall exactly once and recovered. Filed with full detail on the tracker; cache clearing steps are on their way to the player while the next build adds the frame heartbeat that settles frozen versus black.

Creatures

  • Fixed distant creatures bouncing and freezing (#827). Past the visibility range the client only gets occasional position updates, and playback snapped creatures back to their last known spot every frame. Starved creatures now hold in place, then glide to their next reported position, with a speed cap so the catch-up reads as walking.
  • Distant creatures also stay planted on the terrain now (a low-rate ground clamp runs while their normal ground snap is off), and the range check gained an enter/exit band so creatures at the boundary no longer flicker between moving and frozen every second.
  • Moving creatures send a reliable position keyframe every 3 seconds instead of 10, so far-off observers see them wander rather than stand still. Added 20 EditMode tests over the new playback and range-band logic.

GM Tools

  • Fixed the GM player window's Send CS Message action, which always failed with a character-not-found error even when the player was online. The window sends the target by name while the server only looked it up by internal id; the server now resolves names directly, the same way devoice requests already work.
  • Fixed the GM prize mail window's item and recipient pickers: clicking a suggestion never registered it, so the Add button refused to stage anything. Clicks now land before the popup closes, and the same fix covers every autocomplete field in the GM and tester tools.

World

  • Flattened the uneven terrain under a town lot in Kingsport that rejected planting beds and other deco in its back corner (placement preview showed red). Reported on the forum. The fix rides the next chaos build.

Tester Tools

  • Added fly mode to the /tester tools window: a new Movement section with a FLY MODE toggle and speed field (1 to 100). Flying detaches the camera from the character; leaving fly mode drops the character at the camera position, same behavior as the GM fly button. Window layout and button parameters are pinned by new EditMode tests. a9ef36092a, verify task #870.
  • The in-game verification board (/verify) can now be filtered: a toolbar box narrows the task list to tasks matching every typed word against number, title, build, and zone. The list also gained a column header row with new Zone and Age columns showing where each task's saved bug location is and how many days it has been open, and the list pane widened so titles stay readable. 13991b9dcc, verify task #892.
  • A This zone checkbox on the verification board shows only tasks whose saved bug location is the zone you are standing in, and re-filters when you change zones. Player-owned towns are told apart even when they share a template map.
  • Fixed the tester verdict automation flagging one of its own processing notes as new tester work: every 15-minute check since last night launched a full review pass that found nothing. Checks now skip the automation account's own notes, so idle ticks finish immediately. 2f377e772c.
  • A Live only checkbox on the verification board, checked by default, hides tasks whose change has not reached chaos yet. The build-deploy pass now also updates a task's Build line when it comments the build number, so carried tasks appear on the board the moment they go live. f0dc9f3355, verify task #892.
  • Marked 62 tester tasks as live on the tracker: their bodies still said the change was not on chaos even though the carrying build had shipped and been confirmed in a comment, which would have hidden them from the new Live only view. The Build section on each now names the build. Tasks genuinely waiting on the next build keep their marker.
  • The 15-minute verdict automation now fixes those Build lines itself: once a deploy confirmation comment exists, the next pass rewrites the body line, with a guard so a task deliberately set back to waiting after a reverted fix stays waiting. Its first run caught 11 tasks the one-time pass had missed. a09f96d5ab.
  • Found and fixed a scheduling bug in the same automation: a time-zone slip in how it reloaded its progress marker meant that every evening after 7 PM Central it asked the tracker for tomorrow's updates, scanned nothing, and went blind until midnight. Verdicts posted in that window sat unprocessed until the next morning.

Gameplay

  • Summoning a mount while holding the coconut halves now puts the coconuts away automatically and mounts up. Before, the summon was refused with a mounted error until both halves were manually unequipped.
  • Mailboxes placed as decorations on player lots now open the mail window for any visitor. They had been silently refusing anyone without Guest access to the lot, even though a mailbox only ever shows your own mail (tracker #569).
  • Characters no longer sink into the ground during emotes and looping animations such as mining. The ground snap that keeps movement smooth over small bumps also ran while standing still on slopes and pulled the feet under the surface; it now applies only while moving, with a small cap (tracker #529).
  • Player dungeons gain Dragon Totems: six tiers crafted at the smelting station from a new Dragon Essence field-dressing drop, hosted by the Rise Shaft room, which now accepts dragon totems and spawns a dragon scaled to the totem, from a red drake up to an elite clockwork dragon (tracker #625, from the forum wishlist).

Oracle

  • The Oracle can now explain the harvesting swing meter: the Gathering Resources guide covers the timing ring, the 12-hit chain cap, why missing never costs anything, and how gathering skill, Meticulous Collection, and Swift Gathering change the zone and sweep. Every number traced to the shipped values, added a What's New entry, deployed live and verified with live questions.

Dev Portal

  • Built a character viewer for the internal dev portal: search any character and see stats, skills, gold, every item across bags, bank, mail and lot storage, owned lots, lot access, town roles, guild membership, and vendor listings on one page.
  • Added a fairy style name generator that suggests valid, unused names, wired into the character page's rename form. The rename and sex change admin actions run through the game server's own rename operation with every attempt recorded in an audit log. Verified live end to end with a test character: renames apply in about 3 seconds, duplicate names are rejected, and a sex change updates both database records.
  • Added an AI assistant panel to the character page that answers questions about the loaded character's data.

Localization

  • Translated the rebuilt Social window and the Theme Editor into all seven supported languages (German, Spanish, French, Italian, Portuguese, Russian, Chinese), including the new Accept All button. 53 new interface strings went through the standing translation pipeline with its validation gate; every language passed with nothing quarantined.

Tracker

  • Gave four team members the ability to close items on the player wishlist board. The board had no project members, so everyone landed on the default role, which allows posting, commenting and voting but not changing the status of someone else's suggestion. Added an idempotent setup script that grants the curator role, and applied it.

Tools

  • The Tester Companion puts the /tester tools on a browser page: load zone, skill setting, item duplication, and fly mode from a second monitor while the game runs fullscreen. Opened from a button in the /tester window or with /tester web; the page talks only to the testers own client on their own machine.
  • The per-scene scene-contents updater in the editor build menu no longer fails on checkouts without the knowledge debug data file.

Tester tools

  • Fixed the Hours on Chaos column on the tester leaderboard, which showed nine testers their entire play history from the main game instead of time on the test shard. The worst row read 28,529 hours under a column headed Week, which holds 168. Those accounts carry playtime from long before the test shard existed, and a gap in how the collector picked its starting point credited all of it. Hours are now counted as time actually accrued between samples, and the stored history was recomputed, so the board reads 4 to 33 hours. Testers whose numbers were already right are untouched.

Images

2026-07-18 · 90 items

Headlines

  • White ground in random encounters fixed, and the trail led much further. A player report of white ground in a forest road encounter uncovered 1,382 terrain paint layer files lost in the project's version control move, plus 44 terrains whose layer data the new engine no longer reads. All restored or rebuilt; every terrain in the game now has its ground textures again, including the Solace Bridge starter area and Hidden Vale. Rides the next chaos build.
  • The tester workflow moved into the game: a new /verify window lists verification tasks, takes claims and verdicts, and can teleport you straight to a bug's saved location. Verdict processing is automatic, closing verified tasks and routing failed ones back to the bug tracker with the tester's notes.
  • Tracked down and fixed a client freeze at 98% on the loading screen that could strand players entering certain towns. The fix is live on chaos build 38.
  • Black-screen crashes at startup now report themselves. A tester could not get past a black screen and nothing ever reached us, because crash reporting only armed once you were in the world. The launcher now expects proof of a clean shutdown from every session it starts; a session that never shuts down cleanly uploads its log automatically, tagged with how far startup got. Launcher build 16 is live; the game half rides the next chaos build.
  • The game speaks Italian and Spanish: both full translations landed today, each with every line of NPC dialog covered, and with them all seven supported languages are now complete
  • Chaos now gets a nightly automated release: build and deploy of the latest code at midnight, gated by fast preflight checks.
  • The new UI windows are now skinnable: five visual themes (Classic, Obsidian, Fire, Air, Arcane), selectable in game options, applied live.

Combat

  • Lowered the Dash skill sound effect volume to match other skill sounds, after tester feedback that the new whoosh was too loud (tracker #679).
  • Fixed cover reducing every tick of a damage over time effect. Cover was meant to reduce only the hit that applies the effect, but a broken check made the reduction repeat on every tick, so ducking behind a wall weakened a bleed already on you. Bleeds, burns, and poisons now deal full damage on ticks after the first; multi-shot volley skills keep cover reduction on every shot. Rides the next chaos build.
  • Weapon on-hit effects (poison enchants, skill on-hit runes) no longer trigger on swings that miss or get dodged, blocked, or parried. Glancing, normal, and critical hits still trigger them; crystal swords keep their special behavior. Follow-up to the avoided-swing rider fix.
  • Fixed area effects rolling one chance for everything: spells, songs, and traps with several effects gated them all on the first effect's roll, so mastery-gated bonuses applied without the mastery and secondary procs fired at the wrong rates. Each effect now rolls its own chance. Tracker #731, verify task #803.
  • Chased the forum report that Shadow Form, Shadow Shield, Cat's Grace, and Stalking Cat potions refuse to slot on the combat bar (tracker #700). Could not reproduce it on the new build: checked the consumable whitelist, rune flags, deck rules, and the deck save round trip, then verified in a live session that all four lock onto combat bar slots like any other buff potion.
  • Added an editor test suite that pins every rule a buff potion needs to be slottable, so a future potion cannot ship with a missing whitelist entry again (Cat's Grace shipped that way once). Filed tester task #807 to confirm on chaos.

Tracker

  • Issues on the bug tracker now record where they came from: a player report through the in-game Oracle, a forum thread picked up by the nightly sweep, or internal development tooling. Previously only Oracle reports carried that marker and everything else showed a bare automation account, which made an internally filed issue easy to mistake for a player report. Backfilled the marker on 119 existing issues.
  • Bug reports imported from the forum now also credit the player who raised the thread in the tracker's reporter field, the same field Oracle reports already use.

Engine

  • Advanced the project itself to the engine's newest maintenance release, matching the build machines updated earlier this week, so editors and builds now run on the same engine version. Picked up the material and font files the newer editor re-saved on open.

Client

  • Added an on-screen message during the first-time shader preparation on DirectX 12. When a graphics driver update clears the shader cache, that step can take several minutes, and the loading bar looks stuck near the end while it works. The game now tells the player it is a one-time compile and that choosing DirectX 11 in the launcher makes loads fast. The message shows only on DirectX 12 when the wait runs long, and not on DirectX 11 or on later loads once shaders are cached. Rides the next chaos build.
  • Fixed fountain fireworks only working once per scene. The first fountain you set off played fine, but every later one just placed the cone with no sparks or sound until you zoned or relogged, for every color. The effect recycling system was handing back a gutted copy after the first use; it now returns the whole firework intact. Verified against the original 2022 player report. Rides the next chaos build.
  • Added logging that records when a player hits the long first-time shader wait on DirectX 12, including how far it got and whether it finished. A player who closed the game during that wait used to leave no trace at all, so this lets us measure how often it happens and confirm the DirectX 11 guidance is reaching the people who need it. Rides the next chaos build.
  • Fixed a bug that could freeze the client at 98% on the loading screen when entering certain towns. The freeze came from a recent change to how mimics and trapped chests wake up on first interaction, and loading now completes normally.
  • Chaos build 38 went live on Windows and Linux, carrying the 98% loading-screen freeze fix.
  • New title screen opening: the game now boots to the old forest title art alone, holds one second, then a burn effect eats it away over 2.5 seconds with a glowing ember edge, revealing the new Rebirth of Chaos title art. The new art sits clean for a second before the menu fades in. Plays once per launch; logging back out to the title skips straight to the menu.
  • Built a new soft-edge burn shader for the old NGUI front end to drive it, with a generated noise mask (the stock masks read nearly black in the linear-color pipeline and collapsed the effect ramp). Wide monitors get black side bars beside the old 16:9 art that burn away in sync. The old logo overlay is gone; the new art carries its own title. Import settings on the new 3440x1440 background were also fixed so it no longer shipped downscaled and squashed.
  • Startup now stamps progress milestones (engine up, login scene, shader warmup, main menu, in world) that also stream to the log server before login, so a client stuck during boot shows exactly where it stopped.

Audio

  • Fixed drunk NPC voice lines reading their hiccup markers out loud. Dialogue writes hiccups as asides like *hic!* and *urrp!*, and the voice system spoke them as literal words. Those markers are now dropped from the spoken audio while the text on screen keeps them, and a line that is nothing but a hiccup plays silently. Seven characters across the game were affected, including the Drunken Ritualist in Tenebris Harbor from the player report. Live now for all players; a machine that already heard the old lines may keep the old audio in its local cache for a while.
  • Fixed the same character shouting "MY" as the letters M and Y. The voice system read the all-caps word as an acronym because it has no standard vowel; it is now spoken as the word wherever it appears in dialogue.
  • Scoped voice regeneration tooling: refreshing clips after a pronunciation rule change now targets only the lines the new rule touches, 210 clips this time instead of the 1,686 a full refresh would have redone. Filed a follow-up for the wider family of written stage directions (snorts, whinnies, singing) the voice system still reads literally.

Community

  • Logged a forum suggestion for active magic mechanics (skills, gear, consumables, bard, pet support) to help mages counter monster magic resistance onto the suggestion tracker.

Website

  • Added a view toggle to this work log. By category keeps the grouped layout; Newest first lists each day's entries in the order they were added, each with its time of day and a category tag. Existing entries were stamped with their original add times from the project history.
  • Entries added since your last visit now show a small NEW marker in both views. The marker is per browser and resets each visit; the first visit from a new browser shows none.
  • Reworked how entries are posted behind the scenes: two people adding to the log at the same time could overwrite each other's lines, and the daily item count could drift. Additions now queue instead of colliding, the count recomputes itself, and publishing refuses to remove lines that are already on the live page unless told so.

Gameplay

  • Fishing now reads out water depth: a label by the aiming cursor shows the depth in feet at the lure spot, and a chat line repeats it when the cast lands.
  • Trophy fish size and quality now scale with water depth. Casts near the minimum fishable depth give small fish and full-size trophies need roughly 16 feet of water. Decorative fishing ponds on player lots are unchanged. Came from a player report of fishing working in the shallows at a stone dock in Ardoris.
  • Trophy fish now remember where they were caught. The catch location was looked up from the world's town list every time a tooltip was drawn, so a fish caught in a player-owned town that was later removed showed a generic template name instead of the town, on loose and mounted fish alike. The town name is now written onto the fish at the moment of the catch, and the tooltip only falls back to the old lookup for fish that predate the change. Came from a forum thread about fish caught in a town the player knew was about to disappear. Rides the next chaos build.
  • Built the companion data repair that writes the saved catch location onto existing fish and other looted items whose town still exists, covering inventories, banks, mail, vendor listings, and fish mounted on walls. Fish that already lost their town name before the change cannot be repaired and keep the template name. The repair is part of the standing checklist that runs whenever a copy of live data is brought over, so refreshed test data stays fixed. Verified locally: town and city items stamped, removed-town items correctly left alone, second run changes nothing.
  • Fixed the long-standing bug where patrol pets and conversationalist NPCs on water-adjacent lots walked off docks into the water, snapped back to land, and repeated forever (reported since 2021). Wander destinations are now checked against walkable ground before the pet moves, covering deco pets, patrol pets, NPC wander, and flocking. Tracker #644, verify task #799.
  • Fixed the rest of the interactables that could get permanently stuck "in use by another player" after an interrupted interaction: corpse and container looting, breakables, music boxes, jukeboxes, phonographs, water sources, fishtanks, doll cabinets, mannequins, and resource nodes. Same guaranteed-release pattern that fixed treasure chests, now shared by all of them.
  • Read-only viewers closing a mannequin or doll cabinet window can no longer clear the ownership of the player actually using it. New editor test suite pins the release-on-every-teardown-path contract.

World

  • Fixed the white ground in random encounter areas, from a player report of a forest road encounter that also named dragon and elf encounters on the plains. The project's move to new version control had silently dropped a folder of 1,382 terrain paint layer files whose file names contain parentheses and commas, so every terrain that used them had no ground textures to draw and rendered plain white in the game while the editor showed a gray checker pattern. Restored the folder from the old source control copy and the affected terrains reconnected to their layers with no further changes. Rides the next chaos build.
  • Rebuilt the ground paint layers on 44 more terrains that stored their layer data in a format the new engine no longer converts, using the layer definitions recovered from the original files. This covers the Solace Bridge starter area, Hidden Vale encounters, the Graff Gem Mines surface, Vertas Pass, the biome terrains, and several island and player town templates. A scan of all 371 terrains in the game now finds zero with missing layers.
  • As insurance against a related packaging issue, terrains that still use the engine's built-in default ground material now switch at scene load to a project copy of the same material, one the build pipeline can protect from having its shader variants stripped out of packaged scenes. Covered by new editor tests, including the instanced and deferred rendering combinations these terrains need.

Decorations

  • Added a Tip Jar decoration for player housing. Visitors can drop gold in, with a checkbox to tip anonymously; the owner opens the jar to a donor list showing who gave what and when, and a Collect button that takes it all. Owners choose what visitors see: the deposit prompt only, the running total, or the full donor list.
  • Two versions: a craftable clay jar (carpentry level 30, recipe sold by carpentry supply merchants) and an ornate jar staged for the Crown store pending its price and picture pass.
  • Gold safety shaped the design: every deposit and collection is a single server-side step that cannot pay twice on a retry, and a jar removed from a lot mails its balance to its owner instead of carrying gold on the item. A review pass before commit caught and fixed two payout edge cases.
  • Reworked the clay tip jar recipe after review: firing clay belongs to the smelting skill. The recipe now requires smelting level 30 with smelting tongs and six raw clay, and is sold by the decoration recipe merchant that carries the antique clay pot recipe rather than the carpentry supply merchants. Takes effect with the next chaos build.

Housing

  • Laying a decoration flat (like a book on its side) no longer shares a key with the combat glyph combo binding. It is now its own control, Deco Rotate Extra Axis, default R, listed under Options > Controls. Rebinding Set Glyph Combo used to silently move the deco rotate with it.

Infrastructure

  • Concurrent work sessions kept tripping over the repo's single git staging area: one session's commit could sweep in thousands of files another session had staged, twice in one day under the wrong message. Commits from tools now build in a private staging area and land atomically, retrying if someone else commits first, and a guard refuses any plain commit over 150 files unless it is deliberately confirmed.
  • Fixed the commit helper used by concurrent work sessions: every commit it made left ghost staged entries in source control for the files it touched, and a later plain commit could quietly sweep those in and undo the work. The helper now clears its own entries, and a stray push-guard script from yesterday's batch is checked in.

Build

  • Mac client build broke this morning: the build agent was still pointed at the old Unity editor install after the project moved to the newer editor build, so it failed before Unity even launched. Repointed the agent config and kicked off a fresh Mac build to confirm.
  • Added a one-button chaos release job to the build farm. It pins the whole release to one commit, runs cheap server compile checks first, then builds both client platforms and the server reports from that commit and hands the deploy the exact build numbers.
  • The mirror-drift check that would have caught yesterday's failed release now gives a real verdict on the deploy machine (it used to skip there and report success), and it also runs inside the deploy before the large archive extractions. A doomed release now stops in about ten minutes instead of after two four-hour client builds.
  • Full client builds now schedule only on build machines with a working graphics device. A full build that landed on the second Linux agent used to fail in under a second because that agent has no display.
  • Server hotfixes gained a supported deploy path: a release can carry a server-only fix stacked on top of the release commit, checked by commit ancestry, replacing hand-edited pipeline recovery.

Testing

  • Added an in-game Tester Verification board: type /verify to open a window that lists the open verification tasks, shows each task's full text, and takes claims. Signing in uses your game account, so claims and verdicts appear on the task tracker under your own name.
  • Verdicts drive the tracker by themselves now. Marking a task Verified Fixed closes it with a reply; Not Fixed or Partial Fix files or reopens the matching bug with the tester's notes attached, then closes the verification task with a pointer. A checker runs every 15 minutes.
  • Bug locations travel with reports: a verdict can attach where the tester is standing, and any task that carries a location gets a Teleport to Bug Location button that drops you at the exact spot.
  • Task titles in the new verification window were getting cut off mid letter; they now shorten with a proper ellipsis, rows are tall enough for the game font, and the task list takes more of the window.
  • The verdict checker is installed and running: it looks for new tester verdicts every 15 minutes, and the task tracker now carries a location field so bug spots can ride along with reports.

Content

  • Rebuilt the Island Challenge navigation data. The scene's pathfinding bake was from 2024 and no longer matched the islands, so all 30 creature spawners (skeletons, trolls, crocodiles, satyrs) failed to place at scene load and monsters could appear stuck or missing. After the rebake every spawner lands on walkable ground.

NPCs

  • Fixed Shock Monkey Mongo in Kobold Camp barking raw template labels (boast_human: MONGO STRONG!) in chat and in the spoken line; cleaned the English source data and the seven translation databases, and redeployed the client language payloads.
  • Gave Mongo a robot voice. New FX-voice mechanism in the voice pipeline: a synthetic voice id maps to a catalog base voice plus a fixed filter chain (pitch down 4 semitones, 70 Hz ring-mod buzz, band limit, light bitcrush) baked into the clips at generation time. 23 clips regenerated and published.

Telemetry

  • Expanded the once-a-minute client frame rate sample: it now also reports median, 1 percent low, and standard deviation for the minute, plus OS, CPU and GPU frame times, and draw call counts. Values the hardware cannot supply are left out instead of logged as zero.
  • Clients now flag draw call spikes per scene with the player position attached, limited to real new peaks so the log stays quiet.
  • Built a Client Frame Rate dashboard for the internal log stack: per-scene fps table (average, median, stdev, 1 percent low), fps by GPU, by OS, and by build, CPU vs GPU frame time, draw call peaks with locations, worst scenes, and hitch counts. New fields start flowing with the next chaos build.
  • Ran the new frame rate test suite for the first time: 30 checks on the stats math, OS labeling, peak rate limiting, and log line format, all passing.

Build and Deploy

  • Chaos build 37 is live on Windows and Linux: frozen trophy fish catch locations plus the backfill tool, the craftable tip jar, the deco rotate keybind split, the restored terrain paint layers, and a slightly higher mount jump.
  • First deploy attempt failed after both client builds: two new server files were on the classic build's file list but not the ported server's, so the server would not compile. Added the missing entries and redeployed without rebuilding the clients. A pre-deploy check for this gap is queued as pipeline work.
  • Ran the catch-location backfill on the chaos database after the deploy: 16,043 existing fish and quality items now carry their frozen catch-location text, and a second pass confirmed zero records left to update.

Localization

  • Italian translation complete: coverage went from 27.2% to 99.5%, NPC dialog from 8.3% to 100%. 86,421 lines were machine translated through the LLM pipeline (Sonnet bulk pass, Opus repair round, 13 hand-balanced markup records), and an Opus audit then fixed 310 of 1,187 flagged lines. Client payloads were regenerated: 144 files, with 77 conversation scenes getting their first Italian file. Books stay English for now (separate ship path); Spanish is the last partial language.
  • Retired the 2026-07-09 warning that regenerating the Spanish and Italian payloads would drop old translations: re-verified before deploying, the translation db is now a superset of both shipped payloads, so the regen was safe. Docs and runbook updated; the launcher language picker now shows Italian at 99%.
  • Spanish translation complete: filled the last partial language from 29.4% to 99.6% coverage, with all 66,792 lines of NPC dialog now translated. 83,876 lines were machine translated, gated by the markup validator, and a review pass corrected 261 of 1,137 flagged lines. Books stay English for now, same as the other languages.
  • With Spanish done, all seven supported languages sit at 99%+ coverage and the translation fill program is finished. The client payloads were regenerated (80 conversation scenes got their first Spanish files) and the launcher language picker now shows Spanish at 99%. Rides the next chaos build.

Launcher

  • Crash reporting now covers sessions that never reach the title screen. The launcher records each game launch and the client writes a clean-shutdown stamp on quit; a session with no stamp (black screen, freeze, Task Manager kill) uploads its log on the next launcher start with a tag for how far boot got. Launcher build 16 is out and self-updates; the game half rides the next chaos build.

Investigations

  • Chased a tester report of a black screen at startup on Windows. Server logs show the client boots, connects logging, loads early assets fast, then goes quiet before the title screen on five attempts across three builds; nothing uploads because crash detection needed an in-world marker. The new clean-exit reporting exists to catch exactly this case.

UI

  • Fixed unreadable highlights in the new UI windows: selected and hovered list rows drew a light gray fill that nearly matched the text color, and the disabled claim button on the tester board sat on a light gray fill too. Rows now highlight with a dark blue tint and brighter text, and the claim button stays on the dark panel.
  • New UI Theme option in Options > Interface: the new-style windows (Oracle helper, tavern game boards, tip jar, tester board) can be reskinned with five looks: Classic, Obsidian, Fire, Air, and Arcane. Changes apply to open windows immediately and persist across sessions.
  • Every color in the shared UI Toolkit theme now routes through a semantic token contract, with a test that fails any skin missing a token. Windows ported to the new UI later pick up all five themes with no extra styling work.
  • Air is a full light theme with dark ink text and its own frost window art; the dark themes retint the stock art. Air and Arcane bring new title fonts (Cinzel and Grenze Gotisch, both openly licensed), and each theme has a slow ambient glow on window backgrounds.

Jenkins

  • Fixed the build-all farm job, which failed on its first run before starting any builds. The job generator wrote the six client job names into the script without quotes, so the pipeline crashed parsing its own job list. One-line fix in the seed; takes effect at the next re-seed.
  • Scheduled a nightly automated chaos release: the one-button release job now runs at midnight Central, builds the latest code, and deploys it to the chaos server unattended. Preflight checks run first, so a broken tip fails in minutes and nothing deploys.

Images

2026-07-17 · 60 items

Headlines

  • Fixed a black screen some players hit after launching. The game would run with sound but show nothing. It traces to the NVIDIA overlay conflicting with the game running in DirectX 12 full screen. The launcher now defaults to DirectX 11 and windowed, which avoids it; players who set their own graphics or display option keep it. Launcher build 14 carries the change and installs itself on next start.
  • Chaos is now on build 36, and Episode 2 is open to every chaos account. Windows and Linux clients and the server shipped together from one version, with the login probe passing before go-live. Build 36 adds the separate Voice volume slider, the white-terrain fix for outdoor ground, the client-side shader-preparation fix that stops a cold-cache black screen on first load, and the entry-field text-clipping fix, on top of the week's combat, dungeon, housing, vendor, and audio work. Launcher build 15 went out with it, carrying the durable self-update fix for the last machines stuck re-downloading updates. The server grants Episode 2 access to every account at login, no per-account setup.
  • A dodged attack no longer leaves you bleeding. Attack skills that carry an extra effect, such as Rend's bleed and defense debuff, applied those extras even when the whole swing was dodged, because each part of the skill rolled its own outcome and the debuff never rolled at all. One swing now rolls once: dodge or miss it and nothing sticks; block, parry, or glance it and the reduced hit still carries its riders. Verified in a live session: a dodged Rend leaves no bleed and no debuff, a landed one keeps both for their full run. Rides the next chaos build.
  • The Linux launcher was downloading the Windows game, and now it downloads the Linux one. A Linux install pointed at the Windows downloads by mistake, so it could not start the game, and an update could replace the launcher with a Windows program that will not run on Linux. That is the report of the Linux version being an .exe and not really a launcher. Fresh Linux launchers now use the Linux downloads, and a launcher already set wrong corrects itself on its next start. This is live in launcher build 14 on the Linux channel. A launcher that was already broken cannot repair itself through an update, so anyone still stuck should download the Linux launcher fresh from the tester downloads page.
  • The game's entire legacy UI is now inventoried for a future move to Unity's modern UI framework, and the windows already on that framework now look like the game. Every window, HUD element, tooltip, list row, and world-space sign, 181 elements plus the 12 shared subsystems under them, now has a written migration-difficulty rating and its specific challenges catalogued, backed by a scripted component count that can be re-run after any UI change; the pass also found three dead windows that can be deleted instead of ported. Meanwhile the tavern game board, the Oracle question window, and the GM and tester tool panels traded their plain gray boxes for the classic bracket frames, lettering, buttons, and scrollbars, driven by one shared theme any future window inherits. Rides the next chaos build.
  • Found why several players could not get into the game, and fixed the launcher's part in it. Reports came in of Play doing nothing. The server checked out healthy end to end, and the trail led to the machines themselves: if a copy of the game from an earlier session was still alive in the background, usually after a shutdown hang, clicking Play started a new copy that exited a tenth of a second later with no window and no error, every time, until a reboot. Daily logins had fallen from 11 to 3 across four days. Reproduced locally and fixed: the launcher now detects the stuck copy, says so, and offers a Close game and play button, and a game that exits right after starting now shows an error instead of counting as a launch. Ships as launcher build 13; until then, ending the stuck game process in Task Manager or rebooting restores play.
  • The loading bar frozen at 94% was the other half of the lockouts, and it is fixed too. Players reported the loading screen sticking near 94% for a very long time. The game was compiling every shader for the graphics card in one blocking step at the end of the load; this week's shader repair restored the full shader set that step compiles, and any graphics driver update wipes the card's cache and forces the whole compile again. One measured start took 75 minutes to reach the login screen, and July 16 saw 86 game launches against 5 successful logins as players gave up and retried. Killing the frozen game is also what left behind the stuck copies that broke the Play button. The loading screen now compiles shaders in small slices with a visible counter, stays responsive, and lets players in after about 20 seconds while the rest finishes in the background. Rides the next chaos build; until then, letting the 94% screen finish once unblocks a machine for good.
  • Some machines never applied launcher updates; build 14 broke the loop for nearly all of them, and a follow-up handles the last stuck case. After today's launcher release, patch traffic showed several players' launchers downloading the new version over and over without ever applying it, and one machine had pulled the previous release nine times across two days; those players never reached the login server. When the update could not be written into place, the launcher restarted its old self, which immediately re-detected the update and downloaded it again, with no error shown anywhere. Build 14 cleared this for the whole fleet except one machine that kept looping, so a follow-up now confirms an update actually landed before calling it done, keeps both launcher program files on the same version, and stops re-downloading a build that will not install, asking for a one-time reinstall instead. Awaiting release.

Launcher

  • Added a Display setting to the launcher (Windowed or Full screen) next to the Graphics setting, and changed the defaults to DirectX 11 and Windowed. This fixes a black screen with audio some players reported: the NVIDIA overlay blanks the presented frame when the game runs in DirectX 12 full screen. DirectX 11 and windowed both sidestep it. An explicit Graphics or Display pick is always kept. Shipped as launcher build 14 (Windows and Linux); the windowed default fully applies to the game on the next chaos build, the DirectX 11 default applies immediately. Immediate workaround for anyone stuck: pick DirectX 11 in the launcher, or close the NVIDIA overlay app.
  • Client side of the same black screen fix: the game now finishes preparing its shaders behind the loading screen before showing the world, instead of revealing the scene while shaders were still compiling. On a machine with a cold graphics cache that early reveal could show a black screen or trip a graphics-driver reset that ended the session. The loading screen shows a "Preparing shaders" count that keeps advancing; a first load on a cold cache can take longer but it completes instead of freezing or crashing. Rides the next chaos build.
  • Launcher build 14 also delivers the self-update repair for machines that were re-downloading the launcher every start, and points Linux and macOS launchers at their own patch files instead of the Windows ones.
  • Hardened the self-update for the one machine build 14 could not rescue. It was reinstalling the update into memory but never onto disk, so it looped forever with no error. The launcher now verifies an update actually wrote itself into place before treating it as installed, updates both of its program files together so the shortcut and the game's own launch path can never disagree on the version, and after an update fails to install a few times it stops re-downloading it and asks the player to reinstall once instead. Reinstalling over a stuck copy now waits for the old one to close so it reliably replaces it, and the launcher records its own version in its settings file for easier diagnosis. Awaiting release.
  • Confirmed the Linux launcher fix is live on the Linux channel (build 14) and notified the waiting testers to re-download, since an install already pulling the Windows files cannot repair itself through an update. Its verification task had been filed a few minutes before the release and never got the "it shipped" note, so testers kept reading "not on chaos yet" while the fix was already out. Added a release step that lists any verification task not yet told a build shipped, so a launcher release can no longer leave one stale.

Release

  • Deployed chaos build 35: Windows and Linux clients and the server, all built from the same version and verified by the automated login probe before going live. This build carries the week's fixes: Riposte and Opportunity Strike, Lightning Storm damage and sound, dodged attacks no longer applying poison effects, mimic and treasure chest interactions, treasure map ambush recovery, dungeon monsters in walls, mega-farm responsiveness, vendor listings window, the shader repair for dark and washed-out surfaces, and more.
  • Opened Episode 2 to every chaos account: the server now grants access at login, so any account can play the full content without per-account setup. Verified active on the running server.
  • Released launcher build 13 for Windows and Linux. A lingering game copy that made Play appear to do nothing is now surfaced with a clear message, and fresh installs running under WINE or Proton default to DirectX 11 to avoid a ground-rendering issue. Installed launchers update themselves on next start.
  • Deployed chaos build 36: Windows and Linux clients and the server, all from one version, with the automated login probe passing before go-live. Over build 35 it adds the separate Voice volume slider, the white-terrain fix for outdoor ground (including the Solace Bridge Outskirts start area), the client-side shader-preparation fix that stops a cold-cache black screen on first load after a graphics driver update, and the entry-field text-clipping fix.
  • Released launcher build 15 for Windows and Linux. It adds the durable self-update fix for the last machines that kept re-downloading an update without applying it: the launcher now confirms an update actually reached disk before treating it as done, keeps both of its program files on the same version, and after a few failed installs stops re-downloading and asks for a one-time reinstall instead. Installed launchers self-update on next start.

Build pipeline

  • Fixed outdoor ground rendering as a flat white surface in some scenes, including the Solace Bridge Outskirts starting area (reported as "Kingsroad has white terrain"), while the grass, rocks, and props on top of it stayed correct. Same family as this week's washed-out decorations: the build's content-packing step trimmed a shader feature the terrain needs, so the ground fell back to an untextured surface. The packing step now keeps the terrain's lit shader variant with each ground shader, using the real values captured from the scenes that already worked. The code compiles clean; an editor test run and a sample build to confirm the ground textures are pending the shared editor coming back online. Rides the next chaos build.
  • Fixed the failed Linux client build. The compiler toolchain it needs had only ever been installed by hand on the build machine, so the build survived on cached state until an unrelated package list change forced a refresh and dropped it. The toolchain packages are now committed with the project, so every build machine resolves them on its own.
  • Traced this week's 4-hour Windows build times to two one-time full content-pack rebuilds: the shader repair earlier this week deliberately forced one, and removing the occlusion plugin touched 323 scenes and forced another. Confirmed the new fast packaging step is working as intended (a 16 GB build packaged in minutes instead of most of an hour), and rebuilds now log exactly which changed files caused them.
  • Pointed the Windows build machine at the shared asset cache it was never configured to use; every build had been re-importing assets it could have fetched from the cache.
  • Measured the end of the Windows build minute by minute: compressing the 17 GB package took under 5 minutes; most of the remaining tail was copying the finished package between machines.
  • Debug data that players never receive (over 3 GB per build) no longer rides inside the main build package. It now ships as its own small archive kept for crash analysis, so every build's copy and deploy steps move less data.
  • Added counters to the slowest part of the build, the engine's content-pack step, which was measured at 3 of the 4.4 hours. Each build now reports how many packs that step actually rewrote versus skipped, so the next build tells us whether it is rebuilding packs it did not need to.
  • Verified the content-pack fix with two forced rebuilds on an unchanged project: the scene pack step went from 1 hour 53 minutes to 9 minutes, and the resource pack step from 1 hour 10 minutes to 16 minutes, each rewriting only the packs that really changed. A routine build with no content changes now takes about 31 minutes end to end.
  • Fixed a false build failure: when a build's inputs are completely unchanged, the engine takes a fast path that rebuilds only the game code and reports no build summary, which our final verification treated as a failed build. Verification now accepts that case when the rebuilt files are provably fresh, and still fails on genuinely broken or canceled builds.
  • Added a diagnostic switch to the build jobs that forces the content-pack step to run even when nothing changed, for measuring rebuild costs on demand. Verified the build farm's asset cache and the new split packaging on a quiet build: the whole build ran in 31 minutes of actual work.
  • Fixed a hidden cost of this week's shader repair: the helper file it attaches to shader-carrying content packs was generated fresh on every build, which made those packs look changed every time and blocked the engine from skipping them. The helper files are now stable between builds and only rewritten when their content really changes.
  • Updated the Linux and Windows build machines to the engine's newest maintenance release, installed alongside the previous version so a machine can be switched back with one setting. The build license carried over without reactivation. The Mac build machine is next; the project itself keeps recording the older version until it catches up.
  • Verified the engine update with a real Linux client build: a one-time re-import of the game's content, then a clean pass. The first attempt was stopped by the build's own freshness check because new work landed mid-import; the retry passed in under two minutes on the warmed cache.

Combat

  • Fixed attack skills with damage-over-time or debuff riders, such as Rend, still applying those riders when the target fully dodged or the attack missed. Each part of a skill rolled its own hit outcome, and pure debuff parts never rolled at all, so a dodged swing still left its bleed and its defense reduction on the target.
  • A skill use now rolls one outcome shared by all of its parts: dodged or missed means the direct damage, the damage over time, and the debuff all fail together, and a bleed that was already queued ends after its first zero tick. Blocked, parried, and glancing hits still take reduced damage, so their riders still apply. The change covers player and creature attacks alike, including the bleeds, poisons, and stuns attached to weapon skills.
  • Damaging ground fields still roll every pulse separately, so dodging one pulse of a fire field does not protect against the next, and Rapid Fire keeps its arrow-by-arrow rolls.
  • Closed a combined-outcome gap in the on-hit check for nested skill effects, where a blocked-and-dodged swing counted as landed, and dodge messages from one swing no longer print twice.
  • Verified in a live session against a local server: a landed Rend applies its bleed and debuff for their full duration, a dodged Rend applies neither, and creature attacks flow through the same rules. 16 new automated tests cover the shared-roll rules, and the existing combat balance tests stay green.
  • Filed follow-ups for two adjacent finds: weapon enchant procs still fire on dodged swings (#748), and ten skills apply their riders before their damage rolls, so they escape the new check (#750).

Audio

  • Added a Voice volume slider to Settings > Audio, below the SFX slider, so players can set character voices apart from other sound effects. It controls NPC spoken dialogue and character combat vocal sounds such as grunts, pain, and death. Those previously followed the SFX slider, or for spoken dialogue only the master volume, with no way to turn voices down on their own. The slider position is remembered between sessions. Rides the next chaos build; tester task #767.
  • The re-route keys off the combat and dialogue sound names, so creature roars and emotes that use custom per-sound names still follow SFX for now, pending a later per-sound tagging pass. Added automated tests covering which sound events count as voice.
  • Localized the new "Voice" label in all seven translated languages (German, Spanish, French, Italian, Portuguese, Russian, Simplified Chinese), so it reads in each player's language instead of falling back to English.

Community

  • Logged two long-standing Lua scripting requests from the forum (conversation-variable access, and reading a target's buffs/debuffs/stats) onto the suggestion tracker.

Launcher

  • Investigated this week's player reports of being unable to get into the game. Every server-side check was green and a scripted end-to-end login from outside the server passed, while the affected players' game clients never produced any network traffic at all. Distinct daily logins had fallen from 11 to 3 across four days.
  • Root cause, reproduced locally: the launcher starts the game in single-instance mode, and a leftover game process from an earlier session (typically a hung shutdown) made every new launch exit in about 150 ms with no window and no error. The exit counted as normal by the game's own accounting, so no crash report was generated and nothing reached the server, which kept the failure out of every telemetry channel. A reboot was the only recovery.
  • Fixed in launcher build 13: clicking Play now detects a game copy already running and offers a Close game and play button; the launcher also waits a moment after starting the game and reports an error with the exit code if the game closes immediately, instead of treating it as a successful launch. Launch attempts and outcomes are now written to the launcher log. Not released yet.
  • Found in the same trace: builds were shipping two runtime bookkeeping files the game rewrites on every run, which forced the launcher to re-download that pair on every check. The build publisher now drops them unconditionally, with tests covering it.
  • Wrote the whole diagnosis into the operations runbook: how to tell a healthy-server lockout from a real outage, which launcher request patterns identify a player failing before any server contact, and the recovery steps. The launcher-side fix is documented with the patcher internals.
  • Fixed the Linux launcher pulling the Windows game files instead of the Linux ones. Every install, on any operating system, was pointed at the Windows downloads, so a Linux launcher patched a game it could not run, and an update could overwrite the launcher itself with the Windows program. Fresh installs now use each platform's own downloads, and a launcher already set to the wrong ones repairs itself the next time it starts. An install already broken this way needs a one-time re-download, since it cannot repair through an update. Verified on the build machine with the real Linux launcher. Not released yet.

Client

  • Root-caused the second lockout symptom, the loading bar freezing near 94%: the end of every load compiled all shaders for the graphics card in one blocking step on the main thread. The shader repair in this week's build restored the full shader set that step works through, so a machine with a cold graphics driver cache (fresh install or any driver update) froze for minutes to over an hour. Server records put one player's start at 75 minutes from launch to login screen, with 86 launches and 5 successful logins fleet-wide on July 16.
  • Replaced the blocking compile with progressive warmup: shaders compile in small per-frame batches sized by measured cost, the loading screen shows a live Preparing shaders counter, and after 20 seconds the load completes while the remaining shaders finish in the background at a few milliseconds a frame. A new load takes over cleanly from any background work still running.
  • Covered the batch-pacing math with 6 automated tests and compile-verified both game assemblies headless. Rides the next chaos build.
  • Posted interim guidance for stuck players on the tester tracker: let the 94% screen finish once, progress is kept across attempts, and later starts are normal speed.
  • Cleared three stale compiler warnings in the client and its editor tools: a networking field that was set but never read, two connection helpers that lacked their optional-argument markers, and a one-time asset-migration tool that intentionally checks an option the engine has since retired. No gameplay change; both game code sets still compile clean.

Unity 6 migration

  • Catalogued the game's entire legacy NGUI interface ahead of a future move to Unity's modern UI Toolkit: 181 elements covering every window, HUD piece, tooltip, reusable list row, and world-space nameplate, plus the 12 shared subsystems they all sit on, each rated for migration difficulty with its specific challenges written down. A new scripted scan counts the UI components inside every window so the ratings rest on measured numbers and can be regenerated after UI changes.
  • The inventory surfaced quick wins and hard walls: three obsolete windows can be deleted instead of ported, two windows already run on the new framework, and the hardest work concentrates in the shared foundations (drag-and-drop, the input layer, chat's rich text with clickable item links) rather than in any single window. The whole like-for-like port measures in the hundreds of person-days, so it is written down as a roadmap epic before it is decided.
  • Built a shared visual theme for the windows that already run on Unity's modern UI framework (the tavern game board, the Oracle question window, and the GM and tester tool panels). They used to draw as plain dark gray panels; they now use the classic UI's bracket frames, entry-field insets, buttons, checkboxes, scrollbars, and dropdowns, the game's body and title fonts, and its standard text palette, all sourced from the same art the classic windows use.
  • The theme is one stylesheet applied game-wide on the new framework, so a future window built from plain building blocks comes out looking native with no per-window styling. Button behavior matches the classic UI in detail: the label brightens on hover, and the frame tints blue while held down.
  • Fixed window sizing on the new framework: those windows used to follow the operating system's display scale, so on high-resolution screens they rendered a different size than every other game window. They now follow the same sizing rules as the classic UI at every resolution.
  • Added automated checks that guard the theme's art, fonts, stylesheet wiring, and sizing setup, so a future asset or settings change that would quietly break the look fails the test run instead.
  • Fixed typed text getting clipped in the Oracle window's question box after the theme landed. The game's body font is taller than the framework's default font, so fixed-height entry fields cut the letters off; entry text is now centered vertically in every field.

Oracle

  • Added a What's New section to the in-game Oracle. Players can now ask the Oracle what changed recently and get a grouped summary of the week's new features, bug fixes, and balance changes, each with a short explanation the Oracle can expand on when asked about a specific item. Live now on the Oracle service; the list is curated to player-facing changes.
  • Players can now revise a report the Oracle just filed. Before, once the Oracle logged a bug it had no way to change it, so asking it to reword or add a detail hit a dead end and the Oracle came across as curt. It now adds the player's correction or extra detail as a follow-up note on the same report, only for a report filed earlier in the same conversation. Live now on the Oracle service.
  • Made the Oracle warmer and less quick to argue. It now assumes good faith and stays kind even when it has to decline something, treats a request to reword a real report as help rather than as an attempt to bend its rules, and files a report the moment a player disputes an explanation instead of arguing the point. Live now on the Oracle service.
  • Also rolled out the Oracle's wider bug-area list, so reports now sort into 20 player-facing areas instead of 13, adding decorations, stability, graphics, audio, social, localization, and Oracle itself. Live now on the Oracle service.

Images

2026-07-16 · 84 items

Headlines

  • Six vendor window bugs fixed in one pass. The Vendor Listings in Zone window collected six player reports: it could not be widened, opened too narrow for its own columns, hid its scroll bar behind the item rows, shrank prices over 2,000,000 gold to unreadable size, dropped the frame rate the whole time it was open, and could freeze the game while scrolling. All six had one root: the window never grew when new columns were added, and the tooltip under the cursor was being rebuilt every single frame. The window now opens wider, resizes from every edge and corner, keeps its scroll bar on top, shows eight-digit prices at full size, and idles quietly. Rides the next chaos build.
  • 25 scenes got maps today. The new capture pipeline ran its first full batch: every Novia adventure scene that was missing a map now has one, including Graff Island, Vauban Pass, the Midras and Rhun ruins, Grunvald Shardfall, the Oracle Temple, and the Manor of Mystery. Each map was rendered top down in the editor with its world alignment computed exactly instead of hand-tuned, and every image was reviewed before shipping. They ride the next chaos build.
  • Lightning Storm did no damage and made no sound; the silence led to an engine bug muting pooled effects game-wide. A tester reported the storm raining bolts that never hurt anything and never made a sound (report #561). The damage half was an ownership standoff: ground effects apply damage on the victim's side, the damage code demanded the attacker's side, and with two players in the scene nobody won, for every ground-effect spell in the game. The audio half traced past the spell entirely: the engine upgrade's background spawning delivers pooled effect copies with their sound clips missing, which had quietly muted every effect that plays sound from a plain source. Both are fixed, with automated tests on the clip repair, and ride the next chaos build.
  • Dark lantern glass on chaos is fixed, and the washed-out white decorations share the cause. A tester compared chaos and production side by side and reported that the orange glass on galleon lanterns never lights up on chaos (report #661). Players separately reported wooden clocks, mounted wyvern-head trophies, and porcelain vases rendering washed-out white (report #559). Both trace to the Unity 6 build step that packs game content: it trims shader features pack by pack, so features used by materials in other packs were stripped with no error anywhere. Glowing surfaces rendered dark, and the fine detail layer that gives decorations their wood grain and color was erased. The packing step now keeps the needed features with each shared shader, automated tests render packed materials and fail the build on a regression, and the repairs ride the next chaos build. The spider web trap that covered players as a solid white sheet instead of a translucent web (report #651) turned out to be the same bug eating the web's transparency, verified fixed by the same repair. So did the pale albino crocodiles reported from the wetlands (report #680): the packed shader lost the crocodile skin's specular feature, and the same repair restores their colors.
  • Monsters no longer lurk inside the walls of player dungeons. In player-built dungeons, fire elementals in the lava grotto room spawned and fought from inside the cave walls, and a summoned elemental could slip out of the room entirely (report #641). Rooms with breakable walls have creature paths baked straight through the wall so that breaking it opens a real shortcut, and the runtime seal that is supposed to block that path until then never engaged in player dungeons. It engages now, in every room of the dungeon kit. Four spawn points authored inside rock piles and furniture were also moved into the open, stale room navigation data was rebuilt, and a new automated test checks every spawn point in all 16 spawn-capable rooms. Rides the next chaos build.
  • Bloodstained treasure maps no longer eat the map. The Libris Ruins dig ambush could wedge: skeletons chased unrelated wildlife across the map or fled onto unwalkable ground, the battle never finished, and after 30 minutes the event reset without the chest, with the map already consumed at dig time (report #640, player reports going back to 2023). Runaway ambush creatures are now pulled back to the fight after 20 seconds and removed if they bolt again, overlapping spawn points spread apart, and if an ambush still cannot be finished the chest spawns anyway when the timer runs out. Watched live during verification: two skeletons ran off on their own seconds after spawning and both were recovered. Rides the next chaos build.
  • Riposte and Opportunity Strike now pay off reliably. Riposte is meant to deal triple damage right after a successful parry, and Opportunity Strike a heavy bonus hit right after a dodge, but the bonus rarely triggered, and whether it worked depended on who else was in the scene. The game now registers your parries, dodges, and received critical hits the moment their combat text appears, for every player in the scene, so the follow-up bonus lands every time it should; Fortify Defenses' bonus after a crit is fixed by the same change. Riposte's skill data also dealt both its normal and tripled hits together in a narrow band; a cast within 5 seconds of the parry now deals exactly the tripled hit. Rides the next chaos build.

Agriculture

  • Fixed planting, watering, and harvesting appearing to do nothing on very large farms (report #630, from a forum thread on 30,000 to 41,000 planting-spot farms). The action always counted on the server, but the on-screen update waited behind a lot-content queue that on farms that size could lag by the better part of an hour, so players restarted the client to see each result. The plant now updates on screen the moment the server confirms the action, on any size of farm, and the server remains the authority on the real state.
  • Sped up how a farm's plant data loads when entering a lot. Planters loaded strictly one server request at a time with a full rescan of the pending list between each; four requests now run at once, nearest planters first, and a request whose answer never arrives is retried after 30 seconds instead of stopping all plant loading until a client restart.
  • Stopped very large lots from tearing the whole lot down and rebuilding it (teleporting the owner to the front of the plot in the process) when a routine lot update arrived while the lot was still working through its own backlog. The rebuild only happens now when something actually changed that requires it.
  • Cut the constant background cost of large farms: the periodic plant growth refresh now only runs for planters near the player instead of every planter on the lot, and 20 new automated tests cover the new farm logic.

Client cleanup

  • Removed the abandoned GPU occlusion culling plugin from the client. Its user-facing video option was already gone, but the plugin component still rode the main game camera with no remaining off switch, and the native library it depends on did not survive the source migration, so it could never work again.
  • Stripped the 1,736,551 leftover culling marker components the plugin's editor bake had attached to nearly every visible object over the years, across 326 scenes and 134 prefabs. The removal was scripted outside the editor, each result was verified byte for byte against a reconstruction from the original file, and the biggest affected scenes were loaded in the editor afterward to confirm they come up clean.
  • Retired the plugin's editor bake menu and its last code references. The game's normal distance culling and built-in occlusion culling are unchanged.

Vendor listings window

  • Fixed the Vendor Listings in Zone window not resizing horizontally (reports #518 and #467). The window only had top and bottom resize grips; it now has all eight edges and corners, and widening it gives the extra room to the Item Name column. The default width went from 810 to 1090 pixels so every column fits without one being cut off.
  • Fixed the scroll bar being hidden behind the item rows (reports #465 and #367). Two columns added for the vendor search earlier this month made the rows wider than the window, and the rows drew over the scroll bar; the list area now ends before the scroll bar and the window is wide enough for all its columns. A new automated test fails the build if a future column addition outgrows the window again.
  • Fixed prices over 2,000,000 gold rendering tiny and misaligned (report #466). The Price and Per Unit columns were too narrow for eight-digit numbers, so the text was being shrunk to fit; both columns are wider and 99,999,999 now shows at full size.
  • Fixed the frame-rate drop while the window was open (report #472) and the freeze while scrolling (report #367). The item tooltip under the cursor was being rebuilt from scratch every frame, and each search result the cursor passed over triggered a re-sort of the entire list of up to 15,000 items. The tooltip is now built once and reused, a hovered result updates only its own row, and a failed detail lookup waits 30 seconds before retrying. Verified in a live session: a thousand tooltip polls now cost nothing measurable.

Nearby Players window

  • Fixed the Nearby Players window showing a player's old PvP status for minutes after it changed (report #655). When someone flagged or unflagged for PvP at the Oracle, everyone else's list kept the stale name color and the anonymous "?" entry until an unrelated refresh happened to rebuild it. The list now updates the row the moment the change arrives, in both directions. Rides the next chaos build.

Combat

  • Fixed Lightning Storm dealing no damage with other players in the scene (report #561). Ground-effect spells apply their damage on the computer that controls the victim, but the damage code also required the attacker to be on that same computer, so with two or more players present no one ever applied it. The same flaw affected every player-cast ground effect (Ring of Fire, Meteor Shower, Ice Field) and monster ground attacks against players. Damage from a ground effect now applies on the victim's side as intended. Rides the next chaos build.
  • Fixed Lightning Storm playing no sound (report #561). The engine upgrade broke sound on pooled effect copies: copies made by the new background spawning arrive with their sound clip reference missing, which silenced any effect whose audio sits on a plain sound source, and a reused effect never restarted its sound. Pool copies now get their clips restored from the original, and looping effect audio restarts on every use. Verified in a play session: the storm's 13-second rumble plays on the first cast and on recasts, and storm strikes on a hostile target take real health off. Two new automated tests keep the clip repair honest.
  • Filed a follow-up on a related find (report #731): a ground effect's secondary effects never roll their own trigger chance and instead ride the main damage roll. Fixing that changes balance across 36 skills, so it gets its own reviewed pass.
  • Fixed the Dash skill making no sound when used (player report #679). Dash was the one combat skill whose activation effect carried no audio setup; it now plays a whoosh through the same sound path every other skill uses. Verified in a play session by casting Dash and confirming the sound fires.
  • Damage-over-time effects that deal 0 damage per tick no longer print a 0 over the target on every tick. The first zero tick shows the standard Immune combat text once, and later zero ticks show nothing, in both the floating text and the combat log. This also stops poison effects on immune creatures such as elementals and undead from repeating Immune on every tick. Ticks that deal real damage are unchanged. Rides the next chaos build.
  • Fixed Riposte almost never dealing its tripled damage after a successful parry, and Opportunity Strike its bonus hit after a dodge. The game recorded parries and dodges under narrow conditions that depended on who else was in the scene, so the follow-up skill usually found no recent parry or dodge to reward. The reaction is now recorded the moment the Parried or Dodged text appears over your character, for every player in the scene. Rides the next chaos build.
  • Fixed Fortify Defenses' bonus after being critically hit the same way; it shared the recording gap. Combined results such as a parried critical hit now also count for both reactions instead of neither.
  • Aligned Riposte's two damage windows in the skill data. Casting 3 to 5 seconds after a parry dealt the normal hit and the tripled hit together, about 3.75x in total; the tripled hit now applies alone for a full 5 seconds after the parry (longer with Blades Mastery), and later casts deal the reduced hit as designed.
  • Added automated tests covering the parry, dodge, block, and critical-hit reaction recording and the Riposte window data. All 19 pass in the editor; a test-runner filter pitfall that initially hid the new tests is documented in the team docs.

Mounts

  • Fixed jump-height buffs such as the Ring of Frogkin also boosting a mount's jump while riding (report #551). A mount now always jumps at its own fixed strength, equal to an unbuffed player's jump; buffs still work on foot as before. Rides the next chaos build.
  • Raised the mount jump height by about half a meter. With buffs no longer topping it up, the base mount jump was reading a touch low, so it now clears a bit more. On-foot jumping is unchanged. Rides the next chaos build; tester task #776.

Launcher

  • Diagnosed the black ground in Mistrendur (report #565): it only happens when the Windows client runs on Linux through WINE with DirectX 12, where WINE's translation layer misrenders the terrain's near-ground pass. Ground within roughly 1000 meters turns black while distant terrain, water, and buildings stay normal. Native Windows DirectX 12, the default for all Windows players since early July, is unaffected. Posted the diagnosis and two immediate workarounds (DirectX 11 in the launcher, or the native Linux client) on the report.
  • Changed the launcher to default WINE and Proton installs to DirectX 11. Detection reads a WINE marker in the system libraries; a player who picks an API in the Graphics dropdown themselves keeps that choice, including DirectX 12 under WINE. Existing settings files from before the change count as "not chosen" and pick up the safer default. 15 new automated tests cover the selection logic. The change ships with the next launcher release.
  • Added a launch-argument passthrough and a screen-capture diagnostic to the automated client test runner, used here to drive DirectX 12 and DirectX 11 test clients side by side.

Issue tracker

  • Fixed the Previous/Next links on tracker issue pages disappearing when an issue was opened from a direct link, a notification, or after viewing a list the issue was filtered out of (a closed issue after browsing open ones). A small tracker extension now falls back to the neighboring issues in the same project whenever no list context exists; navigation from a list keeps its order and the "N of M" position as before. Deployed and verified on the live tracker.
  • Closed bug #669 (using a glyph while missing a required component gave an error instead of a message). The fix landed two days ago but the issue was left open with only a comment, so the workflow docs now require finished tracker work to be closed with a proper resolution note in the same session.

Scene maps

  • Audited the in-game area map system end to end: how map images and their world-alignment data are stored, how maps were historically captured and calibrated by hand, and which scenes have one. Of 445 scenes, about 234 have real maps, 79 dungeons and interiors deliberately show a "map missing" card, and 33 scenes that should have maps have none. Findings written up in the team docs.
  • Planned the follow-on project and added it to the roadmap and the public roadmap page: an automated capture pipeline for the missing surface maps, real schematic maps for dungeons, and fog of war on dungeon maps with explored areas saved per account on the server.
  • Built the fog of war system end to end. Server: exploration is stored per account in the game database, and updates from two characters online at once merge without losing either one's progress. Client: a background tracker reveals the map around the player as they move (30 meter radius by default, tunable per map), the map window darkens unexplored areas with soft edges, and map pins stay hidden until their spot is revealed. It activates only on maps that carry a new per-map flag, so nothing changes anywhere until dungeon maps are flagged; 14 automated tests cover the grid and reveal math, and both server builds and the client compile clean.
  • Built the batch map capture tool: it opens a scene in the editor, frames it top down automatically, renders the map image, and computes the world alignment exactly instead of the old hand-tuned calibration. Dungeons get a schematic drawing style with per-floor slicing. Every generated map goes onto a review contact sheet and only ships after human approval; pilot captures on a handful of scenes are the next step.
  • Ran the pilot captures and fixed what they exposed: broken tree billboards drew magenta forests over one scene, the camera rig's depth of field defocused another from 500 meters up, and distant terrain rendered as a blurry composite. All three are now suppressed for the captured frame and restored afterward. The hand-made Brittany Sewers map's alignment numbers agree with the pipeline's computed formula to about a meter and a half, which confirms the calibration convention.
  • Shipped the first fleet run: 25 new scene maps accepted after image review, covering every missing Novia surface scene plus Graff Island, the Oracle Temple, and the Manor of Mystery. Four Mistrendur interiors turned out to be mislisted as surface scenes and move to the dungeon workstream; fully automatic dungeon floor plans proved unworkable for scenes built from large floor plates, so dungeon maps will go one at a time with per-scene setup and review.
  • Exercised fog of war against a real local server and caught a wire bug none of the automated tests could: the response message could not carry a scene identifier over the network layer. Responses now correlate by transaction number, the standard pattern elsewhere in the protocol. The reveal tracking itself was watched working in a live session (cells revealing around the character as it moved); the fix compiles clean on the server, the new network stack, and the client.

NPC audio

  • Fixed the per-NPC mute option not fully silencing creatures (tester report #691). Muting suppressed ambient barks but death lines and all voice-over audio still played; both now respect the mute, and the older ambient-barker path used by some NPCs honors it too. Conversation text is untouched so muted merchants and quest givers still work.
  • Verified the fix end to end in a play session against the skeleton camp in Ulfheim from the report, and added automated tests covering the mute list storage.
  • Recast every kobold speaker to rough, growly voices (player report #682). All 58 kobold conversation roles, from The Breach war parties to the Grusk city merchants, were on ordinary human voices, several with distinctly human accents; they now draw from a pool of twelve hoarse and gravelly character voices, with the Kobold Fighter on a goblin voice.
  • Fixed kobold war cries being read letter by letter (player report #682). Written screeches like "SKRRR'K!" and "YRKSRKK!" look like acronyms to the voice synthesizer, so it spelled them out. A pronunciation layer now converts all 80 spellings of these screeches to spoken forms like "skreek" before synthesis, while the on-screen text stays exactly as written. Automaton serial names that should be spelled out are unaffected, guarded by automated tests.
  • Regenerated 2,180 kobold voice lines and published them to the voice server; the change is data only and reaches players at their next login, no game build needed. City kobolds that share a voice role with human townsfolk elsewhere keep their voice but had their screech lines re-recorded with the new pronunciations.

Server

  • Fixed a scene-server error line that fired when an empty scene's delayed shutdown timer came due while the previous batch was still being processed (tracker #673, seen once on the test shard). The condition was harmless and already handled by a retry; the reschedule now also picks the earliest pending shutdown instead of a heuristic that could hold an empty scene open longer than intended.
  • Sped up the server operation that sweeps loot and crafting results into a player's bag (tracker #670). The performance watchdog caught it taking 220 to 260 milliseconds on the test shard: it deleted each temporary loot container with two database calls, after first saving the container it was about to delete, and ran three crafting lookups on every call even when empty. The wasted save is gone, the deletions are one batched call, and the three lookups are one, cutting up to 35 serial round trips to 14. Covered by new automated tests, a full test-suite pass, and a bot run against a local server exercising loot, bags, and crafting.
  • Item audit logging no longer forces its own disk write for every single item moved. All game rooms share one audit log, and each entry used to flush to disk before the next room could log; entries now buffer and flush together within a quarter second, with every entry still recorded and order preserved.

Zoning

  • Root-caused tracker #671 (join refused, player left waiting after zoning) from test-shard logs. A player zoning into a player-owned town was the last person keeping that instance alive; the empty instance's shutdown timer expired during their seven-second scene load and the instance closed one second before the join request arrived. The server's instance bookkeeping cleaned up correctly, and it happened once in 14 days of logs, so this is a timing race rather than a server bug.
  • The client now retries once when the destination instance closed while the scene was loading: it drops the stale instance id and re-runs matchmaking, joining another live instance or starting a fresh one, so the player arrives where they were headed. A second failure still falls back to yesterday's quick return to the overworld. Closed #671 and updated the tester verification task with the new expected behavior.

Build pipeline

  • Fixed the Unity licensing failure that hit essentially every automated build on the Windows build agent (tracker #356). A stale licensing helper left behind by the Unity launcher spoke an older protocol than the editor, so each build's first launch failed and burned a retry, and one bad day could turn a good build red. Builds now clear the stale helper before launching, and the agent's launcher was updated to carry the same helper the editor uses. Two consecutive clean launches confirmed on the agent.
  • Updated the build-machine troubleshooting docs with the fix and its rollback steps; the old one-retry safety net stays in place as a backstop.
  • Fixed the nightly automated test job that had reported failure on every run since it was created (tracker #718). Two problems stacked: the results reader never understood the test runner's report format, so even a fully passing night counted as failed and the report files were thrown away, and two build-system tests failed whenever the build machine's copy of the project was behind the latest changes. The results are now translated into a format the reader accepts, report files are kept on every run, and the two tests no longer depend on how current the build machine's checkout is.
  • All 616 automated tests pass after the fix; the two that had been failing were confirmed green in the editor before shipping.
  • Moved the Mac build agent's data onto a large external drive after the laptop's internal disk ran out of room. Unity cannot build reliably from the drive's native format, so the build tree lives inside a disk image on the drive that the agent mounts automatically every time it connects. The agent is now addressed by machine name instead of a network address that had quietly changed and taken the agent offline. Verified end to end: a Mac client build came out green from the new location, and the agent reconnects and remounts the image on its own after a disconnect.
  • Fixed an escaping bug in today's licensing change to the shared build pipeline script that made every client build job fail before it could start; two path strings needed their backslashes doubled. Also installed the faster archive packer on the Mac agent, which had missed it when build packaging switched over last week.

Lighting and glow

  • Fixed the orange glass on player galleon lanterns rendering dark on chaos (report #661). The Unity 6 content packing step keeps only the shader features used inside each content pack, and the shared shaders sit in one pack while the glowing materials that need them ship in others, so the glow feature was stripped and those surfaces rendered dark with no error anywhere. House window glow uses the same material family and was equally affected. The packing step now bundles the needed feature list alongside each shared shader; verified by rendering the current chaos content directly (the lantern glass comes out black) against the same layout rebuilt with the fix (the glass glows orange).
  • Added an automated build test that packs a glowing material the same way the game ships it and fails if it renders dark, so this cannot regress silently. The open report of placed lamps giving almost no light (report #646) most likely shares this cause; a note was left on it to verify on the next build.

Decorations

  • Investigated windows and doors on a default row lot not drawing while the player stood at the lot edge, leaving the doorway a dark hole (report #555, New Crafters Town). Same cause as the invisible attached decorations fixed yesterday: items attached to a house or another decoration had their visibility tracked at the wrong spot on the lot. The report predates that fix, which covers this case and rides the next chaos build.
  • Closed the one remaining path with the same defect: a decoration rebuilt in place (for example after a variant swap) was left at the wrong position with its visibility tracked there too. It now gets the same position and visibility correction as a normal placement.
  • Root-caused the washed-out white decorations on chaos (report #559): wooden clocks of all kinds, mounted wyvern-head trophies, and porcelain vases lost their wood grain and color. These items get their look from a fine detail layer multiplied over a pale base texture, and the same content-packing problem behind the dark lantern glass stripped that detail feature from the shader the decorations share. Confirmed by rendering a grandfather clock from the current chaos content packs (whitewashed) next to the same clock loaded from source (correct wood tone); the lantern fix already carries the feature combinations these items need, so the repair arrives with the same build.
  • Added an automated test that packs the grandfather clock material into a miniature two-pack layout the same way the game ships it and fails if its rendered color drifts from the source material, plus a check that the shared feature list keeps the exact combinations the clocks and trophies rely on. The tester checklist for the packing fix now includes clocks, trophies, and vases.

Spell effects

  • Root-caused the spider web trap covering players as a solid white sheet instead of a translucent web (report #651). The web texture keeps its pattern in the transparency channel, and the same content-packing problem behind the dark lantern glass stripped the transparency feature from the shader the web effect shares, so it rendered fully opaque. Confirmed by rendering the web material from the current chaos content packs (a solid grey slab) next to the same material loaded from source (a translucent web); the lantern repair already carries the transparency variants, so the fix arrives with the same build.
  • Added an automated test that packs the web material into a miniature two-pack layout the same way the game ships it and fails if it stops rendering translucent. The tester checklist for the packing fix now includes getting webbed by a spider.

Creatures

  • Root-caused crocodile-shaped enemies appearing pale grey, almost albino, in every scene (report #680). Crocodiles and caimans share one skin material, and the same content-packing problem behind the dark lantern glass stripped the feature that applies the skin's specular map, leaving a flat grey sheen washing out the hide. Confirmed by rendering the crocodile skin from the current chaos content packs next to the same material loaded from source: the packed copy matches a source copy with the feature switched off exactly. The lantern repair already carries the variants the skin needs, so the fix arrives with the same build.
  • Added an automated test that packs the crocodile skin into a miniature two-pack layout the same way the game ships it (the skin actually travels in a decorations pack, pulled in by the caiman lawn decoration) and fails if its rendered color drifts from the source material. The tester checklist for the packing fix now includes crocodile colors, and the crocodile bug report is closed against it.

Testing tools

  • Added launch options to the internal GM client that start it directly in a chosen scene at exact coordinates, with an optional facing direction. Testing a fix at a specific spot no longer needs a manual login, a scene load command, and a walk to the location; the position is applied behind the loading screen on the way in. Ordinary scene changes and the retail client are unaffected.
  • The automated client test runner can pass the same start position through, so scripted client tests can begin at a precise location. Covered by 10 new automated tests on the argument parsing; usage written up in the team's testing docs.
  • Recorded a test-runner quirk in the team docs: the editor's test tool can fail to find a brand-new test class by name until the editor reloads, with the working fallbacks spelled out, after losing time to it today.
  • Commits that change something testers can exercise now carry a reference to their verification task in the commit message, and a new pre-push check warns when a testable change is missing one. A feature spanning several commits needs only one task, and changes testers cannot reach can opt out with a stated reason.

Repo cleanup

  • Audited yesterday's leftover local changes: two caravan teleporter prefabs, two butterfly and firefly effects, and the Episode 2 overworld scene had been re-saved by the editor with no intentional edits. The re-save had regenerated internal entity ids and dropped one teleporter's destination, so all five files were reverted to their committed state.
  • Updated the ignore rules for files the engine and Windows keep generating: metadata companions for debug-symbol and thumbnail-cache files that are themselves already ignored, plus root-level transfer archives.

Dev machines

  • Reconciled the AI assistant's project notes between the Windows and Mac development machines in both directions. Five notes written on the Mac last week, covering the terrain texture churn fix, build speed findings, bug reporter category work, and the game table click fix, had never made it back to the primary set; they were merged in and the full set of 130 notes was then mirrored to the Mac.
  • Added a one-step sync script for that mirror. It copies the notes and shared review tooling to the Mac, keeps the Mac-only notes intact, and refuses to run when the Mac holds newer edits that have not been merged back first, so nothing gets overwritten again.
  • Recovered a week of uncommitted work found on the Mac during the sweep: the in-game bug reporter's category expansion from 13 to 20 areas (decorations, stability, graphics, audio, social, and localization among the additions) and the matching tracker category script existed only in that machine's working copy. All 68 automated tests pass and the change is now committed.
  • Finished moving the Mac workstation's own setup into the repo: the checked-in assistant tool configuration now matches the machine it runs on, the game-client control harness got a dependency lockfile so installs are reproducible, and its installed modules were added to the ignore rules after turning up as thousands of untracked files.

Player dungeons

  • Fixed monsters standing inside sealed walls in player-built dungeons (report #641, confirmed by a tester with a screenshot of a fire elemental in a cave wall). Rooms with breakable walls carry creature paths baked straight through the wall so that breaking it opens a real shortcut; the runtime seal meant to block that path until the wall breaks targeted the navigation layout of the old fixed dungeons and never engaged in player dungeons, so creatures wandered into the sealed wall pocket and fought through the rock. The seal now finds the right room navigation in player dungeons, and the same repair covers door blockers and walkway links in every room of the dungeon kit.
  • Moved four monster spawn points that were authored inside solid props and produced creatures stuck in scenery: two fire elementals inside rock piles in the ancient stone lava grotto, and two kobolds inside the throne and ruins of the rotunda encounter room.
  • Rebuilt the stale precomputed navigation data for the six grotto rooms; the ancient stone lava grotto's data predated a geometry change and carried 105 navigation points floating over nothing, which also misplaced summoned pets.
  • Added an automated test that replays the game's spawn placement for all 16 spawn-capable dungeon kit rooms (204 spawn points) and fails if any point sits inside geometry or over a hole, so misplaced spawners cannot ship again.

World objects

  • Fixed chests and mimics locking up permanently with "This object (Chest) is in use by another player" while nobody else was around, or turning unclickable with a green cursor (report #643, reported on the forums as far back as legacy ticket 70703 and confirmed systemic by a moderator). Rapid clicking during the open animation could cut the interaction short partway through, and the busy flag the chest had already broadcast was never released, so it refused everyone, including the player who caused it, until they left the scene. Every way a chest interaction can end now releases the busy state.
  • Added a safety net on top of the direct fix: if a chest still ends up stuck busy, the game notices within about 20 seconds that no interaction is actually running and clears it. Another player genuinely using the chest is never affected.
  • Double-clicking an object that is already mid-interaction is now ignored instead of raising an internal error that could cut short other running game scripts. Both fixes ride the next chaos build.
  • Fixed mimics needing 2 to 7 clicks before the creature appeared (report #733, reported on the forums as legacy ticket 68979 and open since 2021). A click on a mimic only opened a 1 second spawn window and hoped the spawner's periodic check, which runs every 3.3 seconds, landed inside it; about 7 in 10 clicks missed and the trigger was thrown away with no error. The click is now latched until the spawner consumes it, so one interaction always wakes the creature.
  • A click in the first moments after a mimic loads in was always lost while its network ownership was still being assigned; the game now waits for the assignment instead of discarding the click. The creature also pops out promptly after the click instead of up to 3 seconds later, and the same faster reaction applies to other click-triggered spawns such as creature traps. Rides the next chaos build.

Treasure maps

  • Fixed bloodstained treasure map ambushes wedging when their creatures ran off (report #640, reopened from legacy ticket 71793 with player reports back to 2023, reproduced 5 of 5 tries on Map #3 in Libris Ruins). Ambush skeletons could chase unrelated wildlife far from the dig site or flee onto unwalkable ground where nobody could kill them; the battle then never finished and the chest never appeared. A watchdog now returns a creature to its spawn point after 20 seconds away from the fight, and removes it if it runs off a second time, so the battle can always be finished. Creatures actually fighting a player or a player's pet are never pulled back.
  • The treasure chest now always appears. If an ambush is still unresolved when the 30 minute event timer runs out, the chest spawns at the dig site anyway; the map was consumed at dig time and the loot was already decided, so the old silent reset that gave nothing back is gone.
  • Ambush creatures no longer spawn stacked on one spot. Spawn points that settle onto the same walkable position now spread out to separated nearby positions, computed identically for every player in the scene so respawns stay consistent.
  • Reproduced the runaway bug live while verifying the fix on a local server: two of the three ambush skeletons left the dig site on their own within seconds of spawning, one chasing an aggressive plant across the ruins. Both were pulled back by the watchdog, the one that bolted again was removed, and the forced timeout produced a lootable chest at the dig site. 20 new automated tests cover the watchdog, spread, and completion logic; the full editor suite of 638 stays green.
  • The scene editor now warns when a wave battle lists the same wave twice in its configuration, which silently ignores the later entries; the Libris Ruins battle carries exactly that dead data.

Images

2026-07-15 · 39 items

Headlines

  • Tester leaderboard credit is fixed. Several testers reported that bugs they filed and tasks they verified never showed up on the tester hub leaderboard. Three separate causes: a certificate problem had stopped reporter names being recorded on in-game Oracle reports since July 10 (all 31 affected reports are now credited to their 9 reporters), verification credit only counted after the team closed a task (it now counts when the tester comments), and hand-typed reporter names with spaces or different casing matched nobody (matching is now forgiving). The board reflects all of it as of tonight.
  • The launcher's crash reporter is live. Windows launcher build 12 went out today: when a game session crashes, freezes, or gets killed, the launcher notices on its next start and sends that session's log plus a short hardware summary to the team automatically. Computer names and usernames never leave the machine, each crash reports once, and a launcher setting turns it off. Verified end to end against the live service, including a build-10 launcher updating itself to 12.
  • Satyrs and imps animate again. Testers found satyr enemies in Ruined Keep sliding around frozen, facing the wrong way, while the trolls beside them behaved normally. The engine migration had changed how the importer names a duplicated skeleton bone, which quietly invalidated a bone list saved with every satyr animation and stripped the body motion out of those clips at import. The animation data is repaired, the affected character models are corrected, and a sweep of all 1,637 creature models confirmed imps were broken the same way (now also fixed) and every other creature family is fine. Rides the next chaos build.
  • Invisible decorations on chaos are fixed. A tester found decorations in Wizards Rest that were present but invisible: an unseen gate blocked the road, and an invisible tanning station still let you craft on it. The cause was the new decoration distance culling registering items attached to another decoration (gates on fences, stations on pavers) at the wrong spot during town load, so the game hid them as if they were far away. They now register where they actually stand. The fix rides the next chaos build.
  • Episode 2 is opening to everyone on the test server. Until now only individually granted accounts could enter Episode 2 zones there, so most testers hit an access wall at the boundary. The test server can now grant Episode 2 access to every account at login, the switch is already set, and it takes effect with the next test build. Purchased Episode 2 access on the live servers is unaffected.
  • Found why the chaos shard looked washed out. A tester report about one faded black rug led to a shard-wide cause: the client's default graphics quality had regressed to the lowest preset during the engine migration, rendering every texture at half resolution with anisotropic filtering off, on every launch. The default is restored to Good, and an HDR display flag that washed out colors on HDR monitors is off again. Both fixes ride the next chaos build.
  • Animal chatter is no longer spoken aloud. The voice-over system read the cat's "mrrow" as "miss-ro" (tester report #664), and dogs, horses, and farm animals came out just as strange. Thirty noise-only talkers, including a few characters who are canonically mute, no longer have spoken audio. Their text lines are unchanged, and the fix reaches players on their next login with no patch needed.

Asset pipeline

  • Turned off crunch compression on 6,285 textures that no game build includes. The list came from a full build's output, which records every asset packed into the player and into all 605 content bundles; every crunched texture was checked against it, and the 22,657 that actually ship were left untouched. Crunch dominates texture import time, so large reimports get faster while player downloads stay the same.
  • Added the audit as a re-runnable pair of scripts with a runbook in the docs: one extracts the shipped-asset list from any full build log, the other flips crunch off on unused textures and reports exactly what it changed, with a dry-run mode and verification steps. The runbook also pins the scope: the change applies to the new build line only and stays out of the version-control system the live game still uses.

Repo cleanup

  • Built a re-runnable audit tool that indexes every asset reference across the project in a single pass, then grades all 111 third-party plugin and content folders as used, removable, or needs a human call. It cross-checks code and assembly references too, and the results plus the method are written up in the docs.
  • Removed 11 unused third-party folders and their metadata: two empty leftovers, four unextracted installer archives and content packs, and five orphaned code or shader plugins. Every one had zero asset references in the project.
  • Documented the plugins the automatic scan flagged as unused but that are actually used through indirect paths (native libraries, components added at runtime, and code inside prebuilt libraries), so they are kept rather than removed.
  • Removed two more unused folders after review: a set of old level-building tool installers that are no longer needed now that the tool ships with the engine, and 1808 auto-generated terrain-layer files left over from the version upgrade, confirmed unreferenced by any terrain or scene first.
  • Restored one folder the audit had removed. The heatmap rendering plugin showed no asset references, but its editor tools use it directly in code, so removing it broke the editor build. Put the plugin back and confirmed the project compiles. A reminder to cross-check code references, not just asset references, before removing a plugin.

Tester hub

  • Restored reporter credit on in-game Oracle bug reports. Since July 10 a certificate check on an internal lookup failed on every report, so bugs filed through the Oracle carried no reporter name and the leaderboard counted them for nobody. Fixed the certificate on both ends and added the failure mode to the ops docs.
  • Backfilled the gap: matched the 31 reports filed during the outage back to their 9 reporters using the service logs, so every bug filed through the Oracle since July 10 now credits the right tester.
  • Leaderboard "Tests completed" is now "Tests verified": credit lands when a tester comments on a verification task, not when the team later closes it. One tester had 16 verifications waiting on task closes; all of them count now.
  • Reporter-name matching is more forgiving. A hand-typed "Reported by" value with spaces or different casing now still credits the right tester, and when the name matches nobody the credit falls back to the report's author. Also added a tester who was filing bugs but missing from the leaderboard roster; their reports now count.

Community

  • Re-read the week's new forum activity across the workblog discussion thread, the wishlist board, the feedback board, and all fifteen bug-report boards, checking everything against the entries already on file from last week's full sweep.
  • Filed 8 new player suggestions on the tracker: light armor parity with heavy, longer buff durations, a cooking and naming flavor bundle, zone and date stamps with a collector credit on PvP skulls, roaming overland world bosses, tamer multi-pet groups, tamer credit on filled taming necklaces, and crafting straight from the bank.
  • Filed one bug: several buff potions (Shadow Form, Cat's Grace, Stalking Cat) refuse to slot onto the combat bar, a question the forum moderators had explicitly left open. Bug threads the Bug Brigade had already logged were left with them, with cross-reference notes where they overlapped our entries.
  • The forum sweep now runs automatically every night: new suggestions and untriaged bug reports get checked against the tracker and filed with source links, quiet nights change nothing, and duplicates are prevented by exact source-thread matching.

Economy

  • Made all 39 player-event award trophies no-trade (wishlist request): the decoration, fashion, fishing, lava fishing, pumpkin growing, and treasure hunt contest trophies plus the PvP trophies can no longer be traded, placed on player vendors, mailed, or sold to merchants, and their tooltips now show No Trade. The change also applies to trophies already in player hands. Mounted fish and taxidermy trophies are craftable goods and stay tradeable.
  • Added an automated data check that fails if any current or future event trophy is left tradeable.

Editor tooling

  • Deleted the Perforce maintenance alert system that fired warning windows and a click-through dialog on a fixed daily and weekly maintenance schedule. It ran automatically for anyone opening the project; nothing else depended on it, and the editor compiles clean without it.
  • Removed the rest of the editor's Perforce residue: the Perforce status and reconnect window (the whole Perforce Tools menu) and a leftover editor setting that still named Perforce as the version-control system, now matched to the setting the project actually uses.

Logging

  • Stopped normal disconnects from being logged as errors. When a client cleanly closes its connection to a zone, that routine event was recorded at error level and dominated the server error logs. It is now logged as routine, so real errors stand out.

Server

  • Added a per-shard server switch that grants Episode 2 access to every account at login, and turned it on for the test server. Previously only individually granted accounts could enter Episode 2 zones there. The grant applies at each login, covers new accounts automatically, and is off everywhere else; live purchases are unaffected. Takes effect with the next test build. Verified end to end on a local server: a plain account logged in and came back carrying Episode 2 access.

Networking

  • Faster recovery when you try to enter a game instance that just closed. The client used to show "The target instance is no longer open" and sit there for about 30 seconds, which felt like being stuck. It now shows the message briefly and returns you to the overworld within a few seconds, still logged in.

Build farm

  • Fixed the nightly server report job re-running its full generation pass after a shutdown crash. The generator writes a completion marker as its last step; the job now accepts any run that reached that marker regardless of how the process exited, treats the ever-present licensing log noise as a failure signal only when the run died in its first minutes, and gives a genuine mid-run crash one retry. Doubled nights ran 140 to 179 minutes against roughly 55 for a clean pass, and one of them still ended in a failure after paying for both passes.
  • Put the second build agent on the Linux build machine to work. It had been provisioned since June 30 with its own copy of the project but was never labeled for client builds, so it sat idle. It now takes the same Linux client build jobs as the first agent, and a build was verified end to end on it while another ran on the first agent at the same time.
  • Unblocked Linux IL2CPP client builds. The build failed at the final native link step because the engine's downloaded linker depends on two system libraries the build machine's newer OS no longer ships. The old library versions are now staged alongside the system ones, the linker runs again, and the fix is baked into the machine setup script so a rebuilt box gets it automatically.

UI

  • Baked a thin black outline into all 38 mouse cursors (wishlist #427). The white and silver cursor art had no dark edge and disappeared against snow and other bright surfaces. Every cursor state carries the outline now: default, combat, interact, talk, gathering, and window-resize arrows. Click points are unchanged, and the cursors read the same on dark backgrounds as before.

World

  • Fixed the bonfire island in Port Harmony's harbor popping into view on approach (tester report #656, also present on live). The signal tower's brazier bowl and the island's rocks were set to stop drawing beyond 125 meters, which is closer than the town docks, so they appeared suddenly partway across the water. They now draw at the same range as the rest of the island.
  • Fixed decorations turning invisible on the chaos server while still blocking movement and accepting clicks (tester report #652, seen in Wizards Rest: an invisible gate, an invisible tanning station you could still craft on). Decorations attached to another decoration, such as gates on fences or stations on pavers, were registered with the new distance culling at the wrong spot when a town loaded, so the game hid them as if they were far away. They now register at their true location. Rides the next chaos build.

Rendering

  • Fixed the washed-out textures on the chaos shard (tester report #653, a black rug that had lost its color; also #363, a blurry statue base). The client's default graphics quality had regressed to the lowest preset during the engine migration, which rendered every texture at half resolution and turned off anisotropic filtering, and the game never re-applies a saved quality level at startup, so every launch ran at that floor. The default is restored to Good. Floor textures viewed at a shallow angle were hit worst, which is why a rug was the first thing testers noticed.
  • Turned off the HDR display output flags that were enabled in the same settings pass. The client has no HDR-aware color handling, so on HDR monitors the whole game washed out toward gray. Reaches testers with the next chaos build.

Voice-over

  • Removed spoken audio from 30 conversations whose lines are animal noises or mumbles: cats (including Saberhagen, whose lines are all meows despite the lore), dogs, horses and unicorns, farm and wild animals, the mimic, and a few canonically mute characters such as Stella and the silent pilgrims. Text-to-speech mangled these lines (tester report #664 heard the cat's "mrrow" as "miss-ro"). Text responses are unchanged, and the change is live for players at next login without a new build.
  • Added a permanent do-not-voice list for marking any conversation as never spoken, plus an audit that scans every voiced character's lines and flags the ones that are mostly onomatopoeia. The audit needed human review on both sides: the chicken scored low because of inherited generic word lines but is still a chicken, while the talking reindeer and a cursed knight who speaks through a wolf genuinely converse and keep their voices.
  • Fixed the male beggar in Castle Atos speaking with a female voice (tester report #562). His character data had the wrong gender recorded, so the voice system picked the female performance shared with the Port Harmony beggar. Corrected the data, generated the few missing male-voice lines, and audited every conversation in the game for the same mismatch; he was the only one. The male voice reaches players with the next chaos build.

Creatures

  • Fixed satyr enemies in Ruined Keep sliding around with no animation and facing the wrong way (tester report #573). During the engine migration the importer began assigning a different name to a duplicated bone in the satyr skeleton. Each satyr animation carries a saved list of which bones it may animate, and that list still used the old name, so the importer silently dropped the motion for every body bone and left only the root moving: the creature glides in a frozen pose. Repaired the saved bone lists and the satyr animations import complete again, a run cycle going from 2 animated bones back to 84.
  • The same rename also broke the link between the repaired animations and the satyr character models, which still carried the old bone name. Corrected the bone naming in all 38 affected creature models: every satyr variant including Krampus, Krang, and the underdweller satyrs, plus all imps, which turned out to be broken the same way with nobody having reported it. Each corrected model was verified to play its animations.
  • The repair pass also restored animation data lost to the same stale bone lists on the skeletal and hell horses, a beggar, and a few older effect models.
  • Swept all 1,637 creature models in the game with an automated check that plays each one's animations and confirms its skeleton actually moves: satyrs and imps were the only broken families, and trolls and everything else bind their animations correctly.

Images

Launcher

  • Windows launcher build 12 is live, the first carrying the automatic crash reporter from last week: the launcher notices a session that crashed, froze, or was killed and sends that session's log plus a short hardware summary to the team on its next start. Numbered 12 because 11 went to the Linux launcher release. Verified a build-10 install updating itself to 12 and the full report path against the live service, including that the report never includes the computer name or username.
  • Standing up the report receiver surfaced a rate-limiting flaw in the team's report service: the web server in front of it hid every visitor's real address, so all per-visitor request limits shared a single bucket. Fixed and verified; the limits on the in-game Oracle helper now count per visitor as designed.
2026-07-14 · 14 items

Headlines

  • Closed out the missing-terrain issue. A batch of older terrain files, authored years ago, were being corrupted by an automatic text conversion in version control, so the rebuilt client could not read them and the ground dropped out of a few zones. The recovered files were re-checked in the editor: six of the seven now load with correct height data, and the seventh was a broken leftover demo file not used anywhere in the game, so it was removed. The last "could not load terrain" error from the build is gone.
  • Creatures no longer move too fast on high-frame-rate machines. Enemy movement was tied to how many frames per second the simulating machine ran, so on faster machines creatures such as skeletons and liches could move quicker than intended. Movement now uses real elapsed time, so creatures keep their designed speed regardless of frame rate. A sweep of the client found and fixed two related cases.
  • Fixed a Vendor Listings search error on rapid searches. Starting a new vendor search before the previous one finished, by re-submitting, flipping a toggle, or changing the category filter within about ten seconds, could leave the listings stuck. The latest search now takes over and runs right away.
  • Leaderboards load again. The in-game Leaderboards window was fetching over plain HTTP, which the rebuilt client blocked by default, so it showed no data. Cleartext fetches are permitted again for the legacy leaderboard and log-upload endpoints, and the standings come back.
  • Player-owned-town owners can be rebuilt from the game database. The list of who owns each town was hand-maintained and had drifted, so ownership reports could name the wrong player after a town changed hands. A new tool reconstructs current owners from the game data and folds them back into that list.
  • Using a glyph or item you lack a component for now explains itself. One failure case showed no message at all and silently did nothing. It now tells you a required component is missing.

Client migration

  • Verified the earlier terrain recovery holds: the seven terrain files flagged as unreadable were re-loaded in the editor, and the six real ones (two live zones plus four development and vendor scratch terrains) all opened with valid height data. Deleted the seventh, a corrupt third-party sample terrain referenced only by that sample's own demo scenes and never part of a shipped zone, along with its leftover folder. Recorded the root cause and the recovery in the build-health notes.

Gameplay

  • Fixed creature movement speed changing with frame rate. A safety cap on how far a creature moves each frame was scaled by frame time, which slowed creatures on low-frame-rate hosts and let them run at full speed on fast ones, so the same creature could look faster on one machine than another. It now limits the per-frame step without lowering sustained speed, so creatures move at their intended speed everywhere. Added automated tests that confirm movement covers the same distance per second at 10 and 120 frames per second.
  • Swept the client for the same frame-rate coupling and fixed two more cases. How often creatures re-check for nearby targets was tied to frame count, so faster machines re-checked more often; it now runs on a fixed one-second cadence. Mouse-look smoothing now behaves the same across frame rates.

UI

  • Fixed an error in the Vendor Listings search when a new search started before the previous one finished. After a search, a ten-second refresh cooldown kept the old request active, so re-submitting, flipping the All Zones or Buy Orders toggle, or changing the category filter in that window could leave the listings stuck. A new search now supersedes the in-flight one and runs immediately. Found in server log triage; added a test covering the rapid re-entry case.
  • Fixed the in-game Leaderboards window showing no data. The rebuilt client blocks plain-HTTP requests by default, and the leaderboard data and crash-log endpoints are served over plain HTTP on legacy hosts with no HTTPS listener, so the fetch failed with an insecure-connection error. Re-enabled cleartext HTTP for the client so those endpoints work again. Found in server log triage.
  • Hid GM-only right-click menu options from non-GM accounts. Options like Summon Player, Zone To Player, and GM-Ghost Mode were shown to everyone on the test build, including testers without GM access; they now require an Admin/Dev account. Normal menu options are unchanged.
  • Stopped empty "Server" lines from cluttering the chat window. A blank line reading just "Server" was being added about once a second; empty server, admin, and daily messages are now dropped, while real ones with text still show.
  • Fixed the /datafolder chat command. It used a call that fails on newer builds and opened nothing; it now reliably opens the game's data folder in your file browser.
  • Fixed a doubled word in the vendor "Get Directions" confirmation ("marked on on your compass").

Stability

  • Fixed the game hanging on the "Please Wait" dialog when exiting. The exit sequence waited for a clean network disconnect with no time limit, so a slow disconnect could leave the dialog up forever and force a manual kill. It now waits briefly, then closes regardless.

Gathering

  • Fixed the Meticulous Collection gathering prompt sometimes staying above the character after a node finished. The prompt now always fades once gathering completes.

Combat

  • Fixed a rune-use failure that showed no message. When an action failed because a required component was missing, the client had no text for that case, so it produced an internal error instead of a player message and the action appeared to do nothing. Added the message ("You do not have a component required to use this.") and a test that keeps every failure reason mapped to real text. Found in server log triage.

Server

  • Hardened the character name search used by the GM and admin tools. The search text was used to build a database pattern without escaping, so specially crafted input could make the server do excessive work. Search text is now treated as literal text and results are capped. Added a unit test. Part of the server input-validation audit.

Server tooling

  • Addressed the deepest cause of stale town-ownership reports: the list mapping each player-owned town to its owner was hand-maintained and frozen months ago, so once a town was created, renamed, or transferred the report named the wrong owner on every environment. Added a read-only tool that reconstructs the current owner of each town from the game data (via the town's master deed) and an editor step that folds those owners back into the list, updating only the owner names and flagging new towns for a designer to finish. Ships the first phase; a runbook and tests are included.