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 27, 2026. This is an archive page; back to the current week.

2026-08-02 · 89 items

Headlines

  • Nightly chaos release is building again after two empty nights. The Linux build machine was crashing in its graphics driver; the build editor is back on OpenGL while the shipped client keeps Vulkan.
  • The Theme Editor has a real colour picker now: click any swatch, drag, and watch the interface change under the cursor.
  • Tester reports were going unread overnight. The nightly pass that reads them shared a lock with a job running every fifteen minutes and started on the same quarter hour, so it lost the race and skipped the night while reporting success. It now waits for the lock, starts off the quarter hour, and runs again four hours later.
  • Two new window looks, Citadel and Bastion: carved wood and metal, pick either one in Options under Themes.
  • A container holding a big saved decoration layout would open empty and stay that way. One oversized item made the whole container unreadable, and the same flaw sat under mail, bank, lot contents and the friends list.
  • A tester spotted that our report automation was only reading his most recent comment on each task. He was right, and the marker that records a report as handled then hid the rest for good. 96 skipped comments across 56 tasks have been read and answered, eight of which held real findings nobody had seen.
  • A day on the new bug reports: twenty-four interface bugs came in from testers and the in-game Oracle in twenty-four hours, and most of them turned out to be four shared faults wearing different hats.
  • Untouchable wolves. A creature that could not finish walking back to its spawn point stayed invulnerable and deaf to attacks for good. That walk now times out.
  • Italian filled back in. 458 interface strings had never been translated, so those windows fell back to English for anyone playing in Italian. All 458 are done and the language is back to 99.5 percent.
  • The Chaotic Clone stops giving itself away when it moves: its fighting stance now follows the caster instead of the pet AI, which counted running back to you as leaving combat.
  • Tamer rebalance. The taming tree splits in two, five innates go to 4x experience, and Pet Speed, Strength and Taunting Training become pet commands you cast rather than passives you forget. Only two run at once, each costs the pet something, and letting the taunt lapse sends the fight at you. DO NOT PANIC! (just experimenting)
  • Tracked down the avatar that stops dead while you hold the forward key: one shared speed value, three separate copies of the latch that decides when to move it, and a spell cast writing the speed behind all of them.

Bug Fixes

  • A wall switch on the castle gates in Castle Atos put an error in the client log for everyone who walked into the scene, without anyone touching it. The switch was set to open a door but pointed at a group of holiday decorations, which has no door on it. Using the switch also turned those decorations off, which was never the intent. It now pulls its handle and does nothing else.
  • Switches now report a setup problem once instead of every few seconds. A switch that cannot run one of its actions disables itself, and the code driving it kept going and tried to start new work on the now-disabled object, so the pair of errors repeated every time the server sent that switch a state update. The failure is recorded once and the switch stops being driven.
  • The wall switch template that new switches are placed from shipped with open-door and close-door actions pointing at nothing, so any switch built from it without a door wired in hit the same failure the first time it ran. Both actions are now blank.

Community

  • Nightly forum sweep filed 6 tracker entries: skill-balance asks for Blind, Tactics Healthy/Train Strength, and Heavy Armor's Provoking Shout/Taunt; a monthly-replenish request for LB birthday cakes and fireworks boxes; a bundled wishlist from a player covering an aggro meter and a Tinkering crafting tree; and a bug blocking wall/ceiling deco placement in the Stone Dungeon Rotunda.
  • Cleared the tester report backlog by hand while the nightly was down: fifteen reports read, ten acted on. Nine new bugs went on the tracker, one closed issue reopened, one report added to an issue already open, and one tester suggestion went to the wishlist.
  • What testers found this round: claiming a lot from its sign fails on the first attempt and works on the second, every time; the crafted decoration layout item cannot be named, reopened or applied once a layout is recorded on it; Use lot storage stays selectable at crafting stations that are not on your lot; clicking through a creature name plate does not reach a harvestable behind it; and a handful of interface strings are still English with Italian selected.
  • Five reports were held for a decision rather than acted on, because a FAIL is not always a failure. Two are checks the tester could not exercise, one is a checklist that describes something the game does not do, one is blocked on other work, and the oldest has been waiting eleven days as a design objection to event trophies being no-trade rather than a test result.
  • A tester noticed the automation was only answering his most recent comment on a task and ignoring the rest. He was right. The tool that collects tester reports handed over just the newest comment, so when someone posted a checklist and then a follow-up a couple of minutes later, only the follow-up was read.
  • The second half was worse. The marker that records a report as handled names one comment, so answering the follow-up made the whole task look done and the checklist underneath became invisible to every later run. On one task that meant replying "please run through the Expected list" to a tester who had posted that list two minutes earlier.
  • A sweep of all 873 tasks in the project found 96 comments that were never marked as read, across 56 tasks, 49 of them carrying PASS or FAIL lines. Every one has now been read and answered on its task.
  • Most of those turned out to have reached the tracker anyway, because whoever triaged them at the time read the task rather than trusting the tool. Eight did not, and those were real: kobold archers in three locations using a genteel voice instead of a growl, an entire scene where creatures never leave their spawn points and no pet or summon can be called, dungeon map reveals clearing on relog, and merchant items not coming back to your inventory when you cancel a sale.
  • Two of the replies that went out had told testers their checks "were not reported" when they had been reported, in the comment that was skipped. Both tasks have been corrected and the results recorded as the passes they were.

Build

  • The nightly chaos release failed two nights running and produced nothing. The Linux client build was crashing inside the graphics driver on the build machine, and because the release cancels every platform the moment one leg fails, the Windows build was stopped before it ever compiled.
  • The trigger was the change that moved the Linux client to Vulkan. On Linux the editor picks its graphics backend from the same list the shipped game uses, so pointing players at Vulkan also pointed the build machine at it, and that machine faults there. Build machines now run the editor on OpenGL. The shipped Linux client keeps Vulkan.
  • The client that comes out the other end is unchanged. Asset bundles still carry shader variants for both backends, 403 of each, and the last passing build before the outage had used exactly this setup.
  • Two separate driver faults turned up while narrowing it down: one on the threaded render worker during the player build, one uploading a texture array during the asset bundle pass. Basic Vulkan works fine on that machine, and giving its display a fake attached monitor changed nothing, so both are filed with repro steps for a maintenance window.
  • The profiler client build no longer runs on a nightly schedule. It is a large download for a specific job, on a machine that is often disconnected, so it now builds on request instead of every night.

Client

  • The Windows client now runs on DirectX 11 for everyone, and DirectX 12 is gone. DirectX 11 has been the default for new installs since mid-July, so most people are already on it and will not notice. It also stays the version that works under Linux compatibility layers.
  • Two ways to end up on DirectX 12 are now closed: the launcher Graphics dropdown, which is hidden on Windows since there is nothing left to pick, and the game's own preference order, which applied to anyone starting the game without the launcher. An old saved DirectX 12 choice needs no action and will start on 11.

UI

  • The UI Scale slider in Options, Themes tab now applies when you release the mouse instead of on every frame of the drag. Applying it live resized the Options window under the pointer, which moved the handle away from the mouse and sent the value bouncing. The percentage readout still tracks the drag, and arrow keys on a focused slider apply right away.
  • Drop-down lists now keep a solid backing at any window transparency setting. The transparency slider was thinning the list plate along with the windows, so at the low end a drop-down opened as floating text over whatever was behind it. Windows still fade as before; the list keeps the density its theme authored, and it now wears the same bracket frame as the other floating panels.
  • Theme Editor label fixes: the "Ambient motion" and "Search" labels were having their bottoms clipped by a fixed row height, and the Advanced tab search box could be squeezed to a few pixels wide on a narrow window. Both labels now size to their text, and the toolbar buttons drop to their own line instead of crowding the field.
  • The Theme Editor got a colour picker. Every colour swatch in it is now a button that opens a saturation and brightness square with a hue bar, a transparency bar on the Advanced tab, and the hex box still there for anyone who prefers typing a code. Colours apply while you drag, so the interface re-themes under the cursor.
  • Gave the UI Toolkit window title bar its own art slot, so a theme can draw a dedicated top bar rather than leaning on the window frame's top edge. The slot ships empty, so every current theme looks exactly as it did.
  • Fixed the Theme Editor turning up empty. The data file that carries the skins, backing patterns, ornaments and fonts is loaded a few seconds into a session, and if that one load came up empty the game gave up on it until you restarted, so the editor offered nothing and read every colour as white. The load retries now, and the editor refills its lists if the data arrives after you opened it.
  • Added two new window looks, Citadel and Bastion, both carved wood with metal corner pieces. Citadel runs a lion-head title bar across the top of each window and Bastion leaves it plain. Both are in Options under Themes.
  • The wooden frame art arrived with its window interior painted solid, which would have left the window opacity slider doing nothing on that look. The interior is now cut out during art prep, so the slider works there the same as everywhere else.
  • Opening a doll cabinet, mannequin, jukebox or automated phonograph a second time did nothing until you changed zones. The window was still being tracked from the first time, and the code that hands one back only ran when it was creating a fresh one, so the second request got nothing at all.
  • That same gap explains two more phonograph reports: the wax cylinder limit was never re-read, so a reopened phonograph insisted it could hold none at all, and its window had no way to close other than its own range check, so anything else that ended the interaction left it on screen.
  • Selecting a recipe at a crafting station and then re-sorting the list kept the same row highlighted rather than the same recipe. That was worse than it looked: Craft and Queue read the selected row, so they acted on whichever recipe had slid into that slot. Every list built on the shared roster keeps its selection on the row now.
  • Vendor search results were shifted one column to the left: the date an item was listed appeared under Item Name, Time showed the weight, and Location was empty. The row builder was skipping the widest column when filling cells but the table was still drawing it.
  • Adding a player to a lot access or banned list needed two quick presses of Enter. The text box was taking the first press as "stop editing" before the window ever saw it. Sixteen other text boxes had the same wiring and are fixed with it, including item search, rename, pick quantity and the chat tab options.
  • Turning on the health and focus numbers squashed the two bars together and clipped the digits. The numbers sit outside the normal layout flow, so the rows only ever reserved the height of the bar itself and the focus bar painted over the health figures. The rows now make room while the numbers are on.
  • Clicking through a creature nameplate to a tree behind it did nothing, even though hovering showed the harvest cursor. The plate was taking the press before the world ever saw it, which also skipped double-click detection, and harvesting is a double-click. A plate over open sky still targets what it names.
  • Empty equipment slots on the character sheet showed no slot name, only a silhouette, with the word available on hover. The name is back as a caption across the bottom of the slot art.
  • Your own inventory window and an unnamed crafted backpack were both titled "Backpack" and could not be told apart with both open. Yours now reads "Your Backpack". An NPC dialogue window could also lose its typing box entirely at narrow widths; the box has a minimum size now.
  • Merchant window: the Exchange list now empties whenever the window closes. Cancelling a sale used to leave the items sitting in the Exchange, so the next merchant you talked to opened with your old proposal still in it, and the items looked like they had never returned to your backpack. Nothing was ever removed from the backpack while items sat there, so no items were lost.
  • Right-dragging to swing the camera no longer opens a menu when the drag starts on a name plate. Your own name and health bar sit over the middle of the screen, which is where the swing starts, so the menu opened and the camera did not turn. The plate menu now waits for the button to come up and only opens if the press was a click rather than a swing.
  • Typing a slash command with the chat window closed no longer sets off game keys on the way in. The window has to open before its text box can take the keyboard, and until it did, the letters were still being read as key binds, so typing /oracle opened the emote list in passing. Chat now holds the keyboard from the key that opened it until the box is ready, and hands it back if the box never gets there.
  • The panel that slides out beside a skill icon when a skill goes up or down is now a size larger, bold, and drawn with a thin black rim, which is what the count beside the icon already had. Thin unrimmed text washed out against bright ground. The panel is the same size and in the same place, so the icons still line up in a column, and a test now holds the text size against the panel it has to fit in.
  • New keybind: Close Loot Windows. It shuts every loot window you have open and leaves everything else where it is, which is what Escape does not do. It starts with no key on it, so pick one in Options under Key Bindings; jump is the key it was asked for. Loot means a corpse, a world chest or a dropped container, the same set the take-everything key already works on.
  • Dungeon Piece window: the three lines under Dungeon Point Limits were printing on top of each other with the Upgrade Limit button over the last one. Each line now keeps a full line of height to itself. The rows are built while that panel is hidden, and nothing was holding their height up until it opened. Long captions shorten with an ellipsis rather than wrapping, and the numbers on the right are never the part that gets cut.
  • Letter tails are back in list rows. The bottom of every p, y, g, j and q was being cut off flat in the teleport list, the verification window, the backpack, mail and the roster. Rows clip their text so long entries can end in an ellipsis, and the box they clip to was sized from the font's idea of a line, which is a fraction of a pixel shorter than the line actually drawn. That fraction is at the bottom, where the tails are. The box is now measured against what gets drawn, at every text size. Nothing else moved.

Images

Tooling

  • The nightly pass that reads tester reports had gone two nights without doing anything. It shares a single lock with the verify sweep that runs every fifteen minutes, so the two can never act on the same report at once, and its start time sat on the same quarter hour that sweep ticks on. They raced for the lock every night. Last night it lost by four seconds, exited with a success code, and skipped the night.
  • The nightly now waits up to ten minutes for that lock instead of giving up on it, and it checks twice, because the report scan between the two checks takes minutes on its own. Its start time moved off the quarter hour, and a second run four hours later picks up anything the first one misses.
  • Every run now writes a line to its log before it can fail. A missing line means the schedule never fired, which previously could not be told apart from a run that died before it logged anything. Errors carry their message into the same log, and the run's own summary is written there too, so one file answers whether last night did any work.
  • The collector now hands over every unread comment on a task as one report, oldest first, and writes a separate handled marker for each so a partial answer cannot bury the rest. The skill that does the judging carries the rule and guidance for reading a report split across several posts.
  • New supersede sweep for stale tasks. When a fix is revised and a second verify task is filed, the first one sits there asking testers to check a build that no longer behaves that way. The sweep links the old task to the new one, notes where the work moved, and closes it. Nothing is deleted, so a wrong pair costs a reopen.
  • Building it turned up its own trap worth recording: two bugs filed from one tester report are linked to each other, and treating that link as "these are the same bug" would have closed a live bug filed an hour earlier. The sweep now only treats two tasks as the same when they name the same issue directly.

Inventory

  • A container holding a large saved decoration layout would open empty and answer with an error. A layout saved from a lot with a couple of hundred decorations on it was too big for the container listing to carry, and one such item made the whole container unreadable for good. Containers of any size now read normally, and the same fix covers mail, bank listings, lot contents and the friends list.
  • Consolidate Stacks now works on a stack kept inside a pouch. It was sending the merge to your backpack rather than to the pouch the stack was really in, so the server refused it and your inventory refreshed itself. Consolidating past the maximum stack size now merges what fits instead of failing outright.
  • A container that failed to refresh used to blank itself, leaving a window of items that could not be clicked or dragged. It now keeps what it had, so a hiccup costs you slightly stale contents instead of a dead window. Dropping an item onto a container in that state no longer breaks the drag.

Crafting

  • Recipes you starred did not show up under Favorites in the recipe book contents until you closed and reopened the book. The contents page now picks up pending stars on the way in. Obsidian Forge was also listed twice, the second entry holding only a Miscellaneous section; the single-player forge now folds into the one chapter.
  • Use lot storage was selectable at crafting tables that are not on your lot, anywhere in a player-owned town, and did nothing when ticked. It was only asking whether the table stood on a lot, not whether it was a lot you may use. The reverse was true of printing presses, which were greyed out even on your own property.
  • Recipe rows at a crafting station overlapped each other, and at the smallest window size the Durability heading and the inventory filter were cut off the right edge. Two separate sums that were wrong: a row shorter than the card it holds, and a minimum window width narrower than the three panes inside it. Both are worked out from their contents now.

Housing

  • The lot marker window set no text heights anywhere, so on a claimed lot its rows collapsed and drew over each other: "claimed by" across "claim expires", the house icon across the lot size and buttons. It now sizes its rows properly, scrolls, and can be resized.
  • List For Sale appeared to do nothing. It was sending fine, but an empty or out-of-range price only wrote its complaint into a line that had been clipped off the bottom of the window. The price box now has a label saying what belongs in it, and the refusal says so out loud. The two option buttons that drew as "..." are cogs again.
  • Regenerated the scene server's network interface so the lot sale messages match their definition again. The client's copy of that generated code was updated in the same change, so both sides send and expect the same messages, and the check that watches for generated-code drift is green again.

Decorations

  • A crafted Decoration Layout document stayed blank after you recorded a layout onto it. The recording reached the server, but the client never updated its own copy of the item, so the title never changed and clicking it asked for a name all over again.
  • Flip, roll and scale refused on any decoration with something resting on it. They were counting the stacked item as a piece of the one you were holding. Ordinary rotate never had that restriction, and now these three match it.
  • The decoration layout apply-changes view had its buttons hanging off the bottom edge. Fifth window to meet the same layout rule about a scrolling list squeezing the fixed rows around it.

Localization

  • Chat tab names stayed English no matter what language you picked, even though the translations were already in the table. The names were being flattened to plain text and then saved that way, so the first session you ever played locked them in. Existing characters heal on the next load.
  • Two different strings were sharing one translation id, so the Options window toggle for the original title screen was one translation away from reading as an unrelated scene name. Twenty-eight more strings were declared in code but had no record to translate against at all. A new test now fails the build if one id is ever given two different strings.
  • A tester playing in Italian found several windows still coming up in English. 458 strings had no Italian text at all, most of them from windows added or rebuilt since the last translation pass, and the game was falling back to English for them. All 458 are translated now: the Report Bug label, the inventory and options tabs, the decoration placement messages, decoration layouts, the deck, glyph and mail windows, book writing, the lot sale sign, six loading tips and a batch of store and recipe names. Italian is back to 99.5 percent overall, with NPC dialogue at 100.

Combat

  • Creatures walking back to their spawn point cannot be hurt while they do it. On broken ground that walk could never finish, so wolf packs in Jotungrund kept slow-walking, took no damage and ignored every attack. The walk back now gives up after a minute and puts the creature back in play.
  • Whether a creature flies was being decided by whether its attack is a ranged one. Those are different questions, and a flying creature with a close-range attack could only stay in the air by claiming a minimum range it did not want, which then made it back away from a target it could already hit. Creatures can now be told to stay airborne while they chase, on its own, without touching how close they will come.
  • A Chaotic Clone now holds the same fighting stance you are holding while it moves. Testers watching one run back to its caster saw it drop the stance to run and take it back the moment it arrived, weapon drawn the whole way, which picked the decoy out of the pair for anyone who waited for them to move. The stance was still on the pet AI clock, and running back to the caster counts there as leaving combat.
  • Pet Speed, Pet Strength and Pet Taunting Training are now abilities you cast on your pet instead of passive skills, replacing Frenzy. Each gives the pet something and costs it something else: Quicken trades accuracy for speed and crit, Embolden trades damage resistance for strength and crit damage, Goad trades attack speed for holding everything on the pet. Only two can run at once, charging the glyph extends the duration, and letting Goad lapse sends everything it was holding at you. Auditing this turned up that four of the five pet training passives were doing nothing at all in combat: the stats they granted were written to the owner and read by no combat code, so Pet Strength, Pet Taunting and Pet Hide Toughness Training have never affected a pet. Three are now abilities; Pet Hide Toughness is wired to the damage resistance it always claimed to give. DO NOT PANIC! (just experimenting)
  • New taming skill, Pet Range, tethers your pet to you. Untrained it fights within about 2 meters of you, 5 meters at skill 80 and 10 meters at 150. Walk further than that during a fight and the pet breaks off and comes back, and everything it was fighting comes after you instead. Your pet also holds less of a creature attention the further it strays, so hanging back while it fights across the room no longer works. Every existing tamer starts this skill at zero, so pets will stay very close until it is trained. DO NOT PANIC! (just experimenting)
  • Resurrect Creature now brings a pet back in better shape the higher the skill: about 10 percent health at skill 1, 50 percent at 80 and 75 percent at 100, where before every pet came back at a flat 20 percent no matter how good the tamer was. The summon cooldown now comes from Summoning instead of the retired Refresh skill: 120 seconds at Summoning 20, 10 seconds at 80 and 3 seconds at 150, and it never reaches zero the way Refresh did at level 120. Experience spent in Frenzy and Refresh comes back to your unspent adventurer pool on next login. DO NOT PANIC! (just experimenting)

Interface

  • The weight in the over-encumbrance popover was always yellow, while the character sheet turned the same number red past twice your capacity. Both readouts now use the same colour bands. The popover also stopped printing a "You" heading over lines nobody else could have applied.
  • Search All My Stuff could get stuck. The window turns its Search button off while a search runs and back on when it finishes, but a search lost on the way out never finished, so the button stayed off and the line stayed on "Searching..." until you changed zone. It now gives up after thirty seconds, says so, and lets you search again.
  • Escape now closes an open menu before it closes anything else. Opening the Skills window's Options menu and pressing Escape used to close the window and leave the menu sitting there with nothing under it. This covers every right-click menu and every window Options menu, not just that one.
  • The Linked Equipment strip in Edit Deck now names a piece when you hover it, and says so when you hover the red box of one you are not carrying. Both had hover text written for them, drawn by a mechanism that never reached the screen. The strip also keeps up while the window is open, so getting rid of a linked piece turns its icon red straight away instead of only after a close and reopen, and the two ring slots now sit next to each other.
  • Pinning a window is meant to make it immune to Escape, and one of the two things Escape does was not checking the pin. That one closes everything it is allowed to in a single press, so closing a loot window with Escape took a pinned character sheet with it. Pinned windows now stay put.

Maps

  • Dungeon map bake: a large prop standing on the floor is a hole in the walkable surface, and the bake was turning that hole into a dark square punched through the map floor. Enclosed pockets up to 16 square metres now fill back in, which covers furniture and statuary while leaving a pit or an interior courtyard open. Four tests pin the limit in both directions. The shipped maps carry the change once the dungeon fleet is rebaked.

Gathering

  • The dirt piles in Tanglemire came back as craters. A harvested node is meant to return to its untouched look when it becomes gatherable again, but two parts of the code disagreed about which of a node's looks counted as the resting one, and the half that rebuilds a node with no saved state picked the worked-out one. Both halves now agree, so a node that can be gathered again looks like it.

Audio

  • Two NPC voices were re-cast. Scholar Vivienne Grava was speaking with a man's voice because her character record said male, which is what the voice is picked from; the record is corrected and she has a suitable voice. Edvard the Wanderer was reported as sounding too young, and the look at it found something bigger: his seven separate conversations had each been given a different voice, so he changed voice between Solace Bridge, Highvale and Blood River. All seven now use one older, gravelly voice.
  • A character whose name is also an ordinary word was losing NPC voice on lines that had nothing to do with them. Spoken lines have the player's name swapped for the word the voice was recorded with, so the line still matches its recording, but that swap was being applied to every line rather than only the ones that name you. A character called Hero heard silence on "You are no hero yet." and one called Rose lost the lines about roses. Lines that never name you are now left alone.

Quests

  • Ten lines of NPC dialogue named a gesture that does not exist, so the character said the line and stood still. The names were near misses: a trailing full stop, a short form, an old name. Neese DelaRaven reads her paper again, Rykesh waves goodbye, the students of Courage and Truth salute, and three taunts land. Eight more lines the checker had flagged turned out to be fine: the Oracle uses that same field to mark which virtue you chose, so the checker now leaves those alone.

World

  • Kingsport townspeople call out to each other again. Fifteen exchanges were addressed to names nobody in town answers to, written the old way round, so neither side ever spoke and you would never have known the conversation existed. Eight pairs are back: Harry and Powell the Guard, Innkeeper Abbott and Guyon the Bard, Justin and Julia the Alchemist, Marian and Jeremy the Tailor, Martin and Nahche the Farmer. No lines were written or reworded, they were being handed to the wrong name.

Balance

  • Split the Taming skill tree into two branches under Tame Creature: Collar Recovery holds Heal and Resurrect, and Summoning holds the three pet trainings, Taming Specialization and Combat Training, with Precision and Hide Toughness below it. Tame Creature, Summoning, Combat Training, Pet Attack Precision Training and Pet Hide Toughness Training now cost 4x experience per level instead of 1x, matching the Focus tree, whose equivalent pet innates have been 4x since they shipped. Existing skill levels are untouched; only the next level costs more. Frenzy and Refresh are retired. DO NOT PANIC! (just experimenting)
  • Rebanded all 178 tameable creatures onto seven summoning tiers, needing Summoning 1, 30, 80, 100, 120, 140 and 150. Most requirements went up: a creature that needed Summoning 79 now needs 100, and the top creatures moved from 99 to 150. Combined with Summoning costing 4x experience per level, this is the gate that keeps new characters off the strongest pets. Taming and collaring are unchanged; this only affects fielding a creature. DO NOT PANIC! (just experimenting)

Testing

  • Added 55 EditMode tests pinning the tamer rebalance: the whole prerequisite graph against the design diagram, the 4x pricing, each command carrying its drawback and sitting on the two-slot channel, both burst windows staying shorter than their cooldowns, the taunt not gaining power from charging, and the pet range, resurrect and cooldown curves at their anchor points. Also pinned that the pet manifest agrees with the prefabs, since the built client reads the manifest and only falls back to the prefabs in the editor. DO NOT PANIC! (just experimenting)

Movement

  • Fixed an avatar that could stop dead while you held the forward key, where letting go and pressing again gave you a few feet and then another stop. The client only changes your speed under an acceleration ramp, and it only starts a new ramp when its idea of your target speed changes. A spell cast that locks you in place was setting the speed straight to zero without telling the part that decides whether a new ramp is needed, so once those two disagreed nothing started you moving again until you released the key. Reported by a tester who had been hitting it about once a day with no pattern.
  • Added a watchdog underneath that fix. If your avatar is asking to move at a normal speed but has not moved for half a second, the client corrects itself and writes one record of what was happening at that moment. Roots, stuns, knockdowns, casts and being over-encumbered cannot trip it, because those all work by lowering your speed or by blocking the movement request outright, and there is a test for each one. Since nobody can reproduce this on demand, the record is how we find out whether any version of it is still out there.
  • A review pass over the first version caught that the diagnostic record was being written at a level the log triage does not read, so every record would have landed in the index and never been looked at. Also split the position into separate fields, since the ingest would have stored it as one opaque string, and pinned the number formatting to a fixed locale so a tester on a comma-decimal machine does not emit values the index rejects. Two of the three problems only showed up by reading the ingest rules rather than the client.
2026-08-01 · 116 items

Headlines

  • Test bots now appear in the world as real characters, and running two hundred of them showed the game client hits its limit long before the server does.
  • Searching all your stuff now reaches your bank from anywhere, with no trip to a banker first, and the window stopped swallowing its own "type at least three characters" message.
  • The encumbrance warning appears the moment you go over your carry capacity again, with a yellow exclamation mark as you near the weight that blocks pickup and a red one at it.
  • A player report of poor performance on an AMD Ryzen AI MAX+ 395 laptop turned into a measured finding: on Linux, OpenGL was costing about four times the processor time per frame that Vulkan does. Same machines, both drivers, 1,700 samples. The Linux client now defaults to Vulkan.
  • Texture streaming was off across every quality level, so the client uploaded every texture at full detail with no memory budget. That is why one Linux session logged 13,184 low-memory warnings from the graphics driver and then sat at 11 frames per second. Streaming is on now, with 3,964 world textures swept onto it.
  • Distant players are simulated cheaply again, and the client now caps how many other players get full physics rather than only how far away they are. A crowd of 500 costs what a crowd of 15 costs.
  • Stealth now actually hides you. Other players saw a shimmering outline of every stealthed character; they now see nothing unless they are within about 3 meters and facing you.
  • Quest reset stopped eating your travel list. Resetting a character's quest state kept clearing every map and arrival point that character had discovered, so a reset character could not teleport anywhere it had already been. Places you have found now survive the reset.
  • Stealth got its escape back: break line of sight and hide, and whatever was chasing you loses you. It never worked before.
  • Riposte and Opportunity Strike say "immediately after" a parry or dodge. The windows were around 11 seconds. They are 2 now.
  • Obfuscate: throw a smoke bomb, break line of sight, vanish. New Subterfuge skill with a craftable bomb behind it.
  • A new testers-only /reactions readout finally makes reaction-skill timing visible: how long the window really is, how far into it you pressed, and whether the bonus landed.

Combat

  • A Chaotic Clone now reads as the player who cast it. Its name plate carries the caster's title line, the caster's name with whatever PVP and faction tags are on it, the caster's guild line, and the same name colour. Before, it printed the caster's name once plain and once in angle brackets, which is where a guild name goes, with no title and an NPC colour.
  • The clone takes the caster's health pool instead of a flat 28 hit points. The old value meant the numbers under its name read 14 out of 28 beside a real avatar's 1400 out of 1751 the moment anyone hit it, so the deception ended at the first blow however well the text matched.
  • It only wears what the caster is wearing. A helmet or cloak you have hidden stayed visible on the clone, because the code deciding whether to draw a piece of an outfit asked whether the entity was a player and drew everything when it was not.
  • It sheathes and draws its weapon when the caster does. It used to stand around with the weapon out permanently, which is what a summoned creature does and no avatar does.
  • Its run speed went from 5 to 5.5, matching an avatar, so the pair no longer drifts apart over a few seconds of running.
  • Right-clicking somebody else's clone offers the menu that player's character offers. It used to offer a pet sheet, so one click identified the decoy. Right-clicking your own clone still gives you the pet controls.
  • All of this is one idea: a new identity lookup that answers "which player is this entity presenting itself as". A player is itself, a clone is its caster, everything else is nobody. The name plate, the party typeface, the guild leader and grandmaster marks, the outfit visibility checks and the context menu all read through it. Combat, aggro and pet ownership deliberately do not, so a clone is still a summoned creature everywhere the rules are concerned.
  • The clone follows the caster for as long as it lives, so changing your title, joining or leaving a guild, or flagging for PVP while one is out updates its name plate too.
  • Nineteen tests cover the decision rules: when the owner-name format applies, which player a plate speaks for when the caster has walked away, which health pool wins, and which right-click menu is offered.
  • Stealth now hides you from other players. A stealthed character was still drawn for everyone else as a shimmering, body-shaped outline that followed them exactly, so stealth gave away the position it was there to conceal. Other players now see nothing at all unless they are within about 3 meters and facing you, which is the same range at which they could already target you. Party members and Game Masters still see you, and stealthed creatures keep their existing faint shimmer so ambushes still read.
  • Fixed two related problems found while tracing that one. A stealthed player could be moused over and click-selected from any distance, where the reticle had always blocked it past a few meters. Stealth ending during a scene change also left that character's lights switched off permanently.
  • Breaking line of sight while hidden now works. A creature that had already spotted you kept tracking you no matter how well you hid, so re-hiding could never shake anything already chasing you. Get out of its sight and hide, and it loses you.
  • Camouflage promised a higher stealth level from Subterfuge Specialization and delivered none of it. The bonus was reading Tactics specialization instead, so a Subterfuge specialist saw no change in the tooltip or in play. It reads the right one now. Silent Movement and Camouflage cooldowns also came down, from 30 and 15 seconds to 20 and 10.
  • Riposte and Opportunity Strike are both described as following immediately after a parry or a dodge. Riposte's window was 11.25 seconds at Blades 100, and Opportunity Strike's armor-piercing bonus was guaranteed for about 11 seconds after a dodge. Both are 2 seconds now, still widened by specialization. Damage is unchanged until the shorter windows have been played with.
  • Sneak Attack now requires a melee weapon. It had no weapon requirement at all and used your weapon's range, so a bow got the full stealth opener from bow range with none of the risk of closing in. Poison coating duration now grows with Subterfuge Specialization on top of the existing chance to save the potion, Smelling Salts takes 1.5 seconds to use instead of 0.5, and Distract covers more ground when specialized.
  • Pugilism moved from the Subterfuge tree to Tactics. It had no mechanical tie to Subterfuge left: its description claimed Subterfuge Specialization extended unarmed reach, but the reach was a fixed number that specialization never touched. Characters who already trained it keep it at the same level.
  • New Subterfuge skill: Obfuscate. It throws a crafted smoke bomb that hides you sharply for a couple of seconds, in the open and even while something is hitting you, which is the window you need to break line of sight and get back into stealth. It sits where Pugilism used to be in the tree, behind Engage Opponent. Smoke Bombs are an Alchemy recipe, three per craft.
  • Engage Opponent gives Subterfuge specialists a brief stealth boost while they close the distance, on top of the focus discount it already had. Without the specialization it behaves exactly as before.
  • Added a testers-only timing readout for reaction skills. Riposte, Opportunity Strike, Aetheric Feedback and Fortify Defenses all give a bonus for acting quickly after a parry, dodge or critical hit, and until now there was no way to see whether you made the window or missed it. /reactions shows the window that is open with a countdown, then logs each cast: how long the window was, how far into it you pressed, how long the answer took to come back, and whether the bonus applied.
  • The readout also drops a one-line summary into chat after each reaction cast, so a tester can paste it straight into a verification task instead of describing what they saw. It carries the window length, the time of the press, the round trip, and the result.
  • Reaction skills are detected from the skill data itself rather than by name, so a new one is covered automatically, and a test fails if the set ever changes without anyone noticing. That test immediately caught Opportunity Strike being wired one level deeper than the other three, which is why its listed chance has always read 100%.

Community

  • Nightly forum sweep filed 10 wishlist suggestions from the community to the tracker: more tameable mounts, a Crown Store dye preview tool, a PvP pickpocket/combat-deck idea, deco placement on city-home windowsills and railings, a per-player FX mute option, reviving the monthly fishing contest, custom boss names in player dungeons, a new Castle Atos child quest, a feathers turn-in bin, and a Death Magic aura ability.

Build pipeline

  • The profiling client builds and downloads. Getting there turned up a real repo bug: the ignore rule meant to skip a package-restore folder had no path anchor, so it also matched the plugins folder holding the spline library the game compiles against. Anyone building from a fresh copy of the source got a wall of compile errors on types that were simply absent. The plugin is now tracked, so a clean checkout compiles.
  • Both builds ran at the same time on the one machine and both passed: the profiling client on its own copy of the source, the nightly release on the original, overlapping for about 25 minutes with no interference. The second build also finished in 62 minutes rather than eight hours, since its asset cache was warm by then. First build off a cold tree is the slow one.

UI

  • Buff icons on the status bars line up under the bars again. The conversion carried the authored grid's nine-per-row wrap and 26-pixel cells across but not its position, so the strip drew flush with the health and focus bars instead of 12 pixels in under them. A new test pins the full strip at 246 pixels against the 280 between the player and target plates, which is the overlap a tester reported before last week's wrap fix landed.

Crafting

  • The first disagreement the new recipe matching reported on the test shard turned out to be a false alarm, and would have been followed by one for roughly every third craft. Recipes that take a category of ingredient rather than a specific one have several equally valid identity codes, and the two sides were reporting different ones for the same recipe. The check now compares the recipes themselves.

Tooling

  • Our test bots now stand in the world as real characters. Getting there needed two more pieces than expected: a bot has to keep publishing where it is standing, or the world puts it at the map origin underneath the terrain, and it has to say it finished loading, or nobody else ever builds a body for it. Until both were in place the bots were in the player list and setting off fireworks with nothing visible underneath.
  • Ran the bots up from ten to two hundred in a single town with no dropped connections. The server barely noticed, sitting around 94 percent idle, and each extra character costs it about a sixth of one percent of a processor core. The limit turned out to be the game client instead: with two hundred characters in view it was pinned to a single processor thread while the graphics card sat mostly idle, which is the kind of thing a server-only test would never have shown us.
  • The Editor report and validate menus stopped popping a dialog to say they finished. Every one of those stopped the Editor until somebody clicked it, which blocks automated runs and tells you nothing you cannot see when the import stops. 84 of them now write a console line instead. Failure dialogs all stayed.

Social

  • Fixed a partner dance that never ended. Ending one only broke the pairing between the two players, and the dance animation loops with no natural finish, so the character kept dancing afterwards. Worse, nothing checked whether your partner was still dancing, so if they stopped an arm's length away you waltzed on alone with nothing to tell you.
  • A dance now ends for both dancers when either one moves, when either stops dancing, when they drift more than about 7.5 metres apart, or when a partner logs out, and both people get a line saying so. Added /partner off to end one on purpose; typing it used to answer "off isn't nearby" as though it were somebody's name.

UI

  • The deck name and swap display in the lower right can be moved again. A small grip handle above the two deck names drags the names and the swap button together as one piece, and where you drop it is remembered between sessions. It had been pinned in place since an earlier version let the deck names be dragged away from their icon one at a time.
  • Reset Positions on the Interface tab now puts that deck display back in the corner as well, and a remembered spot is pulled back on screen whenever the resolution or the UI size changes, so it cannot be left stranded past an edge.
  • Searching all your stuff now looks in your bank from anywhere. Before this, a banked item only turned up if you had opened a bank window that session, or if you happened to be carrying another one of the same kind.
  • The search window also stopped losing its own message. Typing fewer than three characters and pressing Enter showed the reminder for a fraction of a second before the previous result count wrote over it, so anyone who had already searched once never saw it.
  • Two smaller improvements came with those. Search results now fill the list as they arrive instead of appearing all at once at the end, and a search that matches more kinds of item than one request can carry now says so instead of returning a short list with no explanation.
  • Highlighted inventory rows now belong to one window at a time. Clicking anywhere in another container window, its title bar included, drops the previous window's highlights, and clicking the world clears them. Before this, a bag, a chest and the backpack could each hold a selection at once with nothing to say which one an action would use. Reported by a tester who also proposed the fix.
  • The tester Duplicate tool follows the same rule, so it copies the rows in the window you were last working in instead of everything highlighted anywhere. Crafting stations are the deliberate exception: their side-by-side lists keep their own highlights, because moving reagents between them means having rows picked in two lists at once.
  • Glyphs on the hotbar were reported as showing no tooltip. A plain hover renders the full tooltip on the current build, and nothing changed between the reported build and this one in how a hover is resolved, so that report stays open until it can be reproduced. The hover path picked up automated coverage in the meantime: the tests mount the bar the way the game does, pick the element under each slot, and follow it to the tooltip that slot should answer with.

Performance

  • Profiled the client in a crowd on the chaos shard: stood in Castle Atos and ramped test avatars 0, 50, 100, 150, capturing at each step. Frame time rises about 0.89 ms per added player, taking the client from 30 fps alone to 6 fps in a crowd of 150.
  • The graphics card is never the hold-up. The counter that measures the main thread waiting on the GPU read 0.002 ms at every population, so the whole cost is on the processor side. A faster graphics card would not move this number.
  • Found two pieces of code whose cost grows with the square of the crowd: doubling the players quadruples the work. One is a player lookup that walks the entire list every time it is asked, hidden behind a property that looks free to call. The other is every visible character running its own search for who is standing near it, including the ones that are just puppets of other players.
  • Re-ran the 150-avatar test with the fireworks switched off to separate the two costs. Fireworks are 20 percent of the frame at that size and almost all of it is drawing, adding 3,365 draw-state changes because each burst brings its own effect that cannot be drawn together with the others. The crowd itself is the other 100 ms, and that part is nearly all code.
  • Fixed the first of the two costs that grew with the square of the crowd. Looking up a player by id walked the whole list of everyone in the scene, and it sat behind a property that looked free to call, so it ended up running for every character every frame. It is now a direct lookup. At 150 players that removes about 48,000 list reads and 27,000 comparisons per frame.
  • The second one turned out to be a missing limit rather than a bad design. Each character searches for who is standing near it, and that search is meant to run about once a second. The version that runs for other players nearby had no such limit and ran every frame, while the copy that runs for your own character was correctly limited. Restored the limit: at 150 players that is 153 searches per frame down to roughly one per character per second.
  • Resisted the tempting version of that second fix. Skipping the search entirely for other players would have been faster still, but abilities that jump from target to target read the list belonging to whoever cast them, and the caster can be another player. Keeping the list and restoring its limit gets almost the same saving without touching how those abilities pick targets.
  • Next candidate found while measuring: character animation. Non-player characters are told to skip animation work while off screen, but player characters never were, so every avatar behind you keeps doing full animation. That is about 27 ms of work per frame at 150 players.

Tools

  • Added a small harness that triggers a profile capture in a running client from the command line, so a measurement run does not need someone typing into chat between waves.
  • Fixed the example test-fleet config, which set the bots up to perform in a private room no player could ever reach; its own comments described the opposite behaviour. Also fixed the fleet stop script, which threw an error at the exact moment every bot had shut down cleanly.
  • Caught a test that was passing without testing anything. The new coverage for the player lookup needed a live network connection to set up, which does not exist when tests run outside the game, so every case quietly skipped and the run still reported success. Rewrote it to cover the one case it can actually reach, which happens to be the one the change put at risk.

Images

  • The new Summon window, filtered to tiers 8 through 12.

Inventory

  • Container windows no longer open on top of each other. Every bag and chest loaded the same saved position, so the second one you opened covered the first completely, title and all. Each additional container now steps 40px right and 32px down from the one before it, and closing one in the middle puts the next container you open back in that gap.
  • The remembered size and position still belong to the first window you open. The rest match its size and step off it, so every title stays readable and no window has to be dragged aside to find the one behind it.

Interface

  • The encumbrance warning in the top right corner now appears as soon as you are carrying more than your capacity. On the new interface it stayed hidden until you were roughly two and a half times over, so through most of the range where your movement is already slowed there was nothing on screen saying so.
  • The exclamation mark over that warning is yellow as you approach the weight that stops you picking anything else up, and red once you reach it. The conversion had carried the mark across but not the colour it was drawn in, so both looked identical.

Options menu

  • A tester went looking for a search box in the Options window's Controls tab and reported there was none. There never had been one, in the current interface or in the one it replaced. The tab now has the filter that report assumed: the keybinding list carries close to two hundred actions, and typing part of an action name narrows the list to what matches, ignoring capital letters and matching anywhere in the name. Clearing the box, or closing and reopening the window, brings the whole list back.
  • Building that filter exposed two faults in key rebinding. A row waiting for a key press reads the keyboard directly and treats Delete as clear this binding, so clicking into the new box while a row read Press a key would have bound the first letter typed, and Delete would have cleared that action's key. The capture now ends the moment the filter box takes focus. Resetting to defaults also left a capture running against keys that had just changed under it.

Housing

  • Fixed Tighter Fit not re-checking the item you are holding when you toggle the mode. Slide an item against a wall until the ghost turns red, press the key without moving the mouse, and the ghost stayed red until you nudged the item. Turning the mode off while tucked in had the reverse problem and left the ghost green on a spot the item no longer fit.
  • Tighter Fit now says which kind of item it refused. Wall art, containers, display cases and lot markers all gave the same line about chests, crafting stations and planting beds, which named none of them. Each category has its own message now, and an excluded item held with the mode on says so in the placement status instead of the Tighter Fit line disappearing.
  • Tighter Fit works on a decoration that has something resting on it. A rug with an item on top read as a multi-part decoration and was refused. The rug now gets the narrower placement collision while its passenger keeps full size, so the pair still stops against a wall. The same fix stops a table with a chest on it being treated as a chest.

Maps

  • A tester checking the Vauban Pass map reported their marker sitting slightly off the trail they were standing on. Built a tool that measures the question directly: it puts an object at a known spot in the world, photographs it the same way the map itself was photographed, and compares where it landed against where the map says it should be. Twenty-five spots across the zone, at two different heights.
  • Vauban Pass came back accurate to six centimetres across the whole zone, with no stretch and no turn in the result. The map picture, the frame it was shot in and the numbers the game uses to place your marker all agree, so the map is not what is wrong. The map edge fix from the day before is cleared too. The search moves to the client.
  • Added two tests that hold the same relationship without needing the editor open, so a future recapture cannot quietly reframe a map and leave every marker on it pointing at the wrong place. One of them covers the case where the map is drawn turned to face north, which had been carrying every rotated zone with nothing checking it.

Client

  • Tracked down a report of poor performance on an AMD Ryzen AI MAX+ 395 laptop. The chaos telemetry happened to contain the same physical machines running under both Linux graphics drivers, which made it a controlled comparison: OpenGL averaged 25.7 fps and 78.6 ms of processor time per frame, Vulkan averaged 58.7 fps and 19.8 ms. Roughly four times the processor cost for the same work.
  • The Linux client now starts on Vulkan by default. Anyone who already picked a graphics option in the launcher keeps their choice, OpenGL stays selectable, and it remains the automatic fallback if Vulkan cannot start. Windows and Mac are untouched.
  • The per-minute frame rate report now records which graphics driver, quality level and texture detail setting a session is actually running. Without the driver field the OpenGL gap above could only be worked out by reading renderer name suffixes, which is how it stayed hidden this long.
  • A fresh install now picks its starting video settings from the machine it is on. Before this, the client read the graphics chip only to write it into a log line, so a new install started on the same preset on a top-end desktop card and on a laptop with built-in graphics. Existing players are left exactly as they are.
  • Texture streaming was off across every quality level, so the client uploaded every texture at full detail with no memory budget at all. It is on now, with a budget per quality level and a ceiling worked out from the machine, and 3,964 world textures were swept onto it. Interface art, cube maps and textures without mipmaps are deliberately left out.
  • Found why one Linux session logged 13,184 low-memory warnings from the graphics driver and then sat at 11 frames per second: with no texture budget the allocator falls off the fast memory and the processor starts stalling inside the driver. The giveaway is processor and graphics frame times reading the same number, which looks like a processor bottleneck in the charts and is not one.
  • The automatic quality adjustment had a check that could never pass, so distant ground detail has never once been turned down on a struggling machine while shadows and level of detail have been adjusting for years. Its trigger also only fired below 25 frames per second, so anyone sitting at 30 to 45 got no help at all. It now aims at a target worked out from your own frame rate limit.
  • Re-measured the crowd cost in Castle Atos on a build carrying the two fixes from this morning. With 150 other players standing in one scene, the script work the client does per frame for the crowd fell from 49.9 to 39.0 milliseconds, and the cost of each additional player dropped from 0.258 to 0.180 milliseconds.
  • The saving grows with the crowd the way the fix predicted: 1.0 millisecond at 50 players, 5.1 at 100, 11.0 at 150. Both problems removed work that grew with the square of the player count, so a bigger crowd was always going to gain more. Predicted 9.6 milliseconds at 150, measured 11.0.
  • The profiles show each fix doing its own job. The per-avatar search for nearby characters went from 153 sweeps every frame to 18, which is the once-a-second cadence it was always meant to run at. The player-list scan behind it disappeared from the profile entirely: it was being read 48,873 times a frame at 150 players.
  • Frame rate at 150 players with fireworks still reads the same number, because the client runs with vertical sync on and frame times land on fixed boundaries. An 11 millisecond saving is not enough to cross one. With fireworks off it does cross, and the rate went from 7.5 to 8.6 frames per second.
  • With those two gone the ranking of what is left changed. Checking whether an object still exists is now the largest remaining script cost at 9.2 milliseconds per frame, down from 12.2 but still the biggest single item. Roughly a quarter of it had been sitting inside the unthrottled search.
  • The fireworks-off capture gave the throttle fix a second, independent check. If each avatar now searches once a second rather than every frame, the per-frame count should follow the frame rate instead of the crowd size, and it does: same 150 characters at 8.6 frames per second instead of 6.0 gave 19 searches a frame against the 17.8 that cadence predicts.
  • Chased down where the client frame actually goes with 150 players on screen. The profiling report had been adding up work across all 56 threads at once, which buried the answer: the job workers alone come to 17,373 milliseconds per frame against a 164 millisecond frame. It now separates the main thread, and that total lands at 163.87 milliseconds against a 163.87 millisecond frame. The whole frame is accounted for.
  • That closes a question that had been recorded as "a third of the frame is unattributed". Nothing was missing. The earlier number was frame time minus three named engine stages, and plenty of real work happens outside those three. The split at 150 players is game script 33 percent, engine and waiting on jobs 10, rendering 10, animation 6, particles 6.
  • Other players now stop doing their full animation work while they are off your screen. They keep tracking what they are doing, so anyone walking back into view is already in the right pose. Characters run by the game have always worked this way; player characters never got the same treatment, so 150 of them were each posing a full skeleton whether or not you could see them.
  • The compass was re-sorting which icon draws in front on every frame: 888 comparisons, each doing two lookups and four flag reads, about 1.4 milliseconds a frame. It costs that in an empty scene as much as in a crowd. Icons still follow the camera every frame; only the front-to-back order settles at ten times a second now.
  • Checked whether firework effects were missing their batching settings. They were not: 2,595 of the 2,606 effect materials already had instancing switched on, including all four firework ones, which share a single shader. The 11 that lacked it are on now for consistency, but they are not the cause. The real number is roughly 2,800 live particle systems at once, with no limit anywhere on how many effects can run together.
  • Cleared the last 242 build warnings out of the editor console, left over from the engine upgrade. The bulk of them, 175, are fields the old interface still owns inside saved layouts that no code reads any more. They are kept on purpose so the saved wiring stays intact, so they are marked as expected now rather than deleted. Checking the result meant replaying the compiler command the engine itself runs, because a plain command-line build and the editor console do not agree on what counts as a warning.
  • One of those warnings was covering a real bug. The compass strip and the map picture are drawn by the same code, and it was lining the artwork up twice over: once by hand, once in the engine, which does that step by itself now. The doubling only bites when the game packs that artwork in with other images while running, so it shows on some machines and quality settings and not others, and when it does, the wrong slice of the picture gets drawn. It lines up once now.
  • The client had a complete system for simulating distant players more cheaply, switched off with its call commented out, so every other player in the scene was being run at the most expensive setting no matter how far away they were. It is on now, with one change to how it decides.
  • The original design cut players off by distance, which bounds how far away they can be but not how many there are. Everyone inside about 14 metres counted as close, so a packed tavern still ran the expensive path for the whole room. It now also caps the number, nearest first, which means the cost of standing in a crowd of 500 is the cost of standing in a crowd of 15.
  • The cap deliberately applies to physics only. The same setting also gated two things you can see, the jump and attack animation blend and the model size change, and those still go by distance. With a count cap the sixteenth-nearest player can be three metres in front of you, and freezing their jump animation there would be obvious.
  • Also removed a debug line in that switched-off function that wrote once per player per frame. With 150 players at six frames a second it would have written about 900 lines a second into the log.
  • Reviewing that change caught a problem with it before it went anywhere. Switching off a distant player's physics also took away the collider that area effect abilities search for, so casting into a crowd would have found only the few players nearest you. The cap now covers the expensive movement work and leaves the collider in place, which was the part actually worth removing.

Web

  • Added a SQUIRREL! card explaining what the client performance work is actually in service of: a hundred and fifty people in one room with the fireworks going, still dancing. It notes in passing that large fights get the same benefit.

GM Tools

  • New Summon window in the GM tool suite: the whole monster library as a filterable, sortable list showing name, tier and family, with a count, a placement ring, a tier band, the five pre-built encounter groups, and a Clear My Summons button. Before this the only way to summon a creature was typing one of 1,376 prefab paths into the dev console, and that console command is compiled out of release builds, so on a release client there was no way to summon anything at all.
  • Added war party presets to the GM Summon window: build a list like 1 lich boss + 5 skeleton archers + 10 skeleton warriors, save it under a name such as Lich War Party, and summon the whole group in one click. Presets are plain files that copy between machines.
  • GM summons can now drop loot: a Normal loot toggle rolls the creature's own drop table on its corpse, and an Extra bundle picker adds one chosen loot bundle on top. Corpses from GM summons used to always open empty.
  • Added a My Summons window: every creature a GM has summoned in one list with dismiss, heal, +10 levels, and attack-my-target buttons, per creature or all at once. Clicking a row targets the creature in game.
  • GM-summoned creatures can no longer be tamed. Tameable species summoned for events were effectively free max-tier pets.
  • Dying to GM event monsters no longer counts as a PvP loss. When the summons out-damage every player in the fight there is no ransom; a kill where a player did most of the damage still ransoms as before.

Client Performance

  • Creature summon slots are now created on demand instead of 32 being pre-allocated on every player whose account carries dev, admin or VIP. Those 32 were built on every client that could see that player, so a crowded scene paid for them repeatedly, and the same 32 was also the hard ceiling on how many creatures could be summoned at once. A player who never summons now carries none.

Bug Fixes

  • Fixed a client crash that could hit anyone standing near a summoner. When a client could not match a summoned creature to its owner it logged the failure and then read from the empty result anyway, ending the creature load with an error. The lookup now builds the missing entry, and the read is guarded.

UI Themes

  • Retuned window transparency on every UI theme. Obsidian, Fire, and Arcane panels went from 96 percent opacity to 80 with popups at 88, Classic stepped from 90 to 82, and Air is unchanged. More of the world reads through the glass while the text stays legible; new tests pin the transparency bands and check text contrast composited over worst case scenes.
  • New default corner ornament art for themed windows, Quill: the bottom corners keep the engraved flourish, the top corners now carry a small tapered line with a floret, and a tinted chip backs the close, pin, and help buttons. The titlebar buttons no longer sit on dense filigree.
  • Fixed the purchase signature line, which borrowed the corner ornament styling and was invisible on the Classic theme. Fixed the ambient glow on modal dialogs, which never animated. The theme editor motion speed slider now covers the full 20 second range that shared theme codes allow; it stopped at 10 before.
  • Two new controls on the Options Themes tab: a Window Opacity slider from 30 to 120 percent that sets how solid every window background is on any theme (text and frames stay fully visible), and a Corner Ornaments dropdown that turns the decorative corner art off on stock themes, which used to require saving a custom theme first. Both apply live and stack with custom themes.
  • The Corner Ornaments option grew into a style pick: Quill (the quiet default), Flourish (the older full filigree), the new Rail (a thin double line frame with corner diamonds), or Off, on any theme including Classic, which never had corner art before. Custom themes can also carry an ornament size now; the size control arrives with the theme editor rework.
  • Window backgrounds can now carry a texture: a Backing Pattern pick on the Options Themes tab offers Parchment, Leather, Smoke, Sigil (a centered chaos star watermark), or Glass on any theme. The textures derive from the game's own book and window art and combine with every theme color, the opacity slider, and custom themes.
  • Every window can now carry its own opacity: right-click a window's title bar for a small popup with a 15 to 100 percent slider and a Reset to Global button, so chat can run glassier than inventory. The setting saves per window, combines with the theme and the global Window Opacity slider, and a new Reset Window Layout button in Options clears all saved window positions, sizes, and per-window opacity.
  • The Theme Editor window moved onto the shared window chrome: it now remembers its position and size, clamps to the screen like every other window, and stopped leaking gameplay keys, so dragging a color slider no longer walks your character or fires hotbar binds. Unsaved edits also survive now: the editor auto-stashes your working theme and restores it the next time it opens, after a logout or a crash included.
  • The Theme Editor got a Simple view: pick an accent color, a text tone, a surface color and opacity, a backing pattern, an ornament style and size, fonts, and motion, and the editor derives the full 49-color set for you. The old full color list lives on in an Advanced view with a search filter, a visible selected row, Reset All, and Revert to Saved. Controls that Advanced edits have diverged from show a (custom) marker instead of lying about their state.

Docs

  • Wrote up the UI theme overhaul in the skins doc (opacity system, ornament styles, backing patterns, per-window opacity, the editor rebuild) and added the shipped entry to the roadmap.

Quests

  • Reset Quest State no longer erases the places a character has discovered. The reset rebuilt the character's knowledge list from a short keep-list and dropped everything else, and discovered maps and arrival points sit in that same list, so a reset wiped the whole teleport destination list along with the quest progress. Discovered places are now kept through a reset; journal entries, quest flags, and quest items are still cleared.
  • Added nine editor tests over the quest reset filter covering what it keeps and what it clears, plus the value clamping the changed branch touches. The existing bot test seeded only NPC-style flags, which is why the travel loss went unnoticed, so it now seeds and checks a discovered map and an arrival point as well.
2026-07-31 · 54 items

Headlines

  • Right-clicking an enemy sends your pet at it again, from anywhere on screen and on the very first click after a camera swing.
  • World text got a readability pass. Nameplates, speech bubbles and overworld town labels are drawn from fonts baked at twice the detail, with the heavy black outline and the synthetic bold both cut back.
  • The skill training tracker looks like its old self again: icon-only rows with the sliding Level Up! reveal restored
  • The typing cursor now sits where the text lands. In most entry boxes it drew high and the first letter you typed dropped below it, by 3 pixels on ordinary boxes and 30 in the big multi-line ones.
  • Double-click now equips gear, and rings fill the first open slot or a per-ring preferred slot set from the right-click menu.
  • The Remember User Name box on the login screen works again, and the setting now survives a patch instead of being thrown away every time the game updated.
  • The test suite is green end to end for the first time in weeks, and clearing it turned up four real bugs the red tail had been hiding.
  • Dragged items stay in front of open windows again, including bottles, chairs and anything else that doubles as a decoration.
  • The character window got its rework: a much larger character model, slot silhouette icons back in the gear slots, and bottom tabs for Stats, XP, Pet, and Titles.
  • Ten visible bots ran on a test shard for ten minutes without a drop and set off 481 fireworks, after a first run turned up three connection bugs.
  • The /fps window now breaks the frame down into CPU, render thread and GPU time, and its graph splits every column into a processor bar and a graphics bar so you can see which side caused a spike.
  • A profiling build of the client landed, with in-game capture and a readable report, so we can finally measure where client frame time goes in a crowded scene on the test shard.
  • Names in angle brackets read as themselves again on the new interface: a pet's owner, a guild beside a character name, the lot list status rows. The bracket had been rewritten to an HTML entity as an injection guard, and UI Toolkit never decodes one.

Community

  • Filed five new wishlist ideas from the forum: knight tournaments, a PvP collision-encounter idea, splitting off a PvP server, rare unique mob drops, and a UO Doom dungeon recreation.

User Interface

  • Right-clicking a creature itself opens its menu again, wherever the creature happens to be on screen. The game was deciding what the menu should be about a couple of frames after the button came up, and by then the pointer had been moved back from the middle of the screen, where it sits hidden for as long as the right button is held. A creature near the middle usually still worked and one off to the side opened nothing. The menu is now built from what you were pointing at when you pressed.
  • The first right-click after a camera swing no longer gets thrown away. Right-dragging turns the camera, and the game refuses a menu when you have done that, but the leftover turn from the last drag was being charged to the next click before the mouse had moved at all. Half a unit of it was enough. Camera turns now start from a stop, which also removes a small jolt at the beginning of every one.
  • The Remember User Name box on the login screen works again. Ticking it had stopped filling your name back in, and logging in from that blank screen also wiped the name the game had stored, so it could never come back on a later launch.
  • Your login choice is now written to disk the moment you press Log In. It used to wait until the game shut down properly, which is exactly what did not happen on patch day, so the setting was lost every time the game updated.
  • The password box stays empty on every build. A remembered user name no longer brings a stored password along with it.
  • Dragging an item now draws it in front of every open window. Anything that can double as a decoration was drawn on the older interface layer whenever you stood on a lot you could decorate, so moving one between two open containers left it hidden behind the window it was crossing.
  • The dragged icon now picks which layer draws it every frame, from where the cursor is rather than from the item. Dropping a decoration out in the world still shows the placement preview and the permission text exactly as before, and the choice is covered by seven new editor tests.

Crafting

  • Double-clicking a recipe at a crafting station no longer brings the chat window to the front of the station you are working at. The same now goes for craft results, queue messages, repairs and salvage.
  • Those messages still go to the chat log and can be searched back later. The crafting window shows the last three of them itself, under the crafting summary, with problems in the same red the recipe cards use for materials you are short of.
  • The lines about individual materials being used up during a craft stay in chat. A ten-ingredient recipe produces ten of them and they would push the result sentence out of the readout.

Tooling

  • The nightly job that reads the forum wishlist board missed a night after a restart left this machine sitting at the login screen. Its schedule now retries a missed run once the machine is back, and the task setup is checked into the repo instead of being configured by hand.
  • Our test bots can now stand in the world as ordinary player characters. Until today they logged in, held their connections and counted toward a shard's population, but they had no body, so anyone standing in the same scene saw an empty room. They now spawn a character, spread out around a chosen spot, and set off fireworks on a timer.
  • The bots take the same route through the game a player does: each one joins the instance players are already in, gives itself a firework, uses it, and consumes it. The launcher that spreads bots across test machines drives the new mode too, so a display can be run from any of them.
  • First live run of the visible test bots, ten of them against a test shard from a Linux box. Three bugs surfaced in a row: the logging connection used a fixed port number so no bot ever finished connecting, an inventory reply the bots never listened for killed each session about twelve seconds in, and the avatar's identifier went out in the wrong form. With those fixed, ten bots held for ten minutes with no drops and set off 481 fireworks.
  • Ten bots cost the machine running them almost nothing: about 114 MB of memory between them, a sixth of one processor core, and roughly 95 kbit/s of traffic. The game server stayed near idle throughout.

Decorating

  • Resizing a decoration showed two size readouts: the real one, and a second panel pinned over your own avatar and name plate that always read the same wrong number. The second one was a leftover panel from the old interface carrying placeholder text a prefab save had captured years ago; it appeared alongside every decorating message, not just resizing. Removed, along with the placeholder itself.

User Interface

  • Re-cut the fonts behind world text: the name over a character, the title and guild lines under it, speech bubbles, and overworld town labels. All three faces were baked at 46pt (one into a 512x256 sheet); they are now 90pt into sheets up to 2048x2048, so letters hold their shape when you walk right up to someone.
  • Took the weight back out of that text. The synthetic bold went from 0.75 to 0.1, the black outline from 0.386 down to 0.15 (party plates were at 0.5, the maximum the shader allows), and sharpening is now switched on. It had never been written into the materials, so it had been sitting at zero.
  • Lightened the shading down each letter from 28% grey at the bottom to 65%, and turned on the extra padding that keeps an outline from being clipped at the edge of a glyph.
  • Added a thin-outline material and wired it into the world label font registry. That slot had been empty, and the lookup falls through to the thick outline when it is, so labels authored with a 1px outline had been drawing with the heavy one.
  • Added six tests over the world text materials. They pin the outline and bold ceilings and check that each material still agrees with its font atlas on gradient scale and texture size, which is what catches a font re-bake that only got half finished.
  • Same name, same size, same position. Left is what shipped, right is what the next build draws.

Launcher

  • The launcher now asks the game to close itself before an update instead of closing the window and killing the process eight seconds later. The game shuts down through its normal quit path, so a character in world sits out the logout timer first and nothing you changed that session is thrown away.
  • The wait before a forced close went from 8 to 45 seconds to leave room for that logout timer. Anything still running at the end is still closed the old way.
  • Settings survive a reset of the local settings file again. The game stamps a version into that file when it clears it, and the stamp was being written without being saved, so a game that ended badly could clear every setting once more on the next launch.

UI

  • Skill training tracker went back to its compact look: each tracked skill is just its icon with a thin green experience bar along the bottom edge, and the always-on name and level text from the UI Toolkit conversion are gone. The skill name still shows on hover.
  • Restored the level-up reveal on the tracker: the icon slides left and a panel with Level Up! and the new level fades in, holds five seconds, then slides back. Level downs show the same panel in red, and a green +1 counter marks levels gained this session. Filed tester task #3011.
  • Fixed the typing cursor sitting higher than the text in most entry boxes. Clicking into an empty box put the cursor near the top of the field, and the first character you typed then landed lower than the cursor had shown. The two now share the same line, so there is no jump.
  • The offset measured 3 pixels on an ordinary single-line box and 30 pixels in the large multi-line ones used for guild descriptions, item text and book pages. Those multi-line boxes also start their text at the top of the box now rather than floating it in the middle.
  • Added two regression tests for the cursor offset: one reads the shared interface theme, the other stands real entry boxes up on a live panel and measures where the cursor sits against where the text draws.
  • Double-clicking equipment in your inventory now equips it. Loot and bank containers still take the item instead.
  • Rings fill the first open ring slot on double-click instead of always replacing the left one, and the right-click menu can give a ring a preferred slot (left, right, or none). A preferred ring always equips into its slot, swapping out whatever is worn there, and the preference is saved on the ring itself.
  • Chased the skill tracker report that rows vanish after a level up: live traces showed the row stack itself is sound, but the reveal animation could collapse into a single frame when the level-up moment hitched, and the first level up of a session played before the row finished building. Both fixed: the slide now always animates over several frames and waits for the row to exist.
  • Tracker polish from the original prefab data: the +N session counter got its 1px black outline back, the notification panel text inset matches the old bracket, and queued level-ups advance at the original pace again.
  • The /fps window now reports CPU, render thread and GPU milliseconds alongside the frame rate, so a slow scene tells you which half of the machine is the limit. CPU is measured as real main thread work with the wait for the display subtracted, because a frame rate cap or vertical sync otherwise pins that number to the cap and makes an idling machine look processor bound.
  • The frame time graph under those numbers split in two. Each column used to be one bar for the whole frame; it now carries a processor bar and a graphics bar side by side across the same fifteen seconds of history, so a spike shows which side caused it. They sit beside each other rather than stacked because the two run at the same time, and adding them would show a frame time neither one spent. Machines whose drivers report no graphics timing show dashes instead of a misleading zero.

Engineering

  • The automated test suite is fully green for the first time in weeks: 7108 passing, none failing. The red tail had been carried long enough that its size kept changing, which is how a real problem hides in it.
  • Four of the sixteen were the tests being right and the code being wrong. The character sheet never actually shrank its equipment slots on a short window, so the bottom of the taller column stayed cut off; the fix that was supposed to do it had been left disabled on the line that applies the size.
  • The conversation editor accepted names on macOS that Windows cannot store, because it asked the machine it was running on which characters were legal. It now uses the strictest rule wherever it runs, so a name written on one machine still opens on the other.
  • Five audio, Steam and mouse plugin settings claimed macOS support for binaries that cannot run on an Apple Silicon Mac. Turning that off changes nothing in the shipped client, which was already leaving them out, but it stops a later change from quietly shipping a library that cannot load.

Testing

  • The Duplicate button in the tester panel copies the items you have highlighted. In the backpack, bank and container windows it had been copying whichever item most recently arrived in the bag, so moving anything in or out changed what the button acted on.
  • The status line under that button now names the items it copied, and the same selection fix covers the crafting station, quest turn-in, mail attachment, decoration palette and jukebox lists.

Character Sheet

  • The character window's paper doll now fills its frame. The render textures were square while the visible window area is portrait shaped, so the model floated small in letterboxed space; the local and inspect textures went to 640x1024 and the model draws 20 to 30 percent taller at typical window sizes.
  • Empty gear slots show their silhouette icons again (helmet, ring, boot and the rest), restored from the old interface's per slot art. Slots that never had art, like crafting tools and pet gear, keep the text label. The mannequin and doll cabinet windows picked up the same silhouettes.
  • The Show More button was replaced with tabs along the bottom of the window: Character, Stats, XP, Pet, and Titles. Stats carries everything Show More had plus weapon damage, spell damage, and new Attunements, Resistances, and Masteries sections. XP shows both experience pools, Pet shows your active pet's numbers and behavior, and Titles switches your active title in place. The window reopens on the tab you left it on, and the inspect and pet sheets carry Character and Stats tabs. Covered by 23 new EditMode tests.
  • A review pass over the new tabs caught four problems before they shipped to chaos: a dye preview started before the window finished building could open on the wrong tab and hide the character being dyed, the resize grip ate clicks on the right end of the last tab, the XP tab's progress row mixed lifetime totals with a within level percent so its two numbers disagreed, and mastery tooltips carried a stray blank line. All four fixed.

UI

  • A pet or summon shows its owner's name in angle brackets. Hovering a debuff the pet had applied printed that owner line as <Name>, four extra characters on each side, while the nameplate over the same pet read it correctly. The text converter for the new interface was rewriting a bracket to an HTML entity to stop typed text from injecting formatting, and UI Toolkit reads formatting tags but never decodes entities, so the rewrite went straight to the screen. It now wedges a zero-width space behind the bracket instead, which is what the world-space converter has always done. Measured on a live panel, the name draws 66.0px either way, against 100.0px for the escaped form.

Build pipeline

  • The client we ship to chaos is built optimised, so Unity's profiler cannot attach to it and the frame-timing capture already in the client reported zeros for every measurement. There is now a separate profiling build of the client that the profiler can attach to. It is downloaded by hand from its build page and is refused by the publisher on every patch channel, so it can never reach players.
  • Recording a profile happens from inside the game. A command records a fixed stretch of seconds and writes the capture beside the client, so a scene that only struggles when it is full of players and spell effects can be caught while it is struggling, rather than guessing at launch which scene will be the bad one. A second tool turns that recording into a ranked list of where the frame spent its time, so a capture can be read, filed and compared without opening the profiler.
  • The profiling build runs on its own copy of the source tree so it can build alongside the nightly release instead of queueing behind it. One Unity project cannot host two builds at once, so parallel work needs a second tree rather than a second worker. The two builds do share one thing on the machine, the editor's licensing helper, which each build restarts before it launches; a lock now keeps them out of each other's way for those few minutes and lets the rest of the two builds overlap.

Server

  • Raised every test-shard account to 3 character slots. The account system computes the slot count from purchase and pledge records at each login, and the rebuilt test accounts have none of those, so the count bottomed out at 1 and testers could only keep one character. The shard now adds 2 slots on top of whatever the account system reports, applied during server config assembly so it survives every deploy.
2026-07-30 · 239 items

Headlines

  • The 2,500-player scale push began: a full server audit, a four-week plan with a staged bot-load ladder, the first fixes, and the login gate raised from 16 to 2,500, all in the same day.
  • Items inside a house can no longer be reached from outside it. Window openings have no collision in almost every house, so distance-only interaction let anyone in the yard work the containers in the room. Interaction now compares which side of the shell you are on. Owners and anyone they have granted rights to are unaffected.
  • Every dungeon has a 3D map now: the whole pipeline went from design to a 59-dungeon fleet in one day. Press M in any dungeon, sewer or mine and a see-through model fills in as you explore, with your position glowing inside it.
  • NPCs stopped calling everyone "outlander". Two thirds of the voiced cast said it out loud no matter what their written line read, and the word they were supposed to use was sitting in their character data the whole time. A guard who calls you "friend" on screen now says "friend".
  • Decorating gained a Tighter Fit mode: the item you are placing gets a 25% narrower collision so furniture finally sits where you want it. Placement only, and containers, crafting stations, and planting beds keep their full footprint.
  • The guide light went from code nobody could reach to a feature you can use: click a map marker in a town and a light leads you there, one corner at a time.
  • The Mac launcher installed a copy of itself instead of the game. Fixed, verified end to end on a Mac, and build 25 is on the tester page.
  • NPC conversation text reads properly again: topic words sit inline in the sentence instead of stranded on a line of their own, and a reply keeps its colour to the end.
  • Destroying several selected items at once works again across the backpack, containers, the bank and the crafting table.
  • Vendor listings no longer open two windows at once, and the old one is gone from the corner of the screen.
  • Floating names take clicks again: click one to target, right-click one for the menu that sends your pet in.
  • Five faults in the Edit Deck window fixed in one pass, including a Bard school that never had a filter box.
  • Crafting: fixed a long-standing defect where clicking a recipe mid-batch pulled your ingredients back off the table, and started moving recipe matching off the server round trip.
  • Crafting: the batch queue works end to end. Stack recipes onto a running craft and walk away.

Community

  • Nightly forum sweep filed five wishlist ideas: alphabetizing the crafter book, an 8-part Death Magic rebalance series, a resizable/previewable heraldry-art tool, a hotkey to clone a placed deco item stack, and a visual marker for a scene's default entrance.

Quests

  • Players can reset their own quest progress again on the test shard. The option has been in the game the whole time, on the character select screen under Character Options, but a character got one reset and then the button vanished for good. The limit was tied to a date that stopped being moved forward in 2022, so anyone who had used their reset was locked out permanently.
  • Lifted the cap on the test shard so a character can reset as many times as needed. Testers no longer have to roll a new character to replay quest content. A reset still clears quest progress and destroys quest items, so it is a deliberate choice rather than a casual one.
  • Wrote down how the reset actually works while it was fresh: which setting hides the button, where the test-shard override has to live so a redeploy does not wipe it, and the fact that a second, older re-reset path built around a token item was already dead and could never have worked.

Maps

  • Dungeon maps are changing direction: instead of flat floor plans, each dungeon will get an auto-generated see-through 3D model of its shape, shown on the map window with your position inside it and fog of war that fills in as you explore. All levels of a multi-level dungeon like The Rise read at once. Design and docs landed today; The Rise is the pilot.
  • The 3D dungeon map went from design to a working pilot in one pass. A new bake tool turns each dungeon's navigation mesh into a small see-through model: The Rise's 150,000 triangles of navmesh become a 7,050-triangle map split across its four floors, with fog-of-war cells stamped into the mesh so the model and the map agree about what you have explored.
  • The map window (M) learned to show the model: drag spins it, the wheel zooms, Follow keeps you centered, and your position is a glowing beacon with a heading arrow. The floor you stand on is brightened, unexplored areas stay hidden until you walk them, and dungeons that only had a joke placeholder card will show the model instead. The Rise is baked; the in-game check and the fog switch come next.
  • The Rise pilot went live end to end in an offline editor session: fog switched on with a 14 meter reveal, the model fills in as you walk, and the whole chain held up. The live run caught a real bug the tests could not: on maps with flipped calibration the baked fog cells were mirrored, so explored corridors stayed invisible. The bake now copies the game's own sign convention exactly, with a test pinned on The Rise's markers. Two smaller finds rode along: opening a fogged dungeon now starts the camera close to you instead of framing the whole dungeon, and switching windows no longer resets your view. Filed for tester verification.
  • The owner's first look at the 3D map caught stray polygons slicing across the model. The cause: each floor was flattened into one height field, and The Rise's catch-all floor spans 103 meters of geometry that overlaps in plan, so surfaces smeared between levels. Floors now split into height layers before meshing, surface rectangles stop at ledges, and wall skirts follow the slope. The model rebakes at 10,576 triangles and rooms now read as rooms.
  • The 3D map fleet baked: all 59 player-facing dungeons, sewers, mines and undergrounds that showed the "map missing" joke card now carry a 3D map, baked in one 20-minute batch with zero failures and a median of 3,044 triangles per dungeon. Fog of war is on everywhere with the 14 meter reveal. The accept step's safety check earned its keep on day one: two scenes carry map calibration that disagrees with their baked fog cells, so their fog switched itself back off and they stay on the joke card until a config pass fixes them. A review sheet with two renders per dungeon covers the whole fleet.
  • The zone map for Vauban Pass had a black wedge on its top edge, about 36 metres across. The map was being drawn a little wider than the zone itself, and along that stretch there was no cliff or mountain hanging past the boundary to fill the gap. The map is now drawn to the exact size of the zone: the wedge is gone, so is a second smaller gap on the west edge, and the picture itself did not move.
  • Checked the rest of the surface maps for the same fault. Eight of them carry a black border on 47 to 70 percent of that outer strip, worst in the Quel and Majestic Forest zones. Clearing those means redrawing all 25 maps and rewriting their calibration, so the measurements are written up and the change is queued rather than taken now.
  • Map exploration gained a way back. Reveals were stored with a merge that could only ever add explored cells, so once an account had walked a dungeon its map stayed uncovered for good. There is now a server operation that clears a scene back to unexplored, restricted to tester accounts.

Server

  • Traced the suspected presence-sharing break between the two social server processes (#2833) end to end. The delivery path checks out at every hop, and the counts the bug was filed on came from a log line that never records a successful remote update, so they could not tell a healthy system from a dead one. The servers now log remote presence updates, the once-a-minute roster exchange, and anything dropped while the link is down, so the next build can prove the answer instead of guessing.
  • The trace also surfaced two real weaknesses, now on the tracker: a fixed buffer that would break the presence self-heal once a server passes roughly 250 concurrent players (#2842), and a pair of quiet failure points on the server-to-server link (#2843). A deploy-script port rewrite that misbehaved for small offsets got a one-line fix.
  • Started the server scale push. The goal is 2,500 players online at once, proven by a staged bot load test before the next server milestone. A three-way audit of the server code, the deployment shape, and the test tooling produced a ranked bottleneck list and a four-week plan; the original service carried 2,500 players on one far weaker machine, so the current shape stays and the ladder of test runs proves it.
  • First scale fixes landed. Chat moderation now runs a bounded number of language-model checks at once and lets messages through unmoderated when overloaded instead of queueing without limit, and the chat relay to the team channels posts one batched update per interval instead of one call per chat line.
  • The chaos login limit turned out to still be a development value of 16 concurrent players. It now deploys at 2,500, matching what the live service always allowed.
  • The load-test harness gained its swarm mode: one command ramps up any number of bot players and holds each one exactly the way a real player connects, all four server connections at once, idling, chatting on a schedule, and cycling a few relogs per hour. Each run ends in a report with connect success by stage, disconnect rates, latency numbers, and a minute-by-minute timeline. First live run is the 250-player rung.
  • The presence self-heal between the two social server processes now sends its once-a-minute roster in bounded pieces instead of one message listing every session, removing the ceiling that would have broken it past a couple hundred players; the receiving side moved to per-entry claim timestamps with an expiry, which tolerates lost pieces by construction. A unit test pins the piece size against the message limit with thousands of characters to spare.
  • Players also stop being lifetime subscribers to the server game list: the subscription that matchmaking opens now closes the moment a zone assignment completes, instead of every online player paying for game-list updates they never read. The next zone change opens a fresh one.
  • The bot fleet got its conductor: one command publishes the bot to the runner machines, plans the process shards, launches and watches them, pulls every result file back, and merges them into a single pass-or-fail report for the run. Stopping a run drains the bots cleanly so their numbers still come home. With this, the harness, and the first fix train landed, the 250-player rung is ready to fire as soon as the next server deploy carries the fixes.
  • The zone-in game list no longer arrives as one oversized message. Both the list a client gets when it starts a zone transition and the running stream of instance changes now go out in measured pages, so a busy shard cannot silently drop the whole update and leave a player waiting on an empty list. Instance lists also get built once per matchmaking query instead of once per waiting player, so a crowd zoning at the same moment costs one pass.
  • Message packing got faster under load. Every message a server sends or receives used to pass through a small shared set of large scratch buffers behind one lock, and when they ran out it allocated a fresh 64 KB buffer per message. Each worker thread now keeps its own buffer that starts small and grows to fit the traffic it actually sees, which removes the busiest lock in each server process along with that allocation churn.
  • Channel chat now gets packed once instead of once per listener. A line in a busy channel used to be encoded separately for every player who could see it, so one message at full population meant thousands of identical packing passes; the server now builds it a single time and sends that one copy to everyone subscribed. The online and offline check behind friend notices was also doing one lookup per connected player per login, and now runs once per event, which additionally means every client acts on the same answer.

Crafting

  • The crafting window remembers how many of a recipe you last made. Set a batch of 12 iron ingots, and the next time that recipe goes on the table the quantity reads 12 instead of resetting to 1. It is kept per recipe, per station and per character, and it survives logging out.
  • An empty crafting table now carries a Craft again button naming the last thing you made at that station and how many: "Craft again: Iron Ingot x 12". Pressing it gathers the same ingredients back onto the table, the same way double clicking the recipe in the list does.
  • The offer covers recipes that make something new. Enchanting, masterwork, socket and pattern recipes are left out, since each of those consumes a particular item you picked, so repeating one would reach for a different item. The button hides itself while a craft is running and while ingredients are being gathered.
  • This is the third proposal from the public crafting deep dive, after the two tooltip items that shipped earlier in the week.
  • A Max button sits between the quantity stepper and Craft in the crafting window. It sets the count to the most your staged materials will make, and greys out when the count is already there, so an empty table says so instead of letting you press it.
  • The Max button and the quantity field share a tooltip the window never had: crafting several at once earns less experience for each item and returns no materials when one fails. That has applied to every quantity above one for years and was stated nowhere.
  • Moving the batch ceiling into its own tested class found three defects. A table holding nothing the recipe wanted wrote a 0 into the quantity field and erased that recipe remembered quantity. A negative refining bonus could push the cap below one and abandon the craft. And the ingredient lookup ran up to fifty times per material for an answer that cannot change; it runs once now.
  • Double clicking a recipe you cannot afford used to empty the crafting table and put one vague line in chat about missing ingredients. The crafting window now names them: a red line under the summary reading "Missing for Longsword: 1 Sword Hilt, 2 Iron Ingot", listing every material you are short of and how many more you need. The same sentence goes to chat in place of the old one.
  • The number is the shortfall rather than the requirement, so being short one of three says two. The line counts materials exactly the way the recipe rows already tint them red, which is why the two cannot disagree about which ingredient is the problem. It clears when you put something on the table, when you close the window, or when you double click a recipe again.
  • Every failed staging path reports through it, including the one that pulls from lot storage. That one deliberately ignores the storage counts when it reports, since those counts are what planned the pull that just failed. A pass that fails with nothing actually missing, an equipped tool with no durability left for instance, still gets the general message.
  • Fifth of the twenty two proposals from the public crafting deep dive, and the fifth of phase one. Favourites and book success chances are what remain of that phase.
  • Item repair now checks which crafting station you are at before it checks anything else. The list of stations that can repair is unchanged (blacksmithing, tailoring, carpentry, alchemy), and the check already existed, but it ran five checks late. Salvage has always checked its station first; repair now matches it.
  • The crafting station recipe list can be sorted now. A Sort dropdown sits beside the category one, offering Name, Success chance, Can make and Skill, and the window remembers which you picked. The list had exactly one order before this, ascending name, with no header to click and no way to ask for anything else.
  • Recipe names carry a colour. Red is a recipe your skill cannot reach, orange one that fails more often than it works, then yellow and green as the odds improve, and a dim grey once the craft cannot fail at all. The colour reads off the success chance already printed on the card, which folds difficulty, skill and tool bonus into one number and tops out at 100%.
  • Can make counts what your materials actually cover rather than answering yes or no. It reuses the read of your bags the Only craftable filter already does, widened from a yes/no to a yes/no and a number, and the window only asks for it when that order is chosen. Tools and optional ingredients stay out of the arithmetic but still have to be present, or one hammer would pin every recipe that wants a tool at one.
  • Every recipe card leads with a star now. Click it and the recipe goes gold and rises to the top of the list, in whichever order the list is sorted. A Favorites entry sits under All Recipes in the category dropdown, and the recipe book opens a Favorites chapter ahead of the crafting schools.
  • Stars belong to the character rather than to a station, so a recipe starred at a forge reads as starred everywhere it appears, including the book. Two characters on one machine keep separate sets.
  • The recipe book chapter is deliberately left out of the jump-to-recipe map: a starred recipe lives in two places, and learning it should take you to its own school rather than to the favourites shelf. Starring while the book is open repaints the star but does not restructure the pages under the reader.
  • Crafting stations have a Quick Craft option. With it turned on a craft finishes right away with no timer and grants no experience. The materials it consumes, the chance of failing, the wear on your tools and the item you end up with are all the same as before, so it is a straight trade of experience for time.
  • Quick Craft covers crafting, brewing, masterworking, enchanting, socketing and pattern work. Salvage and repair keep their own short timer and still give experience, so turning the option on never costs you experience without also saving you the wait. It is off by default and stays where you leave it.
  • Recipe cards quote your chance of a successful craft everywhere they appear now, not only at a station. Open the recipe book at home and the percentages are there, with recipe names carrying the same red-through-grey relevance colour the station list has.
  • Hover a recipe card and the chance of an exceptional item sits under the success chance. On recipes that make nothing wearable it reads as a critical success instead, matching what the crafting window already said.
  • Away from that craft's own table, the book and the hover both add a line: Chance shown for a standard station and your equipped tools. The tool bonus is yours rather than the station's and it is in the number, so reading the book with nothing equipped shows a lower chance than the forge will.
  • The odds follow the recipe's craft rather than the station in front of you, which fixed a bug nobody had reported: with a forge open, the recipe book's tailoring pages were quoting your blacksmithing. Hovering a recipe at a printing press also used to do nothing at all.
  • The Filter box at a crafting station and the search in the recipe book match a recipe's ingredients and what it makes, not just its name. Type iron ingot and you get the recipe that produces one alongside the recipes that consume one.
  • Recipes matched on their own name float above the ones matched only through an ingredient, under your starred recipes. Without that, iron ingot at a stocked forge buries the smelting recipe under a hundred blacksmithing recipes.
  • Three words narrow a search: uses:coal for recipes that consume it, makes:ingot for recipes that produce one, name:sword to search names alone. A minus excludes a word, quotes match a phrase whole, and hovering the box explains the syntax.
  • A word the search does not know gets a short line under the box naming the ones it does, rather than quietly searching for that text and finding nothing. Those spellings are being kept clear for the inventory window's own search.
  • Began moving crafting recipe matching out of the server round trip and into the client. The matching rules are in place, along with tests that walk the whole recipe database and recompute every recipe stored ingredient hash, check each hash expansion covers its own recipe, and check the whole set for collisions.
  • Proved the new client-side recipe matching against the real recipe database rather than a captured fixture: stage exactly what a recipe asks for and the client has to answer with that recipe. 3,159 of the 3,161 craftable recipes pass; the two that do not have a classification ingredient with no members, which is a data gap rather than a matching one.
  • Fixed a defect that has been in batch crafting since it shipped: double-clicking a recipe in the list while a batch was running could pull your ingredients back off the table, leaving the rest of the run producing nothing and your materials split between the table and your pack. Recipe rows now stay inactive for the whole run.
  • The new client-side recipe matching now runs alongside the server on every table change, with the server still deciding what the window shows. Any disagreement is logged with enough detail to rebuild the table, which is how the client answer earns the right to take over.
  • Rebuilt the crafting loop to run a list of work rather than a single press of the Craft button. Nothing can add to that list yet, so with it empty the loop behaves exactly as before; a queued batch of five still costs what a batch of five has always cost, which is the point of wrapping the existing loop rather than replacing it.
  • The crafting queue is now usable. Start a craft and the Craft button reads Queue: highlight another recipe, set a quantity, and it joins the back of the line, with each waiting entry drawn under the progress bar and removable on its own. A queued batch of five costs what a batch of five has always cost, so this buys you the keyboard time back and nothing else.

UI

  • Crown Shop: hovering one item lit up the entire row it sat in, empty space after the last item included. Only the hovered item highlights now. The shelf lays items out in rows and the row itself was still being drawn as a highlightable list row; that is off for grids like this one, and the property manager deed grid gets the same fix. Reported in game by a player.
  • The Decorations window was drawing its own rows on top of each other on a well-decorated lot. The list is the part meant to scroll, but every other row was being squeezed along with it, collapsing to a few pixels while the text inside kept drawing at full size. That put the row of recently touched items across the column headings and the headings across the first item in the list. The Find button was pushed down onto the window border by the same thing, where its corner sat under the resize grip and answered a drag instead of a click. Every row now holds its height at any window size and any number of decorations.
  • Two more on the same window, both from a player report through the in-game Oracle. The row of recent items ran off the right edge and the last name was cut through the middle of a word; it now shows the items that fit and drops the rest, so a wider window brings more back. Hovering the Find button showed a small unreadable box instead of the hover panel the rest of the game uses.
  • With 'Show Health and Focus Stats' turned on, the player status bar showed a health number only, drew it under the bars instead of on them, and slid it sideways as buffs piled up. Both numbers now sit centred on the bar they report: health on the health bar, focus on the focus bar. The focus number had never been carried across when that bar was rebuilt, and the health one was being stretched over a box as wide as the whole buff strip.
  • Buff icons on the status bar wrap again. Seventeen active effects drew a single row about 440 pixels wide; they now break into rows of nine and only spill into the +N icon past 18, which is how the live shard has always laid them out. Reported in game by a tester.
  • The window a quest uses to hand items over had to be stretched wide before its item names could be read. Both of its panes were drawing the full inventory table, whose fixed number columns need 294 pixels of a pane that has 291, so every name came out about eight characters short. Both panes are a single column of names again, the way the window was originally built, with the stack count back in the name, and it opens at 680 pixels instead of 640.
  • Two more windows split their width the same way and carried the same table. The mail attachments pane and both crafting station item lists are back to the columns their original windows were built with, which for crafting also means dropping a quantity column that was never part of it.
  • Item lists now drop number columns on their own when a pane is too narrow to leave the item name room to read. They go from the right, so quantity is the last to go and the count moves into the name when it does. The backpack keeps its full table, where the name shortens and the numbers hold.
  • The deck builder's ten glyph slots drew their key numbers about four pixels below the bracket that hangs under each slot, so a number sat under the rounded bump instead of inside it and the bottom of the digit fell outside the bracket. The slot's own border was moving them, so a slot's border now draws on a layer of its own and the numbers centre in the bump again.
  • The same drift was on the main skill bar while a key was held: the border that lights a slot pushed its key number out of the bracket for as long as the light was on. Both rows share the fix, and the deck builder's glyph art, glyph stack and padlock lost the two-pixel offset they inherited from the same border.
  • The key numbers under every glyph slot were being centred on the whole bracket shape instead of the round bump a number sits in, so they read a shade low on the main bar, the combat bar and the emote bar. They move up onto the bump, and the offset now comes from the artwork itself rather than a number typed alongside it.
  • Measured the bracket artwork gap row by row and moved the key numbers up again, into the open spot rather than onto the closed part of the cup below it. The offset is now read from where the artwork actually opens, on the main bar, the combat bar, the emote bar and the deck builder.
  • The login window now speaks the language you picked. Its labels had lost the link to their translations when the window moved to the new interface, so it came up in English no matter what Options said. The same fault was turning translated text back into English across the other converted windows, and roughly 240 already-translated strings come back with the fix.
  • Enter logs you in again. Typing a username and password and pressing Enter did nothing, because the text box treated the key as "finish editing" before the login form saw it. Enter now does what the Log In button does, from either box or the Remember User Name checkbox, and Enter on a highlighted Cancel still cancels.
  • The deck builder could show an empty or stale linked equipment row for a deck that had equipment linked to it. The list it walked included a terminal marker that is not a real equipment slot, which aborted the refresh before anything was drawn.
  • The online friend count next to the social panel could stop updating, and said nothing when it did. It now reports which panel lost its label instead of failing quietly.
  • NPC conversation and chat text now wraps like ordinary prose. Clickable topic words used to end up alone on their own line, with the rest of the sentence pushed below them and a stray space starting the next line.
  • A reply now holds one colour from start to finish. The words after a clickable topic used to change colour partway through the sentence.
  • A conversation topic you have already asked about shows greyed out again, matching how it looked before the interface was rebuilt.
  • Player names and item links in chat flow inline the same way, and window copy that carries a link, such as store descriptions and lot signs, no longer breaks its paragraph where the link sits.
  • Long replies in Japanese and Chinese wrap correctly too, using the line-breaking rules the text system already carries.
  • Selecting several items and choosing "Destroy Selected Item(s)" destroyed only the row you right-clicked. The converted inventory windows were passing the context menu a single item instead of the selection, so the menu's multi-item path never ran. Backpack, containers, the bank, the crafting table, the decoration list and the music cylinder list all take the whole selection now, and the confirmation says how many items it is about to destroy.
  • Right-clicking an item that is not part of your selection now acts on that item alone. The old list passed its selection whatever you clicked, so a right-click outside a selection could open a menu naming one item and destroy a different set.
  • Listing an item on a vendor opened two windows: the current price window on the vendor, and the older version it replaced, sitting near the top left with placeholder text in it. The old window is switched off when the game starts, but opening a listing switched it back on. It stays off now, and the space it took no longer swallows mouse clicks.
  • The same leftover window turned up in two more places while tracing that one: the quantity window for a purchase order, and the equipped-deck names in the lower right, which could draw twice once you had both a main and an alternate deck equipped. Both fixed in the same change.
  • The PVP stats window was printing a display code in the Time column for a player who had been around less than a minute, showing "&lt; 1m" where it meant "< 1m". The text converter behind every rebuilt window escaped every angle bracket as a safety measure, and the new interface layer draws those escapes instead of decoding them. It now escapes a bracket only where one could start a formatting tag, so the Lot Deeds day count and the theme picker's "< New Theme >" entry read correctly too.
  • Both PVP stats windows got their titlebar pin back. The open-PVP list and the team scoreboard each had one before they were rebuilt on the new interface toolkit, and the rebuild left it off. A pinned window ignores Escape and comes back pinned after a scene change, the same as every other window that offers a pin.
  • Five problems with the Edit Deck window, all reported together, are fixed: the Schools filter now applies to the Glyphs tab as well as Combos, the Bard school has a box at last, the window stops drawing over itself at its smallest size, the Linked Equipment strip shows your gear again with an outlined slot for a piece you are not carrying, and combo rows draw one glyph each instead of a full-size one plus a tiny copy.
  • The Bard school had never had a filter box: both filter prefabs author twenty toggles and the school sits one bit past them, so every combo built from a Bard glyph was filtered out with nothing on screen to explain it. The list is read off the code now rather than the prefab, so the next school added needs no art work at all.

Images

Conversation Studio

  • Started the Conversation Studio project to replace ConvoBuilder, the old external dialogue tool that needed its own machine and database. NPC dialog will be authored inside Unity with the same validation, undo, and history as the rest of our tooling, plus a team web page for viewing and editing conversations and AI-assisted drafting. The full build plan is written and approved.
  • Moved all 4,606 NPC conversation data files from binary LFS storage to plain text in git. Dialogue edits now get real line diffs and clean three-way merges; before this, two people touching the same NPC produced an unresolvable binary conflict.
  • The Conversation Studio window opened for the first time inside Unity: pick any scene and NPC and read the whole conversation as an ordered tree, every section included, with that character's validation findings underneath. Read only for now; editing lands next.
  • Dialogue gates and action lines now parse into a structured model instead of raw strings, verified by round-tripping all 14,220 gate expressions and 16,671 action lines in the game with zero failures. The sweep also found nine shipped action lines with verbs the game would reject, now fenced so no new ones can land.
  • The editing engine now covers every field on every conversation element type: toggles and timings, keyword labels, query branch text with its display overlay kept in step, and removal that matches the game's omit-defaults file convention. A new localization guard detects when editing an English line would orphan its translations, checked against live translation files in all eight languages.
  • NPC dialogue is now editable inside Unity: click any element in the Conversation Studio tree and a typed form opens for it, with live checks on flag expressions and action lines, emote and faction pickers, undo and redo, and a warning before an English edit orphans its translations. Saves re-validate the conversation and offer a one-click undo if new errors appear.
  • The structural engine landed: conversation elements can be added, deleted, and reordered with corpus-safe id allocation, reference-guarded deletes that list every place an element is used, and display-overlay entries kept in step. A full-corpus sweep verified the splice math applies to all 39,142 file sections and re-emitting every element round-trips faithfully.
  • Conversations can now be restructured in the editor: add, duplicate, reorder, and delete elements with reference-guarded deletes that list every place an element is used, and a chatter assist that writes an NPC-to-NPC exchange into both characters' files as one undoable step.
  • The conversation engine now also runs outside Unity as a command-line tool: corpus scanning, validation, a byte-fidelity gate over all 4,605 conversation files, and the server mode the upcoming team web interface will drive. All 214 editor tests for the new tooling ran green today.
  • The dialog corpus now opens in a web browser: every scene and character, all fifteen sections of a conversation in file order, and search across lines, flags and character names. The pages ask the same engine the Unity tool uses, so the two cannot disagree about what a character says. Nothing is deployed yet.
  • Archived the quest records that only ever lived inside the old dialog authoring tool and were never exported into game data, together with the extractor that produced the archive and re-verifies it. That tool is being retired, and this was the one piece of content that would not have survived it.
  • Conversations can be created now, not just edited: a new character conversation, or the missing half of one that only had barks, or a copy of an existing character to start from. Undo removes a newly created file the same way it removes a line. Journal entries can be written from the same place, in the exact format the file already uses.
  • The dialog checker went from 16 rules to 30, and the new ones found real problems in shipped content: 15 character-to-character exchanges aimed at names that no longer exist, so those lines never play; 4 conversations bound in a way that leaves the character silent; 18 unknown emotes; and 5 responses marked required that nothing can reach.
  • Dialog now has history. The tool lists every commit that touched a conversation, shows what changed element by element rather than as shifted lines, and can put an old version back as a normal undoable edit. Text from before the corpus left large-file storage is recovered on the fly so old revisions read properly.
  • Groundwork for AI-assisted dialog landed, with no model called yet. A draft is produced as a structured plan rather than as text: gates and effects use the same typed model the future quest system will read, a verb the game does not implement cannot be expressed at all, and a draft only reaches a file through the normal editing path, so it is validated, undoable, and reviewable first. Character backstory files are fenced as untrusted input.
  • Making a new character conversation is now a button rather than a database chore: pick a scene, type a name, and the files, ids and optional prefab are created as one undoable step. Existing characters can be duplicated to start from. Adding a line to a character who only had barks no longer refuses; it creates the missing half in the same step.
  • Conditions and effects on a dialogue line are pickers now, not hand-typed strings: flags, items and skills come from a list of what the game actually uses, with the comparison and the arguments typed per action, so an action the game cannot perform is no longer possible to write. The raw text stays available behind an advanced toggle and an untouched line is byte-identical.
  • Editing English text can now carry the translations with it. Until now changing a line warned that the eight translated languages would lose their match; the confirmation offers to move each existing translation to the new text instead, showing a per-language count first, with one undo for all of it.
  • The web view gained history: every commit that touched a conversation, and a diff that names the section and element on each changed line instead of showing shifted text. Old revisions from before the dialog files became plain text are recovered on read.
  • Designers can edit dialog from the browser now, not just read it. An edit becomes a commit in that person's name, and when two people save at once the second one's change is replayed against the first rather than rejected, so ids stay correct instead of colliding. Reverting an old change writes a new one; history is never rewritten. Not deployed yet.
  • Character personas and backstories can be written and generated alongside a conversation. They live as plain text next to the dialog files and are kept out of player builds by the packaging filter, with a test that fails if that filter ever widens, since without it a future build change would ship every designer note in the game.
  • A character's shared-content list can be edited at last, which was the one thing missing that would have blocked making a new NPC. Checking the data first turned up something the plan did not know: that list is stored twice, once in each half of a conversation, so every change now writes both together and one undo takes both back.
  • The checker regained three warnings the old tool had and this one had lost: a character with no greeting, no farewell, or no working goodbye. Getting the exemptions right mattered more than the checks, since shared fragments legitimately have none of those; tuned against the whole corpus they report 19, 13 and 12 real cases instead of about 320 each.

Housing

  • Fixed three alignment defects on the Stone Five-Story Wizard's Tower village home, all from a player report. One balcony railing run sat at five different heights spanning 20mm, which read as a step in the top of the cap. A column of angled wall sections drifted up to 61mm sideways across four floors, and one stone pillar cap sat 65mm low and 49mm off the pillar beneath it.
  • Audited the same home for the reported missing textures and found none. All 27 materials resolve, every albedo texture is present on disk, and all 271 mesh references are valid. The remaining candidate is UV stretch from the non-uniform scaling applied to 46% of the home's 244 modular kit pieces.
  • Reaching into a house from outside it now requires being inside. Interacting with a decoration was gated on distance alone, five metres with no test for what stood between you and it, so a window opening put every item in the room within reach of anyone in the yard. An item placed on an interior floor, wall or ceiling is now refused to a player who is not under that house's roof, and the right-click menu is refused with it. A container opened by the door closes when you walk out.
  • The check compares which side of the house shell each of you is on, using two things the game already records: the surface a decoration was placed on, and what is overhead at a point. It also records which shell it found, so standing inside the next row house along does not count as inside yours. It stands down whenever any of that is unknown, which is what keeps the 208 house prefabs that answer open sky over their own interiors, pavilions and covered porches among them, behaving as they did. Anyone holding move, modify or take rights on an item is exempt, so owners and trusted visitors are unaffected.
  • Decorations placed inside a player dungeon could fail to appear when the dungeon loaded, and items resting on other items took the worst of it: a chest standing on a table or a shelf went missing while the table and the shelf loaded fine. The same items disappeared every session, through relogs and through leaving and coming back. A plot now loads its decorations in the order the server sends them, so an item is never built before the thing it is sitting on.
  • A busy lot could also stop loading part way through, leaving the decorations near the end of the list absent entirely. The loader was watching for the last item to arrive rather than counting what it had received, so a reordered batch ended the load early. It counts now.
  • Moving a decoration that has other decorations sitting on it no longer leaves those hidden. The children travel with the parent, but each one tracks its own position for distance culling and nothing was updating them, so they kept being hidden as though they were still at the old spot while their collision stayed where you could see they should be. Moving a dungeon room piece was the easy way to hit this.
  • Added an optional Tighter Fit mode to decorating. While it is on, the item you are holding gets a placement collision 25% narrower than normal, so a chair goes under a table and two crates can touch. Height is untouched, so resting and stacking work the same. Alt+C or the new button on the decoration strip, remembered between sessions, off by default.
  • Tighter Fit only changes the item being placed. Once it is down it has its full collision back, so walking into it and placing the next item against it are unchanged, and it still cannot cross your property line. Chests and other containers, crafting stations, planting beds, wall-hung items, vendors, and lot markers stay at full size so they remain reachable and correctly placed.

Client

  • Fixed the vanishing mouse cursor on Mac. Holding the right mouse button to turn the camera hid the cursor and never gave it back, for the rest of the session. The mouse still worked and still clicked, it was just invisible.
  • The cursor restore ran through an old third-party plugin whose Mac library was never shipped inside the app bundle. The failure left a busy flag stuck on, and the code that makes the cursor visible again was waiting on that flag. Mac now moves the cursor itself through the system framework, with no plugin involved.
  • Rebuilt the restore path so a failed cursor move can no longer cost you the cursor: visibility is now restored from a guaranteed cleanup step, the wait is time bounded, and a watchdog hands the cursor back if it is ever left hidden with nothing owning it. Windows and Linux keep their existing path.
  • The guide light is now something a player can actually use. Open your map in a town, click a marker you have found, and a light rises beside you and flies the walking route ahead, waiting on each corner so you can see which way to turn. It never walks your character for you and it fades on its own after a few minutes.
  • Three ways to summon it: click a marker on the map in a town or player-run town, type /guide, or bind the Summon Guide key under Options. /guide off puts it away. There is an Enable Guide Light checkbox in Options for anyone who would rather not have it at all.
  • The light only leads to markers you can already see on your map or compass, so it will never point at a place you have not discovered. It stays out of dungeons, basements, random encounters, sieges, battlegrounds and the overworld: working out where to go is the point of those places.
  • A bare /guide leads to the destination you set or the quest objective you are on, and stops there rather than guessing at the nearest point of interest. Added 22 more editor tests covering what the light is allowed to lead to, how it reads a route by distance, and which marker a click lands on.

Inventory

  • Inventory rows are back to the density the old window had. The converted table was drawing rows half again as tall as before, so the same full-height backpack showed about 26 items where it used to show 41. Rows are 24 pixels again, matching the list the conversion replaced. This covers the backpack, containers, the bank, lot storage, vendor windows, the crafting station, the deco palette and the jukebox.
  • The backpack window spends less of its height on controls: the category filter button and the search box now share one line instead of stacking, which is another item row back. The filter button is capped and truncates, so a long category name cannot squeeze the search box out on a narrow window.
  • Take All no longer closes the container it just emptied. The window stays open until you close it, so you can see what is left, put something back, or keep working out of it.
  • Take All also used to close the window when only part of the contents moved. Anything too heavy to carry stayed in the container and went off screen with it. Those leftovers are now still listed in front of you.
  • The interact key stops counting as a Take All once a container is empty. An emptied window left open was about to start swallowing that key, which would have blocked talking to people and opening doors while it sat there.
  • Item list column headings now show the whole word. Durability was labelled "Dur" and quantity "Qty" in the backpack, bank, containers and the crafting table, and testers read those as headings the window had cut off. Both columns were widened to hold the full word while sorted, which draws the heading in bold with an arrow beside it.

Combat

  • Body Slam, Charge and Engage work again on rooted creatures. A charge moves the caster, but the code checked whether the target could move before allowing it, so a rooted enemy cancelled the whole glyph: no slam, no damage, no stun, and the card spent anyway. Root now stops the character it actually holds. Rooted creatures are still immune to being dragged by Pull, and they still take the rest of the hit.
  • While you are rooted the three charge glyphs grey out and refuse with a reason instead of playing a run-in-place animation and eating the glyph, and a root that lands mid-charge stops it. Rooted creatures follow the same rule: a held boar picks a different attack rather than a charge it cannot make. Two more copies of the same wrong-entity check, in the movement-field effect and in the charge coroutine, were fixed alongside.
  • Swept all 1664 rune assets for the minimum-range problem that was fixed one rune at a time in Death Field and Discharge. 233 of them are area attacks centred on the caster, and 16 of those advertised a minimum casting distance they do not have. Among them were the creature versions of Death Field and Discharge, which the earlier fix had left alone. Creatures using these attacks now close in and land them, where before they backed off to a distance the attack could not reach.
  • The regression test behind that fix pinned two runes by name. It now enforces the rule across every rune in the set, so a re-authored minimum fails the build instead of sitting in the data. Three runes keep a minimum on purpose and each carries its reason in the test: a flying kobold whose minimum is what keeps it airborne, and two runes using the shared value that means no range gate at all. A second test fails if one of those exemptions goes stale.

Tooling

  • Shortened how long an abandoned editor reservation can block other work: the idle timeout drops from 10 minutes to 4, and the longer hold that protects a call already in flight drops from 30 minutes to 15. Only a test run keeps the long hold now, since it is the one call that legitimately goes quiet for minutes.
  • Wrote a one-click setup script for new developer machines. It checks what is already installed, warns when the target drive is too small, and runs the whole first-time download. If the transfer drops partway, running it again resumes rather than starting the 150 GB over.
  • Gave the setup script two guards, since it reconfigures whatever folder it is pointed at: it refuses a folder that is not a checkout, and refuses a checkout belonging to a different project. Without the second one it would have hidden files in an unrelated working tree.

Creatures

  • Killing a Watcher now always leaves a Metal Scrap. The two small Oracle machines that go by that name had the scrap slot already wired up but set to drop once in a thousand kills, and neither carries any other reward bundle, so the body came up empty about 99% of the time on the flying one and 90% on the crawling one. Reported by a player through the in-game Oracle.
  • The rate follows what already shipped elsewhere in the family: every Oracle machine from tier 5 up drops scrap on every kill, and a tier 1 copper golem already gives a guaranteed one. A Watcher has 1 health and pays 1 experience, so its payout stays at a single scrap.

Launcher

  • Checked the Linux launcher and patch channel against what the source says should be live. Both match, and the Linux game build ships from the same source revision as Windows about a minute behind it. Mac still has no launcher, so Mac testers re-download the whole client every build.
  • Started the Mac launcher. Cleared two things that would have broken the first Mac patch release: the deploy stored Mac files under a folder name the launcher never asks for, and the Mac launch target named the application bundle instead of the program inside it. Also measured the Mac client for symbolic links and found none, so the patch format did not need a new field for them.
  • Built the Mac launcher application bundle, along with the companion bundle the game itself launches, and scripted the whole assembly so it can be repeated.
  • Settled where a Mac install keeps its files. On Windows and Linux the launcher, its settings and the game all share one folder. On Mac the launcher lives inside a signed application bundle that cannot be written to and is replaced whole on every launcher update, so the settings and the game tree now sit in the user Application Support folder instead. Windows and Linux keep the layout they had.
  • Taught the launcher to update itself on Mac. Everywhere else that means replacing one file; on Mac it means replacing a folder, so the old copy is now moved aside rather than deleted and put back if anything goes wrong, instead of leaving no launcher at all.
  • Found the Mac launcher would not have started the game: the way it worked out which program to run inside an application folder guessed from the folder name, and the Mac folder and program names differ. It now reads the name the system itself uses. Two tests caught this before it shipped.
  • Prepared the patch server for Mac downloads, including teaching the cleanup job about the Mac launcher file shape. Without that, every Mac launcher ever published would have been kept on the server forever.
  • The Mac launcher is live. Mac testers can download it from the tester page instead of re-downloading the whole 16 GB client after every build: it installs the game, patches only what changed, and keeps itself up to date. The full-client download has been retired from the page. First launch still needs a right-click and Open, since the app is not notarized yet.
  • Published the Mac game files to their own patch channel, from the same source revision as Windows and Linux, so all three platforms now patch from one build number. The Mac launcher had to be built on a Mac: built from Windows it comes out with no signature at all, and Apple Silicon refuses to run that rather than warning about it.

Web

  • Clicking a screenshot on this page opens the full-size image again. Screenshots added since the twenty-fifth were written in a slightly different shape to the ones before them, and the click-to-expand code only recognised the older shape, so the nine newest thumbnails did nothing when clicked while still showing the zoom cursor. It now works off the thumbnail itself, so both shapes open, and so do the copies the newest-first view makes.
  • Newest first now shows images in the timeline on every day. Whether a day put its screenshots in the timeline or in a block at the bottom had been decided by which way those screenshots happened to be added, so the front page disagreed with itself day to day. The arrows and the picture counter also count only the images on screen now, instead of counting the hidden copy of every one of them twice.
  • Publishing the page now refuses two kinds of markup that render fine and behave badly: a thumbnail frame with no picture inside it, and a whole section pasted into a single bullet. Two bullets from the twenty-eighth carried the second one and were repaired. The five days of dead thumbnails got past every existing check because they all read either page furniture or bullet text, and nothing read shape.
  • The X that closes an expanded image works. It sits inside the right-hand arrow, which is a full-height strip and was drawn over the top of it, so the X answered nothing on hover and a click there paged to the next picture instead of closing. The arrow still pages everywhere else along that edge. Escape and a click on the dark background have always closed it and still do.

Chat

  • Chat tabs answer the mouse again. Dragging a tab out of the window makes a window of its own, dropping one on another chat window's tab line moves it into that window, and a short sideways drag reorders it along the bar. Tuesday's fix gave the window its move handle back, and the tab drags themselves still did nothing in any direction.
  • The press a drag begins with was being taken by the tab's own click handling before the drag could see it, so every gesture read as a click. A tab now owns the whole gesture from press to release. New tests press, drag and release through the real input path, where the old ones built the window in isolation and never dispatched anything, which is how a drag wired to nothing passed them twice.
  • The chat window's cog menu had two settings that did nothing. "Use Transparent Background" now clears the window's panel and the backing behind the messages so chat reads over the world, while the frame, tabs and typing field keep theirs; "Use Opaque Background" puts the dark panel back. The window still opens with the dark panel unless you pick transparent.
  • The "Enable / Disable Clickable Keywords" setting now applies to every line already in your chat log rather than only to lines spoken after you flip it, and turning keywords back on restores all of them. The markup was being baked into each line as it arrived, so old lines stayed clickable forever; the log now decides when it draws the line.

Interface

  • The school filter in the deck editor ran a column of twenty checkboxes off the bottom of the window with no way to scroll, so the schools below the fold could not be ticked or cleared at all. The list now scrolls inside a box sized to the window, and the glyph list underneath keeps a visible strip instead of being pushed out of the way.
  • Two more things in the same panel: the open school filter had no background behind it, so the checkboxes drew straight over the card list, and neither the Glyphs nor the Combos tab ever showed which one you were on. Both were style names that matched nothing, and both windows that share the filter got the fix.
  • A follow-up in the same filter, found while reviewing the fix: a school box and the school it stood for could drift apart in the list, which would have shown ticked schools as clear and clear ones as ticked whenever the window reopened. It needed a school with no category behind it to trigger, and there is not one today, so nothing was visibly wrong yet.
  • The countdown on the need or greed loot popup runs cyan, then yellow, then red as its twenty seconds drain. The red stage never arrived: its threshold sat behind the yellow one, so every value that reached it had already been claimed. The number held cyan until fourteen seconds remained, then went yellow the rest of the way to zero. It now holds cyan to fourteen seconds, turns yellow from thirteen down to seven, and runs red for the last six. The bands moved into a helper with tests that walk a full countdown, so the order cannot invert again.
  • Swept the rest of the client for the same mistake, on the theory that one unreachable colour band rarely travels alone. The encumbrance, fizzle chance, frame rate and housing readouts all order their thresholds correctly. The loot countdown was the only one that did not.
  • The charge bar is back above the hotbar. Holding a locked glyph drew the skill name with nothing under it. When these readouts moved to the new interface, the bar they draw in was left to a style rule that was never written, so it collapsed to no size at all and the fills inside it had nothing to fill. Five more readouts shared the gap: the casting bar, the melee attack charge bar, the harvesting bar, the control point capture meter and the resurrection shrine meter.
  • Put the charge bar back to the look it was built with. All three of its colours had been redrawn from scratch during the move, so the fill is yellow again with the orange band riding over it as whole charges complete, and spent charges shade in red from the right hand end instead of covering the progress just earned. The dividers now land on the charge marks rather than between them.
  • Every one of these bars had been positioned by working out a fraction of the screen height, which put them in three different bands and moved them whenever a player changed resolution. They now use the fixed offsets they were built with: 160 pixels above the bottom of the screen for the charge, casting and attack bars, 188 for the capture meter, and just above centre for harvesting.
  • Added the check that would have caught this. The old tests asserted percentages, which a zero sized bar satisfies perfectly, so the suite stayed green while nothing drew. The new ones lay each bar out on a real panel and measure it. Two further guards stop the next conversion repeating the mistake: no view may reference a style class the theme does not define, and no combat bar may go back to placing itself by screen fraction.
  • The Options button in the skills window did nothing when you pressed it. It was asking the old tab strip which category was on screen, and the rewritten window stopped answering, so the menu came back empty and an empty menu opens nothing at all. It now reads the selection the window is actually showing, so the two instant unlearn entries are listed again for the tree and the category you are looking at.
  • Rows in right-click and options menus lost their tooltips somewhere in the move to the new menu, which left a greyed-out entry with no way to find out why it was greyed out. Rows carry their tooltip again, and the menu layer now sits under the tooltip layer instead of tied with it, so a row explanation draws over the menu rather than behind it.
  • The check that guards those column widths now measures the headings on a live panel instead of storing numbers from an old measurement. It had been measuring them unbolded, so it could not see that a sorted heading draws about 7 percent wider, which is how the abbreviations came to look necessary. A weight heading was already a couple of pixels over its column on that count.

Decorating

  • Lot layouts got a new name. The feature that shipped yesterday as Blueprints is now Decoration Layouts, because blueprints have meant the dungeon pieces you craft for a player dungeon since 2018 and two of them under one name helped nobody. The window, the deco strip button, the craftable item and its recipe all read layout now.
  • Saved layouts came along with the rename. Files move from the old folder to a new DecorationLayouts folder the first time you open the window, layout codes shared before the change still import, and an item you already recorded still previews and applies.
  • The Open Folder button in that window did nothing, so there was no way to reach your saved files from in game. It used a Windows-only call that fails outright on Mac, and the failure went to the log rather than the screen. It now opens the folder on all three platforms, and prints the full path to the window and chat if the system refuses.

NPCs

  • Two testers reported NPCs in the Isle of Storms tutorial that could be heard but not seen or clicked, and the client had said nothing about it. Every way an NPC can end up with no body was silent, so the client now names any NPC that finishes spawning with nothing to draw.
  • Swept the whole Isle of Storms tutorial for the same fault: all seven Anais spawn points, the automaton, Arabella, the Oracle and the practice dummies build a body and a click target correctly, so the cause is not in the content. A new test walks every spawn point in that scene and fails if one of them would come up empty.
  • Added a developer command that answers why an NPC is missing: it reports whether the NPC never appeared, appeared with no body, or appeared and was then hidden. Those three faults look identical in game and the client used to tell them apart not at all.
  • Fixed a report that NPCs kept calling out their passing lines at players who were dead. A dead player is a ghost, so NPCs now ignore them entirely: no bubble, no chat log line, no voice, and the NPC does not turn and gesture at you either. NPC to NPC chatter and NPC death cries still play, and the Isle of Storms opening is unchanged since you are meant to be a ghost there.

NPC Dialogue

  • NPC voices now stop when you leave a conversation. A spoken reply used to keep playing after you pressed Escape, so you would hear the rest of the sentence while walking away.
  • A farewell you asked for still plays to the end. Clicking Goodbye ends the conversation a tenth of a second after the line starts, so cutting every exit would have clipped every goodbye.

Testing

  • Tester reports now get read and acted on every night. The existing sweep only understood one comment format, and testers were writing a different one: the task template asks them to copy the checklist into a comment with PASS or FAIL after each line, and that is what almost all of them do. None of it was being processed, so it piled up. 81 verification tasks sat parked, 57 of them with no development issue anywhere, which meant the finding existed only as a comment on a task nobody would open again.
  • Cleared the whole backlog in one pass: 112 tester reports read, 68 new bugs filed and assigned, 19 existing issues reopened, 17 tasks closed as verified. 50 bugs testers had filed themselves were sitting unowned and now have someone on them. Three reports were left alone on purpose because they need a human decision rather than a fix.
  • A failed verification now closes its task and moves the finding onto a development issue, instead of parking the task. Parking was a dead end: the note promised the task would come back when a fix landed, and nothing in the system could ever bring it back.
  • Testers can now clear or reset the fog of war on a dungeon map from the tester window. Clear reveals the whole dungeon on every floor at once, reset puts it back to unexplored so the reveal can be walked and watched again.

Oracle

  • The Oracle can now answer where a trainer is. Its knowledge base had nothing on trainers at all, so a player who asked it where to find the Master Air Magic Trainer got no answer. There is now a trainers guide covering all 21 master trainers, the towns they live in, and which skills only they teach, and every school guide gained a "Where to train" section. Live on the Oracle now.

Gameplay

  • Kingsport townspeople can point you at the trainers. Asking a local where something is worked for the bank, the tavern and the market, but there was no answer for any trainer, so "I can't find the air trainer" got nothing back. The player who reported it was standing about five metres from the town's general trainer and twenty-eight from the master they wanted. Locals now give directions to the air trainer, the moon trainer and the general trainer, and they sort out the two Jeremys in town.

Audio

  • NPCs now say the same word for you that their text shows. Characters who do not know your name call you "friend", "stranger", "human", "traveller", "your grace" and about ninety other things depending on who they are, but every spoken line said "outlander" regardless. The written word was already stored per character; the voice pipeline was never reading it. 1,945 of the 2,873 voiced characters were affected, so roughly two thirds of the game.
  • While fixing that, found 669 characters with no audio at all on the lines where they say their own name. Generic townsfolk share one conversation file, and the generator was only ever recording the first name in each group, so Brittany's guards produced audio for "Guard" and nothing for Lucas Porter, Neil Landry or the four others behind the same file. Regenerated 4,138 clips to cover both fixes.

Docs

  • Wrote a setup guide for developers who have never used git, taking a bare Windows machine through to the game client running in the editor. It covers the disk and time budget (around 400 GB, most of a day), the exact commands to run, and a troubleshooting list for the ways it usually goes wrong.
  • Replaced the download instructions in the developer docs. A plain clone of the repo stalls while the server tries to pack 178 GB into a single archive; the partial checkout the guide now uses finished in 16 seconds in testing, and lets the art content download separately so an interrupted transfer resumes instead of starting over.
  • Corrected the old developer setup page. It still named the previous editor version, carried a placeholder where the repository address should be, and recommended a git setting that disables large-file support.
  • Added guidance for artists and designers moving over from Perforce on which git app to use for day-to-day work, and which to avoid: one popular client puts a status icon on every file in Explorer, which does not hold up on a project of 400,000 files.

Player Dungeons

  • Dragon totems attach to the Rise Shaft socket again. The statue was being measured wingtip to wingtip when the game checked whether it fit on the pedestal, so it always came back blocked. It is now measured the same way every other totem is, at 0.23m across instead of 1.11m. The statue itself is unchanged and still matches the other totems for height.
  • Level 1 totems spawn creatures again. Four rooms had no creature listed for the lowest totem tier, and the Rise Shaft was the worst of them: a Level 1 elf or troll totem lit up eleven spawn points with nothing in any of them. Levels 2 through 6 were never affected. The Troll room, the Hilt Rotunda and Challenge Dungeon 01 are filled in too.
  • Two spawn rooms in one dungeon no longer cancel each other out. Every room numbered its spawn points from one and the game kept a single list for the whole dungeon, so a spawn point in one room could quietly displace one in another and neither would ever appear. Spawn points are now tracked per placed room.

Decorations

  • The three Ornate Elven planting beds carried no collision shape on the bed itself, so the game refused to place them on a lot and gave no name when you hovered the frame. Both problems came from that one missing piece. All nine framed planting beds now share the same box collision, sized from the collision shapes the art already ships.
  • The Ornate Viking beds were the ones the earlier rollback missed, so they were still on mesh collision while every other bed used a box. They now match the rest of the set, which also takes them off a drag-time collision path no other bed used.
  • The small Ornate Elven bed dropped to its low detail level about five times closer to the camera than any other bed, and the watered patches went with it. Its threshold is back in line with its siblings, so watered ground stays visible at a normal viewing distance.
  • The check that stops you sowing into a bed something else is intruding on had come unwired on six of the nine beds, where it passed everything instead of checking. It is wired on all nine again. Beds placed flush side by side keep 0.23 to 0.36 metres of clearance, so ordinary layouts are unaffected.
  • Added an editor test that checks every planting bed for its root collider, its overlap wiring and its detail threshold. It was run against a deliberately broken copy first to confirm it catches all three of the shipped faults.

Marketplace

  • Timed marketplace settlement could stall. Auctions ending, purchase orders expiring, tip jar payouts and lot sale orders are all settled by one routine that runs every minute, and they shared a single error guard, so one failure aborted the run and every later step was skipped until the next restart. Each step now runs on its own.

Telemetry

  • Server log stack traces were being thrown away in transit. The log reader kept only the first line of each message, so an error arrived with its type and text but no location, which is why the most frequent error of the day could not be traced to a line. Full traces now survive the trip.
  • Log records now carry the build they came from automatically. The number was documented as a manual step, so it had never been set, and every record read as generation zero. That made a genuine regression indistinguishable from a fix that simply was not published yet. The step that flips the build channel now writes it down.

Patching

  • The macOS chaos channel pointer is recorded in the repo alongside the Windows one, so the build each platform serves is written down in the same place.

Mac launcher

  • The Mac launcher could not install the game. On first run it copied itself into a folder and stopped, and reopening it showed the same install screen again. Fixed, and launcher build 25 is on the tester page.
  • Two separate faults, either one fatal. The installer copied the program file out of the Mac app package, which produces something macOS will not launch. And it wrote its settings to the folder the player picked while the launcher reads them from a different one, so the install never registered and the first-run screen came back every time.
  • On a Mac the app you download is already the launcher, so first run now copies nothing and restarts nothing. It asks where the game should go, then opens the launcher window in the same window and starts patching.
  • Ran it end to end on a Mac from a clean machine, which is the step the previous release skipped. First run to a finished install: 707 files, 16.9 GB, the game launching from the folder the player chose and nothing written inside the app package.
  • The self-update had the same fault in two more places, including one that handed the system a folder where it needed a file. Both now go through one shared routine. That path had never been run on a Mac either.
  • The launcher test suite is green on a Mac for the first time: 344 of 344. Six failures were older and Mac-only, five of them asserting a settings folder that moved months ago and stayed invisible on Windows because there the two folders are the same one.
  • The release script would have published the wrong thing for Mac: the bare program file rather than the signed app package, replacing a working pointer with one aimed at a build Apple Silicon refuses to run. It now takes the package the Mac build step produces.
  • Closed a related hole in the release script. Building the Mac launcher on a machine that cannot sign it produced a package that looked shippable, and the publish step only checked the file was there. An unsigned build now leaves nothing to publish.

User Interface

  • Windows that were open when you logged out no longer follow you onto the login screen. The tester tools window, GM tools, the social window, a tip jar, a game table, and the theme editor all stayed up there, drawn over the login form and still clickable. Every one of them closes on the way back now.
  • Only one teardown existed for windows that survive a scene load, and it could only see one family of them. It is now a shared registry any long-lived window joins, plus a test that fails the build when a new one forgets to.
  • Equipment slots on the character sheet shrink with the window now. They used to draw at one fixed size whatever you did to the sheet, so making it smaller pushed the bottom slots out of the row entirely. At the default size and larger nothing changed.
  • The floating name above a creature answers the mouse again. Clicking a name targets whoever it belongs to and right-clicking one opens their menu, which is where the option to send your pet or summon after them lives. Names went back to the old text renderer a few builds ago so they would stop drawing through walls, and that quietly took them out of the click handler along with it.
  • A name still cannot be clicked in the way that matters: the plate stays invisible to the pointer, so a click passes through it to whatever it is naming, and a name faded out by distance or hidden with the rest of the interface takes no clicks at all. The hit test measures the text itself rather than the box it sits in, so overlapping names resolve to the one the cursor is actually inside.

Build pipeline

  • Fixed a gap in the client build's bundle caching. The cache decided whether packed interface files needed rebuilding by watching three source folders, but the packed files also pull in 7,459 referenced files from 31 other folders, and a change to one of those reused the previous build's copy with nothing in the log. Build 79 shipped the tester window's new fog buttons in code but not in the visible panel this way. The cache now tracks every file the packed assets reference, a stale panel logs a warning naming what is missing, and the fog buttons arrive with the next build.
  • Closed the older half of the same caching gap. The check that decides whether packed world files need rebuilding watched only the scene files themselves, and scenes pull nearly all of their art in by reference, so an art-only change could reuse stale packed copies. This bit once in early July and had been on the books since. Both checks now follow every reference, and a failed check refuses to reuse anything rather than guessing.
  • Measured the new rebuild checks: the world-file check needs a little over half a minute once warmed up, but more than three minutes the first time a fresh build machine runs it, so the overnight build pays the higher price. The numbers now print in every build log, and a cheaper fallback design is written down if that cost proves too much in practice.
2026-07-29 · 134 items

Headlines

  • Shareable blueprints complete: craft a blank Decoration Blueprint, record your lot's layout under a title, and trade it. The holder applies the arrangement with their own items.
  • The skill tree looks like the skill tree again. Crest frames on every tile, the level back in its badge tab, a green experience bar, and the circular school sigil rings in place of a row of text buttons.
  • Drag a column heading to resize it, in the backpack, the journal, your deeds, the friends list, merchants, mail and the rest. The game remembers your widths per window.
  • The map window controls work again: centered zoom, wheel zoom on the cursor, click-drag panning, and a Follow box that really turns following on and off.
  • Player-to-player lot sales are built: sell a claimed lot from its own lot sign with the house and every decoration intact (wishlist #2758). Listing freezes the lot and hands roommates their things back; buying is one typed confirmation; crashed sales refund by mail.
  • SQUIRREL! is live: a new page off the work log where the wild ideas get written down, voted on, and argued about. The first residents include something that lives on dragon droppings.
  • Creature Balance went from nothing to live in a day: every creature in the game scraped through the real combat math, curve-fitted, and browsable on the dev portal and tester hub, ready to drive the balance pass.
  • Precision on the harvesting meter pays: the centre of the target zone doubles a bonus pull, three times per node, and no longer shrinks past the point of being hittable.
  • Decorating got its screen back. A long recent-changes list had been growing the deco bar into an invisible rectangle that took most of your clicks, so the avatar would not walk and decorations would not drag. The list now floats on its own panel, the bar takes only the clicks that land on its buttons, and Ctrl+Z stopped reaching your decorations while you type in chat.
  • The Property Manager rebuilt to the shape it shipped in: house pictures back on every storage row, sortable columns with widths you can drag, and parchment deed cards listing the house, basement and dungeon on each lot.
  • The chat box takes the keyboard only when you ask for it now: using a glyph while running no longer stops you and types a row of w into the chat line, and a window coming forward keeps your caret where it was.
  • Fixed chat announcing the same friend online up to 8 times for one login, and the hunt uncovered a deeper server presence sync gap, filed as its own bug.

Community

  • Nightly forum sweep filed 10 wishlist ideas and 2 bug reports from the last two days of forum activity — house/lot deed transfers, harvestable tree variety, guild culling rules, a Deco Palette locate button, damage-type masterworks, a full-repair item, new creature types, a new soloable dungeon, new artifacts, a coastal siege map, a housing geometry/sprite bug, and a house-window exploit letting players reach through walls into houses.
  • Opened SQUIRREL!, a page off the work log for the ideas that run across the road mid-task. Each idea takes anonymous up and down votes and carries its own discussion thread on the same comment service as the proposal pages, and the work log header links to it.
  • Added a card to the SQUIRREL! page about the wrasse screenshots in the work log: that art is the untouched ten-year-old original, and the creatures get a quality pass before any of them go out.

Housing

  • The Decorations window can find things now. Pick a decoration from the list and press Find, and it is marked on your compass strip and on the map, stays pinned to the edge of the strip while it is behind you, and clears itself when you walk up to it. The decoration glows gold once you are near enough to see it. Double-clicking a row and the Find entry on the right-click menu do the same.
  • The Location column stopped printing coordinates. It reads in words instead, along the lines of 'Interior, on a wall, front left', with front and back as you see them standing at the front of your lot. A decoration you have hidden reads Hidden and can still be marked, which is the one the old coordinates helped with least.
  • The Decorations window also gained a Category filter and a Recent row. The filter offers only the kinds of decoration your lot actually has, so a house with lights and furniture gets three entries rather than ten. The Recent row lists what you last placed or moved, and clicking a name selects that decoration and finds it in one step.
  • Where a decoration sits is still shown only to somebody allowed to move it. Find follows the same rule: on a lot where you cannot move the decorations, the button, the menu entry and the Location column are all absent rather than greyed out.
  • Started on player-to-player lot sales, a long-standing wishlist ask (#2758): the groundwork landed for listing a claimed lot for sale on its own lot sign and buying it with the house and every decoration intact. The sale records, the fee and price rules, and the recovery bookkeeping that lets a purchase survive a crash mid-transfer are in. No player-visible change yet; the listing and purchase flow come next.
  • Lot sales moved from groundwork to a working listing: an owner can now put a claimed lot up for sale on its own lot sign (server side). Listing hands back anything other players had placed there, freezes the lot so nothing can be added or removed while it is on the market, and discloses up front which untradeable items will stay with the seller. Unclaiming, foreclosure, and moving the deed all know about listings now, and the sign shows its for-sale face to everyone in the scene. The buy flow is next.
  • The money side of lot sales landed: a buyer at the sign can now be checked against every eligibility rule (town reservations included), hold a short exclusive lease on the listing, and pay. Gold moves before anything else does, into a durable order record a background job settles by mail: the seller gets the price minus the sale fee once the transfer completes, and a purchase that cannot finish refunds the buyer automatically. The transfer itself is the last server piece left.
  • The transfer itself landed: a paid lot sale now changes hands with the claim, both deeds, the house, and every decoration and chest exactly where the seller left them. Untradeable items go back to the seller instead of crossing accounts, the seller keeps unused prepaid tax as credit, the buyer starts a fresh tax clock, and access lists reset. The handover survives crashes at any point: it resumes from a journal on the next sweep, and a sale that cannot finish refunds the buyer by mail instead of leaving gold in limbo.
  • The lot sign itself learned to sell: owners set a price (and can reserve the sale for one named player) with a confirmation that spells out the fee, the freeze, and the return of items other players had placed; buyers see the price on the sign and confirm by typing BUY LOT. The whole feature is in, five commits from database records to the sign window, with the fee preview pinned to the server's settlement math by a test. Not on chaos yet; a verification task is filed for the testers.
  • Lot sales went under the microscope before anything ships: a new test harness drives the real transfer code against its own database and simulates a crash at every single write, then checks that every item still exists exactly once, in the right hands. The harness caught two bugs that reasoning alone had missed (a resumed sale that could wedge forever, and a settlement rule that could pay a seller twice off a duplicated payment record), and the review pass around it closed three more crash windows, including one that could destroy the deed items themselves. All five are fixed and the whole suite passes for every crash point.

Build pipeline

  • The two images that draw the night sky were importing uncompressed, which put them in the player build at 24 MB each. Both now use block compression at their full 4096x2048 resolution, taking the pair from 48 MB down to 8 MB.
  • Checked the compression against the uncompressed originals before keeping it: 51.5 dB and 51.9 dB of signal to noise, with 0.06% and 0.02% of colour channels off by more than 8 of 255. Compared the densest star fields side by side at full magnification and rendered the result through the sky shader the game actually uses. Every star is still there at the same brightness.
  • Audited the third-party demo content that ships purely because it sits in a folder Unity force-includes. Half of it turned out to be load-bearing: three of six lighting noise textures are referenced by the weather data, one of them is loaded by name so it cannot even be renamed, and a vendor folder that looked like dead demo art holds two materials used by a real weapon and dozens of buildings. The genuinely unused parts come to about 12 MB.
  • The check that catches that exact mistake now runs when code is committed, not an hour later on the build server. It also reads the committed files instead of whatever happens to be open on the machine, so one person half-finished with a change can no longer block someone else from committing.

Decorating

  • Groundwork for lot layout blueprints landed: a lot's decoration arrangement can now be captured to a named local file, with a compact share-code format behind it. Capture records where everything sits and what it is, and deliberately leaves out permissions, ownership stamps, and container contents. Not player-visible yet; the save and apply tools come next.
  • The blueprint matcher and preview landed. A saved layout is reconciled against what is on the lot and in your bags (exact item first, then the same kind of item, pattern and dye preferred), and a dry run reports what would move, what would be placed from inventory, what would return to your backpack, and what cannot be applied and why, using the same denial reasons and count limits live placement uses. Overlap and surface fit stay a live-placement concern and the preview says so.
  • Undo now understands a whole blueprint apply as one step. Applying a layout will record every move, placement, and removal into a single history entry, so one press of Ctrl+Z walks the entire apply back: items return to their original spots, placed items go back to your bags, and removed items return to the lot, in the right order for stacked decorations. If any placed item came from a stack the undo is one way, and the history says so, matching how single placements already behave.
  • The blueprint apply engine landed. Applying a layout moves items in batches, returns displaced items to your backpack, places matching items from your bags in the right stacking order, and reports what it did and what it skipped. A refused batch retries its items one at a time so a single stuck item cannot stop the rest, and nothing already applied is ever silently rolled back.
  • Blueprints shipped. The housing strip has a new Blueprints button: save your lot's arrangement under a name, preview what applying it would change, and apply it in one pass that also lands as a single undo step. The preview uses the same denial reasons and count limits as live placement and says plainly what it does not check. Blueprints are files in your game data folder, so two names make a seasonal swap and a file can be shared outside the game.
  • Groundwork for shareable blueprints: a blueprint item can now carry a recorded layout, its title, its author, and its item count as ordinary item data, so trading, mailing, and vendor listing a written blueprint just works. Not craftable or usable yet; the recording tools come next.
  • The recording wire for shareable blueprints is in: a blank blueprint item can be inscribed with a captured layout over the same kind of chunked, size-capped upload player-written books use, with the author stamped by the server. A written blueprint cannot be rewritten; recording again takes a fresh blank.
  • The Decoration Blueprint item works end to end: use a blank one on your lot to record the layout under a title, hand the written blueprint to anyone, and they can preview and apply the arrangement to a lot they may decorate using their own items. The written title shows as the item name the way player-written book titles do.
  • The Decoration Blueprint recipe is in: Tailoring skill 30, 12 Wood Pulp and 4 Cotton, with the recipe sheet sold beside the blank book recipe. That completes shareable blueprints: craft a blank, record your lot under a title, and hand the written blueprint to anyone. It arranges decorations they already own and never contains yours.
  • Saving a decoration blueprint would have failed for everyone. The request left the client and arrived at the server, but nobody had connected it to the code that handles it, so every save came back as an unknown command. Wired it up before the blueprint feature reached a build.
  • The Blueprints preview now counts stacked decorations whose base item is missing. A saved table with eight plates on it, applied without the table, warned about one missing item and said nothing about the eight plates that had nowhere to go.
  • Rows in the blueprint preview's left-out list now read as sentences such as "sits on something you do not have". They had been printing the internal reason name, so players saw "(ParentMissing)" whatever language they played in.
  • The deco bar's recent-changes list no longer swallows the screen. A long list used to grow the bar upward behind an edge you could not see, and clicks aimed at the world landed in that empty space instead: the avatar barely moved, decorations would not drag, and the bar flickered as you clicked. The list is now a small panel floating above the bar with a background of its own, it scrolls once it fills, and the bar stays one row tall.
  • Rows in that list read what happened. "Moved Oak Table" and "Picked up Oak Table" replace a symbol that was not in the font and drew as the wrong character, and item names that carry formatting now show it rather than the tags around it.
  • Leaving a lot says the undo history is gone. Walking off the lot, or travelling out of the area, clears the fifty-change history and now puts a line on screen telling you so. The one for leaving the area waits for the new scene to finish loading, since nothing can be read over a loading screen.

Images

  • The night sky after the change, rendered through the sky shader the game uses. This is the 4 MB version of a texture that used to take 24 MB.
  • The SQUIRREL! page on launch day: the intro, the first three squirrels, and the vote arrows waiting for opinions.
  • The Fire school tree after the connector fix, with the lines joining each skill to the ones below it.

UI

  • Fixed the login window drawing far wider than the original. The converted panel set no width at all, so it sized itself to the welcome message below the form on a single unwrapped line and stretched across most of the screen. It is back to 456px, the width the pre-conversion panel was authored at, and the welcome text wraps to three lines inside it.
  • Capped the connecting and login queue message at that same width. It draws on top of the login window, so a long queue string used to leave it overhanging the panel behind it.
  • Skill tree tiles draw their crest frame art again, with the level number back in the tab moulded into the top of the frame, a green experience bar along the bottom, and the grandmaster badge as an icon instead of the letters GM. The training marker at the top left is back to its old small, dim form rather than the large triangle it had become.
  • Those tiles were 68 pixels wide sitting on a 64 pixel column pitch, so a row of them overlapped and read as one continuous gold bar. They are back to the 78 pixel box the art was drawn for, with the frame inset by the padding it was packed with, which puts an 8 pixel gap between neighbours. Clicks and tooltips also went back to the old 52 pixel hit area, so hovering the gap between two tiles no longer pops a tooltip.
  • Picking a school is back to the three circular rings of sigils per tab, in place of the wrapped row of text buttons the conversion left behind. The rings are rebuilt from the arrangement component that baked the original layout, so all 35 sigil positions land where they always sat.
  • With the rings come the things only the rings ever had: the school sigil art, your total skill levels printed under each one, the school name fading in on hover, the faded state and note for schools a trainer will not teach, and the right-click Train All and Unlearn All menu for a whole school. The plate that marks which skills a trainer can actually teach you was never carried over either, and is back.
  • Column headings in the game's list windows can now be dragged to resize, and the sizes you set are remembered per window across a relog. Hover between two headings for the resize cursor; double-click a divider to put those two columns back to their starting widths.
  • The Journal's entry list changed width depending on which entry you had selected, because a long description pushed the list narrower and cut off the titles. Both panes are now pinned to a fixed share of the window.
  • The decoration palette's Item Name and Location columns had the same problem as the Journal: the split between them moved with whatever was in the list. Both are pinned to a ratio now, and that ratio is yours to set.
  • Roster list headings had been drifting a few pixels off their own columns whenever a list was long enough to show a scrollbar. The heading bar now tracks the scrollbar the way the inventory table already did.
  • Fixed the map window controls from a tester report. Zoom from the buttons now works on the middle of the window, the mouse wheel zooms on the spot under the cursor, and the map can be dragged with the left mouse button. Dragging switches the Follow box off and checking it again snaps the map back to the player.
  • With Follow on, the map position marker now stays centered at every zoom level while moving. Scenes that ship a preset map zoom treat it as the starting zoom, so the zoom buttons work there too.
  • The jukebox track list joined the same pass: Song, Composer and Album now hold a fixed share of the window and can be dragged to whatever split you want.
  • Fixed the utility hotbar jumping into the combat bar's place when leaving combat (#2804). The bar now remembers its position by its centre and bottom edge, so the utility row stays where you put it and the combat bar appears and disappears centered above it. Saved bar positions reset once with this change.
  • The hotbar key numbers sit centred in their brackets again. Slot views are built at 48 pixels and then drawn at their row's own size, 46 on the utility bar, and only the bracket was following that resize, so every digit landed 2.0px below the bulge it belongs in with its bottom edge 0.6px outside the bracket.
  • Resizing a hand slot now moves the box and every offset measured from it in one call, so the two cannot drift apart. The emote bar and the deck swap button carried the same fault without showing it, since neither draws a key caption at all.
  • Fixed the quit confirmation opening behind the login box when the game window was closed from the login screen. Front end screens now always draw beneath open windows, so this layering bug cannot come back for other dialogs on those screens.
  • Fixed the connecting lines in the skill tree, reported by a tester on the restored Skills window. Each piece of path art was stretched across its whole grid slot and drew as a wide block that never reached the tiles; the pieces now draw at their recorded size, so the lines run thin, bend at the right spots, and join tile to tile. The extra empty space the blocks created between skills is gone.
  • The chat window follows new messages again. The auto-scroll ran before the arriving line had been measured, so it clamped to the old height and stopped one line short, and because that reads as the player having scrolled up it switched following off for the rest of the session.
  • Scrolling up to read chat history still holds your place, and reaching the newest line starts the following again. The same fix covers the NPC conversation and custom NPC story windows, which share the chat log, plus the Oracle transcript window, which carried its own copy of the bug.
  • The theme editor could be dragged shorter than the controls it holds, and the colour sliders and hex row then drew on the game world with no window frame behind them. Its floor is now measured from the content it actually has (474px against the 320 it carried), and the frame clips anything that would fall outside it.
  • The clip that stops a window drawing outside its own frame moved onto the window-body style itself, so it now covers windows that build their own frame instead of only the ones that use the shared one. The theme editor was the window that had been missing it.
  • Windows that manage their own frame now pull themselves back on screen when the game window shrinks under them, from a resolution change or the UI size slider. The oracle window, table game boards and the theme editor had no such handling, and a window taller than the screen cannot be dragged back. The three copies of that wiring are one shared piece now.
  • The Property Manager is back to the shape it shipped in. Your storage is a list on the left again, each row led by a picture of the house with its name, town, lot type and item count as sortable columns whose widths you can drag and which the window remembers. Your deeds are parchment cards on the right again, each listing the house, the basement and the dungeon on that lot with the art for whatever sits in each one.
  • Almost all of that came from one wrong style class. The card was written as three stacked lines but carried the theme class for a horizontal row, so it laid itself out sideways: the name, town and detail landed on one line, and the three parts of a lot squeezed down to one character each and rendered as three dots. The rows kept reserving 88 pixels for three lines while drawing one.
  • Two more bugs were hiding under it. The smaller lines used the modal-veil class for their colour, which is a background, so the town and lot type each drew inside a dark box. And a storage with no name of its own fell back to the scene name, the same text the town column already showed, which is why unnamed storage printed its town twice.
  • Every existing test on that window checked source text and wiring, so all of them passed while the card was sideways. There is now one that lays a deed card out on a real panel and measures the boxes, so slot labels with room for a single character fail the build.

Audio

  • Nineteen NPCs in Grusk moved onto a shared kobold voice: a hoarse, hissing rasp layered over each speaker's existing voice, so the city reads as one race while its shopkeepers stay distinguishable. The storehouse manager who prompted the report had been using an ordinary human voice.
  • Victor, a child in Castle Atos, had a grown man's voice. He and the other junior treasure hunters now speak with young voices. The voice catalogue holds no male child voice at all, which is why the automatic casting had reached for an adult.
  • A player reported the Ebon Dawn ritual master in Solace Bridge Outskirts sounding female with a modern accent. The NPC carrying that title is Mistress Valdis, and a recast in July had changed a different conversation that no creature in the scene uses. She, her ritual assistants and nine other residents of the zone moved to voices that suit the setting.
  • Elder Wyrm the Riddle Dragon and the Ghairmute dragons got a deep, slow treatment, and trolls got a heavy growl in place of a calm, friendly voice. Seven more kinds of skeleton and lich joined the rasping undead voice, two of which had been speaking with female voices.
  • Options gained an NPC Voice slider in the Audio tab. Spoken dialogue had shared a volume control with combat grunts and death cries, so lowering one lowered the other. Dialogue now has its own bus nested under Voice, which still trims both.
  • New voice treatments are checked against the audio filter engine before any generation run starts, after a bad parameter in a first draft of the dragon voice failed all 92 of its clips once the speech had already been produced. The generator also stopped retrying that kind of failure four times over.
  • Measured the new treatments against the voices already in the game before publishing anything. The kobold and dragon sets came out 4 to 6 dB louder than everything else and were regenerated at matching levels.
  • Three of the ten reported voice bugs were already fixed at the source and were closed with the evidence. The tester complaints left over on those were separate problems and were filed on their own: two undead types missing the flag that lets them taunt, one creature with no dialogue written for it, and replies the game assembles while running, which can never have a matching recording.
  • NPCs now speak the "I don't know where that is" reply when asked for directions to a place they do not know. That reply is assembled on the fly, so it never had a recorded clip and played as silent text; the fixed opening sentence now has a clip in all 160 cast voices, and the list of places the NPC does know stays on screen as text.
  • Fixed Lich Mages and Skeleton Mages never taunting in combat. Their taunt lines were missing the combat flag in the exported bark data, so only their death lines ever played. The fix also restores taunts for Lich Lords and the other lich variants that share the same lines. Added a test that catches the flag going missing again.

Planning

  • Changed the website plan: the account and store systems stay as they are and get adapted for the game's new home, and the planned rebuild from scratch is shelved as a fallback. The roadmap and the public roadmap page record the change.
  • Added two-factor account security to the roadmap, planned to follow right after the account website settles into its new home: optional sign-in with a standard authenticator app and backup codes for recovery.
  • Checked the first item on the crafting proposal list before building it and found it had already shipped on 28 July as part of a pass over every converted item list. The proposal page now marks both the tooltip items as shipped, and the "no tooltips anywhere" entry in the problems list is marked fixed.

Art Tools

  • Added a texel density audit to the editor. It walks prefabs, scenes or just what you have selected, works out how many texels of a texture actually land on a metre of the surface it is painted on, and ranks every texture by whether it is over- or under-resolved. Output is a set of CSVs plus a console summary; it does not change any assets.
  • The audit knows the difference between a texture that is too big and a texture whose import cap is merely set high. Around 9,965 textures in the project sit at the default 2048 cap over smaller source art, where changing the cap does nothing at all, and those are filtered out before anything is proposed rather than padding a report.
  • Checked the maths against known geometry: quads of 1, 2 and 4 metres carrying the same 512-pixel texture measure 512, 256 and 128 texels per metre exactly. 44 editor tests cover the arithmetic, the target bands and the import-cap filter.
  • Running it on the Cistern of Atos turned up a bug in the tool itself: dungeon walls were being judged against the band for small props, one step stricter than architecture, so healthy walls read as blurry and genuinely oversized textures stayed hidden. Fixed, and the scene now reports 8 textures on target where it previously reported 5.
  • The matching Scene View colour overlay is written but switched off and its menu entries greyed out. Unity blanks the whole viewport when any replacement shader is applied in this version, including its own built-in ones, so the fault is not ours to fix from the shader side. What was tried and what to try next is written down rather than left to be rediscovered.

Journal

  • Renamed three tabs in the Journal window after tester feedback: Tasks is now Active Tasks, Journal is now Completed Tasks (it lists finished quests), and Entries is now Journal (it holds your journal entries). The Information tab text was rewritten to match.
  • Translated the whole Journal window for the first time. The 16 strings the window gained during its UI Toolkit conversion had never reached the translation database, so tab names, column headers, the search field, the settings rows and the help text rendered English in all eight languages while the older strings around them were translated. All 16 are now filled for German, Spanish, French, Italian, Japanese, Portuguese, Russian and Simplified Chinese.
  • Corrected the in-game Journal help topic, which still described a "Current Tasks" page that no longer exists. It now names the Active Tasks tab, in English and in all eight languages.

Creatures

  • Wrote a step-by-step internal guide for building a new monster: model and rig import, animation sets, sounds and effects, stats and AI, loot tables, and the registration steps that make a creature spawnable and testable. Fourteen linked pages, with each claim checked against the game code.
  • The guide closes with a worked example and a pass or fail checklist. Its first real test comes next: wiring in a completely new model and animation set by following it.
  • Bloody Bones in Solace Bridge Outskirts was completely mute: no chat bubble, no chat log line, no voice, because no dialogue had ever been written for him. He now taunts during combat and gets a last word when killed, all drawn from the ballad the ghost children sing about him.
  • His new lines are translated into all eight supported languages, matching each language's existing name for him from the rhyme, and spoken in the same deep rasping undead voice the liches and Bloodbone skeletons use.
  • Revived the Cave Wrasse, a six-legged cave lizard that was cut from the game in 2015. Its art came back into the project last September and had been sitting unused, so the creature was rebuilt around it: five of them now, from a skittish Cave Wrasse up through Spineback and Emberglow to the Drakefed, with a Wrasse Broodmother on top.
  • Wrasses den near dragon lairs and live off what dragons leave behind, and the higher tiers have taken on the traits to match. Hide colour and the glow coming off them both climb with tier, from a dull ember to molten on the Broodmother. From T12 up they breathe fire, the Drakefed adds a tail bash, and the Broodmother enrages below 35% health. Only she is bigger.
  • Field dressing pays in Serpent Scales and Sulfurous Ash on every tier, Dragon Essence from T12 up, and tier leather and Crown of the Obsidian bundles for the bulk. The Broodmother always drops a Wrasse Egg - an item that had been in the files unused since the quest that wanted one was cut. They are not placed anywhere yet.

Testing

  • The first full run of the EditMode suite on this checkout surfaced 16 standing failures. Diagnosis found five real bugs hiding behind them: the NGUI teardown warning could never fire in the editor (a destroyed-object check defeated its own identity set), blueprint file names saved on one platform could be unwritable on another, the Lua addon sandbox misjudged foreign-style absolute paths, and a shader fix from the engine migration had broken one platform's shadow path. The other eleven were tests whose expectations had drifted from legitimate refactors or whose fixture files never existed in a fresh checkout. All 16 cleared: the suite now passes 5,531 tests with zero failures.
  • Documented a test-suite naming trap: a new test sub-namespace named after a game class breaks other test files that use that class, with a compile error pointing at the wrong file. Renamed the new bark test namespace to avoid it.

Chat

  • Clicking a combat glyph or a hotbar slot no longer hands your keyboard to the chat box. If you had used chat earlier in the session, clicking a glyph while running stopped your character and the movement key you were holding typed itself into the chat field as a row of repeated letters.
  • Fixed the chat entry row: typing a long unbroken message stretched the text box and pushed the channel arrow button off the window edge. The box now scrolls long text inside itself and the button stays put; the NPC conversation row got the same guard.
  • Follow-up to this morning's chat focus fix, which did not hold: holding W and clicking a combat glyph still stopped the run and typed a row of w into the chat line. The window found two more ways to take the keyboard back on the new interface: windows coming forward reload their content and the framework hands the focus back afterwards, and chat lines that force the window open (like the error text from a failed glyph use) do the same with no click involved.
  • Closed the whole class this time: the chat box now accepts the keyboard only when you ask for it (Return, slash, Shift plus a letter, a click in the box, or typing), a window coming forward keeps the caret where it was, and once you click away nothing can hand the chat box the keyboard again. New tests pin each rule, including one that drives a real interface panel.

Testing

  • Added EditMode coverage for the build-at-one-size, draw-at-another path the old hand slot tests skipped: they built each slot at its final size, which is the one case the game never does. The new checks measure the digit against the bracket actually drawn under it, and source guards stop another window setting a slot width directly.

Interface

  • Restored the rule that clicking anything other than the text box you are typing in takes the cursor out of that box. That covers combat glyphs, hotbar and emote slots, other windows, the world, and the chat window's own tabs and title bar. Text you already typed stays where it is.
  • The keyboard focus outline was wired up on two of the thirteen interface surfaces that use it, and it stopped working after any window was hidden and shown again. It now applies everywhere, including the HUD, context menus, popups and the tool windows.
  • Ctrl+Z while typing in chat no longer undoes a decoration. The keyboard gate that keeps gameplay keys out of a text box had let every Ctrl chord through since the original import, on the reasoning that a player mid-sentence might still want a chorded command. It now holds back the six chords a text field implements itself, so undo, redo, cut, copy, paste and select-all belong to whatever you are typing in. Ctrl+1 through Ctrl+0 still discard cards while you chat.

Travel

  • The destination picker you get when a town has more than one way in now lists the entrances you have not found yet. They sit at the bottom in grey italics under the name "Undiscovered" and cannot be picked, so the list shows a town has more ways in without saying where they are. A tester flagged that this was specced but never visible anywhere; the entrances were being filtered out before the window ever saw them, and had been since long before the window was rebuilt.
  • Started a guide light for finding your way: a wisp you summon that flies the walkable route ahead of you and shows your next turn rather than the whole way. This first pass is the routing and motion maths with its tests, so there is nothing to see in game yet.
  • Added 15 model classes and 121 tests covering route resampling, corner detection, pacing, the state machine, the expiry clock and the per-scene rules. The guide stays off in dungeons and stops at the edge of ground you have actually explored.

Docs

  • Building the wrasses was the first real test of the new-monster guide, so the guide got corrected where it fell short. The largest catch: picking an animation base is not just about body shape. A creature borrowing the dragon fire attacks needs a base that has the states those attacks play, or the fire lands with no animation at all and nothing anywhere reports a problem.
  • Also corrected: sound event names are matched without regard to case at runtime, where the guide claimed the opposite in three places. Spelling still decides one thing, which is whether a creature death cry follows the voice volume slider. Two suspected errors turned out to be correct and were left alone.

Creature Balance

  • Built the Creature Audit: an Editor tool that bakes every shipped creature and tamed pet to JSON. Stats replay through the game's own formulas (health, innate resistances at effective level, per-rune damage and cooldowns), loot bundles flatten with XP and gold called out as the loot items they really are, and spawn points, scene tiers and the taming matrix join in. 14 EditMode tests pin the math to the game code.
  • First full creature bake committed: 1,546 creatures and tamed pets across 66 families, every one with effective stats, ability evals, flattened loot and spawn data.
  • analyze.py fits per-level curves over the creature data, flags outliers and tier mismatches, and scores everything against committed target curves. The first run surfaced 615 curve outliers, 48 bosses weaker than the regular-creature curve, and a T15 lich that awards almost no XP.
  • Built the Creature Balance page: a sortable, filterable roster of all 1,546 creatures, charts of HP, damage, XP and gold against level with fitted curves and target overlays, a ranked outlier worklist, and a live target-curve editor. Each creature gets a detail page with its full stat block, abilities, loot table and spawn map.
  • The Creature Balance page is live on the dev portal and the tester hub, behind the same login testers already use for the balance audit. Filed a verify task asking testers to check creatures they know well against the page's numbers.
  • A nightly Jenkins job now rebakes the creature data, reruns the analysis, and republishes the page, so the worksheet tracks balance changes as they land.
  • Charts on the Creature Balance page now open full screen from a button on each card, same filters and overlays, close on Escape.
  • Cleaned up after the creature bake: the committed data files carried a build stamp from a tree that predated the tool, so they now name the build that actually produced them. The docs were wrong about rebakes leaving those files untouched, and now say what really happens.

Crafting

  • Hovering a recipe now shows the whole recipe: what it makes, its tier and school, the skill level it asks for, your chance of success at the station you are standing at, and every ingredient with a have/need count in the same three colours the recipe card uses. It used to show the recipe name and nothing else.
  • A recipe card has room for eight ingredient rows and stopped there, so a longer recipe hid the rest. The new hover lists every ingredient, and the recipe book cards answer the same hover as the station list.
  • The recipe rows were not using the game tooltip system at all: the list carried its own plain text plate, which is why the older detailed hover was unreachable. Rows now answer through their list, the same arrangement the other converted windows use, so one hover opens one tooltip.

Gathering

  • The harvesting swing meter has a bright centre inside the target zone, and hitting it used to do nothing but flash the marker. Land it on a bonus pull now and that pull is granted twice: double the materials and a second experience reward, up to three times per node.
  • That centre band used to shrink with the target zone, down to a sliver worth about 14 milliseconds at the end of a long chain, which was luck rather than aim. It now stops shrinking at a size a person can hit. The band shows orange while a node can still pay the bonus and gold once it cannot.
  • Suggested on the player wishlist, which also asked for rare materials off precise hits. Those already exist on the first pull of a node and never on the bonus pulls, so putting them on the bonus tier is a content pass of its own and is tracked. Ignoring the meter still gathers exactly as it did before.

Dev Tools

  • Added a comment count column to the issue tracker list, plus a second column that excludes notes posted by the automation account. Both columns sort, so the most-discussed items rank first.
  • Added a Commented by filter that finds every issue a given person has written a note on. The built-in filter for this also matched field changes such as a status flip. It inverts too, listing issues nobody has commented on.
  • Plugin installs on the tracker now boot the app in a separate process as a check before restarting the live one, so a bad file fails the install instead of the service.

Social

  • Fixed chat repeating "(name) is now online." for a friend who logged in once. The announcement compared each server update against a cache that gets wiped on reconnect and replaced wholesale by friends-list downloads, so every reset re-armed the message; one tester saw the same friend announced 8 times while they were zoning. Announcements now remember the last announced state for the whole session and fire once per real change, with EditMode tests over the new logic.
  • Chasing the spam through the server logs turned up a bigger problem: the two social server processes have not been sharing who is online since mid-July, so whether a friend shows online can depend on which one your session landed on. Filed with log evidence as #2833; the chat fix above holds either way.
2026-07-28 · 131 items

Headlines

  • Window hotkeys and the window selector work again: 41 of 48 windows would not open on build 67, from a single fault in the shared window controller.
  • Effect tooltips name who applied what. Two players rending the same target read as two entries with their own numbers and timers instead of a stack of identical lines. Stack limits are untouched and still belong to the target.
  • Names no longer show through walls. Floating name labels sat on a layer with no depth information to test against, so they drew over buildings and hills; a character half behind a doorframe now shows only the part of their name you could actually see.
  • Windows can no longer be lost off the edge of the screen. Dragging one past an edge saved that spot, and dropping your resolution or raising the UI scale stranded windows outside the visible area with no way to grab them back.
  • The inventory's nineteen category buttons fold away. At the narrowest window they wrapped onto five rows, about 148 pixels spent on filter controls before the item list got any. One row now names the active filter and unfolds them on click, and each window remembers whether you left it open.
  • Undead summons finally scale with Death Mastery. Their health read the mastery off the summon rather than the summoner, and a summoned skeleton has none of its own, so it counted for nothing. At 100 in Undead Mastery and Death Mastery the bonus health goes from 250 to 562.
  • The zone maps have been redrawn, all 25 of them. Seas and lakes are water instead of the ground under them, the docks and bridges the capture camera had been dropping are back, house roofs cover their rooms again, and ore and cotton are no longer painted into the ground.
  • Decorations answer who put this here: tooltips name the placer and the last mover with a readable time, and the decoration list gained a Placed By column.
  • Item tooltips are back in every list window. Hovering anything in a bag had shown nothing at all since the day before, on every window converted so far.
  • A Terrain Leveller for town governors: drop one and the ground across its square goes flat, grass and trees cleared. Three sizes, and the follow-up the flattening work deferred in July.
  • Decorating gains full undo and redo: moves, stows, pick-ups and placements step back with Ctrl+Z and forward with Ctrl+Y, with strip buttons and a history list, and shared lots clear the history honestly when someone else edits.
  • The tester tracker got a full status sweep — 13 tasks testers had passed in prose were closed, 29 sitting on an unanswered failure went back to Feedback with a reply, and 43 that were live on chaos but stuck in New became visible on the in-game board again.

Community

  • Nightly forum sweep filed five wishlist ideas from players — a Ward/specialization balance ask, hiding other players' emotes, an aggro meter and dungeon-structure/VFX bundle, a call to revisit the Truth questline, and a batch of smaller QoL asks.

User Interface

  • The title screen burn now runs 3.5 seconds instead of 2.5, so the old art reads as catching fire rather than wiping away. It also has sound for the first time: a fire builds while the old title is still up, and a whoosh lands on the first burning holes and dies out as the new artwork settles.
  • The chat window header is back on the tab line. Tabs and the five buttons share one row again, the way they did before, and the window no longer spends a row on a title it never had.
  • Add tab, the tab list arrow and the chat options gear went back to their original artwork instead of the text symbols the conversion left behind, and each one lights up on hover and while held.
  • The window pin is a pushpin again on all fifteen windows that have one, replacing the word "Pin" and a checkbox. It lies on its side when unpinned and swings upright and settles into the bar when pinned, and hovering it says which it is.
  • Fixed a title bar that let any widget sitting in it start a window drag. The help button already did this, so pressing it moved the window instead of opening help.

UI

  • The check box in the game windows is a square box again. It had been drawn with the round radio-button frame, so an empty check box and an empty radio button were the same picture, and "checked" was only a small tick inside the circle. Radio buttons keep the round frame, so the two shapes now mean different things.
  • Hovering a check box no longer erases it. The window styling had restated the hover look with the right settings but the wrong selector, so the game's own rules were quietly winning and blanking the art. The box now holds still under the pointer, its outline brightens, and the label goes white.
  • The check box is drawn from the same backing and hairline the text fields and dropdowns use instead of from a sprite, so it stays sharp at every UI size and picks up all four themes with no new art. Disabled check boxes now dim the way disabled buttons do.
  • Nudged the title screen artwork 40 pixels left so the phoenix and the chaos star line up with the column of menu buttons. The composition sits about 55 pixels right of center in the source image, so the buttons looked off to one side even though they were centered on screen.
  • The status frame in the top left went back to the layout it had before the interface rebuild: the title sits above the name again, both lines left align with the bars under them, and the spacing between lines is tighter. The conversion had been drawing that frame with the floating name plate's text sizes, so the name came out at 20px instead of 18 and the title and guild at 16 instead of 12, which left the title nearly as large as the name.
  • Health and focus bars went from 100 to 133 pixels wide and picked up rounded ends, a dark track and a thin outline. The track is what a partly empty bar was missing: with nothing drawn behind the fill, the empty part of the bar simply disappeared. The focus bar went back to its authored blue, and buff icons gained a 3 pixel gap above them.
  • Tooltips that opened near the right or bottom of the screen were drawn starting at the mouse pointer and ran off the edge, cutting off the end of their text. The skill tracker in the top right corner showed this on every hover, losing the description and the next-level block. Tooltips are now placed once their real size is known, so they stay inside the screen, and they stop short of the top and bottom edges again the way the old interface did.
  • Two other popups had the same problem and got the same fix: the row tooltips on party and guild lists, which were placed at a fixed offset with no screen check at all, and the Options gear menu, which only checked its top edge and guessed its own height at 84 pixels instead of measuring it.
  • Most windows stopped opening on build 67. The keys for blocked players, emotes, combat decks, decoration settings, the journal, lot deeds, nearby players, the Price of the Oracle, the recipe book and titles did nothing, and picking a window from the selector menu did nothing either. One fault in the code that opens a window took out 41 of the 48 windows on the shared window controller at once.
  • The map key was the odd one out: it put a frame on screen that could not be moved, resized or closed. That was the retired frame the old map used to draw, left visible because the real map window never got to open. It is hidden now, and the map opens in front of whatever is already up rather than behind it. The journal, emotes, lot deeds, titles and six other windows got the same ordering fix.
  • A new test walks every window controller in the game UI and checks it against the window prefab it is wired to. The refactor that caused this passed every check it had, because all of them asked whether the code compiled and none asked whether a controller could hold the window it was pointed at. Against the old code the new test flags all 41.
  • Lined up the tracked skill advancement popups on the right of the screen. Each row was positioned from its own measured width, so a longer skill name dragged that row's icon, level line and progress bar leftward: Heightened Awareness sat about 70 pixels further left than Textiles, and the longest names ran up against their own close X. Every row is now placed from a single 190 pixel width, so the icons, names, level lines and bars each form a column, and a name too long for the column ends in an ellipsis with the full name still on the hover tooltip.
  • The Oracle, Tester and GM windows never came to the front. Clicking or dragging one did nothing, so they stayed buried under whatever else was open. Clicking any of them now lifts it above the other windows, and opening one brings it up.
  • Zone loading screens were sometimes coming up as a grey blur, a plain black screen, or the old title screen. Three images belonging to the title screen intro had been sitting in the folder the loading art is drawn from, and every build rebuilt that list by scanning the folder. Moved them out, so all 26 loading screens are scene paintings again.
  • The loading screen picker also skipped the last entry in its list, so one of the 26 paintings had never been shown to anyone. It is back in the rotation, and new editor tests flag anything other than scene art landing in that folder.
  • The character sheet now comes to the front when you open it or click it. It had been drawing behind the backpack whichever one you opened last, because its window never took part in the ordering that decides which window sits on top.
  • Swept the same window ordering fault across the rest of the interface. 52 windows that could never come to the front now do, including the item preview, the vendor and quest item windows, display cases, the deco palette, the jukebox, the list windows, the report forms, the help window, the leaderboard and the loot roll. The hotbar, party frames, timers, compass and the other HUD pieces stay put behind them on purpose.
  • A new editor test requires every window to state whether it takes part in the ordering, rather than letting it default. The old default was silent: a window that said nothing sat behind everything with no error anywhere, which is how this shipped four separate times.
  • Closed a gap at the top of the window stacking range where a window could end up tied with the dropdown menus and one dialog that are meant to sit above it. The tie only became reachable after a very long session, and a test now fails if a new layer is ever added inside that gap.
  • Pressing the slash key with chat unfocused now leaves the cursor after the slash, so a command can be typed straight away instead of arrowing past the character first. The same fix puts the cursor at the end of the line when chat takes focus from Enter, from Shift plus a letter, and after linking an item.
  • Windows that offer help were drawing two close buttons. The help button had been given the close button's style, and that style is the X artwork itself, so the button painted an X and drew its question mark on top. Clicking the left X opened help instead of closing the window. The help button has its own round question mark icon again, on the skills, book, crafting station, merchant, lot sign, bank, container and vendor windows.
  • The tavern game table, the tip jar and the theme editor now come to the front when they open and when they are clicked. All three own their own interface layer and were never entered in the window ordering, so a backpack or character sheet opened earlier in the session stayed in front of them and no click could get past it.
  • The small loot window is one column of item names again, with the stack count after the name, the way it was before. It had been given the full inventory's five-column table, and those columns come to more than the 300 pixel window is wide, so the numbers ran off the right edge and a gold count in the millions came out as "1,23...". In the backpack, the number columns were sized against the heading font at 14 pixels while the rows draw at 16, leaving every one of them about 14 percent short; Qty and Value now hold seven digits and their commas.
  • The Nearby Players window used to stay on screen through a scene change while the game had already written it off as closed, which made the next press of its key do nothing and took a second press to close it. It now closes on the scene change and comes back if it was open before, so the key and the window selector both work on the first press. Arriving in a PvP scene no longer leaves it sitting behind the PvP stats window.

Client

  • Added a checkbox under Quit on the first screen, "Use the Original Title Screen". Ticking it brings back the old forest and logo art with Karelia's Song playing behind it, and skips the burn-away opening. The setting is saved per machine and applies as soon as you tick it, so the background and the music change without a restart.
  • The current title screen picked up its own music. It had kept playing the old theme since the art changed, so the two screens now each have their own: Karelia's Song on the original one, a new track on the current one.
  • Models with nested levels of detail stopped fighting over which renderer they own. Unity builds one group per node, and each group was sweeping up renderers a nested group already owned, leaving two of them arguing about visibility. The dungeon set alone produced 72 engine warnings a build.

Lua Addons

  • The add-on manager reads five optional fields out of an add-on file to fill in its name, creator, version, description, and icon. Those were documented on the authoring guide page and nowhere else, so an author who opened the API reference found nothing. That page now covers them, including the exact form the manager matches and what it falls back to without them.
  • The Submit Addon window now has a Description box and a Creator name box. Both values used to be taken from the add-on file without being shown, so an add-on that declared neither submitted an empty description and the store refused it with nothing the author could change. The boxes pre-fill from the add-on's own metadata when it has any, and are length-checked before the upload.
  • The add-on store capped a package's declared API version at 2 while the client had moved on to 4, so it would have rejected the example add-on we ship as a reference. The cap now tracks the client, and a test reads the client value and fails if the two drift apart again.
  • The example add-on declared none of the five metadata fields, so anyone who copied it as a starting point got Unknown for the creator and version. It now demonstrates the block the docs describe.

Interface

  • The hotbar key numbers are back where they belong. They sat in each slot's top-left corner since the interface rebuild; they now centre in the small bump below the slot, inside the bracket that gives the slot its bottom edge and side ticks. The numbers carry a dark outline again, so they stay readable over pale stone and bright ground instead of washing out.
  • Combat hand slots no longer draw a white box around all ten. The old bar's slot border was the number bracket itself, so the rebuilt bar was drawing a second frame the game never had. A frame now appears for a locked or lit slot, and the highlight colour reaches the bracket so a selected slot still stands out.
  • The hotbar has a handle again. The middle of each row carries a grip with a four-way arrow on it, replacing the old shovel-shaped one, and the cursor changes to the movement arrows while you hover it. Before this the bar could only be dragged by whatever bare edge you could find around the slots.
  • The on-screen task list answers the mouse again. Hovering a task or the N Tasks in Journal line brightens it, holding dims it, and letting go opens the Journal. The clickable area is a wide band rather than just the letters, the way it was before the interface rebuild.
  • A click on a task is now a completed press instead of firing the instant the button goes down, so pressing a task and dragging away cancels it. The task list also stopped swallowing clicks aimed at the world: only the task lines themselves take a click, not the gaps between them.
  • A source file the hotbar key number fix relied on had missed its commit and is now included, so the next build carries the complete fix.
  • The carried weight readout now shows when you are over your limit. Past your carry capacity the carried number turns yellow, and past twice your capacity it turns red. The capacity after the slash keeps its normal colour. The paper doll, the character sheet and the backpack footer all read from the same rule, so they cannot disagree.
  • The encumbered warning in the top-right corner has its picture back. The conversion to the new interface had recorded it as a text-only warning and swept away the symbol the exclamation mark was laid over, leaving a bare mark in the corner. Its hover text, which names your weight and whether you are too loaded to move, works again too.
  • Fixed an error the encumbered icon threw once a frame for as long as you stayed overweight. The countdown ring it drew on was removed during the interface conversion while the code that drew it stayed behind.
  • Movable windows and bars can no longer be dragged off the edge of the screen, or stranded off it. Dropping your resolution or raising the UI scale used to leave a window outside the visible area with no way to grab it; windows are now pulled back inside, and your chosen spot returns when the screen grows again. Covers the party list, timers, compass, emote bar, tip jar, table games, the theme editor and the GM window plates.
  • Inventory column headings stopped being cut off. The first letter of the name column was hidden behind a button frame, so "Item Name" read as though it began with a bar, and the columns were narrower than their own headings; a durability of 120/150 showed as 120/1 followed by dots. Quantity and Durability now abbreviate with the full word on hover.
  • Empty equipment slot labels on the paper doll stopped splitting down the middle. Label margins were eating 9 of the slot's 44 pixels, leaving Necklace one pixel short and wrapping it as "Necklac" and "e". Every slot name now fits on one line except Instrument, which shortens with the full word on hover.
  • The mouse cursor could be left on screen after closing every window. Some windows route an open or close through their own handling first, and the window system was reading that as a failure and popping a cursor level that had never been pushed. Repeated chat toggles were the usual way to hit it.
  • The inventory category buttons now start folded away. Nineteen of them wrap onto five rows at the window's narrowest, taking about 148 pixels of the window before the item list gets any. In their place is one row reading "Filter: " and whichever category is active, and clicking it unfolds the buttons. The row keeps naming the active category while folded, so a window left filtered still says why its list is short. Folded or open is remembered per window, so your backpack, the bank and a container each keep their own.
  • Text on the Air theme is readable again. Colours the game bakes into its own strings, such as the grey behind every character sheet stat line, were sitting at 1.5:1 against a near-white panel; they are now pushed to at least 4.5:1 on their way to the screen, with their hue preserved.
  • The change sits at the single point where a game colour becomes screen text, so every converted window picked it up at once: the character sheet, item and skill tooltips, lists and chat. Text drawn straight over the world, such as floating damage numbers, the compass and the hotbar, keeps the colour the game authored.
  • Air panel fills dropped from 0.93 alpha to 0.40, and its tooltips from 0.98 to 0.40. The light theme now shows the scene through it.
  • The character and pet sheets stopped repainting their stat lines grey. On the four dark themes the result is identical to before; on the light one the lines take the theme's own ink.
  • Item tooltips came back to every list window. The backpack, containers, the bank, loot, merchant and vendor windows, trade, the crafting station panes, mail attachments, the deco palette and the jukebox all stopped answering a hover a day earlier, when the converted windows stopped building the old widgets underneath them. The tooltip had been arriving from those hidden widgets the whole time, so the replacement rows had never carried one of their own. Each window now asks its own list for the tooltip, so a merchant listing keeps its price lines and a trophy fish keeps who caught it, where, when and how long it was.
  • Double-click and right-click work again on the mail list, the deck builder lists and the book list. Those rows are pooled and reused as you scroll, and the tooltip they were given had been stored in the same slot the list keeps each row's identity in, so every row answered the click handler with nothing.

Crafting

  • A reported empty ingredient slot in the Garlic Cheese Bread recipe was not empty. A recipe slot can name a specific item, a whole class of items ("any cheese"), or an item the player supplies at the table, and the report had only looked at the first of the three. A sweep of all 3,283 recipes found no genuinely unassigned slot anywhere in the game.
  • The crafting reference tables carried the wrong name for two transaction types, labelling 201 rows "Animal Process" or "Reshape" where the game calls them Special and Apply Pattern. Repair, salvage, planting and book-copying recipes printed their main input as "?" and now name it: Worn Item, Salvageable Item, Seed, Published Book. The tables also picked up a month of crafting content that had landed since they were last built.
  • The catalog builder now fails if a recipe slot really is unassigned, sets both a specific item and a category, or uses an unknown slot type. The first run of that check found one: a pet collar recipe listing both a Yard of Leather and a leather-roll category in the same slot. The game was already using the leather, so the leftover category was removed.
  • Repairing an item with a gathering skill selected wrote an error to the server log instead of simply answering no. Any client could trigger it, so the log filled with entries that were not faults.

Patcher / Launcher

  • Started on patch notes for the launcher. Every build now records which code it was built from, and that record survives the patch server cleanup that used to erase it within a few days. From two build numbers we can now work out exactly what changed between them.
  • The notes are assembled from the work log entries written alongside each change, filtered down to what a player can actually see. Development, build and infrastructure work is dropped. A separate check refuses to publish a line carrying an address, a credential or an internal detail, and reports only which rule caught it so the offending text is never reprinted.
  • Put the patch notes on a page of its own at the site, open to anyone with no login. It takes the build you have and the build you are moving to, and lists what changed between them, newest build first and grouped by area. Builds that shipped the same game content as an earlier one say so instead of showing an empty list.
  • The page reads the whole common case in two requests, so opening it from the launcher will not stall on a slow connection. Wider spans load the rest in small batches, and anything past forty builds waits behind a button.
  • The launcher now offers a "See what changed" link next to Play. It opens the patch notes for the version you had and the version you just moved to, so you get the changes since your last build rather than the whole list. It is written and tested but not yet in a released launcher.
  • The link carries only two build numbers and nothing about you or your machine. The launcher hands the address to your browser and reads nothing back, so it stays as locked down as the rest of the patching path.
  • The launcher now opens the patch notes for you when an update finishes, showing what changed between the build you had and the one you just got. It only does this when a patch actually installed something, so a fresh install, a repair or simply reopening the launcher leaves it alone, and it happens once per session rather than every time.
  • A checkbox next to the link turns it off, and it sits right beside the notes so you can switch it off the moment it first appears. The link stays either way. The launcher hands the address to your browser and reads nothing back.
  • Launcher build 23 is out on Windows and Linux. Start the launcher and it updates itself, then shows you the patch notes when a game update finishes. The Windows build is signed as before.

Images

  • The inventory category filter, folded and open. Folded is the default and it names whatever category is active, so a window left on Equipment still says why its list is short.

Build & Release

  • The Linux client build failed twice on a branch that did not compile. Two interface fixes landed calls to three new text-measurement helpers without the file that defines them, so a fresh checkout stopped at three compile errors that a local build never sees, because the local copy of that file was sitting there unsaved to the branch. Committed the missing file and the test that re-derives its numbers from the font file, and both game assemblies build again with no errors. The Windows build was cancelled the moment the Linux one failed, which made this look like a platform problem rather than a branch that would not compile anywhere.

Tools

  • Added a commit-time check for the mistake behind that build failure. It compares the files going into a commit against the game sources still sitting uncommitted, and refuses the commit when something being committed calls a type or member that exists only in the local copy, naming the file to add and every call site that needs it. It catches both of the day's misses. Run across the 32 uncommitted sources in the tree it flagged three, all of them real, and nothing false.

Rendering

  • Outdoor shadow edges no longer shimmer in daylight. The sun was re-aimed every frame, moving under 0.003 degrees each time, too little to read as motion but enough to shift the shadow map and set every shadow edge crawling. It now updates every 2 seconds while the sun is high, easing back to every frame near sunrise and sunset where shadows are long enough for a step to show.
  • Names floating over characters no longer draw through walls, terrain and buildings. World-space text sits on a layer the main camera does not render, so there was no depth information for it to test against; it now compares itself against the scene depth per pixel, which means a character half behind a doorframe shows only the visible part of their name.

Combat

  • Damage-over-time tooltips read other players' stacks at about a tenth of their real value. Two players rending one target each saw their own line as 0-21 damage per second and the other player's as 0-2. Every client rebuilds another player's effect from what it knows about them, and trained skill levels are the one input that never crosses the wire, so the shared calculation fell back to a level-1 floor. The tooltip now uses the skill level that travels with the effect. The damage actually dealt was never affected, and durations always read correctly. Reported on the forums in 2021.
  • A skill's stack limit still belongs to the target rather than to each attacker. Rend allows three bleeds on a target, and that count is shared by everyone attacking it, so a fourth application replaces one that is already there. A change that gave each attacker their own set of three was tried earlier in the day and taken back out before it reached a build: it multiplied what a group does with damage over time by the number of attackers, and it would have done the same for creature packs attacking a player. The complaint behind it was fair, though. A player whose stack was replaced had no way to see it happen, so effect tooltips now name who applied each stack.
  • Effect tooltips now say who applied each effect. A target can carry stacks from more than one attacker, each with its own damage numbers and its own countdown, and the icon merged them into a list of lines that all looked alike. The tooltip now groups them under a heading per attacker, with your own listed first as "You". This is a display change only. How many stacks a skill can hold on a target, which application replaces which, and how much each one hits for all follow the same rules they always have. Effects a creature puts on you name the creature the same way, and an effect from someone who has since left the scene still reads the way it used to.
  • Undead summons now gain health from their summoner's Death Mastery. The health granted to Skeleton Fighter, Skeleton Mage and Lich Fighter read Death Mastery off the summon instead of the summoner, and a summoned skeleton has none of its own, so the whole term came out as zero. Their damage was already reading it from the summoner, so health and damage now scale the same way. At 80 in Undead Mastery and Death Mastery the bonus health goes from 200 to 333, and at 100 in both from 250 to 562.
  • A test now pins the summoner-versus-summon rule across every summoned and tamed creature package. The two forms both push a number, so reading the wrong one gives zero rather than an error, which is how this sat unnoticed.
  • The Deck Editor draws its glyph icons at the size they were authored at again, and the Combos tab shows the two source glyphs each combo is built from. The list code the window shares had been dropping every column a screen authored as a picture, on the assumption a row has exactly one icon; a combo row has three, so the combo icon shrank from 64 pixels to 16 and both source glyphs were not drawn at all, leaving a colon and a plus with nothing between them. A source glyph you have not learned is greyed out again, and hovering one shows that glyph rather than the combo. Deck list and glyph browser icons go back from 16 to 32, the hand slots along the top from 48 to 64, and mail attachment icons from 16 to 24.

Hotbar

  • The key number under each combat glyph is readable again. Every slot hangs its number bracket 13 pixels below itself, the two rows sat 8 pixels apart, so the utility row covered the digits and only the one or two past its right-hand end showed. Each row now reserves its own bracket drop.
  • The move handles in the middle of the two rows line up. The deck-swap slot rode on the end of the combat row and its 60 pixels made that row the wider of the two, offsetting it inside the centred bar and putting its handle 30 pixels left of the other.
  • The swap deck button moved to the bottom right corner of the screen, with the equipped and alternate deck names above it, and it now only appears when you have an alternate deck set. It used to sit on the end of the combat bar whether or not there was a deck to swap to.

Login

  • The "Connecting..." and login queue message was drawing behind the username panel, so you could barely read it and its Cancel button could not be clicked at all. It now sits on top of the panel with a labelled Cancel that takes you back to the login screen.
  • Login status text was hidden behind the same panel. The reason a login failed, the welcome line and the news of the day now show on the panel itself.

Oracle

  • The in-game Oracle now has a second AI service to fall back on. The one behind it sheds load when traffic is heavy, and until now that ended the question outright: the answer never arrived, and the Oracle window printed the raw technical error it got back. Questions now move to the backup service and get answered.
  • When every service really is unreachable, the Oracle now says so in one plain sentence and invites you to try again. The technical detail goes to the server log where we can read it, instead of into the chat window.
  • Three other tools that use the same AI, the character viewer helper, the NPC dialogue service and the wiki assistant, were each running their own copy of the old single-service code. All three moved onto the shared fallback in the same pass.
  • Rewrote the Oracle's What's New guide, which still described the week of July 14, to cover the full two weeks through July 28: the interface themes and Theme Editor, decoration undo and redo with grid snap, the Terrain Leveller, dragon totems, the Obsidian Forge recipes, crafting from lot storage, Search All My Stuff, the community addon store, the Frost and Shock enchants, vendor stat search, the patch notes page, the Mac and Linux clients, and the period's bug-fix sweeps grouped by area. Deployed to the live Oracle service, so asking it what changed lately gets a current answer.

Audio

  • Two fire spell cues were still decoding on first play and landing behind their animation. They now preload with the rest of the gameplay set, which the earlier sweep had missed.

Inventory

  • Take All now empties the container you are looking at. With two or more containers open it took from whichever one you opened first, because every converted window reported the same position in the stacking order and the code picking the front one could not tell them apart.

Testing

  • The tester panel got a time of day section. An hour slider, a Set Time button, a HOLD toggle and a Reset button, plus a live readout of the current New Britannia time. It moves the sky for everyone in the scene instance, which the panel says on its status line, and the same controls are on the browser companion page. Testers can reach night and dawn content without waiting for it.
  • HOLD now holds. The old freeze only stopped the scene from overwriting the hour you picked, so the sky kept drifting forward at about one game hour every two and a half real minutes. The held hour is now the answer everything gets when it asks for the time, so the sky, daytime checks, creature schedules and the addon time API all stay put. The in-game date still rolls over underneath.
  • Swept every open task and bug on the tester tracker and read the comment threads rather than pattern-matching them. Thirteen tasks testers had already passed in plain prose were still sitting open, because the automatic closer only recognises the structured verdict the in-game window writes; those are closed. Twenty-nine carried an unanswered failure report and were still marked Ready to test, which sends people back through work they had already done and written up; those went back to Feedback with a reply naming what was taken from the report.
  • Forty-three verify tasks were live on chaos but had never left New, so they were invisible on the in-game board. The at-deploy sweep only moves a task whose body still says it is waiting on a build, so anything filed after its build went out stayed New forever. Also resolved the last three tasks the sweep could not place, added their carrying commits to the lookup it reads, and answered ten tester bug reports that had gone unacknowledged.

Decorations

  • Words spelled out in the sky over a player town lost letters at a distance, and which letters were missing changed as you walked. Town decorations stop drawing past a distance picked from their size, and the ice blocks the letters are built from measure 0.87 across the diagonal against a 0.75 threshold, so blocks that look identical were hiding at 75 metres and at 40 metres. A decoration sitting at least 15 metres above its lot now uses the 200 metre draw distance a building gets, so a sign holds together.

Housing & Decoration

  • Decoration placement now says why it refused. The validator has always computed a precise reason for every refusal, but the text only existed in developer builds, so players got a red preview and a guess. Every refusal branch now carries a player-facing line, and the one that actually explains the refusal is the one shown. Asked for as D1 on the decorating proposals page.
  • Placement limits name themselves. Hitting a cap used to fail with nothing to read; the line now reads like Interior object limit reached: 1000 of 1000, naming the allowance and both numbers. Part of D1.
  • Multi-part decorations answer the transform keys. Flip, scale and roll have always been refused on decorations built from several pieces, silently, so the keys looked broken. They now say so. The scale keys also say when an item is already at its smallest or largest size, and items flagged as unrotatable say that too. Part of D1.
  • Added a test that fails any future placement rule shipping without a reason, so the mute-refusal class does not come back. Part of D1.
  • Decoration tooltips now name who placed the item and who moved it last, with the time read back as "3h ago" for a recent move and a date for an older one. Both lines existed before and were thrown away whenever the name had not come back from the server yet, which on a first visit to a lot was every time; the names are now asked for as the cursor reaches the item, and the line says what it knows while a name is still on its way. Asked for as D5 on the decorating proposals page.
  • The decoration list gained a Placed By column beside Location, shown to the same people who can already see where an item sits. The Decoration Placement Settings window now says who each access level admits under the dropdown that picks it, and holding Ctrl over a decoration adds a line naming who its level lets move or remove it. Part of D5.
  • Decorating gained undo and redo for moves. Ctrl+Z returns a moved or stowed decoration to exactly where it stood, rotation, scale and parent surface included; Ctrl+Y re-applies it. The history keeps 50 steps and replays each one as an ordinary move through the same update path the drag uses. Asked for as D8 on the decorating proposals page.
  • Undo on a shared lot follows an honesty rule: the moment another decorator changes anything, the history clears with an on-screen message rather than mixing two people's changes. A replay that cannot apply exactly also clears instead of half-applying, and only an item's transform is ever restored, so a permission change made in between is never reverted. Part of D8.
  • The undo engine shipped as a separate tested core before any key was bound: stack semantics, redo, id remapping and the transform-only restore each carry EditMode coverage, plus a ratchet that keeps Ctrl+Z collision-free among the default keybinds. Part of D8.
  • Picking a decoration up into a container is undoable too. Ctrl+Z puts the same item back with its exact spot, rotation, scale and parent, and Ctrl+Y removes it again to the container it went to. Pick-ups that merge into a stack, and removals of items carrying other decorations, stay outside the history on purpose. Part of D8.
  • Town governors and stewards get a Terrain Leveller, in three sizes: 8x8, 16x16 and 32x32 meters. Drop one and the ground across its square levels to the height of the marker, with the grass and trees inside the square cleared. It is meant for the plazas, markets and event grounds a town needs where the land does not cooperate. Asked for as D26 on the decorating proposals page.
  • Lot markers and houses have levelled the ground under themselves since 25 July. This is the same levelling with a handle on it, so a governor can use it anywhere in the town instead of only under a lot. Each leveller costs the town one object, and towns get a leveller cap that scales with their size, from 2 at the smallest tier to 55 at the largest. Part of D26.
  • Ground that rises and falls more than 1.5 meters across the whole square is still refused, and the message now gives you the measured slope next to the limit. The bigger the leveller the more often you will see it, because the limit is measured across the entire square rather than any part of it. Part of D26.
  • Placements are undoable too, from inventory, from a stack, or straight into the palette. Undo sends the item back where it came from, and a container-sourced placement can be redone with the identical item. A stack-sourced placement merges home on undo, which destroys its identity, so that one says plainly it cannot be redone. Part of D8.
  • The deco strip gained undo and redo buttons driving the same history as the keys, greyed exactly when there is nothing to do, plus a small list of your recent changes, newest first with what redo would bring back shown faded. The strip also stays visible while you are stepping back through changes instead of hiding seconds after a drop. Part of D8.
  • The decorating proposals page now shows undo and redo as built, on the card, in the catalog, and in the genre comparison, joining the levelling marker D26 marked earlier today.

Maps

  • Only 3 of the 30 captured zone maps carried the fixes made in July, so the other 27 still had every fault. All 25 surface maps have been redrawn. Seas and large lakes are drawn as water now instead of the ground beneath them: Shores of Malice gained 1,073,887 water pixels, a quarter of the image, and Rhun Ruins 988,040. Seven more zones gained rivers and ponds they never had.
  • The same redraw put back the things the capture camera had been dropping. It was using visibility data authored for a player standing on the ground, read from 50 metres overhead pointing straight down, so whole structures fell out of the picture. The main docks at Graff Island are back, so are the bridges, and the houses in East Vauban Foothills show their roofs instead of the furniture inside them.
  • Ore and cotton are no longer baked into the map images, which is what put marks all over the ground on Vauban Pass and every other zone with gathering nodes. Vauban Pass also lost a 150 metre square of blue water that was lying across its hills, left behind from a stretch of water belonging to another zone.
  • Water over a sunken building was tinted at 82 percent, so a fifth of the lakebed came through and the castle under the East Vauban lake was still readable as battlements. Anywhere the tool can prove the ground is below the surface now tints at 95 percent. Shallow ponds and rivers keep the lighter tint, where seeing the bottom is the point.

Chat

  • The chat window can be moved again and its tabs pull out into windows of their own. Chat is the only window with no title text, so once the tab strip filled the top bar there were about three pixels left that would start a drag; there is a move handle at the left end of the tab line now, and the empty part of the strip drags the window too. Detaching a tab was measuring sideways movement only, so pulling a tab straight down out of the window did nothing. A drag in any direction counts now, and a copy of the tab follows the cursor so you can see where it will land.

Combat UI

  • When a character carries more buffs than the status bar has room for, the extras collapse into a single square with a count. Hovering it listed only the names of the hidden effects, so a bleed that spilled out of the strip lost both its numbers and its countdown. That square now shows what each hidden effect is doing, how much of it, and how long it has left, grouped by who applied it, and the times tick down while the tooltip is open.

Gathering

  • Meticulous Collection pays out again for players who ignore the harvesting swing meter. A hands-off harvest was capped at a single meticulous, and that one handed over no resources, so the extra wait bought nothing.
  • A missed swing at the meter now still pays the pass it ended on. Taking a swing can only extend a harvest and never costs resources you would otherwise have kept.
  • The Meticulous Collection count on the harvest bar carries across nodes of the same resource type instead of restarting at each one. It goes back to zero on a node that gives no meticulous, on a change of harvest type, and on a scene change.
  • The harvest bar reads the swing outcome for its result banner and its counter reset. It had been reading the roll made before the swing resolved, which put both on the wrong pass whenever the two disagreed.
  • The bonus a meticulous pays is an experience item, not just materials. All 144 Meticulous Collection reward tables carry one and none of the 348 ordinary harvest tables do, so every meticulous a hands-off harvest swallowed cost adventurer and producer experience as well as resources.
2026-07-27 · 125 items

Headlines

  • Published a Fire Magic Deep Dive: twenty-four proposals, open for comments and votes at /blog/proposals/fire-magic/. Burning becomes a state you can see, and a new Combust spell spends it.
  • The combat and utility bars stopped sharing number keys in combat. One tester's attack key fired the skinning knife mid fight; each key now has exactly one owner.
  • Every window help button the migration dropped is restored, with the one-time reminders that pointed at them.
  • Finished a full research pass on the new player tutorial: what it teaches, what it skips, how 13 other games do it, and a staged plan to close the gaps.
  • Vendor search now answers "how much", not just "does it have any". Filter for Strength at least 10, sort by the stat, across every vendor in the world.
  • The black bar across the screen turned out to be the overworld tile readout stretched edge to edge. It is a compact plate again, and the Enter Area button it had swallowed is back, so you can enter zones and player towns from the map.
  • A stray [No Ransom] tag was sitting on 867 of the game's 868 locations. It is gone, and a location that ever does put your goods at risk will say so instead.
  • Font settings could be switched off for an entire session. One prefab loading in the wrong order poisoned every font and colour lookup for the rest of the run, and thirteen editor tests were failing because of it. Fixed at the cause, with a test that keeps it fixed.
  • Four Death Magic gear bonuses stopped claiming a 100% baseline on the character sheet, and now show the bonus your gear actually grants. Spell and summon damage is unchanged.
  • Three dead buttons in the top right corner came back: social, Player Guide, and the duplicate Rewards icon that opened nothing.
  • Every weapon in the game has been advertising a damage range twice as wide as it rolls. The tooltip and the combat code carried separate numbers: a Longsword read 5 to 16 against a real 8.25 to 13.75. Nothing hits softer today; the label was wrong and is now right.
  • Books and notes could not be read at all. Their text is written in dark ink for a page that went missing in the interface rebuild, so every book in the game was dark text on a dark panel. The page is back, one per UI skin.
  • Every ward skill was wearing another school's artwork. Air Warding, which grants resistance to air, showed the Earth specialization icon and was indistinguishable from the mastery skill above it.
  • Zone maps stopped drawing the seabed where the sea should be. Graff Island is an island again, and the castle in East Vauban Foothills is back under its lake.

Community

  • Filed five items from the nightly forum sweep: a tradesman work-orders crafting-quests proposal, a request to have Pull from Lot Storage return secondary crafting tools to their container, reusing dungeon-builder deco tech for empty town buildings, per-monitor display/UI settings memory, and a bug report on broken bowl/basket/crate item collision.
  • Recolored the links on this work log from blue to orange, with a yellow hover, so they read against the gold headings instead of fighting them.

Magic

  • Published a fire magic improvement plan: twenty-four proposals covering the whole Fire school, from audio and tooltip fixes to a visible burning state, a new Combust spell that detonates your burns, and combos for the four fire glyphs that have none. The illustrated version is public at catnipgames.net/blog/proposals/fire-magic/ with a comment thread and vote arrows on every proposal.
  • The plan asks for no extra damage. Fire is already the strongest elemental school in our balance audit, so the proposals spend that headroom on depth instead: heat you build by committing to fire and spend at the moment you choose, burns that finally do real work against heavily resistant undead, one honest rule for what fire resistance means, and spell visuals that grow with your mastery.
  • The comparison covered eight games, from Ultima Online's fire fields and hand-timed Explosion combos through WoW's Hot Streak, FFXIV's fire gauge, Path of Exile's ignite economy, Guild Wars 2's combo fields, and ESO's standardized Burning. A fourteen-row capability matrix on the page shows where our Fire school stands today against all eight and where the proposals would take it.
  • Published a Life Magic Deep Dive: twenty-four proposals, open for comments and votes at /blog/proposals/life-magic/. The healing school gets prevention, conversion, and utility instead of another direct heal.
  • The Life page's diagnosis: six of the school's nine spells restore hit points and differ only in dice, Life owns zero glyph combos of its own, and an entire authored spell (Summon Ankh) sits dormant in the data. Eighteen months of community threads contain zero requests about Life magic; the page argues that silence is the finding.
  • Tier 1 of the Life page repairs the healer's hands before any new mechanic: the ally-cycle key that cannot advance past the first ally, overheal that vanishes without a trace, heal text that never scales with size, and a resurrection cast that hides its success odds. Three of the twenty-four cards are open questions with votes, including healing outside the party.
  • Published an Earth Magic Deep Dive: twenty-two proposals, open for comments and votes at /blog/proposals/earth-magic/. Earth is the third school through the process after Fire and Life, and its page starts from a different problem: the school is three buffs on a melee bar. The 2020 mage-builds megathread on the official forum discusses every school of magic except Earth, and the one terrain spell in its 2013 design, Stone Wall, was cut before launch while its skill identifier stayed in the game data. The headline proposal restores it as a placed, destructible wall.
  • The audit under the Earth page found eight real defects and filed them the same day (#2588 to #2595). Among them: the Root spell carries a leftover mount effect that shrinks its target and force-dismounts riders, every summoned elemental levels off the Water specialization by copy-paste error, and Earthquake is the only spell in the game flagged hidden, so its knockdown never shows on a status bar.
  • The Earth comparison ran from Ultima V, whose earthquake left allies unshaken and unharmed in 1988, through UO with Wall of Stone at third circle, EverQuest with the rooting earth pet, Guild Wars and the obsidian tank, ESO with Petrify and its damage budget, Divinity, FFXI, Path of Exile, and Genshin, whose Geo element spent years proving that a purely defensive element goes unplayed. The Earth cards follow the same rules as the sibling pages: mechanics on the page, numbers through the balance program.
  • Reviewed the wording on all nine live proposal pages and tightened two implementation notes, one on the earth magic page and one on the fire magic page.
  • Published a Death Magic Deep Dive: eighteen proposals, open for comments and votes at /blog/proposals/death-magic/. The school of the grave is at its weakest in a grave: undead heavily resist it, its life drains refuse to feed on the dead, and the Lich costs six times normal experience while the community says it is not worth half that. The proposals restore what Ultima Online's own 2003 necromancy retrofit shipped and this school never got: real curses, a corpse economy, and an undead court worth keeping.
  • The audit under the death page found much of the missing school already in the game's files. The summons' life-drain strike is gated on a stat no skill teaches, a second summon-scaling stat has never been granted by anything, the summon health formula reads the wrong character's mastery, and a complete fourth summon, the Skeleton Mage, has been invisible for years because its school field says None. Nine defects filed the same day (#2598 to #2606).
  • The death comparison ran from Ultima Online's Age of Shadows retrofit through Diablo II's curse rules, Guild Wars' contested corpses, Path of Exile's manufactured ones, and Diablo IV's Book of the Dead. The counterplay canon shaped the headline card: a stacking resist strip that fires for every Death mage, not just specialists, and pierces the undead wall at one fifth strength, so warded undead become workable instead of untouchable.
  • Death Field and Discharge stopped claiming a minimum casting distance. Both spells detonate where the caster is standing, so the 5 metre stand-off written into their data described a shape neither spell has, and it told creature AI to hold that distance and refuse the cast up close.
  • Corrected the Death Magic proposal page. Its bug list described Death Field as a ring with a degenerate hole in the middle, which the spell never had, and tied the fix to an unbuilt proposal. The fix shipped on its own and the page now says what was actually wrong.

UI

  • Planned the Crown Store conversion, the last window not waiting on the front end. Reading the prefab first found six behaviors that live only there (description links, the Episode 2 link, both Get Crowns buttons, the search clear button, 22 tooltips, the bundled-item 3D preview click), so the plan opens with a full component census. The shelf will drop 9-per-page paging for a scrolling grid.
  • Moved the shared dim-and-dialog overlay from the shop window base into the common window chrome, so any window on the new interface can put a dialog or a busy veil over itself. The vendor price dialog dim now locks the vendor window only; chat, other windows and the game world stay usable while it is open.
  • Recipe cards at crafting stations and in the recipe book now draw on a framed plate; they had rendered with no backing since they moved to the new interface. The unread-mail and invite counts on the corner buttons draw as a small pill instead of bare text over the icon. Both ride two new shared theme classes the Crown Store cards will use next.
  • Built a shared item icon element for the new interface: art on a plate, a quantity pill, the item tooltip, and a click that opens the 3D item preview where an item supports one. The ransom and loot roll windows moved onto it, dropping their duplicate tooltip code; the Crown Store bundle rack picks it up next.
  • Lifted every rule the Crown Store window enforces into tested standalone code ahead of its conversion: item availability windows and the five-minute selling cutoff, vault round visibility, the search match, the sale-first shelf ordering, the countdown timers with their two-minute warning, sale price presentation, and bundle ownership. Nineteen tests pin behaviors the old window never had under test.
  • Built a virtualised tile grid for the new interface: a scrolling grid of fixed-size cards that only builds the rows on screen, refits its column count when the window resizes, and tells its owner to cancel loading art for anything that scrolls out of view. The Crown Store shelf rides it next; two earlier windows that hand-rolled wrapping grids can move onto it later.
  • Rebuilt the Crown Store category rail for the new interface: the On Sale and From The Vault tabs, the category tree with expanding subcategories, per-tab item counts, and time-window visibility, with every rule extracted into tested code. The rail itself only paints what the rules answer.
  • Built the Crown Store shelf card for the new interface: art, name, price, sale and owned badges, and a countdown line, safe to recycle in the scrolling grid. Item art loads one picture at a time through a bounded queue that loads the newest request first and drops what the player scrolled past, so dragging the scrollbar across a big category cannot pile up hundreds of loads.
  • Built the Crown Store detail pane for the new interface: the picture carousel with mouse wheel support, price with its sale caption, the scrolling description with working web links, the bundle contents rack with click-to-preview on each item, and the Buy button. Two behaviors that lived only on the old prefab survived the move: the description link click and the bundle item 3D preview.
  • Planned the rest of the interface migration end to end: eight batches from this ledger pass through the removal of the old UI framework. Reading the whole tracker against the code fixed six stale rows (the party frame was recorded as unconverted days after it shipped), confirmed the shop window never got its category filter back, and added a numbered teardown checklist the final batch can execute directly.
  • Assembled the full Crown Store window shell on the new interface: search with a clear button, crowns on hand with the gold crown icon, Get Crowns, the Episode 2 notice with a working webstore link, the category rail, the scrolling shelf and the detail pane, plus a loading veil that leaves the close button usable while store rules are fetched. Everything is built and tested; the next step swaps the live window onto it.
  • The Crown Shop opened on the new interface. The nine-item paged shelf became a scrolling grid that loads card art as it comes into view, so a 300-item category is one drag instead of 34 clicks. Search, categories, sale badges, countdowns, the picture carousel, bundle previews and the buy flow all carried over, and the purchase code itself moved unchanged. A stuck store-rules fetch can now be closed instead of trapping the window. Saved window position resets once with this change.
  • Fixed the store button in the corner of the screen not showing its attention dot when a new sale or vault round arrives. It had been dark since the corner buttons moved to the new interface. Opening the shop still clears it.
  • Fixed the Property Manager: moving a lot's stored contents on and off your lots had been broken since the window moved to the new interface. Each deed card now carries three per-lot slots (lot, basement, dungeon) that take drops, start drags, show tooltips and open right-click menus; storage entries drag out again and out-of-town entries appear faded. Three old interface prefabs and four classes retired with the fix.
  • Moved the build info line back to its top left corner. The interface conversion had dropped it into a centered band at the top of the screen, where the compass sat over it and it drew on top of the frame rate readout as one garbled line. A tester reported it the day after it shipped; new editor tests now pin the corner anchoring so it cannot drift again.
  • The compass is now draggable: grab the bracket frame with the left mouse button and put it anywhere. The spot is remembered between sessions, pulled back on screen when the resolution or UI scale shrinks the panel, and the Reset Positions button in Options re-centers it. The text lines under the strip ride along and stay click-through.
  • The one-time help reminders beside the top-right warning icons are on the new interface: damaged equipment, low ammo, and encumbered. Clicking a bubble opens the matching help page and dismisses it for good, past dismissals carry over, and the encumbrance reminder is back after being missing for a few builds. The reset tutorials option restores all of them.
  • The recipe book was still stuck on one page on chaos build 65, which carried both of yesterday's fixes. Client logs from a build 65 session showed a third defect, present since the rebuild: every page turn first saved your place in the book, that save crashed every time on the rebuilt window, and the turn stopped before drawing the new page. The fault sat in the shared base all the rebuilt windows use, so the fix covers every one of them, and page turns now draw the new page before saving. Verified in a live login this time: paging, chapter links, search with and without matches, and reopening to the saved page all work with no errors.
  • Deleted the Crown Shop old-interface leftovers: the shelf tile, category tab and bundle icon scripts, their three prefabs, and a window class no asset ever used. A sweep of every serialized asset confirmed nothing else referenced them, and everything they owned had already moved with the conversion.
  • Closed out the Crown Shop conversion: verified it live in an offline editor session (categories, scrolling shelf, search, details, and repeated open-close cycles), fixed the three defects that session caught, and retired the old interface files. 173 of the 181 tracked interface pieces are now done; everything left waits on the login screens.
  • Four pieces the interface conversions had dropped are back: the shopkeeper window's Sell category filter, sortable column headers on both crafting table lists (with the sort remembered per pane), right-click on the on-screen task list to hide a task or report a problem, and the skill tooltip on hover over the level-up popup.
  • The deck swap button is on the new interface, mounted at the end of the skill bar with the deck names glued above it. Nameplate leader stars are back after being missing since the nameplate conversion: white for a party leader, gold for a guild leader. The vendor search window's Refresh reloads in place instead of closing and reopening itself.
  • Closed five interface framework rows that had been finished in practice for weeks without the tracker saying so (window movement and position saving, stacking, context menus, tweens, and localization), each with a guard test so nothing quietly reopens them. Seven of the fourteen framework rows are now closed.
  • Deleted two verified-dead pieces of the old interface (the deck slot glyph prefab and the nameplate rune icon fallback, both unreachable since their hosts converted) and closed the atlas and font framework rows: converted windows ship standalone textures and TextCore faces, with the two remaining atlas reads recorded as teardown work. Nine of fourteen framework rows are now closed.
  • Fixed names with an ampersand rendering as the literal text amp-code on the new interface: Pets and Mounts, VFX and Fireworks and friends in the Crown Shop categories and the backpack dropdown now show a plain ampersand. Found by getting editor screenshots working on the Mac checkout, which had been written off as unable to capture; the real problem was a hidden Game View panel and no repaints while the editor sat unfocused.
  • The help buttons are back: six windows (skills, crafting, books, lot signs, shops, bank) show their title bar ? again and open the right help page, and the one-time Click for Help reminders show until first use. Books also got their page-turn and table-of-contents reminders back. Past dismissals carry over.
  • Planned the next interface batch: the login form and the offline rewards window. The rewards window only ever uses the login panel as a credential form, so converting the form alone closes that whole window without touching the login flow, and reading the code first surfaced a GM-only toggle and two direct web links the plan now carries.
  • The login form is on the new interface: username and password, Remember User Name, Steam login, the forgot and create-account links, and the CapsLock warning, across the online panel, the offline panel, and the offline rewards window. The login flow itself is untouched, and the automated login paths the build tools rely on are pinned by test.
  • The offline Rewards window is on the new interface, a whole batch ahead of schedule: what actually gated it was the login form converted alongside it, so the claim flow (confirm, log in, connect, result) carried over untouched with the connecting message now drawn over the window itself. Only the login screens and the character appearance editor remain.
  • The overworld tile readout has its scene contents tooltip back. Retiring the old interface underneath it had removed the tooltip along with the artwork, so hovering a tile listed nothing.
  • Three leftover scripts were still reading pieces of the old interface that had already been retired, once every frame each. Between them they were producing about 180 error lines every fifteen minutes, most of the total.
  • The retirement helper now warns by name when it leaves a script holding a piece of interface it just removed, so the next window conversion reports the problem instead of throwing on every frame.
  • An overworld tile whose scene the client has no information for reads as an empty tile now instead of failing partway through drawing the readout.
  • Fishing was missing from the list of skill schools the filter bar sorts through, so opening the deck builder or the glyph collection logged an error for every filter box it built.
  • The overworld tile readout was drawing its plate the full width of the screen. Because that plate paints a backing, it showed up as a black band across the view, and since it lives on the shared game UI it was there in towns and dungeons as well as on the map. The plate now sizes to its contents and hides whenever there is nothing under your marker to enter.
  • The same band had taken the overworld Enter Area button with it. The caption never made it across in the interface conversion, which left the button too small to see, and the full-width plate also blocked the keyboard route into a tile by sitting under the pointer. Clicking and the shortcut both work again.
  • Location banners no longer end with "[No Ransom]". The tag was appearing on 867 of the 868 known locations, so it marked almost every town and adventuring area in the game and told players nothing. A location where ransom actually applies will now carry a "[Ransom]" tag instead, so the banner warns about risk rather than its absence. Reported from The Breach, which read "Tier 15+ Adventuring Area [No Ransom]".
  • The client had a way to lose its font and colour settings for a whole session. The settings were loaded once at startup from a static constructor, and on the client that load asks the engine whether the game is running, which the engine refuses to answer while a component is still being built. If the first thing to touch the fonts happened to be a prefab loading in that state, the load threw, and the runtime remembers a failure of that kind for as long as the process lives, so every font and colour lookup after it threw as well and all the text fell back to plain white. The settings now load the first time something asks for them, and an attempt that cannot run yet is retried on the next request.
  • The need/greed loot roll window was what set it off: its countdown colour was resolved while the window was still being constructed. That colour is now picked up when a roll opens, which is where the window already set it anyway. A new editor test holds both ends of the wire, checking that nothing runs at the font manager startup and that no field anywhere in the client resolves a font or a colour that early. In the editor test suite this takes thirteen unrelated failures back to passing.
  • The social and Player Guide buttons in the top right corner do something when clicked again. Neither carries a click handler of its own, and the handler gets attached a moment after the converted row takes stock of its buttons, so the row had filed both icons as decoration.
  • The corner also stopped showing two Rewards buttons. There are two because one is for online play and one for single player offline, and the game switches off whichever does not apply just after the row was built. The row now follows what is switched on as you play, so anything else hidden on that row is honoured too.
  • Windows the player stacks against each other can be ordered again. The teleport scroll's destination list was opening behind the backpack it was used from, Players in Scene and Social could not be put either way round, and the Options menu let clicks through to the Crown Store behind it. Four windows had never joined the window ordering, so they sat behind everything that had.
  • Long names stay inside their windows. A container name on a window shrunk to its smallest size pushed the pin and close buttons out of the frame, chat tabs ran past the right edge and were cut through the middle of a letter, and a long house description shoved the arrow off the property window. All three came from labels never being allowed to shrink, so the ellipsis they were meant to get never appeared.
  • Books and notes are printed on a page again. Book text is authored in dark ink because the old window drew it on a page texture; the rebuilt window kept the ink and lost the page, leaving dark text on a dark panel. The page is a theme colour, so each of the four UI skins gets its own.
  • Right-clicking an item shows its properties again. The menu was opening and then being torn down two frames later, because the same right-click was also handled as a click on the world behind the window, and that path closes whatever menu is open before showing its own.
  • The emote bar can be dragged. It is shrink-wrapped around its slots, so only a three pixel border and the gaps between icons counted as somewhere to grab; the row holding the turn and close buttons is now the handle. It also keeps itself on screen when the resolution or UI size changes.
  • Direction keys keep working while you place a property marker or a decoration. The backpack search box was still holding the keyboard, and while a text box holds it the game ignores every key but Enter, so the placement rectangle moved once and then stopped with the key presses landing in the search box.
  • Two carried maps can no longer land exactly on top of each other. The offset that keeps them apart came from a counter that handed the same slot out again as soon as any map closed, leaving one map directly under another where no click could reach it. Pinned windows also come back pinned after a restore.

Images

  • From the fire magic proposal page: the loop in one fight. Burn pips appear under the target, heat builds on the right as committed casts land, and Combust trades the burns for one immediate hit.
  • From the life magic proposal page: the healer's screen after the program. Party rows carry heal-over-time and ward marks, the chip line shows attunement and banked Bloom charges, and three stacked Healing Touches preview the spell they would become.
  • From the Earth magic proposal page: the tree as the twenty-two cards would rebuild it. New nodes in green, reworked glyphs starred, and Stone Wall back in the branch it was cut from in 2014.
  • From the Death magic proposal page: the tree as the eighteen cards would rebuild it. New nodes in green, changed behavior on shipping skills in gold, and the authored-but-invisible Skeleton Mage finally placed on a branch.
  • From the home decorating proposal page: the decorator's workbench after the program. A mode row with Select and Align, undo and redo, numbers on every meter, and a status line that finally says why a placement failed.

User Interface

  • Fixed the combat and utility bars fighting over the number keys. In combat a key could fire the utility slot instead of the combat glyph (one tester tried to skin the wolf they were still fighting), and around the start and end of a fight a key could fire both bars at once or neither. Both bars now read one shared answer for who owns the plain number keys: the combat bar whenever it is on screen, the utility bar otherwise, and Shift always reaches the utility row.
  • The combat bar drew its glyphs at 48 pixels, the same size as the utility icons, instead of their designed 56. The rows looked identical and the hand came out about 15 percent small. Each row now uses its own size again, 46 for utility and 56 for combat.
  • Hiding and re-showing the interface disconnected the hotbar from screen changes: after one hide it stopped re-centring on resolution or interface scale changes, and the invisible layer it sits on began catching clicks meant for the world. Both are re-armed every time the interface comes back.
  • The top right corner buttons drew no icons on the newest build: the converted interface loaded art from a short hand-copied list, none of the corner icon names were on it, and a miss was silent. Icons now come straight out of the old interface texture atlas at conversion time, and a missing icon writes a warning to the log.
  • The window selector button did nothing when clicked: its handler still asked the old input system whether a click was in progress, which is never true for the new interface. The same dead check was removed from character rotation on the character, inspect and pet sheets.
  • With auto hide on, the top right buttons hid once and never came back. The row now fades out instead of leaving the screen, so hovering the corner restores it. The community and help icons also render again with their tooltips.
  • The Crown Shop button could go dead with nothing in the log. Window open and close failures now clean up after themselves and record which check stopped them, so a report of a dead button comes with its reason.
  • A long narrow blank window could cut across the screen and could not be moved or closed. It was a window position saved before the window had ever been laid out; bad positions are now refused on save and discarded on load, and the first login cleans up ones already saved wrong.
  • The character sheet lost all of its statistics: the equipment row refused to shrink and pushed the whole stats area below the window edge at short heights. The stats, the Show More button and the adventurer and producer levels on the title are back, and the character picture rotates again.
  • Opened the next stage of the interface migration: the list framework and the input layer, the two shared pieces every converted window still leans on. The reading behind it moved five assumptions the plan had made, and turned up a setting that has quietly done nothing for weeks.
  • The invert-scroll-wheel option turned out to do nothing in any window that has moved to the new interface: it was only ever wired to the old one. Fixing it leads the batch.
  • The Invert Scroll Wheel setting now works in every window that has moved to the new interface. It had only ever been connected to the old one, so switching it on reversed some lists and left the rest alone.
  • Took the old interface out of the shared list code that handles searching and sorting. Those two run on every keystroke and every column click and had nothing to do with drawing, so they were keeping the old library alive in lists that draw nothing.
  • Every window converted to the new interface had been drawing its list twice: the copy you see, plus a complete hidden copy in the old interface that was rebuilt on every refresh. An inventory list showing 28 rows across 6 columns was carrying about 170 old-interface pieces and now carries 13.
  • Right-clicking something in the world now opens the same menu as right-clicking a row in a list. The world was the last thing still using the old menu, so the two had looked and behaved differently since the lists moved across.
  • A confirmation box now takes the typing cursor with it. Before, keystrokes still went into the window behind the box even though you could not see or click it.
  • Closed the list framework off the old interface. The plan had it as a rewrite onto a new list control; reading it showed that was never needed, because converted windows have drawn their own rows for weeks. What was left was the hidden second copy, and that is what went.
  • You can now click a creature or player floating name to target them, and right-click it for their menu. Clicking through a name to whatever is behind it still works, which is why the names stay untouchable to the interface and are measured by hand instead.
  • All 77 converted windows came off the old interface window class. It looked like they needed it; reading what the window framework actually asks for turned out to be five things, so those became a small interface and the inheritance went away. That clears the old window frame, mover and resizer for deletion.
  • The combat reticle turned out to be smaller work than recorded: the markers that follow your target are never actually drawn. They exist to hold a number that feeds the glow on the character, which is the thing you see. The planned replacement would have drawn nothing, so the arithmetic moved out instead.

Housing

  • Published a home decorating improvement plan: twenty-six proposals covering the tools of placement, from failure messages and default keybinds to an undo stack, marquee multi-select, copy transform, magnet snap, a free placement mode, a decorator camera, and blueprints with seasonal layout slots. The illustrated version is public at catnipgames.net/blog/proposals/decorating/ with a comment thread and vote arrows on every proposal.
  • The plan is built on a fresh read of the demand: about one hundred of the three hundred wishlist forum threads posted since January 2025 are decoration asks, and roughly ninety were catalogued for this review, from the July snap-alignment thread to the ten-name access list complaint. One rule holds across all twenty-six cards: tools change how you place, never what you may place. Limits and permissions stay on in every proposed mode.
  • The review also surfaced work that needs no vote: dungeon NPC allowances are computed from the wrong per-point value, six named bowls accept no contents, the placement system already writes a reason for every rejection and then hides it behind a developer flag, and about 1,750 decorations from this month's mirror-flip audit still wait on per-item fixes. Each is carded as a fix or a scheduled workstream in the plan.
  • Entering decoration mode showed no decoration interface on chaos. The strip is back on the new interface: allowance meters with counts on hover, the permissions summary and its options button, the indicators checkbox, and pin and close controls.

Infrastructure

  • The test shard now backs up to a separate machine on the local network. The game database copies every four hours and the whole server copies nightly, both encrypted at rest. Before this there were no off-server backups at all, so a drive failure would have taken the database, the account records and the server configuration with it.
  • Each night the backup is opened and started as a working database on the backup machine, then checked for the expected number of records before the copy is kept. A backup that exists is therefore one that has already been restored at least once, rather than one we assume would work.
  • Backups were built to stay out of the way of play. The heavy work runs on the backup machine instead of the game server, transfers are speed limited and run at low priority, and a four-hour database copy finishes in about five seconds.

Testing

  • The automated test suite is fully green for the first time in weeks: 4,343 checks, no failures. Six had been failing long enough that anything new would have read as "the usual six", so each was fixed at the cause instead of by moving the expectation. Two were real defects. Lot storage cards were drawn shorter than the three lines of text they always hold, so the bottom line was sliced through the letters. And two colours for a selected list row never reached the four alternate interface looks, so a selected row painted with the default look's blue no matter which look you picked.
  • Three of the six were the tests themselves being wrong. One pinned the exact size of a window that had since been resized on purpose, so it now checks the rule it exists for: a container opens clear of the backpack rather than on top of it. Another hand-checks a spell's damage against the audit tool, but only counted damage the spell deals directly, and one of Chaos Bolt's branches deals its damage through a follow-on effect, which left the hand figure 37% under the tool. The frame rate limit setting also had a label that was never registered for translation.

Build & Release

  • The build farm lost its editor licence at the monthly expiry mark, which failed a release: the checks passed and then every client build stopped a few seconds after startup. Renewed the seat and wrote down the symptom, the renewal steps, and which account can actually perform it.

New Player Experience

  • Researched the new player experience end to end. Mapped every teaching beat in the current starting scene and the original Isle of Storms flow, catalogued which game systems are taught, shown, or never covered, and traced how the start changed across releases since 2013.
  • Compared how 13 other games teach their openings and wrote the findings into an internal deep dive with a staged teaching plan and a proposal for short in-game tutorial videos.

Combat

  • Four Death Magic bonuses (Death Ray Damage, Banish Undead Damage, Summoned Death Creature Damage, Corpse Explosion Damage) were built on a different maths convention from the rest of the school, so a character with no gear granting them read 100% on the character sheet while Death Touch Damage and Death Field Power correctly read 0%. All four now use the school convention, and an enchant granting +15% shows as 15% rather than 115%.
  • The old form also meant the bonus was only ever set up for your own character. Read from anywhere else it came back as zero, and because it was a bare multiplier that took the whole damage figure to zero with it. The new form falls back to no bonus instead. Spell and summon damage is unchanged either way; the fix carries a pinned damage figure that fails loudly if it ever moves.

Vendor search

  • Vendor search can now filter on how much of a stat an item has, not just whether it has any: chest armour with Strength at least 10 and Fire Attunement at least 5, sorted by the stat. Results can also be ordered by a stat's value.
  • The stat filter list grew from 40 entries to about 75. Crafting, gathering and taming gear had no filter at all before, so blacksmithing, mining, fishing and taming bonuses are now searchable alongside combat stats.
  • Ten item effects work out their value from whoever is wearing them, so no fixed number can be indexed. Those items still come back from a threshold search and are marked, rather than disappearing from results while the player can see the stat on the item in game.
  • A mistyped stat name in a search now returns an error instead of quietly dropping the filter and returning every item in the world.

Tools

  • Fixed a scene-registry editor field that rewrote itself when drawn. The "Ransom Style" dropdown read a value the code had already overridden and wrote that overridden value straight back, so opening the registry on a location was enough to change what it said. Roughly half the catalogue has been rewritten this way over the years; the field now shows and keeps what was actually set.

Combat

  • Weapon tooltips print the damage range the game actually rolls. The tooltip and the combat roll carried separate sets of numbers, and the tooltip's were twice as wide in both directions: a Longsword read 5 to 16 against a real 8.25 to 13.75. No weapon changed, only the label, so the printed low number rises and the high number falls on every weapon in the game. A test now fails if the two ever drift apart again.

Skills

  • Ward skills carry the icon of the school they ward against. Every ward was showing the specialization icon of the tree it sits in, so Air Warding, which grants resistance to air, wore the Earth icon and looked identical to the mastery skill directly above it. Ward Magic, which wards all nine schools, takes the Resist Magic icon.

Maps

  • Zone map captures stopped dropping geometry and water. The capture camera was reading baked visibility data authored for a player standing on the ground while looking straight down from fifty metres above the scene, which is how Graff Island lost its docks. The pass that draws water was also matching a water system that is no longer in the project, so lakes baked as their own bed and East Vauban Foothills showed its submerged castle. Both fixed; the affected scenes still need recapturing.
  • Gathering nodes stop putting markers on the zone map. A resource carrying quest data was being swept into the map location list as a point of interest, which put ore and cotton pointers across Vauban Pass.
  • Zone maps now draw the water instead of the ground under it. Graff Island was drawn as though the sea around it were dry land, with its docks lost in the same gap, and East Vauban Foothills showed the castle sitting in the bottom of an empty lake basin. The seas and the large lakes are built at run time, so the map tool had nothing to photograph and quietly baked the seabed; it now paints them from the waterline the game itself uses.
  • Fixed the same fault running the other way: river and pond surfaces are flat panels that hang past their banks, and drawing them whole laid rectangles of blue across dry ground. Vauban Pass carried a 150m square of water over its hills, left behind by a panel belonging to another zone. Water on maps is now cut to the land it actually covers, with a carve-out for rivers running downhill, which have no single waterline.
  • Recaptured and shipped the three affected zone maps: Graff Island, East Vauban Foothills and Vauban Pass.