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

2026-07-26 · 190 items

Headlines

  • Forty-five silent NPCs got their voices back, starting with Eugena in Solace Bridge.
  • Nameplates are readable again: the dark edge that kept names legible had been eating the letters instead of backing them, and the text is back to its authored size at every distance.
  • Ten more windows off the old interface in one batch: crafting, the skill tree, the deck builder, the glyph collection, the emote bar, mail and every book and seasonal card. Nine rows left, all of them subsystems.
  • Chat is on the new interface. Log, text box and tab strip all moved together, since the two interfaces stack as whole layers and a half-converted window would not clip to its own frame. Tabs, names, font sizes, channel filters and the pinned state all carry over. Window position resets once. Tearing a tab out into its own window was unavailable for a few hours and is back.
  • The compass got its look back and learned the wind: the fancy lettering and bracket frame returned, and a new arrow tracks the heading flags stream to, with a GM command to steer a whole scene's wind.
  • Published a twenty-eight-item taming improvement plan: pet combat measured against Ultima Online and the pet classes since, pairing an open rebalance of passive pet power, level cap bug fix included, with a pet ability bar, real stances, a revived Veterinarian, and a Bond system, open for comment and voting at Taming Deep Dive.
  • The combat bar is on the new interface, with the combat hand and the decoration strip that share its frame. Five pieces of the old interface left, and only two of them can be picked up on their own.
  • Three proposal pages went up for the gear bench: the enhancement chain, weapons and armor. The headline finding is that maximum durability was never a condition meter, it is the enhancement budget, and a crafted one-handed weapon can absorb five failures in its whole life.
  • Taming collars stop going No Trade for good when a pet dies. The collars players already have stuck in their banks are tradeable again with no action needed.
  • Recipe book fixed for a tester report the same day: its page controls had opened below the bottom edge of the screen at a raised UI size, and a search that matched nothing froze the book on whatever page it was showing.
  • Three crafting table fixes: the item list no longer empties when you filter your inventory, the capacity line stops reporting items that are not there, and choosing a recipe no longer deletes it from the craftable list.
  • The combat bar and utility bar are fixed the same day a tester reported them. Both rows had come up pinned to the left edge of the screen, the combat slots empty, and a second copy of the glyphs stuck below under a permanent cooldown wash. Three separate faults from the day the bar moved over.
  • The in-game HUD is off the old interface, closing the biggest single item on the migration list. Sixteen surfaces moved and no prefab was edited to do it. Four rows left, one of them ungated.

Community

  • Filed a player suggestion from the forums: options to lock and reset UI window position and size after an accidental drag or resize.
  • The work log header now has a Proposals link collecting design proposals that are open for public comment. Each proposal on the inventory page grew its own Discussion box plus an up or down vote (one vote per person, click again to take it back), so feedback on one idea stays with that idea.

UI

  • The crafting station moved to the new interface, the first of the two windows that close out crafting. Recipes on the left as cards showing your ingredient counts live, the table in the middle with the station art, your tool, the batch controls and the progress bar, and your inventory on the right. The window class and its lifecycle stayed put, so everything wired to it, including the close guard that refuses to shut the window mid-craft and sweeps the table back into your bag, runs unchanged. The recipe search box, category filter, Only craftable filter and the lot storage option all carried over.
  • The crafting recipe book followed the station onto the new interface, which closes out crafting: every crafting window is now on the new UI. The book kept its shape, two facing pages, the table of contents, the Crafting Basics pages, chapter pages with category links, and four recipes per spread with live ingredient counts, plus the page turn sound and the page you left it on. The page structure came out as a tested model on the way, which also fixed a quiet defect: jumping to a recipe while a search was active could land on the wrong page. About 36,000 lines of old window data were deleted with it.
  • Groundwork for the skill tree window: the tree layout, tile positions on the grid and the connector pieces that join them, now comes out of the skill graph as plain data with the maths under test, and a new canvas element renders it with pan and scroll. The graph and the auto layout code did not move. The sign convention is the part worth testing: the tree grid grows downward, the old UI flipped it for its upward coordinate space, and the new one must not flip it or every school renders upside down.
  • The skill tree window and its tiles moved to the new interface. Tabs for adventuring and crafting, the schools as a row of buttons, and the tree itself on a canvas you can pan and scroll, with each tile carrying its level, session change, progress, training mode and trainer cost as before. The state machine behind the window, which decides what a trainer will teach you and which school you are looking at, was left alone and now just hands the view its answer. Two defects turned up in the wiring: the old tree told its own panel to become visible, which would have painted a floating copy of the old window over the game, and freshly built tiles arrived with live click zones that the window sweeps at startup, before those tiles exist.
  • Planned the next batch of interface work, and it is chat. The chat window and the NPC conversation window convert together, because both run on the same base class, so porting that once covers both. Reading the code first moved the estimate: message formatting is already independent of the display, and the link parser and chat log that the hardest part needs already shipped alongside the custom NPC story window. Two things the notes called risks are smaller than recorded, and the scrollback limit is one of them. One question gets bought before anything is built on it, whether text fields on the new interface can carry Japanese and Chinese input composition at all.
  • Answered the one question that could have changed the shape of the chat conversion. The new interface text fields can do what item linking needs: rewriting what is in the box and putting the cursor back, from inside the handler that reacts to the edit, runs once, does not loop, and holds through a redraw. So the chat input gets built on the new interface rather than kept on the old one behind a wrapper. Japanese and Chinese input composition turned out not to be a design question at all, because the framework handles it internally with nothing to hook, which moves it from something to engineer around to something a person has to sit down and type at.
  • Rebuilt the bookkeeping behind linking an item into chat. A line being typed exists twice over, as the version the server receives with the full item tag in it and the version in the box showing just the item name, and the old code held those together with two lists of positions nudged by hand on every keystroke. Positions can fall out of step, which is a whole category of bug, so the new model does not store positions at all: a line is a list of runs, each either typed text or one whole link, and both versions are just those runs joined up. Edits arrive as a comparison of before and after, which handles typing, backspace, delete, paste, cut and typing over a selection under one rule, and makes moving the cursor a non-event. The old rules were kept on purpose, including that editing into the middle of a link removes the link rather than leaving a broken one. 29 tests cover it. Nothing is wired to it yet, which is the point of landing it on its own.
  • Wired chat item linking to the new model and deleted what it replaced: 251 lines of hand-rolled position arithmetic became 49. Out with it went the two lists of positions, the frame-late sampling of what the player had selected, and all three checks that existed to spot those positions drifting before they broke something. A line held as runs cannot drift, so there is nothing left to spot. One old annoyance goes away for free rather than being fixed: editing a selection while an item was linked used to throw away the whole line and put it back, because the old code could not work out what had happened. Two edge cases were deliberately dropped and both are in the tester notes, including a stray bracket that could show up on the last item linked in a line. A length check that measured against an empty line instead of the real one is also corrected. Full test suite green against the known baseline.
  • Fixed a colouring bug in the new chat rendering, found while planning the chat conversion and live today in the custom NPC conversation window. A chat line gets wrapped in its channel colour, and a clickable link inside that line splits it into pieces, so the colour opened at the start was being closed at the end of the first piece and never picked back up. The link and every word after it on that line came out plain white. Lines without a link looked fine, which is why it read as a link problem. The fix already existed for something else entirely: the code that lets a book keep its formatting across a page break answers exactly the same question, so it now carries the open tags across the pieces of a chat line as well. Nested colours come back in the right order and a colour the line already closed stays closed. 12 tests, including the bug itself from both sides.
  • Put the chat text box behind a single shared piece. Chat was reaching into the old text widget from about seventy places, but only ever using twelve things from it, so those twelve are now one small contract and the several thousand lines of command parsing, channel routing and history above the box no longer know what kind of field it is. That is what lets the box itself be replaced next without any of that moving. The event wiring got tidied in the process: text, submit and focus arrived in three different shapes for no chosen reason, and are one shape now. Six tests hold the seam shut, checking that the rest of chat never names the widget again. No behaviour change intended, and the full suite is green against the known baseline.
  • Built the chat text box on the new interface. It sits behind the contract added earlier, so the thousands of lines of command parsing and channel routing above it carry on without knowing the box changed underneath them. Two things the new framework has no equivalent for are absorbed here rather than pushed upwards: filtering characters as they are typed, and anything to do with Japanese and Chinese input composition, which the framework handles internally with nothing to hook. It also carries the fix for a problem that would otherwise appear the moment the box goes live, where pressing return to send would also reopen chat on the same frame. 13 tests run against a real live panel, and the first of them exists purely so that a future engine version quietly changing the behaviour this was designed around fails loudly instead. Three of those tests failed on the first run and were right to: an empty box on the new interface has no cursor at all and ignores attempts to place one, which is a trap for every future window that puts the cursor back after rewriting text, so it is written up.
  • Deleted the dead Discord integration out of the chat code. It was built behind two build switches that are not turned on in any build and never have been, so none of it has ever run for a player. That is 24 guarded blocks across the tab, the tabbed window and the chat base, plus three whole classes for a channel list nothing could open, checked by asset id rather than by name to be sure no prefab still pointed at them. About 500 lines gone. Two things stay on purpose: the manager object is still created at startup, so retiring the rest of it is its own job, and the Discord channel type stays alongside each tab saved channel settings, because those describe what an existing player tab filter means on disk and changing them would change the meaning of settings people already have.
  • Pulled the chat tab strip layout out into a tested model: which tabs fit the bar, where each one sits, and which slot a tab you are dragging drops into. It was all arithmetic hiding behind transforms. Three oddities were kept on purpose and each has a test saying so, because a tab bar that quietly reflows differently after a port is the sort of thing nobody reports and everybody notices. The selected tab always shows even when it alone is wider than the bar, and the row of tabs grows rightwards from it before it grows leftwards, which is what makes picking an off-screen tab scroll the row onto it. 13 tests.
  • Container rows in chests and bags printed their contents count twice, in two different formats: a bag holding 21 of 42 read Buildings (21/42) (21 / 42). Two code paths were both writing it. The shared one keeps the job; the table view now only reports containers that have no limit, which is the case the shared one says nothing about.
  • The same duplication one column over: a stack of 12 torches showed (12) after the name and 12 again in the Quantity column. The list rows the table view replaced had no quantity column, so the count was written into the name; the table has one, and now asks for the name without it.
  • Escape opened the Options menu and then would not close it. The input check gives up the moment the pointer is over UI, and the rebuilt Options window covers the screen with a click-catching veil, so every Escape after the first was dropped. The Escape handling now runs outside that check. The confirmation popups, which use the same veil, were ignoring Escape for the same reason and now close too.
  • Bags sort to the top of the inventory again. The UI Toolkit window ran the same comparison the old window did but asked it not to lift containers, and it did not sort at all until you clicked a column heading. Bags now group at the top the moment the window opens, under every column sort including Quantity, and rows with the same name stop swapping places on each refresh.
  • New Show Objects in Containers checkbox under the inventory search box. Ticked, the window lists what is inside each bag alongside the bags themselves, so a whole pack reads as one list. The setting persists and works on chests and other containers; the quick-loot window is unchanged.
  • Finished the chat log on the new interface, ahead of the window itself moving onto it. It now stops at 300 lines the way the old one did, rather than growing a row per message for a whole session, and it only follows new messages down when you are already reading the newest one. Before, scrolling up to read something back on a busy channel was pointless, because the next line to arrive pulled you straight to the bottom again. The copy and translate commands got their line accessors back too, including an old quirk where asking to copy the whole log hands back everything except the oldest line. That is kept deliberately and has a test saying so, since changing it would change what those commands do for people who already use them.
  • Put the chat log behind the same kind of contract the text box got earlier, so the window can swap the old view for the new one without the chat logic above it changing. The part that drops a linked item into what you are typing is not drawing work, so it stays where it is and runs the same on both paths. Also added the way chat will ask which of its windows is in front: the old answer comes from a part of the old framework that a converted window never builds, so it would have failed outright the moment chat moved across. 20 tests.
  • Built the chat window itself on the new interface: the frame, the tab strip, the message log, the text box and the channel prompt, assembled into one piece. Nothing uses it yet. The next step is the one players see, and keeping it separate means that step is a wiring change rather than a wiring change plus a new window arriving at the same time. The tab strip is the first real user of the layout rules pulled out earlier, and it has to work differently to get the same answer: the new framework only knows how wide a tab is after it has laid it out, so the strip draws them all, measures, then hides the ones that did not fit. Two smaller things were caught on the way. The window would have opened refusing to shrink as small as it used to, because the shared frame has a larger minimum than chat was built with. And the fade that hides chat when you stop using it asks whether the mouse is over the window, in a way that only understands the old framework, so left alone it would have faded the window out from under your cursor. 15 tests.
  • Wrote the piece that retires the old drawing from a converted window without taking its scripts with it, ahead of chat switching over. Two mistakes are easy to make here and both have bitten before. Sweeping the old panels alone leaves the individual widgets behind, and a leftover widget builds itself a fresh panel the moment it wakes, so the interface you just retired comes back. Going the other way and deleting whole objects takes working code with them: on a chat tab, the thing that opens the tab options window sits underneath a piece of decoration, so deleting the decoration deletes the options window. It now deletes objects that are nothing but drawing and strips the drawing off everything else in place. 9 tests. Also finished the last two seams chat needs, so the switch itself is a wiring change. One of them settled a real ordering trap: the window, the chat logic and the log view all start up on the same object in an order the engine does not promise, so none of them can ask whether the new interface exists yet and get a stable answer on the first frame. A message arriving in that gap would have been drawn into things that had already been deleted. They now all ask the same fixed question instead.
  • Chat is on the new interface. The log, the text box and the tab strip had to move together, because the two interfaces stack against each other as whole layers, so a half-converted chat window would not have clipped to its own frame. It now has the same frame, title bar, pin and close button as the other rebuilt windows, and resizes from the corner grip. Your tabs, their names, their font sizes and the channels each one shows all carry over, and so does whether the window was pinned. Window position and size reset once: the old and new frames store that in different coordinate systems, and reusing the old numbers would have put windows in the wrong place, which is worse than starting from a default. Set it once and it stays. One thing is temporarily missing and is next: dragging a tab out of the window to make a second one, or onto another window to merge them. Reordering tabs inside a window works.
  • Four things would each have broken chat on the first frame, and are worth writing down because three of them are traps for every window still to be converted. Asking which window is in front reads a piece of the old framework that a converted window never builds, and it fails outright rather than returning nothing: seven places asked. Pressing return to send also re-opened chat on the same frame, because the input gate deliberately lets return through so other windows can use it to confirm. The fade that hides chat when you stop using it asks whether the mouse is over the window in a way that only understands the old framework, so it would have faded the window out from under your cursor. And the six chat windows would have shared one saved position between them and stacked on top of each other. 14 new tests, four of which run the real teardown against the real window and tab files, which is the part nothing else would have caught: strip too little and the old window draws over the new one, strip too much and the tab options window loses the thing that opens it.
  • Closed the chat window and chat tab rows on the interface migration list, which closes the chat area of it. The tab row had two things recorded against it that turned out not to exist: there is no per-tab unread marker and no per-tab scrollback anywhere in the chat code. A tab is a filter, a channel to send on, a name and a font size, and one log serves the whole window, so switching tabs re-derives the view from the shared history. That is why the tab folded into the window instead of being its own job.
  • Reviewed the inventory system against Ultima Online and the modern games that solved bag management, and wrote a sixteen-item improvement plan: search that understands weight, value, durability and item state, a column picker, one-row category tabs, quick deposit into matching chests, junk marking with a sell-all button at merchants, and container colour tags among them.
  • The full illustrated proposal is public at catnipgames.net/blog/proposals/inventory and takes comments with no account needed. Tell us which of the sixteen you want first.
  • Restored the compass strip's authored look after the UI Toolkit port dropped it: the fancy font is back on all four text lines, the zone line went back to its authored 20px size (the port had it at the theme's 16px, which is what made town names and POT sizes read small), the black halo behind the text returned, and the bracket frame draws around the strip again.
  • The Solo/Private/Offline line under the compass is back; the port had left it writing to a widget that no longer existed.
  • New wind arrow on the compass: it sits at the heading the wind blows toward, the same heading flags stream to, parks at the strip's end when the wind is behind you, and shows the wind strength on hover. Outdoor scenes only.
  • Chat tabs keep their width when they are selected. Clicking a tab collapsed it to the width of its small options arrow while the name went on drawing at full length, so names spilled over the tabs either side and several ran together into one unreadable line. A tab now carries its name in its own label, and every tab reserves room for the arrow whether or not it is showing, so the row no longer changes shape as you click through it.
  • Two more fixes in the same tab row. A long tab name is shortened with an ellipsis instead of pushing every other tab off the row, and dragging a tab to reorder it drops it where you let go. Drop positions had been worked out as though every tab were the width of the one being dragged, which held while a tab was a fixed-width sprite and stopped holding once tabs sized to their own names.
  • Added a test for the rule the bug broke: a tab may not carry both its own text and child buttons. The tests that already existed described the shape that caused it, and never ran a layout pass, so there was nothing for them to catch.
  • Fixed the name floating above player vendors, which had shrunk to about a tenth of its size and read as a smudge at any normal distance. The label is built at load from the old one, and the new text renderer scales world text down by a factor of ten unless it is told the size is already in world units. Every hand-authored label in the game says so; the ones built at load did not. Names over cash registers and placed deco pets came back with it. Character and creature plates were never affected.
  • A tester found the new recipe book stuck on one page. Its back, forward, last-page and contents buttons all sit in a row along the bottom of the window, and the book opened tall enough that on a 768-pixel-tall screen with the UI size setting at 1.25 that whole row landed 86 pixels below the edge, with the window too tall to drag up and nothing else in the book able to turn a page. The book now sizes itself to the interface area instead of the display, and every window is pulled back on screen when it opens or when the interface area changes, so a window whose saved size came from a bigger screen can no longer strand its controls out of reach.
  • The recipe book also froze on a search that matched nothing. A filter collapses the book to matching recipes only, so a word none of your recipes contain left it with no pages at all, and the window drew nothing for that case: the old page stayed up, no message said the search came up empty, and the page buttons still looked live. An empty result now clears the page, says so, and greys the buttons. The book search matches the same text the crafting table filter matches, including the name of the item a recipe makes, and both now ignore stray spaces.

Audio

  • Forty-five NPCs who had never spoken a word now have their voices. Eugena in Solace Bridge was the one reported, but the same fault covered most of the Estgard and Harvest townsfolk, the Artifice barkers, three children in Resolute, two Superstition Canyon mages, Emilia in Sanctus Spine, Arnice DeMalo, and the Forgetful Ghost. Their audio was recorded under the wrong name, so the game asked for a voice that was filed somewhere else and heard nothing back.
  • Added a guard on the casting tool so this cannot come back: it now reads an NPC prefab the way the game does, and a whole-tree sweep checks that every voice is filed under a name the game will actually ask for.
  • Fireflies and Clumsy now play a sound when you cast them. Neither skill had any audio authored on its effects, so both were silent every time regardless of how often you used them.
  • The fix gave each skill its own cast effect rather than adding sound to the buff effect they share with Absorb Impacts, Reckless Stance, Taunt and the armour bonuses, which would have handed the same noise to all of them. A test now holds that shared effect silent. Enfeeblement is silent for the same reason and is on the list.

UI Toolkit

  • Ported the shared hand-slot rendering (the icon, the two cooldown rings, the hotkey caption, the reagent counter, the stack count and success chance, and the mastery badges) to the new interface behind a per-prefab opt-in, so the deck builder's slots can move while the combat hand and the hotbar's ten icons stay untouched. Opting a slot in also drops the two cooldown sprite objects it used to create and stops its readouts refreshing at all while its window is closed.
  • Rebuilt the deck builder on the new interface: deck name, glyph and slug counts, the ten hand slots with their assigned-glyph stacks and padlocks, the glyphs in the deck, the glyph and combo browser, and linked equipment. Every drag that worked before still works, including dragging a whole selection at once, and right clicking a glyph in the deck still takes it out.
  • Rebuilt the glyph collection window on the new interface, with the school filter gaining All and None buttons. Both it and the deck builder now render their lists through one shared piece of code instead of each restating columns, colours, sorting, tooltips and drag; hovering a row finally shows the full glyph tooltip rather than just its name.
  • Rebuilt the emote bar on the new interface as a strip you can drag anywhere, turn between upright and along the bottom, and put away. It remembers where you left it and which way round it was. The main hotbar shares the same slot code and is deliberately untouched: the rendering port is opted into one prefab at a time, and a test holds the hotbar to that.
  • Rebuilt the mail window on the new interface: the inbox and the piece you are reading side by side, then the recipient picker and the writing screen. All of the rules stayed where they were, including sending one copy each to several people at once, the per-recipient fee, and the item and gold limits. The two discard prompts now use the same confirmation box as the rest of the game, Always Discard included.
  • Rebuilt the book window on the new interface, which covers books, letters, sheet music, lot decoration logs and every seasonal card at once, since all eleven share one script. Reading, chapters, pictures, writing a book by hand or loading it from a file, and publishing all work the way they did; the page layout itself is untouched, so a book breaks its pages exactly where it used to.

World

  • Monsters in six player dungeon rooms could not move once they appeared. The Hilt Basement spider room had 16 of its 33 spider spawn points sitting off the walkable ground, and the Ravensmoor lich room, The Fall throne hall, The Rise dog room, The Rise library and the Lyceum room had almost no walkable ground recorded at all. The walkable ground for all of them has been rebuilt, so spiders chase from where they appear and monsters in the other rooms can path across the whole room.

Tools

  • The player dungeon navigation baker was rebuilding walkable ground from where a room used to be. Ten room pieces are authored rotated or offset, and the baker moved them to the origin without letting the physics system catch up first, so it recorded ground for the old position. Rooms that happened to be authored square were unaffected, which is why it went unnoticed for so long.
  • The NPC voice casting tool now keeps a voice with the character it was cast for when a name stops covering both sexes. Previously the remaining character could inherit the voice belonging to the one that moved out, which is how a boy ended up cast with a female voice.
  • Turned the inventory proposal work into a repeatable playbook: the research recipe, the page format, the build tooling, and the discussion and voting machinery are all captured, so the next system that needs this treatment gets it in a fraction of the time.

Testing

  • Read back through every tester verification task the last deploy sweep had marked ready to test and found 53 where the testers had already run the pass and reported the change still failing. Those tasks are now set to Feedback with a note on each one, so nobody is asked to redo work they already wrote up.
  • The at-deploy sweep now reads the comments before it announces anything. A task is held back when the newest tester comment came after the fix was written, reads as a failure report, and nobody has answered it yet. Held tasks are listed with the commenter and the failing line instead of going out to testers.
  • The chaos deploy now tells the testers itself. Marking verification tasks live was a hand step that only happened when someone was there to do it, which is how one nightly release left 39 tasks hidden from the board. The deploy script does it at the moment the build goes live, and a background check every fifteen minutes covers anything that path misses.
  • The in-game task board only ever showed the newest 100 open tasks, so with 376 open the rest had no way onto the screen. It now lists tasks by number, and typing a task number in the filter box pulls that task from the tracker even when it is not on the page.
  • The board also reordered itself whenever a batch of old tasks got commented on, which pushed the newest testing directives off the one page it holds. Sorting by task number instead keeps new work at the top.
  • The board's one-minute refresh used to clear the list, throwing away every row loaded with Load more. It now folds the fresh page into the rows already on screen, so what a tester loaded stays loaded.
  • Worked the whole tester bug queue, 55 reports that had been sitting without a reply, the oldest since the 11th. Seven turned out to be already fixed and closed against the check that covers them, one was withdrawn by the testers who filed it, and every one of the rest got an answer saying what we understand the report to be and that it is still open.
  • Two merchant window checks went back to us rather than out to testers: a report filed against the current build lists several problems with that window, so asking anyone to test it again first would have wasted their time.
  • The thirteen tests on the rebuilt bar all passed while it was drawing in the wrong place with nothing in it, because every one of them read a setting off an element that was never laid out. Added a test that mounts the bar in a real panel and asserts where it actually lands, and another that drives the slot and checks the element changed rather than checking the element in isolation.

User Interface

  • Fixed floating nameplates drawing their names as dark smears. The black edge that keeps a name legible over bright scenery was being drawn inward from the letter edges, and at nameplate text sizes it filled the letters in completely; it now sits behind the letters the way it originally did, so colour tinted names on pets and friendly players read properly again.
  • Nameplate text is back to the sizes originally authored for it. The name, title and guild lines had all been drawing smaller than intended, and the whole plate shrank as you walked toward it, so a nameplate now holds one apparent size at every distance it is visible at.
  • NPC conversations moved to the new interface. The window carries the same conversation log, text box and topic buttons, plus the goodbye button and the buy, bank, mail or training button an NPC offers. It can now be dragged and resized and remembers where you left it, where before it was fixed to one spot.
  • Every topic the NPC has is still there and in the same order, with the ones you have not asked about yet first. Clicking a topic inside the conversation text works again as well.
  • Dragging a chat tab out of a window, or onto another window, works again. It had done nothing since the chat window moved across. A tab dragged out keeps its name, text size, channels and the channel it sends to, and dropping one onto another window now merges it whatever the tab count is instead of only when the window had a single tab left.
  • Planned the next stretch of the interface migration: the main in-game HUD, the last big piece that nothing else is waiting on. Reading the file it lives in moved three of our own notes about it, including that the targeting reticle it was supposed to contain is somewhere else entirely.
  • Found a bug while planning it. Hiding the interface for a screenshot fades the old interface out, and pieces already moved to the new one do not fade with it, so the charge bar, combat bar, equipped deck, party list and a few others have stayed on screen and kept swallowing clicks. That gets fixed before anything else in this stretch converts.
  • Hiding the interface for a screenshot now hides all of it. Parts of the interface have been moving to a new framework, and anything already moved was ignoring the hide key: the glyph charge bar, the combat bar, the equipped deck, the party list, the timers and the centre message banner all stayed on screen with everything else gone, and kept catching clicks meant for the world behind them.
  • The fix sits in the shared window base rather than in each piece, so the roughly ninety-six windows and overlays on the new framework all pick it up, and anything converted from here on gets it without anyone remembering to ask. A test now fails the build if someone adds a new one that neither inherits the behaviour nor opts out on purpose.
  • One case that needed handling on its own: hiding the interface while typing in chat used to be able to strand you, because the text box kept keyboard focus, hidden text boxes cannot be clicked away, and holding focus swallows the key that brings the interface back. Hiding now releases that focus.
  • Pulled the shared arithmetic behind the HUD progress bars into one tested piece, ahead of moving the casting bar, the free attack bar and the harvesting bar over. Six bars on screen use it and none of it had ever been covered by a test.
  • Writing the tests turned up a marker fade that has never worked the way it reads. The code zeroes the marker out at the very bottom of the bar and then immediately overwrites that with a calculation that goes negative there, so the first line has never once run. The old renderer treated a negative value as invisible, which is what the dead line was for, so nothing looked wrong and nothing changes now, but it is written down.
  • The casting bar and the melee attack charge bar are on the new interface, the first two pieces of the main HUD to move. Both keep everything they did: the spell name and taming chance, the separate colours for a normal cast, a cast you can move during and an interrupted one, the pause before an interrupted bar fades, the per-tick marks and tick sounds on the attack bar, and the instant disappearance when a charge is cancelled.
  • The tick dividers on the attack bar were being placed by mixing two different coordinate systems, so where they landed depended on your interface scale. They are evenly spaced along the bar now whatever the scale.
  • The control point capture meter, the resurrection shrine meter and the death countdown moved to the new interface. With the casting and attack bars, the whole strip above the hotbar is now off the old one.
  • All three hid themselves through a call that fades the old interface panels underneath them, which does nothing once those panels are gone. Left alone it would have pinned all three permanently on screen with nothing in the logs to show why, so hiding now goes through the new view instead.
  • The death countdown needed care for a different reason: it is not only a readout. The same code that draws the seconds is what sends you back when they run out, so it keeps running whether or not it is on screen.
  • The harvesting bar is on the new interface: chopping, mining, fishing, filling a bucket and breaking things open all draw through it. It keeps the success chance line for resource nodes, the meticulous collection streak and its list of what you accumulated, and the pause an interrupted gather takes before fading.
  • It reuses the casting bar built two days earlier rather than getting its own, since it is the same widget underneath. The only thing it needed adding was a second line under the name for the success chance, which hides itself when there is nothing to show.
  • The floating damage and healing numbers moved to the new interface, which closes their own line on the migration list. They keep the same rise, fade, scatter and colours, still follow a moving target, and still turn off with the nameplates option.
  • This was the one piece of the HUD that has to work out where a point in the world lands on your screen every frame, and it needed nothing new: the same helper the nameplates already use does the job, and all the numbers share the one drawing surface the nameplates share rather than each target getting its own.
  • One thing did have to change shape. Numbers are recycled rather than created fresh for each hit, and a recycled number moves between targets, so it now re-homes itself onto the current target every time it plays. Getting that wrong would have parked damage numbers over whoever you hit first, which only shows up in a fight with more than one thing in it.
  • The overworld readout moved to the new interface: the name of the place your marker is standing on, its description, the tooltip listing what is inside, and the button that takes you in. Scenes closed for repairs still say so and still cannot be entered.
  • It is the first piece of this stretch of HUD work you can actually click, which flips the rule the others follow. Everything converted so far deliberately ignores the mouse so a click reaches the world behind it; this one has to catch the mouse for its button and its tooltip, while the text inside it stays out of the way.
  • Your own health and focus bars, your target bars and your pet bars moved to the new interface. Name, title and guild line, the flash when you take damage or heal, buff icons, target name colours, and pet follow and attack state all carry over unchanged.
  • Dragging them is untouched on purpose. The drag still works the old way and your saved positions still load, so the new drawing pins itself to whatever the old drag moves. That bridge comes out when the drag itself converts.
  • One trap caught before it shipped: the routine that clears away old interface pieces also removes the invisible click targets underneath them, and the click target under each bar is exactly what dragging tests against. Using it here would have killed dragging with nothing in the logs to explain it, so these three use a narrower cleanup, and two tests now hold that line.
  • Closed the first half of the main HUD work. Eight things came off the old interface: the casting bar, the melee charge bar, the control point meter, the resurrection shrine meter, the death countdown, the harvesting bar, the floating damage numbers and the player, target and pet status bars. The damage numbers close their own line on the migration list.
  • The premise this stretch was scoped on held: not one prefab was edited. Every piece of the HUD turned out to be the only copy of itself, so switching each one over is a line of code rather than a change to the 43,000-line file everything else shares. That kept the file everyone merges through completely untouched.
  • Still to come in the second half: the icon rows in the top right, the equipment status panel, the frame rate and build labels, the drag rewrite for the status bars, and the component that wires the whole interface together.
  • The in-game HUD is off the old interface. The rest of it followed the bars: the equipment and encumbrance warnings, the mail, ransom and friend notices, the network trouble warning, the button row that slides in at the top right, the frame rate meter, the build label and the housing message banner. Dragging your status bars around also came off the physics system it was using to work out what you had grabbed.
  • That closes the biggest single item on the migration list. Four rows are left and only one of them, the Crown Store, can be picked up on its own; the rest wait on the login and character select screens, which go last because login must never break.
  • Some of that prefab stays on the old interface on purpose and is a different piece of work: the contextual help pop-ups, the party frame, the ninety window registrations, the cameras and character model rigs, and the master switch that still hides all of it when you hide the interface.

Crafting

  • Fixed the Use lot storage checkbox on crafting tables, which drew above the recipe list but never took a click. It sat one row below the header divider, inside the recipe list background, which won the click instead. The checkbox row is now anchored to the header the way the rest of that header already was, so it also stops sliding down over the recipes when the window is resized. The label beside it now hides along with the checkbox at a station that is not on a lot.
  • Published a crafting improvement plan: twenty-two proposals covering the station window, the recipe book, and the recipe system, measured against Ultima Online, Star Wars Galaxies, Final Fantasy XIV, World of Warcraft, Elder Scrolls Online, Guild Wars 2, and New World. Seventeen are client-only changes that need no server work.
  • Highlights: the station answers instantly when you change the table instead of waiting on the server, Craft Again and Make Max buttons, a visible craft queue, search that understands ingredient and result names, a full materials breakdown on any recipe, and bulk salvage that respects item locks.
  • The illustrated version is public at catnipgames.net/blog/proposals/crafting with a comment box and vote arrows on every proposal. Tell us which to build first; each crafting school gets its own deep dive later.
  • Published a deep dive on the masterwork and enchantment chain at /blog/proposals/enhancement/, eighteen proposals with a vote and a comment thread on each. The audit behind it found that maximum durability is really the enhancement budget: every enhancement spends it, every failure spends 25 of it permanently, repairs never give any of it back, and the bench refuses to work below 30. A crafted one-handed weapon can absorb five failures in its entire life, so the ten-effect ceiling the system advertises has never been reachable by anyone.
  • Published a weapons deep dive at /blog/proposals/weapons/, thirteen proposals covering what is specific to weapons rather than the shared bench. Enchanting a bow, a crossbow or a shield currently offers three choices drawn from eleven, and all eleven are attributes whichever of the nine gems is spent. Both archery enchants in the game are fitted to swords, maces, spears and wands instead of anything that fires an arrow. Forty-eight unique weapon parts ship with their bonuses already written and no recipe makes a single one of them.
  • The armor deep dive and the weapons deep dive were written the same day and reached the same conclusions about the bench they share, so the duplicated proposals moved into the new enhancement chain page and the two content pages were trimmed to what is actually theirs. The armor page published earlier today as twenty proposals now carries seven, covering the worn suit: which pieces count toward the set bonus, the cliff where a broken piece protects for nothing, and what each piece is contributing. The weapons page carries thirteen. Nothing was dropped; the shared eighteen are all on the new page with their own votes.
  • Filed eight defects found while auditing weapons. Among them: the weapon tooltip advertises a damage range twice as wide as the one combat actually rolls, so a longsword that reads 5 to 16 really rolls 8.25 to 13.75; and the crafted-effect section of an item tooltip decides what is a masterwork and what is an enchantment by matching English words, so the grouping and the failure tally quietly collapse on the Japanese and Chinese clients.
  • The crafting table's item pane no longer empties when you narrow the Show dropdown on your own inventory. Both panes were wired to one category filter and only the inventory pane had a control for it, so choosing a category hid the table's contents while the Capacity line went on counting them.
  • The crafting table's Capacity line now clears when the station releases the table. It was reading back the last text written to it, so a pane that had already gone blank could still report three items sitting there.
  • With Only craftable ticked, choosing a recipe no longer removes it from the list. Choosing a recipe moves its ingredients out of your backpack onto the table, and the filter counted the backpack alone, so the recipe you picked and everything sharing its materials dropped out. The count includes the table now, and the recipe card stops reading 0 / 3 for ingredients sitting in front of you.
  • Choosing a recipe twice inside the 0.4 second double-click window now runs one staging pass instead of two overlapping ones emptying and refilling the same table. Staging reports itself in chat as well, with the number of items moved and the recipe name.
  • Use lot storage now appears at every crafting station, greyed out with a tooltip where it does not apply. It used to hide itself, which read as a missing feature. Seven crafting strings that had never been registered for translation went into the source database at the same time.

Oracle

  • The Oracle kept answering as though a reported problem had never been reported. It could only see one of the tracker's four project areas, so it was looking at 475 of 2,302 reports. It now searches all of them: one test query went from 1 result to 38.
  • Asking the Oracle about a report by its number could never work, because the search it ran does not match on report numbers. A number is now a direct lookup.
  • The Oracle also skipped closed reports, so anything already fixed came back as never reported. Closed reports are usually the answer to "is this known", and they are included now.
  • When the Oracle cannot search at all it now says so, rather than reporting that nothing matched. The two came out as the same sentence before.
  • The daily cap on Oracle bug reports is gone on the live service. The cap was removed in the code on 20 July, but the Oracle runs as its own service and had not been updated since 17 July, so players were still stopped at 5 reports a day. Testers reported hitting it, and the counters confirmed one player stopped at exactly 5 earlier that day. The service is now up to date and neither the per-player nor the service-wide daily limit applies.
  • The Oracle can find reports that already exist. It searches all four project areas instead of one, treats a bare report number as a direct lookup, and includes closed reports. Its view of the tracker went from 475 reports to 2,334.
  • Raised the ceiling on how much work the Oracle can do across all players in an hour, from 600 to 1500. The ceiling counts reasoning steps rather than questions, and a question can use up to 8, so the old value could be spent by roughly 75 to 150 questions and then answer everyone with a busy message.

Launcher

  • Read the automatic crash reports for the current build. The one crash wave in the whole store was last night's build, already fixed and shipped; the current build came back clean, with a 75-minute session and no errors at all. Details below.
  • Every crash report the Linux client has ever sent was a false alarm - 25 of them, one per launch, and 20 ended with a completely normal quit. The launcher decides a session went badly when the game left no clean-exit marker, and on Linux it was never finding the settings file that marker lives in. It now checks the places that file can be, records which one answered so the next report says so outright, and treats an unreadable settings file as "we do not know" rather than "it crashed".

Client

  • Pulled a day of shard logs and de-duplicated them: 182 error lines collapsed to seven distinct problems. Splitting them by client build did the rest of the work, since the two oldest builds accounted for 179 of those lines across 29 sessions and the three newest for one line across 21. Three of the seven were already fixed and just had not reached those clients yet.
  • Fixed the four that were left. A window resize handle could throw partway through a drag on windows with no resizable parent, dungeon room links stopped being built when a doorway sat outside the navmesh, and a half-built link then threw on every navmesh update for the rest of the session.
  • The floating name labels over vendors, registers and pets were logging a missed typeface lookup 258 times a day. The registry loads from one place and the nameplate prefabs from another, so each held its own copy of the same font file and the lookup compared them by identity. It only ever worked because the fallback happened to be the row it failed to find.

Images

Roadmap

  • Re-synced the public roadmap page against what is actually running on the test shard. It had not had a content pass since July 8 while 358 commits landed, so it was promising work for October that players have had for weeks. Done now went from 12 items to 22, split under Platform and In the game headings.
  • The whole-game interface rebuild got its first entry on the page. 157 of 181 screens are converted and it has been on by default with no opt-out for a while now, but the roadmap had never mentioned it.
  • Replaced "German and Portuguese translations complete" with the eight languages that ship today: German, French, Spanish, Italian, Portuguese, Russian, Simplified Chinese and Japanese. Re-measured the database to check the claim first, and NPC dialogue is 66,792 of 66,792 lines in every one of them.
  • Bumped "100+ bugs and exploits fixed" to 300+, which is the 304 bug reports now closed on the tracker. Tavern games and community add-on sharing moved out of the future list, where both still read "In development now" long after they shipped.
  • Added Done entries for the native Linux and Mac clients, automatic crash reports, search all my stuff, the gathering mini-game, the tip jar, ground levelling for lots and houses, and paired dancing.
  • The October list dropped from 7 items to 5. Three of them stayed put because they have not shipped: the priority-one combat balance pass, self-service player support, and crash alerting. Crash reports already arrive on their own, so that one split into a Done entry for the reports and an October entry for the alerting on top.
  • Checked every Done entry against the build the shard is actually running before publishing, since that tab promises everything on it is playable right now. Today's commits, including the chat window, are described as October work instead.
  • Corrected three internal docs that contradicted the new page: four "not on chaos yet" notes for features that have been live since build 58, a note claiming the /balance client had never shipped when it went out on June 25, and a translation coverage snapshot whose "nothing is stale" and "the gap is all books" lines had both stopped being true.

Images

  • The weapon enchant line with the squares in agreement, left to right Ignite Weapon, Frost Weapon and Shock Weapon. Blue square on all three because all three are self buffs, with the school colour still on the circle inside: red for Fire, icy blue for Water, yellow for Air.
  • The chat tab row with the fix in. Universe is the selected tab, carrying the options arrow, and every name sits inside its own tab.

Gameplay

  • A player spotted that the three weapon-enchant glyphs carry three different square colors. The square tells you the skill category, and blue means a short-term self buff, so all three should have matched. Frost Weapon and Shock Weapon had shipped with the red square used for attacks. Both are blue now, with the school color still on the circle inside.
  • Wrote down the glyph color convention, which had never been recorded anywhere: the outer square is the skill category and the inner circle is the school. Nothing at runtime sets the color, it lives only in the texture, which is how the two new icons drifted without a build or a test noticing.

Alchemy

  • Published an alchemy and consumables improvement plan: twenty-eight proposals covering potions, food, and brews, measured against Ultima Online, World of Warcraft, Elder Scrolls Online, Final Fantasy XIV, Guild Wars 2, Path of Exile, Albion Online, and RuneScape. Fourteen improve the existing system, fourteen are new consumables specified in full detail, and twenty-one of the twenty-eight are data-only changes.
  • Audited the power of all 533 consumables from the shipping game data: chain drinking is capped at two and a half potions of value by the sickness system, no consumable grants Chaos Resistance, and one aged whiskey is the only gathering buff in the game.
  • Costed every major consumable family at merchant prices: a crafted Recall Scroll costs 131.6 gold while the vendor sells one for 100, most cooked dishes cost three to fifteen times their own vendor price to make, and three stocked reagents are used by zero recipes.
  • The proposed new shelf: exceptional-tier potions that stack and slot like normal ones, a potion-enhancing jewelry enchant, weapon oils, gathering draughts, a once-a-day study tonic, the first pet meal, and a cask that matures into forty health potions on the brewing rail. Every proposal has its own comment thread and vote arrows on the public page.

Interface

  • Planned the next stage of the interface rebuild: the combat bar and the combat hand, the two pieces you look at during every fight. They share one prefab and point at each other, so they were always going to move together.
  • Most of that work turned out to already be done. The slot drawing that replaces 29,698 lines of old interface art shipped two batches ago and has been running on the deck builder and the emote bar ever since - icon, both cooldown rings, hotkey caption, reagent and card counts, success chance, mastery badges, tooltip, right-click menu, drag out and drop in. The old bar kept the old drawing only because the switch is per-prefab and nobody had flipped it.
  • Planning caught a live piece of the interface that the previous batch had marked for deletion. The card charge bar was listed as unreferenced and slated to retire; it sits on the main interface prefab and is the only thing that reads the combat hand charge state. It was never deleted, and it converts with this batch instead.
  • Re-read the combat bar plan against the code and found a bug it would have shipped: on the new interface, right-clicking a card in the combat hand would have opened an empty menu instead of discarding the card. The shared slot code sends right-click straight to the context menu and never reaches the discard handler; the emote bar and deck builder never showed it because neither does anything on right click.
  • Resequenced the work so the risky part lands first and invisibly. The rules for which bar is on screen come out as a tested model with the old interface still drawing, which is the cheapest place to catch a mistake, and the arrangement makes the ghost-window bug that hit three earlier windows impossible to write rather than something to remember to avoid.
  • Also found that the combat bar can be checked without a fight - there is an option that keeps it on screen out of combat - and that six pieces of translated text on the old bar have to move into code before any of it is taken apart.
  • Pulled the rules for which combat bar is on screen out into their own tested piece of code. They had shipped for years with no test, so the eighteen cases are the first written statement of what the bar actually does, and three of them pin behaviour that reads like a bug and is not - most notably that decorating with an item that could also go on the bar keeps the deco panel up, until you drag the item over the bar, at which point the game correctly decides you are trying to slot it.
  • Rewired the combat bar so the decision about what is on screen and the drawing of it are separate things. Nothing looks different yet - it is all still the old interface - but the new one now has a single place to plug into, and the arrangement makes a bug that has bitten three windows in this rebuild impossible to write rather than something to remember to avoid.
  • Two smaller things fell out of it. The bar had two background loops polling on independent schedules, so it could apply a layout using conditions read a moment after the state that asked for them; there is one loop now. And the auto-hide timer asks the bar itself whether the mouse is over it, instead of asking the old interface - which would have answered no forever once the bar moved, and faded it out from under the cursor.
  • Fixed a bug in the combat hand that would have shipped with the conversion: right-clicking a card would have opened an empty menu instead of discarding it. The shared slot code sent right-click straight to the context menu without ever reaching the handler that does the discarding, and the menu it opened only has anything in it for a locked slot.
  • Taught a hand slot to answer four questions about the mouse for both interfaces at once. The awkward one is press-and-hold, because charging a glyph reads the button state fresh every frame rather than reacting to an event - so a press that ends without a release, by the pointer sliding off the slot or the element going away, has to clear itself or the glyph would charge on its own.
  • The glyph charge bar is on the new interface. While converting it, the dividing marks along the charge track turned out to have been stacking on top of each other at one end for years: the code that spaced them divided two whole numbers, so every mark but one landed at position zero. They now spread across the track the way they were meant to.
  • Built the pieces the combat bar needs on the new interface, none of them switched on yet: the combat hand slot with its locked-card frame and the slide-and-fade cards do as they are drawn and discarded, the bar itself with its two rows and the help text, and the decoration strip that shares the same frame.
  • The bar keeps track of whether the mouse is over it now, because the old interface answered that question by walking through objects it can see and the new one is invisible to that walk. Without it the bar would have quietly faded out from under the cursor while you were using it.
  • Carried eight pieces of translated text off the old bar into code with their identifiers intact before any of it gets taken apart, so no translation is lost. The plan had counted six; the decoration checkbox turned out to have both a label and its own hover text.
  • The combat bar is on the new interface. That is three things sharing one frame: the utility bar you park items and glyphs on, the combat row that holds your hand during a fight, and the decoration strip that borrows the same space while you are placing deco on a lot. They always had to move together.
  • The combat hand was rated as one of the five hardest things left, on the strength of a 1,585-line state machine. The state machine never had to convert. It has four references to anything visual and touched the old interface in two places, so what it needed was for the mouse to be reported from somewhere else and four visual writes mirrored across.
  • Setting one flag on the old bar through the editor rewrote 1,493 lines of it and quietly shifted six colours off pure white, which is what happens when an editor from 2018 saves a file in a newer one. Put the flag in by hand instead: eleven lines, no colour drift.
  • Two tests written two batches ago went red on purpose today. Both existed to assert the combat bar had NOT moved while the pieces it would need were built next to it. They did their job for two batches and now record that the bar has moved.
  • A tester reported the combat bar and utility bar coming up wrong on the new interface: both rows jammed against the left edge of the screen, the combat slots showing as empty boxes, and a second copy of the glyphs stuck lower down under a permanent red cooldown wash. Three separate faults, all from the same day the bar was switched over.
  • The bar was never centred. Its default position asked the layout to work the horizontal placement out on its own, which for a free-floating element means the left edge rather than the middle. Placement now happens once the bar knows how wide it is, and again whenever the screen or the bar changes size.
  • The empty slots were an element nobody wrote to. The piece that draws a combat slot on the new interface was built a few steps earlier and covered with tests, then switched on without ever being handed the card art, the fades, the slide, the border or the combine flash. Every one of those writes now goes to both halves while the old one is still there to compare against.
  • The stuck second copy was the old combat hand still drawing. The cleanup that retires the old interface runs once at startup, but the hand deals fresh slots every time you change decks, and each one arrives carrying its own drawing layer. Those are now retired as the hand is dealt.
  • Three smaller faults in the same code blocked any way out of the first one: the saved position was read from the wrong place, so a click that did not move the bar filed it into the corner; a position saved on a bigger display was never pulled back on screen; and the only draggable part of the bar was completely covered by its own slots. The bar has a grab border now, and everyone starts centred once.

GM Tools

  • New setwinddirectionoverride console command and a wind-heading row in the GM event panel force the scene's wind heading for everyone in the room; the wind slews over so flags swing rather than snap. Late joiners now pick up weather and wind overrides set before they arrived.

Inventory

  • Planned the inventory automation epic. Containers can be tagged with the categories they collect, a Sort to Bags button files your pack into them in one click with an undo, Quick Deposit pushes stacks into a chest that already holds them, and the lock flag becomes a visible column every bulk action has to respect. Thirteen phases, three of which ship on their own.
  • Ran that plan through an adversarial design pass before writing any code: three independent designs, three reviews and two hazard registers. It found four ways the obvious implementation would have destroyed player property, including one where undoing a deposit would have consumed unclaimed rewards. All four are handled in the plan.
  • Worked out how each of the four defects in the inventory automation plan gets fixed, and built the verification plan behind them: eight layers, from a planner property test up to a whole-database duplicate audit run before and after. Debug builds will also count every touched container before and after a batch and complain if the totals do not match.
  • Reading that code a second time corrected the plan twice. Crowns of the Obsidian are not among the item types a bulk move can consume, and the consuming itself is intended looting behaviour. The same code does hold three older defects around redeeming an item, and those get fixed first, on their own, ahead of any of the new work.

Armor

  • Published an armor improvement plan: twenty proposals covering the worn suit and the masterwork and enchantment bench, measured against Ultima Online, World of Warcraft, Elder Scrolls Online, Final Fantasy XIV, Guild Wars 2, Albion Online, New World, Black Desert, and Path of Exile. Ten are client-only displays of numbers the game already computes, and three reconnect armor math that is designed but sitting inactive in the game data.
  • The crafting side answers the community's top request: a full odds ladder and the bonus pool shown before materials are spent, a practice bonus that banks failed attempts toward the next try, a guaranteed lane at a steep material price, and catalysts that steer the roll into the bonus family you choose. The illustrated version is public at catnipgames.net/blog/proposals/armor with a comment box and vote arrows on every proposal.

Taming

  • Published a taming and pet combat improvement plan: twenty-eight proposals measured against Ultima Online, World of Warcraft, EverQuest, Final Fantasy XI, Guild Wars 2, City of Heroes, ARK, and the modern UO free shards. The plan pairs an open rebalance of passive pet power with new active play: a pet ability bar on the handler's hotbar, stances with real tradeoffs, send and guard commands, a revived Veterinarian skill, sidegrade pet gear, rare tames, and a Bond system that pays the most to the tamer who actually handles the beast. Open for comment and voting at Taming Deep Dive.
  • The rebalance math is printed on the page rather than hidden in patch notes, starting with a bug fix: the pet level cap is applied before its bonuses instead of after them, so a grandmaster's cap of 89 currently produces level 114 pets. The page shows the before and after tables for the cap, the mastery curve, and the Frenzy uptime change, and every number ships through the combat balance program's test-shard changesets and measurement windows.
  • One of the twenty-eight cards puts Episode 2's unmet pack animal stretch goal to a public vote. The roadmap says that promise gets honored or formally retired, and the vote count will be the evidence the decision cites.
  • Fixed taming collars that turned permanently No Trade. When a pet died and its resurrect timer ran out, the collar showed as empty but could no longer be traded, handed back to the tamer, sold, or put in a storage container, and there was no way in the game to reset it. Collars trade again once the pet is past saving, including the ones players already have stuck in their banks.
  • Travelling to another scene with a dead pet used to reach the same dead end, and so did losing a queued collar update during the loading screen. Both now clear themselves the next time the collar is worn.
  • Store and quest whistles keep their creature, so they drop only the death state once the resurrect timer lapses and can be summoned and traded again without waiting on a Tame Resurrect cast. The five minute window after a pet dies is unchanged, and the collar stays No Trade for it.
  • Added 14 editor tests over the resurrect-window timing, the trade rule, and the exact data a collar writes when it clears itself.

Web

  • Put a disclaimer at the top of the proposals index: these pages are the start of the conversation and not the actual plan, nothing on them is decided or scheduled, and other ideas are welcome including ones we did not think of. Some of the proposals are deliberately ambitious and the point is to hear where they went too far and where they did not go far enough. Reworded the paragraph underneath it to match.
2026-07-25 · 305 items

Headlines

  • Two new weapon enchants: Frost Weapon slows what you hit, Shock Weapon can stun it. Fire is no longer the only school that can light up a blade.
  • Inventory window round two, from a tester's full pass: double-click works again, the list is a sortable table with weight, durability and value, Your Gold is back, and bags show how full they are.
  • Bulk item moves no longer leave your whole inventory unusable until you relog. One rejected item used to flag the entire batch, and the flag could not be cleared without logging out.
  • Tracked down a client crash from three tester reports: NPC voice audio was being freed while it was still starting to play. Fixed, along with two other ways the same thing could happen.
  • Quest hand-ins to NPCs work again: the converted Give Items window was letting the retired window behind it swallow every drop.
  • Combat pets now follow their owner's Open PvP flag. An unflagged player's auto-attack and area skills no longer sweep up a flagged player's pet, and placed decoration creatures and town NPCs stay non-attackable on PvP lots.
  • A lot permission handed out by a guild officer no longer outlives the officer. Kick, leave or demote them and the access they gave goes with them, while anything the lot owner granted stays put.
  • The combat deck window was rebuilt after player feedback the same day it shipped: one window instead of two, one line per deck, and the equip controls back to the two the old window had.
  • Japanese is translated: all 66,792 lines of NPC dialogue, plus items, quests, skills and the interface. Native review is the next step.
  • Three separate reports of black ground outdoors turned out to be one bug: the terrain shader was losing its deferred lighting variants when scenes were packed, so ground near the camera rendered unlit while everything else looked fine.
  • Placed Conversationalists stay put: a Stay-here NPC holds its exact spot for every player, and a patrolling one is leashed to 10m of where you placed it instead of drifting 38m off the lot.
  • Summoned earth and ice elementals now land the attacks they start. They had been swinging from 5 metres while their damage only reached 4, so roughly a metre of every approach produced an animation, an earthquake, and no damage at all.
  • Animal Charm now lasts as long as its icon says. At grandmaster skill the charm had been ending at about half the displayed time, and the skill description called it a mesmerize.
  • Zombie children stopped sounding like an old man. Solace Bridge rolls four zombie bodies off one spawn point and gave all of them the same voice; each body now has its own.

Community

  • Filed 11 items from the nightly forum sweep: 8 wishlist suggestions (Twitch Drops, guild war opt-in PvP + victory plaques, multi-blazon guild support, expanded guild titles/permissions, drag-to-backpack search results, a vacate-plot basement/dungeon warning, POT terrain flattening, Companion App features) and 3 bug reports (a stalled earth-summon range bug, a drifting Conversationalist NPC, and a Lua sound-channel indexing mismatch).

UI

  • The backpack got its category filter back. A Show dropdown above the search box narrows the item list to Equipment, Material, Tool, Recipe and the rest of the 19 categories the old window offered, and it combines with the search box. The list also respects the inventory options again, so hidden locked and quest items stay hidden unless you pick those categories.
  • Loot bags, chests and every other container window moved onto the new UI. Each one shows the container name in its title (a corpse shows what you killed), an item count against the container capacity, and a Take All button on containers that are not your own bags.
  • Container windows now remember their own size and position instead of sharing one saved spot with the backpack, and a container you open while your bag is up appears beside it rather than on top of it.
  • The small quick-loot window keeps its small shape on the new UI. It carries the container name, the item list and Take All, without the category dropdown, search box and item count that belong to the full container window, and it remembers its own size separately from the backpack.
  • Containers whose contents belong to someone else now name the owner above the item list, on both the small and full container windows, so it is clear before you take anything that doing so is stealing.
  • Lot storage moved to the new UI. The lot name sits in the title bar with its type and basement lines readable underneath, rather than all four lines crammed into the title. It keeps its Refresh button and the wait between refreshes, and now says when it is fetching instead of showing an empty list.
  • Two follow settings joined the Multiplayer options tab: whether other players may follow you, and whether you get a chat notice when someone starts. Follow also picked up a key binding, Follow Target on Keypad 7, and Tab completes a player name after you type /follow.
  • The bank moved to the new UI. It opens beside the backpack with its own remembered size, and carries the category dropdown, search box, the item count against your bank capacity, Refresh, and Buy More Space. Buying space still asks you to confirm the gold price and the number of slots first.
  • Items can be dropped into the inventory window again. The drop target sat on the item list's inner content box, which is only as tall as the rows it holds and sits inside the scroll area rather than around it, so anything released outside a row found nothing to drop onto and bounced back. The whole window now accepts a drop, and dropping one item onto a matching one still combines the stacks.
  • Inventory windows now sit front to back. Every window used to sit at the same depth, so whichever one opened last covered the others for good and clicks never reached the window underneath. Opening a window or clicking it brings it to the front.
  • The backpack has its category tabs back, one button per category rather than the dropdown the rebuilt window shipped with: 19 for your own backpack, 17 for other containers. They work alongside the Search box and drive the same filtering the old window used.
  • Inventory items are colour-coded again. Quest items, locked items, equipped crafting tools, artifacts, unlearned recipes and items tied up in a pending trade each read at a glance, from the same source the old window used so the two cannot drift apart.
  • Inventory rows show each item's weight, and the quantity moved into its own column so a long item name can no longer push the count out of view.
  • Splitting a stack works in the newer inventory windows again. Holding Shift while you drag a stack out of a bag, bank or container opens the quantity prompt, and holding Ctrl takes a single item. In those windows both keys did nothing before, so a drag always took the whole stack and there was no way to take part of one.
  • The quantity prompt opens at the cursor and in front of the window it came from. It had been putting itself in the top left corner of the screen because it measured its own size before it had one, and at its old depth the container window it was raised from could cover it.
  • Items dropped into a container window land in the container you are looking at. One window is reused for loot bags, chests and crates, and it kept pointing at the first container it had shown, so a drop could go into a chest opened earlier instead of the bag under the cursor.
  • Double-clicking an item in the inventory window works again. Nothing happened before: the window decided what counted as a double-click by asking the interface layer for a click count that it never actually filled in, so equipping, using or opening anything by double-click was dead. The window now tracks the two clicks itself.
  • The inventory list is a sortable table again. Rows show name, quantity, weight, durability and value under a header bar; clicking a heading sorts by it and clicking again reverses, and the window remembers the choice. Sorting uses the same ordering the old window used.
  • The inventory window shows Your Gold again, on the player's own backpack only.
  • A container sitting in your backpack now shows how full it is next to its name, as 3 / 10, so you no longer have to open a bag to find out. A renamed container also shows both names in its title, such as Raw Material (Small Bag), so several renamed bags can be told apart.
  • Fixed the backpack window drawing its own controls on top of each other. The category tabs wrap onto several rows, and those rows were being squashed into a thin band that painted over the Search box and the column heading row, so all three were unreadable. Measured at the smallest window size: the tab strip was given 23 pixels for the 148 it needed, and the wrapped rows spilled 125 pixels past it. Every fixed row now keeps its own height and the item list takes what is left and scrolls.
  • Lined the backpack column headings up with their columns. The heading row sits outside the scrolling list so it stays put, which also meant it did not lose width to the scrollbar the way the rows did, and Quantity, Weight, Durability and Value ended up as much as 23 pixels left of their own headings once the list was long enough to scroll.
  • Carried the same layout fix into the container, corpse, bank, lot storage, rewards and jukebox windows, which are all built from the backpack window and shared the bug.
  • Restored multi-select in the bank, backpack and container windows. Ctrl and click toggles a row, shift and click selects a range, Ctrl+A takes the lot, and dragging any selected row moves the whole selection. These windows lost it when they moved to UI Toolkit, so testing bank capacity meant dragging one item at a time.
  • Shift while dragging still splits a stack and Ctrl while dragging still takes one, so the new selection does not steal those. Selection survives the bank refreshing itself and the search box filtering, and drops only rows that are no longer shown.
  • Retired seven dead NGUI fragments left behind by earlier UI conversions: the journal entry rows, the task info row, the large message box, a list toggle, a skill school tab, a ransom item icon, and their scripts. Each had no remaining user in code, prefabs, or scenes.
  • Restored the Journal task Report a Problem action as a button in the Tasks tab. It had lived only on a right-click menu that was lost when the quest tracker and journal were rebuilt, so task bug reporting had no entry point in game.
  • Removed the in-world discovery icon path from location trigger boxes. The icon slot was left empty on 3841 of 3844 placements, so it drew nothing; compass and map markers come from a separate field and are unchanged.
  • Emote names in the Emotes window are no longer drawn in grey when the emote cannot be taught to another player. Grey is what the UI uses for things you cannot use, and every emote in that list is one your character already knows, so the colour was saying the wrong thing. The green and grey now stay in the Teachability column where they mean something.
  • Equipment slot highlighting works again on the character sheet. Picking up an equippable item only ever highlighted the first slot, so most items showed nothing. The mannequin, fishtank and doll cabinet windows had the same problem.
  • Hovering a skill with no school no longer writes an error to the log on every frame. One player session recorded 3,185 of them.
  • Item lists now answer for their own right-click menus on the UI Toolkit side. The old rows each carried their own context-menu implementation, so a converted window lost the menu; the list itself now supplies it, which means every list in the family keeps its menu when its window is rebuilt.
  • A row with no actions returns nothing rather than an empty menu, and the action list is read once instead of every time the menu measures itself.
  • The shop window framework learned tabs that show two lists side by side and hide the shopping cart while they do. The vendor windows need both: managing your own listings is not an exchange, and the running total on screen there invites the wrong click.
  • Window width is now worked out from what each tab actually shows instead of being stored, so a tab that hides the cart is not charged 306 pixels for it, and switching tabs rebuilds one list instead of six.
  • Fixed the shopkeeper signature. The window was rebuilt a while back and the signature kept being written to the old hidden label, so accepting an exchange finished with nothing visible. Your name writes itself across the line again.
  • Both vendor windows are on the new interface. They turned out to be one window rather than two: the shared base holds all of the display and the player-vendor and public-vendor classes hold only the rules, so neither of those needed a line changed.
  • The two management tabs now show your own goods beside your listings on one screen, with the exchange panel hidden there. The four tabs come from one rule instead of four handlers that each showed and hid seven separate panels.
  • Deleted an 18-branch category filter in favour of the shared list every other window uses. One branch in it could never run: it checked for Blueprint before Dungeon, and the single dropdown entry reads Blueprint and Dungeon.
  • Testing the rebuilt window offline found three real bugs, two older than this work. Table rows were filled one column short, so the widest column drew nothing and everything after it shifted a slot left: on your own goods that put weights under Durability and values under Weight with the item name missing entirely.
  • The same table was converting item text twice, so any name carrying colour or formatting drew the markup as literal text. And an icon column was being asked for text it does not have, which logged an error for every row on every frame.
  • Names drawn in the world could render as a sliver a few pixels tall, or disappear into the status bar under them. Two causes. The three nameplate font files lost a face measurement during the engine upgrade and shipped with zero, which made every line height derived from them infinite; each is back to its own fonts real value, 1000 for two of them and 2048 for the runic face. Separately the name panel sizes itself to the text inside it, so a line measured before its font finished loading came out at roughly no height and took the whole panel down with it. Every line now reserves its own height. This covered player and creature names as well as location, village, vendor, register and pet labels.
  • The Tester Tools and Tester Verification windows could open too short and squash their own contents. Text boxes shrank to about three pixels tall, too small to click into, while the fixed-height buttons kept their size and drew outside the window frame. Both windows now declare a minimum size, their contents scroll when the window is smaller than everything inside it, and rows holding a text box no longer shrink. Closing a window also used to save whatever height it happened to have at that moment, so a later build that added a section reopened at the old height and crushed its own fields with no user action involved. Only a size set by dragging the resize corner is remembered now, and an install already stuck too small repairs itself the first time the window opens.
  • The vendor price and order dialogs moved to the new interface. They are child windows of the vendor, which had already moved, so they were rendering behind it. A price box that read anything unparseable as a number would have listed an item at the wrong price; it reads as zero now and the minimum price rejects it.
  • Player-to-player trade is on the new interface: two symmetric halves, gold and an agreement lamp on each side, and both names signed across the bottom when it goes through. Any change by either side clears both agreements, which is what stops one player agreeing and the other swapping an item out afterwards.
  • The property manager moved over as well, with deeds and stored lots as cards rather than table rows. The slot components stay behind the cards doing the drag and drop work, so putting storage back on a lot runs exactly the code it always did.
  • Testing the property manager offline turned up that activating it drew the entire old window behind the new one. Its controls hang directly off the window rather than under a panel that stays hidden, unlike the other windows converted this week.
  • Built the UI Toolkit element the scene maps and the compass both need: a window onto a texture that can be panned, zoomed and scrolled. The old UI did this by moving a sub-rectangle over the art, and the new one has no direct equivalent, so the replacement generates its own geometry and draws the strip as two pieces when it wraps past the seam instead of stretching one side.
  • The rectangle maths behind it is covered by 15 tests rather than checked by eye. Both of the conversions involved, the vertical flip and the corner pairing, render a believable-looking map when they are wrong, which is exactly the kind of mistake that survives a glance.
  • The map you carry as an item and the town spawn selection window both moved to the new UI. Each now has the movable, resizable frame the other rebuilt windows use and remembers its own size and position, you drag the map itself to pan and roll the wheel over it to zoom, and opening several maps at once offsets them instead of stacking them in one spot.
  • These two could not be done separately: the spawn window is built on the map window, so converting the base converted both in one go. The same thing happened with the two character sheets earlier in the rebuild.
  • Two of the input conversions flip sign rather than carry across, because the old UI measured mouse movement and scroll with up being positive and the new one has down being positive. A map that pans or zooms backwards compiles perfectly well, so both directions are covered by tests instead of a look.
  • The map you open with M moved to the new UI, keeping its resizable pinnable frame, the Follow checkbox, the auto-fade option, the zoom controls, points of interest with their hover names, and the blacked-out unexplored ground in dungeons that hide their map until you walk it.
  • The inventory had this one down as having no controller at all. It has 737 lines of one, sitting on a child object under a namespace the original scan did not look through, which is also why there was no class to convert until a window class was written for the job.
  • The fog overlay in unexplored dungeons used to get its alignment for free by being parented under the map image in the old UI, inheriting the rotation, flip and zoom without asking. That relationship is the only structural thing the fog drawing depends on, so the rebuilt map nests it the same way.
  • A quest marker no longer carries its sparkle effect. It keeps its own colour and still draws on top of every other marker.
  • Pulled the page-breaking rules for books and signs out into a testable model. The old code paginated by handing the text to the old UI and asking where it ran out of room, which meant the rules could not be checked without a font, a label and a running game. The measurement is now supplied by the caller, so word breaks, page breaks, chapter headings, image pages and the page cap are all covered by tests.
  • Formatting that crosses a page break moved with it. A colour or a bold run that starts on one page is reopened at the top of the next, including the cases player-written books are full of: nested colours, stray closing tags, and brackets that never close.
  • The custom sign editor moved to the new UI, with a movable resizable frame that remembers where you left it, the same two fonts, and a character counter that turns red at the limit so a greyed-out Save button has a visible reason.
  • It also tells you while you type when the text has grown too long to fit on the sign face, instead of letting you save it and finding out later that the last line is missing.
  • The town and location labels on the overworld map finished moving off the old UI. They already drew through the newer text system, but every one of them was still keeping a hidden second copy of its name in the old one, and the banner behind the runic name was being sized by that hidden copy. The banner is now sized from the visible text.
  • All 191 of them converted without editing the prefab, because the banner is rebuilt at load from the widget that was already there and takes its margins from the anchors that were already authored.
  • The sweep removes every old widget on the nameplate rather than the two the script knew about by name. Any one left behind builds itself a new panel when it wakes up, which would have put the old UI straight back.
  • Retired a dead playable-piano prefab that the migration list had scheduled as a window to convert. Its controller was 56 lines with all but one inside a block comment, referring to a type that does not exist, and the prefab had no instances in any scene and contained one backdrop and three unwired buttons rather than a keyboard.
  • The pianos players actually sit at are unaffected: those are animations on their own prefabs, and the instrument system that plays the notes was never on the old UI.
  • The harvesting swing meter moved to the new UI. The ring, the green target zone, the gold perfect centre and the sweeping red marker are drawn as real curves now instead of rotated sprites, and the mini-game itself plays exactly as before.
  • The risky part was never the drawing. While the ring is up the game suppresses jumping, attacking and interrupts so the stop key cannot cancel the gather it is meant to resolve, and a flag left set would leave you unable to jump or attack with nothing on screen explaining why. Every way the meter can end now has a test on it.
  • Fixed the Vendor Listings in Zone window coming up empty in every town. It drew its table before the listings had finished loading and never redrew, so the list stayed blank once the loading notice cleared. It now fills in when the listings land, and keeps up when you change category, sort by a column, or search.
  • Get Directions in the vendor listings window was reading the selected row from the wrong place and failed on every click. It now uses the row you selected, and sets a destination to that vendor.
  • The compass strip moved to the new UI: the scrolling ribbon, the markers that slide along it and shrink with distance, the zone name, the scene summary and the game time and date. Destination and quest markers still pin to the end of the strip instead of vanishing when you turn away, and ankhs still show while you are dead.
  • This was the one screen that actually needed the wrapping texture window built earlier in the batch. The compass offset climbs forever as you turn and relies on the ribbon repeating past its own seam, which the new UI cannot express by clipping alone, so the strip is drawn as two pieces across the wrap.
  • The compass letters are painted into the artwork rather than drawn as text, so they are different art per language. Keeping that working meant teaching the localized-texture component to hand out what it loaded instead of only pushing it into an old-UI widget.
  • Three old files retired with it: the shared location-icon base, the icon component and its prefab. Both things that used them are converted now, so they went together rather than sitting around as the kind of quiet leftover that turns out to be hiding a bug.
  • Three more entries on the migration list turned out not to be windows at all. The sheet music editor is the same script and prefab family as the books it shares a page layout with, the colour picker has exactly one host and lives inside that scene rather than as a prefab, and the recipe info row is a column of the crafting station. All three now point at the parent that will close them instead of sitting there looking unported.
  • That closes the medium tier. With no small or medium entries left, the remaining 21 are all windows or subsystems, which makes the list a set of projects rather than a backlog with a long tail.
  • The bottom-right corner of the rebuilt windows now carries a real resize grip: three diagonal lines on a small chip that brightens under the cursor, and the mouse pointer switches to the diagonal stretch arrow the old windows used. It had been a faint tinted square that disappeared entirely behind the corner flourish on the Obsidian, Fire, Air and Arcane themes, so nothing told you the window could be dragged bigger.
  • The gear button in the Options footer was drawing an empty box on every theme, Classic included. It asked the font for a gear character that none of the five bundled UI faces actually contains. It uses the gear art from the HUD atlas now. A test bans decorative glyphs in window chrome so the next one gets caught before a player sees it.
  • The lot sign is on the new UI. Interacting with a housing sign now opens one window you can drag by its title bar, with the lot size in the title and the claim, access and house sections stacked in the body instead of three panels sharing one frame. Changing your house and changing a lot reservation take over the window while you are doing them, with Cancel and Accept.
  • Every window the sign opens - the deed list, lot permissions, decoration settings, town management and the property manager - was already on the new UI, so this one closed housing out entirely without stubbing anything.
  • Pulling the house picker apart turned up a crash that predates the conversion: on a lot whose default house is missing from the catalog, the picker threw partway through building itself and left half a list on screen. The lookup now happens before any of the window exists, so a bad default logs and shows the deeds you hold instead.
  • The claim, reservation and access rules and the house-catalog rules came out as two models with 47 tests behind them, covering which sizes each lot shape accepts, the case where a house stays listed because it is already built on the lot, and the reservation that names one player beating the town-wide one.
  • Old prefab: 11,389 lines. New one: 48.
  • The chat tab options popup is on the new UI. Renaming a tab, setting its font size, ticking which channels it carries and deleting it all work the same way; the eighteen channel boxes keep the same three columns in the same order.
  • A third of that dialog was dead. The Discord panel behind it had been compiled out of every build for years, so the button did nothing and the line beside it always read the same string no matter what. It is gone, along with the three scripts and the 38 hidden objects that made it up.
  • This is the first piece of the chat area to move while the chat window itself is still on the old UI. It could go early because the dialog never reaches into the chat window: everything it does is a write to the tab.
  • The channel boxes came out as a table with tests behind it, which pinned a rule that reads like a bug and is not one. A box covering more than one kind of message ticks when the tab carries any of them and turns on all of them, so a tab holding part of a group widens to the whole group the next time you touch it. That is what the old grid did, and changing it would quietly rewrite every saved tab.
  • New shared piece: the anchored popup, a panel that opens where you clicked and closes when you click away. The right-click menus now use the same one instead of their own copy. The old popup base also learned not to treat a click inside a new-UI panel as a click outside itself, which had been closing the options popup the instant you touched it.
  • Planned the next batch of window conversions, and the plan corrected the note the last batch left behind. Nineteen windows are still on the old UI, and the standing conclusion was that none of them could be taken on its own any more, so the next batch would have to open one of the five big composite screens (the heads-up display, chat, the combat hand, the Crown Store, the front end). That is true of three of them, and wrong about eleven: the groundwork those eleven were waiting on has all shipped over the last two weeks. The batch takes ten, including the crafting station and the recipe book, the skill tree, the deck builder and card browser, mail, and the writable book family. The emote bar moved out of the blocked column on a closer read: it shares its slot code with the hotbar, but not its prefab, so it can convert while the hotbar waits for the combat hand.
  • Closed the last gap in the shared table that converted windows render their lists through. It could describe a column of text and nothing else, so a column holding a widget drew an empty gap where the widget should be. The crafting station is the first window that needs one, because its recipe list puts a whole recipe card in a column. The card itself is ported now too, ahead of the window: recipe name, icon, chance of success, required skill, and the ingredient rack, with the rules behind it under test. An ingredient reads green when you are carrying enough, teal when the count is only reached by counting your lot storage, and red when you are short either way, and the icon only dims when it is out of reach entirely.

Images

  • The weapon enchant line, left to right: the existing Ignite Weapon, then the two new icons for Frost Weapon and Shock Weapon. Each keeps the school colour on the inner disc.

Tooling

  • Cross-checked the decoration catalog against the shipped sewer levels: a new mining pass measures how high above the floor every prop actually sits in the existing dungeons, which independently confirmed the classification (floor props at ground level, tabletop items just above, wall pieces around 1.5m, ceiling pieces near 3.6m). It also caught seven props the visual pass had misread - the modular steam pipe runs and a chain anchor mount look like floor pieces in isolation, but every instance in the shipped levels is mounted overhead, so those now tell the builder to place them at height instead of dropping them on the ground.
  • Proved the dungeon builder's new placement guards on a test dungeon. Wall and ceiling decorations now seat by the face that touches the surface rather than their pivot point, which fixes props sinking into stone or burying themselves above the ceiling; cobwebs now sit within a centimetre of the ceiling and a deep moss patch rests flush against the wall. Also confirmed the pathfinding guard works in the failing direction: walling off a corridor makes the build stop and name the room that got cut off. Added a check for decorations clipping into each other, which no surface snap can catch.
  • The blog publisher stopped verifying its own deploy once the site passed 126 images. It checked every file in a single command, and the list finally outgrew the maximum command length, so the last path was cut in half and the check failed on a filename that did not exist. It now streams the list instead of pasting it into the command, which has no such ceiling.

Rendering

  • Benchmarked Pixel Art mode across two scenes and found the pixel grid needs to be anchored at the distance the scenery actually sits, not at the player. On a Soltown street the grid snap only removed about a quarter of the camera-caused pixel churn; anchoring it at 12 meters instead of the 3.65-meter camera distance removed effectively all of it. On an open island shoreline both settings were already clean. The mode is unchanged for now while we settle which anchoring rule to ship.
  • Checked the ocean shoreline against the pixel grid for the first time: the waterline holds as a clean edge with no tearing or crawl, so the camera snap and the water system do not fight. The 32-color palette does flatten the teal water to grey, which joins the color-tuning list. Also corrected an earlier measurement: the first "no camera flicker at all" reading came from a test spot where scene animation already churned half the screen, leaving no room to measure the camera at all.
  • Fixed outdoor ground rendering almost black close to the camera while grass, trees and distant terrain looked normal. Three reports over two weeks (Solace Bridge Outskirts, Sequanna Colossus, Mistrendur) turned out to be one cause: the terrain shader lost its deferred lighting variants when scenes were packed, and deferred is the path the game actually draws with.
  • The per-scene terrain shaders come in pairs, one for ground near you and one for ground in the distance, and only the first was covered by the variant protection. Both halves are protected now, with four new automated checks so a future edit that drops the deferred variants fails the test run instead of shipping.

Terrain

  • Re-saved the terrain data for Ardoris, Necropolis Barrens, Central Brittany, Jaanaford and South Varisalla Foothills into the current engine format. All five were still stored in the 2018 format, which the engine reads more slowly and reports as deprecated on every import.
  • Confirmed nothing was lost in the conversion by comparing terrain layers, heightmap resolution and full-heightmap sum, texture layer counts, grass and tree prototype counts, and tree instance counts before and after. Every value matched, and the stuck-spot fixes those maps had received are intact.

Build health

  • These five terrains were not leftovers. A bulk conversion in June had already cleared every old-format terrain, and four of the five were in it. They came back because level design still works in the older editor, so their map edits get written back in the old format and land on top of the conversion. Expect this until the version move is finished.
  • Added a check that reads the format stamp from the first twelve bytes of each terrain file. It covers all 44,247 asset files in a few seconds and, unlike the build log, does not depend on which files the editor happened to reload that session.
  • Two leftover files from third-party sample content turned out to be unreadable rather than merely out of date, so they could not be converted. One had 69 bytes stripped out of it when it was first added to version control seven days ago, a repeat of a problem fixed back in June for the files that existed at the time. Both are sample content that never ships, and both are now tracked.
  • Deleted the two unreadable sample-content files rather than trying to convert them. Neither could be opened by the engine at all, and one had been damaged when it was first added to version control. Both came from third-party sample content that never ships, and the only thing referencing either was that package's own demo scene. Every asset file in the project now uses the current format.
  • Wrote up two Unity test-runner traps that cost time this morning: a leftover pending-run marker that jams every later test run with a stale request id and never times out, and a manager singleton whose setup code throws the moment editor-side test code touches it. Both now have the exact fix in the test-runner notes.

Images

  • The same shoreline with Pixel Art mode on and off, at a pinned camera and frozen midday. The interface stays full resolution over the pixelated world; the waterline holds its shape against the pixel grid.

Audio

  • Background music now fades on every change instead of only the first one in a quiet stretch. Ordinary track changes, walking between music areas, jukeboxes, and dying and resurrecting all ramp over two seconds; most of those used to swap over instantly, and crossing the edge of a music area twice in quick succession could leave two tracks playing at once or produce a one-frame jump to full volume. Reported against the atrium and tunnel boundary in Crypt of the Avatar.
  • Music areas nest properly now: walking out of a large area while still standing inside a smaller one keeps the smaller area playing rather than dropping back to the scene default. Fade length moved out of the code into a tweak value so audio can retune it without a build, and a track whose file fails to load is skipped instead of stalling the playlist until the next scene change.
  • Fixed the Rend swing sound starting during the wind-up. The sound comes from the skill's start effect, which had no delay set, so it began the moment the skill activated: its loudest point landed at 0.48s, while the blade does not visibly sweep until 0.66s. Delaying the start effect by 0.18s puts the two together. That start effect carries no particles or lights, so nothing visual moved.
  • Traced the Double Slash report of no sound on the second hit. The skill applies two hits, at 0.667s and 0.95s, and stages two slash particles to match, but its start effect fires a single swing sound. The earlier theory that a repeat-sound window swallowed the second one does not hold: that suppression is switched off on this effect, and the two hits are 0.283s apart against a 0.2s window. Left open pending a listen on whether the shipped 1.04s clip already covers both swings.
  • Settled how animation event times are stored in an imported model's meta file: the value is a 0 to 1 fraction of the clip rather than a time in seconds. Across 1,828 avatar model files no event time exceeds 1.0, and a 2.13s walk cycle places its four footsteps at 0.25, 0.50, 0.75 and 1.00. Reading them as seconds would have put the Rend sound fix roughly 0.3s off, so the runtime clip was probed to confirm the converted values.
  • Fixed torch crates in dungeons and sewers that kept crackling after the torch was taken out of them. Hiding a picked-up item faded its mesh and turned its light off but left the looping sound playing for the 60 to 180 seconds until it respawned, so an empty crate still sounded like something was burning. The sound now stops with the flame and comes back when the item does, and the same applies to any pickup carrying a looping sound.
  • Zombie voices now follow the body that spawned. Solace Bridge spawns its zombies from a pool of four models, an adult woman, an adult man, a girl and a boy, and all four shared one set of dialogue, so all four groaned in the same old man's voice. The children now have children's voices and the adults have their own rasping undead ones.
  • The voice a character speaks in can now be pinned to the creature model it spawned as, not just to its dialogue file and gender. That was the only thing that could tell the four zombie bodies apart, since a spawn point rolls the model at random and hands every one of them the same dialogue. 64 new clips generated and published.

Tools

  • Publishing this work log took five and a half minutes; it now takes eight seconds. Almost all of that time was spent uploading 2,389 small bookkeeping files that the site never actually serves, one at a time. The deploy now sends only what the site needs, and only the parts that changed since last time.
  • The work log was showing 20 bullets twice, some of them under a repeated section heading. Most of the duplicates came from a recovery pass that re-added entries which had only looked missing, because they were written on another machine that had not pushed yet.
  • The work log now drops a bullet whose text it has already used when it builds the pages, and the tool that adds bullets skips one that already exists for that day. Publishing reports any duplicate files left in the store. Bullet count across all pages went from 2,411 to 2,391, and the 18 duplicate files were deleted.
  • Work-log publishing is now pinned to a single machine. Every workspace still adds its bullets to the shared entry store and commits them; one designated machine renders and deploys, so the live page no longer loses bullets a checkout has not pulled yet.
  • The publish step warns when the shared branch has work-log entries that are not in the local checkout, so a deploy does not go out mid-sync.
  • Raised the daily Headlines box cap from 7 to 12 stars.
  • The instancing audit had been filtering on our own shader name prefix, so every tree and plant in the game was silently missing from its coverage numbers. Widened it, and added tests that fail if a crop ever gets its cross-fade back.
  • The after-deploy task sweep now decides what is testable from the build itself. It reads which build is live, walks that build history, and only marks a task ready when every commit behind it is actually in that build, then writes the build number, the comment and the status in one go. A half-finished feature keeps waiting instead of going out to testers early.
  • In-game bug reports now record the graphics API and shadow distance alongside the GPU name. All three black-ground reports arrived without them, which left a driver cause and a content cause impossible to tell apart from the report alone.

NPCs

  • Started on Generative NPCs. An NPC can now be given a written personality, covering who they are, what they know, how they speak and what they will not discuss, and hold a conversation from it instead of every line being authored by hand in advance. This first pass covers developer-placed NPCs and typed text only.
  • The conversation never goes straight from the game to an outside service. The game server sits in the middle, decides which personality an NPC is allowed to use, and checks every generated line before it can be shown. If any part of that is unavailable the NPC says a short fixed line rather than stalling mid-sentence.
  • Repeated openers are reused rather than regenerated, and there are per-NPC and per-day limits, so a crowd all greeting the same NPC at once does not turn into runaway cost. The whole feature is switched off by default and is not running on any server yet.
  • Creatures that roam the world map, and a small set of interactive props, were meant to be untouchable for their whole life. They were flagged that way at spawn, but the AI pass that runs twice a second overwrote the flag, so they spent almost all of their time on screen as ordinary damageable creatures. Both places now read the same rule.

Housing

  • Unclaiming a lot now warns you first if that lot has a basement or a dungeon, and says how many items are in each. When either level holds anything, the confirmation makes you type Unclaim Lot before the button turns on, the same gate character deletion uses. A lot with neither level keeps the dialog it always had.
  • The reason the warning matters: releasing a lot yourself is the one path that does not keep your layout. It empties the lot, the basement and the dungeon into the local bank as loose items, while getting evicted or lapsing on taxes parks all three in Property Manager storage still arranged. The new message says so and points at the Property Manager.
  • The item counts come from the server on the deed record, so the warning works from the Lot Deeds window in any scene, not just while standing on the lot. It re-reads the counts right before the dialog opens, so a basement you decorated this session reports what is actually in it.
  • Lot markers in player-owned towns now level the ground under themselves instead of refusing to place on a slope. The old check gave up once the ground varied by about 0.2m across the whole footprint, which made the larger lot sizes very hard to site; the limit is now 1.5m, and past that the placement is refused with a message saying how much slope it found. Houses on a lot level their own footprint the same way. Water lots are unchanged.
  • The levelling is worked out on each client from lot positions the server already stores, so nothing new is saved and no database change was needed. Each levelled area is rebuilt from a pristine copy of the terrain and replayed in a fixed order, which is what makes picking a lot back up restore the ground exactly and keeps two players standing in the same town seeing the same result. Covered by 16 tests, including one that checks three overlapping lots produce identical ground under all six arrival orders.
  • Placed decoration creatures, home automatons and town service NPCs no longer take on a lot owner's PvP state. They carry the same internal pet marker as a real combat pet, so on a PvP-enabled lot they were still reading as attackable through a second path that ran ahead of the faction table. The earlier fix closed one path; this closes the other.
  • Lot permissions given out by a guild officer now end when that officer stops being an officer of the lot owner's guild. Being kicked, leaving, or being demoted all revoke the grants they handed out, as does the owner leaving the guild or turning the guild lot setting off. Permissions the owner set themselves are untouched and stay until the owner changes them.

World

  • Fixed the large fountain in the Brittany Alleys town square, which had no interaction at all: players could not draw water there and had to walk to another Brittany scene to fill a bucket. The fountain had been unpacked from its prefab and lost the components that made it usable, so it was rebuilt to match the working fountains in Brittany, Brittany Estates, and Brittany Wharfs. It now shows a Take Water prompt and hands over a bucket of water.
  • Two players can dance together now. /partner asks someone to dance, they get an accept or decline prompt, and on accept both characters turn to face each other and start the dance on the same beat. The game already had matching lead and follow halves of the Waltz, but pairing them meant standing close, lining yourselves up by eye, and trying to type /dance at the same moment.
  • Only the player who accepts a dance is moved, onto a spot in front of the person who asked, and the step is refused if that spot is blocked or is a real drop. The one who asked never moves. Dance invites also respect the block list, expire after 30 seconds, rate-limit repeat asks, and can be turned off entirely with a new Auto-Decline Dance Invites option.
  • Added /mimic, which copies whatever emote another player performs and keeps copying as they change it. It never drags you along behind them, which is what separates it from /follow, and it only performs emotes you already own.
  • Vendor, cash register and pet name labels in the world now render with TextMeshPro instead of the old UI system. The text is built at load from the label already on each object, so all 39 of those objects were converted without editing any of them, and any new one picks it up for free.
  • Player-typed vendor names can no longer contain formatting markup on a world label. Colour is applied to the label itself now, which also fixed the stray bracket codes that would have shown up around a coloured name.
  • In Spindelskog, one shadow bear spawn spot sat about 11 meters from the Ancient Platform, the raised platform whose discs move you between the Hard and Extreme versions of the scene, so a bear was on top of you the moment you arrived. That spawn spot moved deeper into the northeast pocket, about 39 meters out, which matches the 37 meter or wider gap every other entrance in the scene already had. Bear numbers in the area are unchanged, and the new spot was picked off the scene navigation data so a large creature stands on it cleanly.

Housing

  • Decorations that behave like NPCs, such as house automatons and other placed deco NPCs, could be attacked and killed by other players inside a basement switched to Open PvP. They now keep the non-combatant standing they were built with, so a visitor can no longer destroy the decorations on someone else's lot. Player Owned Town NPCs like bankers and merchants were affected the same way and are covered too.
  • Combat pets and summons are deliberately unchanged and remain attackable in an Open PvP basement, since opting a lot into PvP is the whole point of the switch.

Gameplay

  • Rebuilt the /follow command. It now takes a player name, stops with /unfollow or /follow stop, and has close, near and far distance settings that use the same distances as pet follow. Every form of the command prints a result; before this it printed nothing whether it worked or failed.
  • Fixed following another player dropping you to a crawl once you closed to about four meters, which left you falling behind and then sprinting to catch up on a loop. Other players also saw a follower slide along in an idle pose instead of running.
  • Casting a spell no longer cancels your follow. Follow still ends on death, mounting, changing scene, your own movement keys, and when the person you are following gets far enough away, which now says so instead of just stopping.
  • Added two new weapon enchants: Frost Weapon in the Water tree and Shock Weapon in the Air tree. Each is learned after its school's first attack spell and wraps the equipped weapon in its element for the duration.
  • Frost Weapon adds water damage and slows what you hit by 15% for a few seconds. Shock Weapon adds air damage and rolls a small chance to stun. Both add less raw damage per hit than Ignite Weapon and trade it for the extra effect.
  • The ice and lightning weapon effects were already built and sitting in the game. Nothing had ever pointed at the lightning one, and the ice one was only reachable from a dragon bite, so both were finished art no player could see.

Docs

  • Wrote up how to time a skill sound against its animation in the FX audio doc: which field is the only per-skill timing knob, why a weapon sound is never an animation keyframe, the normalized event-time conversion, and the two caveats on adding a delay (one timing slot against four animation variants, and an interrupt still letting the sound through).
  • Recounted the interface migration inventory after this batch: 129 of 181 elements are done, 14 fold into a larger screen, and 38 remain. Every remaining one is at least a full window of work.

Guilds

  • Planned the expanded guild rank system players asked for on the forums: more tiers than Leader/Officer/Member, guild-chosen titles for each, and per-tier control over guild property. Ranks will be a new setting rather than an extension of the existing three roles, and existing guilds keep their current behaviour until a guild master edits their ranks for the first time.
  • The property half rides machinery that already exists: a guild lot can map each rank onto the same access ladder lots already use for individual players, so containers, vendors, decoration rights and the crafting supply chests all follow the rank without new rules. Rooms and wings are a different matter and stay out of scope; the practical substitute is the basement.
  • Planning turned up four problems in the current guild and lot permission code, filed as their own bugs. Two are live today: a lot permission granted through guild standing outlives being kicked from the guild, and vendor access lingers for a few minutes after a demotion. The other two would have been triggered by adding ranks.
  • Guild rank changes now check the rank of the person making them: nobody can hand out a rank above their own, or change the rank of a member who outranks them. The same rule already applied to lot and town permissions. Nothing changes for guilds today, since only the guild leader can set ranks at all.

Crafting

  • Failed crafts no longer claim "All fuels were consumed" when the recipe uses no fuel. Butchering was the clearest case, with no fuel ingredient in any of its 338 recipes; 1,388 of the game's 3,283 recipes were showing the false line. Recipes that do burn fuel still say so.

Crown Shop

  • Buying several copies of a Crown Shop item no longer means clicking Purchase once per copy. Purchase now opens a quantity prompt, and the confirmation dialog shows the total crown cost for the whole order. A run is capped at 20 copies, and emote bundles still buy a single copy.

Items

  • Cooked food had almost no art of its own. 71 dishes, including garlic chicken, every cooked fish and all the meat pies, drew the same empty wooden plate in the recipe book, the crafting list and the item tooltip, and four more groups shared one icon each. 107 dishes now have their own icon.
  • Built the icons from art the game already ships rather than waiting on new art. A script reads each recipe, takes the main ingredient out of it, and plates it: cooked fish use the per-species fish art instead of the generic fillet, pies come out as a slice coloured to the filling, stews sit in a bowl, sandwiches on a loaf. Meat is graded per animal because the shipped meat icons are one shared slab.

Content

  • Built the first dungeon made end to end by the new builder: The Cistern of Atos, a tier-five flooded drainage run beneath Castle Atos. Nine build passes produced 78 objects with no errors - tunnels and junctions, a chest alcove, the great cistern and a boss cistern, water, torchlight, ambient drips, ten creature spawn points, and a baked navigation mesh - plus ten sealed stubs reserved for later expansion. The dressing was chosen from the prop catalog by story: silt and standing water near the entrance, spreading cobwebs, then bones and glowing moss as the tunnels reach the flooded chambers.

Interface

  • The Rewards window now opens on the new UI framework. It remembers its own position and size separately from the backpack, so opening both no longer stacks them on top of each other.
  • A rewards fetch now reports how many items it has loaded while it runs, instead of a fixed Loading label that could not be told apart from a stuck window.
  • With nothing waiting to claim, the Rewards window shows the no-rewards message and its link in place of an empty list.
  • The jukebox and phonograph window now renders on the new UI framework, with its song, composer and album columns, the now-playing readout and the Play and Stop controls.
  • Jukebox rows show the song name again rather than repeating the item name. The new list view could only read generic item columns, so it now asks each list for its own.
  • The emotes window now renders on the new UI framework, with sortable Emote Name and Teachability columns and a search box the old window did not have.
  • Emotes still drag onto hotbar slots, and double-clicking one still plays it, keeping the two second spam limit and the rule that you have to be on the ground.
  • The add-on manager now renders on the new UI framework. Each add-on row keeps its icon, name, creator, version and description, and gains a button whose label says what it will do rather than a pair of overlapping on and off buttons.
  • Retired the add-on row prefab and its two scripts along with it, carrying over the per-row folder button so nothing was lost.
  • The deck window now renders on the new UI framework. Each deck is a card with its number, name, glyph count and equip controls, and the window can be moved and resized, which it could not before.
  • Pulled the deck ordering rules out of the deck window into tested code: the saved order, moving a deck, and the renumbering after a delete. That last one had no tests and is the part that quietly leaves decks under the wrong numbers.
  • Fixed a leak in the deck window. Closing it added a listener instead of removing one, so opening and closing it repeatedly left stale work running.
  • Built the UI Toolkit equipment slot, and put the mannequin, fish tank and doll cabinet windows on it. An empty slot now shows the name of what goes in it, which the old version left blank.
  • The new slot adds no rules of its own. Every equip check, transfer path and item menu comes from the existing slot code, so the character sheets can reuse it later without the two versions drifting apart.
  • The decoration list now renders on the new UI framework, with a search box for heavily decorated lots and a proper explanation when you are not standing on a lot you can decorate.
  • The decoration list no longer re-reads the whole lot every frame while it is open. It checks a few times a second instead, which should help on lots with hundreds of decorations.
  • The window for handing items to an NPC now renders on the new UI framework. It is the first window with two item panes side by side, which is the shape the merchant and trade windows will use.
  • The live 3D character render now works in the new UI framework. Four windows show one of these: the character sheet, the pet sheet, the inspect sheet and item preview. The cameras and models stay exactly where they are; the new element shows what they already render and passes drags and wheel turns straight through. The two direction conventions differ between the old and new frameworks, so both are pinned by tests and a drag cannot end up backwards.
  • Stat tooltips on the character and pet sheets now work in the new UI framework. Both sheets build their whole stats panel as one block of text with about twenty hover spots in it, and the old framework found the one under your mouse by asking the text block. The new one cannot do that, so the panel is cut into rows and each stat becomes its own hover target. The explanations themselves did not move.
  • The character sheet and the inspect sheet are on the new UI framework. Your name, the character turning under the mouse, the equipment slots around it, the stats panel and Show More all work as before, and dragging gear onto a slot or straight onto the character still equips it. The stats themselves did not move: the same numbers, the same explanations on hover. Both windows are now resizable and remember their own size and position, so your sheet and someone else you are inspecting can sit side by side.
  • Which equipment slot sits on which side of the character is read back from how each sheet was laid out rather than listed in code, so all three sheets keep the arrangement they were built with and a slot added later lands where it was put.
  • The pet sheet is on the new UI framework too, which closes out the character sheets. Same shape as the other two: your pet, its three equipment slots, and its stats. It keeps its own size and position, so it can sit next to your own sheet.
  • Windows that open taller than the screen now shrink to fit on the first open. The window frame was keeping a window above its minimum size but not inside the screen, so on a short display the bottom of a tall window hung off the edge with its controls out of reach.
  • The item preview window is on the new UI framework. The item still turns under the mouse and zooms with the wheel, wax cylinders still play a sample, and previewing a dye still shows the colour before you commit. The window is resizable now and remembers where you put it.
  • The dye preview existed twice, once on the character sheet and once on the item preview window, as the same hundred and twenty lines. They now share one, and the only real difference between them turned out to be where the result gets shown.
  • Groundwork for shops and trading: the shared item list behind the backpack, bank, loot containers and lot storage now handles the kinds of listings a shop or a trade shows, not just the contents of a bag. Those four windows were re-checked after the change and draw exactly as before, down to the item name colours and the stacking drops.
  • The offline save-game dialog is on the new UI framework. Your saves are listed with the date each was written, the columns sort, and double-clicking a save fills its name in. The Save button could previously get stuck disabled after a failed save; it now follows whether a save is actually running.
  • The vendor listings window is on the new UI framework. Searching by name, across all zones, by buy orders, by category and by stat all work as before, as does being pointed at a vendor on your compass. Two things are better: the window can no longer be made narrower than its own columns, which is what used to leave rows drawn over the scrollbar, and widening it now gives the extra room to the item name.
  • The merchant window is on the new UI framework, which finishes the batch of ten. Buying and selling work as before, including the quantity prompt and dragging. The exchange now sits beside the buy and sell tabs rather than behind one, so you can see what you are buying and what you are selling at the same time.
  • Any list in the game can now be drawn as a table in the new framework without the view needing to know what it holds. The merchant needed it, because its three panes hold three different kinds of thing, and the vendor, trade and mail windows will each need it next.
  • Buff and debuff icons are back on party member and companion bars. They had been showing nothing since those bars were rebuilt, so there was no way to see who was buffed or slowed without clicking them. Icons, the countdown shading, hover text and right-click dismiss all work again.
  • The countdown shading on an effect icon is drawn directly now rather than with a filled sprite. Calibrated against the original: a quarter elapsed darkens the top-right quarter of the icon, and a fully elapsed effect covers it.
  • Fixed the merchant window, which could not be opened at all: talking to a shopkeeper ended the session. Three further problems in the same window went with it. Item values and quantities were drawn under the wrong headings with the last column left blank and the item name missing, coloured item names could show their formatting codes as plain text, and double-clicking a row to add it to the exchange did nothing, so nothing could be bought or sold. The window also comes forward when clicked now instead of sitting behind the backpack.
  • Double-clicking rows in the shared list windows works again, and so do the character sheet equipment slots. Both were reading a click count that the interface does not report reliably, so the second click was being missed.

Combat

  • Skills that strike once and leave a bleed behind were firing the attacker's weapon on-hit effect twice per cast, so a poisoned weapon applied its poison two times from a single Rend. The same double application hit Puncture, Sawblade Sweep and Spinning Attack. A bleed starting up is not a weapon impact, so only the opening strike procs the weapon now. Multi-hit skills like Quad Slash and Double Thrust are unchanged and still proc on each of their hits. A sweep of all 205 skill definitions confirmed those four were the only ones affected.
  • Combat pets now answer the Open PvP checks as their owner does. A flagged player's pet used to be picked up by the auto-attack and area targeting of an unflagged player who could not touch the owner, because the targeting code gave up whenever the target had no player attached. Clicking the pet to select it still works, so the deliberate case is unchanged.
  • The disposition code resolved a pet to its owner for the party check and then read the pet's own empty player slot for the Open PvP check on the next lines. Both checks now run off one resolution, so they cannot disagree.
  • Fixed a crash in friendly-arc targeting: a support skill aimed near someone's pet while unflagged for PvP hit an empty player slot. Added editor tests for the pet targeting matrix and the decoration flag sets.
  • Summoned earth and ice elementals were swinging at targets they could not actually hit. The pet decided an attack was in range from its weapon range of 5 metres, but the ground effect that carries the damage only reaches about 4, so any swing started in that gap played the animation and the earthquake and dealt nothing, with no combat log line. Both sides now read the same reach number, and the elemental walks the last metre before it swings.
  • The behaviour tree already had a check that aborts an attack whose target has moved out of range before the animation starts, but nothing ever switched it on. It is on now for creature attacks, so a target that steps away mid wind-up no longer gets a phantom effect played at it.
  • Animal Charm now holds an animal for as long as the timer on its charm icon shows. The duration was being recalculated without the casters skill level, so at grandmaster the animal broke free at roughly half the displayed time.
  • Rewrote the Animal Charm skill description. It said the skill mesmerizes the target, which is a different effect, and it never mentioned that Lunar Specialization extends the duration.

Dev Tools

  • Rebuilt the two chambers in the generated dungeon so they are actually rooms. They had no walls: you could see straight out of them. The piece being used as a room turned out to be an interior floor tile whose four sides are open by design, so one on its own is not a room at all, and the engine was sealing those 8 by 10 metre sides with a 5.6 metre tunnel plug. Mining 85,918 observed piece pairings out of the five shipped sewers showed how the kit really builds a chamber: a block of floor tiles with a wall or corner piece laid over each perimeter tile, and a tunnel entering through a punched wall that spans the whole face. Both chambers are now 3 by 3 blocks, walled and vaulted, with the cistern and the boss room joined by a short tunnel.
  • Taught the dungeon builder to work out where a boundary piece actually faces instead of assuming. Every wall, cap and arch carries its stonework on one side, and which side differs by family: tunnel end caps face one way, chamber walls face another. The engine assumed one convention for all of them, which is how a chamber wall ended up as a 10 metre slab through the middle of a room. It now reads each piece's own measured bounds. Two new build gates come with it: a seal that cannot cover the hole it closes fails the build, and so does a join where a narrow mouth meets a wide face without a piece spanning the difference. Run against the old dungeon they flag exactly the six real gaps and nothing else.
  • Three older bugs surfaced while proving the chamber fix. Surface snapping, which seats props on real floors and walls, was casting rays against a physics world that had not caught up with the geometry built moments earlier, so it silently failed on anything freshly built and only worked when the shell already existed from a previous run. Serialized values meant to survive a rebuild were written back as text into a field expecting a number, so anything preserved errored the pass. And the navmesh node count and its reachability check both ran after the graph had been unloaded, which is how a 130 byte empty navmesh passed as baked and gated; the pilot now bakes 3,951 walkable nodes in a single connected region from entrance to boss room.
  • Fixed torches and moss hanging in mid-air in the rebuilt dungeon chambers. The props are meant to be snapped to a real wall by the builder, which measures and refuses if there is nothing to mount on; I had swapped that for an offset worked out on paper, and the paper was wrong. The chamber wall stone actually stands about 3 metres further out than assumed, so the rooms are roughly 22 metres across rather than 16, and every prop placed by hand sat out in open space. Snapping is back on all sixteen wall-mounted props across both test dungeons, and it earned its keep straight away by rejecting a torch aimed at the middle of a four-way crossing, which is open on both axes and has no wall to hold it.
  • Added the check that would have caught the floating props on its own. The decoration catalog already records which surface each prop belongs on, so a prop the catalog calls a wall piece must declare that it snaps to a wall; nothing else needs to be inspected, and it runs without opening a scene. On its first run it found nine more torches across the two test dungeons that had never declared it, including some that predate this week.

Lua addon API

  • Added ShroudPlaySoundChannel, which plays a loaded clip and returns the channel number that the stop and query calls actually take. The older ShroudPlaySound returned a number one lower than those calls expected, so addons had to add 1 to it before passing it back.
  • Left ShroudPlaySound's return value alone so addons already doing the +1 keep working, and bumped the reported API version to 4 so addons can check for the new call. Passing channel 0 now prints a one-time note in the Lua console pointing at the fix.
  • Negative sound ids and channel numbers used to raise a Lua error out of the three sound functions. They now return the documented failure value instead.

Tester Tools

  • Added a Gold section to the tester panel and the browser companion: type an amount, press Set Gold, and your purse changes to that value. Testers had no way to lower their gold, so "try to buy something you cannot afford" was untestable. Gold is account-scoped, and every change is recorded.

Inventory

  • Fixed bulk moves reddening the whole inventory. Take All from a full container, or dropping a loaded container into the bank, marked every item in the batch as broken, which blocked picking them up, equipping them and crafting with them until relog. One rejected item was enough to flag all of them.
  • A failed move now only flags the items the server actually refused, and the client re-reads the affected containers so the state clears on its own instead of waiting for a relog. Large moves into the bank are also split into smaller requests, so the size limit behind most of these failures is not reached.
  • Added a watchdog for transfers the server never answers. A dropped response used to leave every item in the batch flagged as in-flight forever, which looks identical to the broken case. Transfers that fail to send now report the failure instead of parking a callback that never fires.
  • Items no longer stay red after a move to or from the bank. The bank and backpack windows only repainted when the set of items changed, so when a move finished the row kept the colour it had while the move was in flight. A single item dropped into the bank stayed red until the window was reopened, and a red item cannot be picked up, equipped, crafted with or moved again.
  • An item in the middle of a move now shows in cyan. Red is kept for an item the server actually refused, so an ordinary transfer no longer looks like breakage.
  • A move the server never answers no longer marks the items as broken. The timeout added yesterday released the items but marked every one of them in the process, which cannot be undone. It now re-reads the affected containers instead, and it can no longer be suppressed forever by a transfer that wedges the storage layer.
  • One failed transfer no longer takes out the unrelated ones queued in the same frame, and one stuck transfer no longer disables recovery for the rest of the session. Both left items pinned as part of a transaction that would never resolve.
  • Transfers now split into requests before an item pushes them over the server limit rather than after, so a request no longer goes out carrying one item too many. A container holding more bags than a single request allows is refused with a message explaining why, and taking more than 16 containers out of the bank at once works again.

Performance

  • Farm crops can now be drawn in batches. The plant materials already had GPU instancing switched on, but the SpeedTree shader refuses to batch anything whose detail levels are cross-fading, and the importer had been stamping that fade onto every crop. Cleared it on 161 detail groups across 108 crop prefabs and the 39 matching importers.
  • Measured on a test field of 1,600 potato plants: draw calls that could not be batched fell from 2,510 to 150, and the batches that remain each carry more of the field. Crops now pop between detail levels instead of dissolving, which is the trade for the framerate.
  • Added a Frame Rate Limit setting to the Video options tab, with presets from 30 up to 240 FPS and No Limit as the default. The client had no frame cap of its own in release builds, so holding the frame rate down previously meant reaching for a graphics driver setting.
  • Fixed a frame rate bug that had been sitting harmless until now: the scene loading path restored the vertical sync setting and then re-applied the quality level, which wrote its own value straight back over the restore. Harmless while every quality level agreed on the value, but it would have stopped a frame rate cap working after the first zone change. One component now owns both frame rate controls and reconciles them each frame.

Dungeon tools

  • Rebuilt the big test dungeon so it actually branches. The first version passed every check and was still a straight line: 39 places, 38 connections, zero loops, and a 31-step path from the door to the boss with no way back except the way you came. Nothing in the builder caused that, so we added a measurement instead. The second version has 27 loops, an entrance ring that forks three ways and rejoins, three hub rooms whose side galleries come back to the main corridor, two ramps at every level change so the descent is a loop, and a vault you can reach two different ways.
  • The builder now measures the SHAPE of a layout, not just whether it is valid. It collapses every loop to a single point first, so a nine-tile room counts as one place and only its doorways matter, then warns when most of the dungeon sits on one critical path. Rooms threaded on a line is a legitimate design, but now it is a choice rather than an accident.
  • Found a bug that had been quietly producing broken monster pathing. The navmesh is baked inside a box sized from the level geometry, but the physics engine only refreshes an object collision box when asked, and nobody was asking - so all 165 pieces still reported the position they had at the moment they were created. The box collapsed to the size of one corridor segment at the origin. For a dungeon 312 metres long the bake covered the entrance and nothing else: 80 walkable spots. One line to sync first, and the same scene bakes 3,613, in a single connected area from the entrance down four levels to the vault.
  • The check that was supposed to catch that had gone green over it. It confirmed every room reached the nearest walkable spot and that they all connected - but never checked the nearest spot was anywhere near the room, so a hundred rooms all matched the same handful of entrance tiles and passed. It now requires the walkable spot to be inside the room it is testing.

Bug Fixes

  • Fixed a crash that closed the game when an NPC started speaking a voice line it had not played before that session. A tester hit it three times in eight minutes in Castle Atos. The audio was being released before its decode had finished, so it could be freed while playback was starting.
  • Two more ways NPC voice audio could be freed while it was still playing are fixed: clearing the voice cache from the Audio options mid-sentence, and discarding old lines once a session had heard a lot of them.
  • Interrupting an NPC while its line was still downloading used to stop that one line from ever playing again for the rest of the session. It now cleans up properly.
  • Choosing Compass from the window selector menu now turns the compass ribbon off and back on. It previously did nothing: the compass is on by default and is the one window in that list with no close button and no key bound to it, so the menu row was asking an already-open window to open. Every other row still opens or raises its window rather than closing it.
  • The compass no longer overrides the mouse mode you picked in Options. It had been pushing a cursor mode onto a save-and-restore stack every time a scene loaded, with nothing to take it back off. The timers window does the same thing and is filed for its own fix.
  • Fixed a way any window could become permanently unopenable for a session. Show and hide both skip out while a previous sequence is still in flight, and the sequence tracker kept reporting one as running after the engine had dropped it, which happens when the object is switched off part way through. Both paths now detect the stale state and start over.
  • The combat deck window opens as one window again. Since its rebuild it had been opening a second, empty old-style frame behind it, because the new window was left as a child of the old one instead of replacing it. Two players reported it within hours.
  • Each deck in that window is one line now: position, name, glyph count, and its controls. The rebuild had given every deck a three-line block with seven buttons wrapped across it, four of them equip buttons with three always greyed out, and everything centred. About fourteen decks fit at the default size against six before.
  • The deck controls read as they used to: one Equip button that turns green and says Equipped when that deck is on, one Alt button that turns green when it is your alternate, and Modify, Copy and Delete behind a small menu that right-clicking the row also opens. Selecting a deck highlights it again, and reordering one near the bottom of a long list no longer throws you back to the top.
  • Every label in the deck window is translatable again. The rebuild had left the buttons, the title and the footer as English text that would have shipped untranslated to all seven languages. The title also reads Combat Decks again, matching its name in the window list.
  • Two more things that window had lost: it can be pinned again, and it comes to the front over the backpack and the vendor windows. Closing it also stopped leaving a hidden copy of itself behind each time.

Localization

  • Added Japanese as a selectable language. It shows as 日本語 in the launcher and in the Options language list, and a client running on a Japanese operating system with no saved preference now starts in Japanese on its own. The translations are not written yet, so text still reads English for the moment.
  • Shipped the Japanese font. Two traps cost a detour: the upstream release of Noto Sans JP uses an outline format our text renderer could not rasterise, and the font defaults to its Thin weight, which is unreadable at interface sizes. The version we ship is a normal-weight build in the format that works, with the licence text alongside it.
  • Fixed two Simplified Chinese problems found while wiring Japanese. The translation quality checker had no rules for Chinese, so its check for English text left in a translation never ran at all. Its length check also assumed European text, and flagged 4 of 4 sampled real Chinese interface strings as suspicious because Chinese says the same thing in about a third of the characters.
  • Chinese text has been drawing about twice too light since the font was added. The font file was a variable one whose default setting is its thinnest weight, and the engine has no way to ask for a different one, so every Chinese character in the game was hairline thin. Measured at 324 ink pixels per character against 659 for the correct weight. Now shipping the normal weight, and the file is 6.8 MB smaller.
  • Built the Japanese terminology base: 3,591 conversation keyword terms and 2,710 character, place and item names, so the same proper noun reads the same way in a name plate and in the dialogue that mentions it. Every language before this one inherited a human-translated base to mine for that; Japanese had nothing, so the tooling now authors one instead.
  • Ran a blind head-to-head to pick the model for the Japanese translation pass: 500 records, two systems, a reviewer who was not told which was which, and the two candidates swapped left-to-right on half the records so position could not skew it. One won 59.7% to 33.5%, and its biggest lead was in politeness level, which is the part of Japanese that reads as broken when it is wrong.
  • The reviewer also caught a mistake in our own Japanese style rules. A quest objective or a journal entry the player wrote is not someone speaking, so the polite verb forms we had specified everywhere made objectives read like an order being given. Rewrote the rules to use plain forms for anything the player reads about themselves, and re-exported all 3,791 batches so every one carries the correction.
  • Japanese is translated. Every NPC conversation line in the game now has Japanese text, along with item names and descriptions, quest entries and objectives, loading tips, skills and the interface. Dialogue came out at 66,792 of 66,792 lines. The only gap left is in-game books, which sit on a separate track for every language.
  • Checked the result rather than assuming it: an automated pass over all 119,431 lines flags 247 of them, and every one is something that should stay as it is, such as the invented words used in spell casting, the Latin carved into certain walls, and internal asset codes. The most recent language we filled before this flagged about seven times as many.
  • Japanese was the first language with no existing human translations to build a glossary from, so the tooling now writes one instead: 3,591 conversation keyword terms and 2,710 names of characters, places and items, settled once up front so the same proper noun reads the same way in a name plate and in the dialogue that mentions it.

Tooling & bridge

  • The commit guard that blocks accidental sweeping commits had never actually run on the Mac checkout. It is a shell script with no file extension, and one line-ending setting meant it arrived in a form the system could not execute, so every commit went in ungated. The rule that already covered a sibling hook now covers all of them.

Guilds & Towns

  • Planned a web companion site that would give every guild and every player-owned town its own portal: a calendar, a message board, wiki-style pages the group can write themselves, a map of the town showing which lots are claimed and who holds them, and listings for lots that are free. Players would sign in with their game account and get exactly the authority the game already gives them, so a guild leader is a leader on the site too, and a town owner can manage their town without logging in.
  • The plan is staged so the risky parts come last: read-only guild and town pages first, then the town map, then the calendar, board and wiki, and only after all of that the ability to change guild ranks or town permissions from the web. Reading the scoping through also settled two things worth knowing up front. The permission rules the write-back needs already exist on the server side, so those changes are a thin layer rather than a new rulebook. And one lookup the town map leans on has no index behind it today, which makes adding that index a prerequisite rather than a later tuning pass.

Follow and emotes

  • Turned off the default key for the new Follow Target bind. It shipped on Keypad 7, and pressing it with nothing selected follows whoever the mouse is hovering over, so players ended up trailing each other without knowing why. The action is still there to bind under Options if you want it, and anyone who already had Keypad 7 stored for it gets that one binding cleared with the rest of their keys untouched.
  • Starting or stopping a follow now shows on screen as well as in the chat log, and the start message names the command that ends it. Turning off "allow other players to follow me" is also checked when the follow starts rather than a frame later, so you no longer get a "now following you" notice for an attempt that is about to be refused.
  • Fixed /mimic running until you found the off command. It was documented to stop when you move and it did not, so a tester spent several minutes copying everything another player did. Copying now ends when you move, when they get more than 15 metres away, when they leave, or on /mimic off.

Testing

  • Marked 205 verification tasks as ready to test. The tracker board tells testers which build carries a fix, and for several builds that step was skipped, so tasks that had been live for days still read Not on chaos yet and stayed hidden behind the in-game board default filter. All 205 whose changes are in the current build now say so and show up in game; the 14 waiting on work that landed after the build was cut were left alone.

Build & CI

  • The Server Tools job on the old build farm had been failing since its agent moved to different hardware. The replacement machine was missing two compiler support packages, so three of the ten projects in that solution would not build. Added both packages, then re-ran the job and its nightly counterpart; both pass again.

Client

  • Opening the Options window could resize the game window by itself, dropping it to the smallest resolution the game offers and saving that size for the next launch. The Video tab now leaves the resolution alone unless you pick one. Found in a crash report where a player spent 66 window resizes dragging it back before the client ran out of video memory and hung.
  • Fixed clicks landing above the mouse pointer for Linux players in windowed mode. On a desktop with a task bar, the game asked for a window taller than the usable screen, the desktop shrank and moved it, and the click positions kept pointing at where the window used to be. Clicking the Password field on the login screen activated the Name field instead, and it stayed that way until the window was dragged by hand. The game now asks for a window that fits, and repositions it once at startup if the desktop still adjusts it.

Crash reporting

  • Crash reports now attach the minidump Windows keeps when the game itself writes none. Sixteen crashes came in today with no dump uploaded and a usable one sitting on each player disk the whole time.

Social

  • Fixed /partner: the invitation to dance never reached the player it was aimed at, so paired dancing did not work on the shard at all. The person who typed the command saw "You ask X to dance" and nothing further happened.
  • Partner invites are now checked against the client that actually sent them, so an invitation cannot be made to look like it came from someone else.
  • The player who accepts a dance is moved onto a spot in front of their partner. The camera now travels with them, and both players get a line in chat when an invitation is accepted.

User Interface

  • Handing a quest item to an NPC works again. The window that opens when someone asks you for something would take the item off your pack but never let you put it down on the offer side, so the exchange could not be completed. The new window had the old one still sitting invisibly behind it, and the old one was catching every drop.
  • The same window picked up the rest of its conversion parity: it narrows to the item the NPC asked for when you are carrying it, double-click takes back something you already offered, right-click opens the item menu, shift and ctrl drag split a stack or take one, a multi-row selection drags in one go, and the Accept Exchange button no longer renders below the window frame.
  • A UI Toolkit window under the pointer now wins a drop over anything the old UI reports underneath it, which is the general form of the same bug for every window converted so far.
  • Fixed the skill tracker popups on the right of the screen sitting away from their own close and pin buttons. The icon, skill name, level and progress bar were drawn at a fixed spot while the buttons followed the HUD layout, so the first row sat about 64 pixels too high and every row below it drifted a further 8 pixels out of line. Each popup now reads its position from its own row every frame, at any window size, UI scale or number of tracked skills.
  • Fixed the Decoration Placement Settings window drawing its lower options outside its own frame, on top of the world, once the window was dragged down near its smallest size. The settings column now scrolls when the window is smaller than the list, and every window built on the shared frame clips its contents to the frame so nothing can paint outside it again.

Housing & Vendors

  • Access to a player vendor now ends when the permission behind it ends. Being kicked from a guild, dropping below officer, leaving the guild, having a lot role lowered, or a lot owner turning off its guild setting each cut off vendor and tip jar access on the next action instead of leaving it working for up to six more minutes.

Server

  • Two guild permission checks disagreed with each other. One tested the member role as a set of bits, the other matched it exactly and quietly granted nothing when it did not recognise a value. With three roles in the game they happened to agree, but a fourth would have handed a member trustee-level rights on a guild lot while giving them no guild permissions at all. Both now check every role explicitly and stop on one they do not know, and the role a member arrives with is screened before it is used.

Housing & Decoration

  • Conversationalists and deco pets set to Stay here now hold the exact spot they were placed on, and every player in the scene sees them in the same place. A placed NPC picked each new destination from wherever it was currently standing, so it drifted: replaying the old picker 5,000 times from a 10m roam radius walks the NPC 38.8m from home. Destinations are now drawn around the placed position instead, so the same 5,000 cycles never pass 10.0m.
  • The Stay here and Patrol choice now travels with the decoration instead of being worked out separately by each player's client, so switching it takes effect for everyone already standing on the lot rather than the next time they load the area. The first Stay click on an NPC nobody had configured before was also being saved under a key the reader never looked for, which is why the setting could appear to do nothing at all.
2026-07-24 · 69 items

Headlines

  • Fixed the avatar hopping and taking fall damage running downhill: footing now sticks to the slope the way it does on the live game.
  • New experimental Pixel Art mode: the live 3D world rendered as stable pixel art, with a camera grid snap that took first-test pixel flicker from 1.25% to 0.00%
  • Swept a batch of long-standing audio bugs: tree chopping now sounds on every swing, instrument top notes play correctly, crafting-station sounds stop when you leave, and companions bark at the start of a fight instead of every few seconds.
  • Pixel Art mode ran live in Soltown with first screenshots up: camera-caused flicker held at zero by the grid snap, scene animation churning 51% of low-res pixels is the next target, and the "broken shadows" scare turned out to be an actual in-game sunset photobombing the measurements
  • Closed a Lua addon safety hole: a disabled addon could still be run from the /lua command. Disabled addons are now fully inert until enabled.
  • Stone Fist stuns in PvP now show the attacker the true result, ending phantom stun icons on the target bar.
  • Rebuilt the backpack on the new UI framework: the first inventory window on UI Toolkit, opening in place with items, weight, drag-and-drop, and stacking.

Community

  • Nightly forum sweep filed 6 items to the tracker: 5 player suggestions (guild-invite confirmation, Crown Shop purchase quantity, a partner dance emote, exceptional-crafting-chance balance, addon-developer early access) and 1 stalled bug report (Animal Charm tooltip/timer/damage issues).

Gameplay

  • Running down hills no longer makes the avatar hop and take fall damage. The ground-stick that keeps footing on descending slopes had been clamped too tightly since a recent fix, so on any real hill the character floated off the ground each step and took a small fall. It now follows the full slope while moving, and still holds still on a slope when you stop.

UI

  • Fixed the deck-name labels floating in the middle of the screen. They now stay attached above the swap-deck icon at any window size or UI scale.
  • The skill-tracking display is back at the right edge of the screen instead of the center, with its hide button beside it where you can reach it.
  • Pet and companion nameplates are readable again. The name text got its dark outline back so light pet names stop washing out over bright scenery, and the box around a selected target is now a soft highlight instead of a hard frame.
  • Opening a container on a lot or in a player dungeon no longer pops up a stray "unable to change permissions" message. The window was quietly sending a permission change on open; it now stays quiet and the controls still work when you use them.
  • Connected the item drag-and-drop groundwork: picking up an inventory item now draws it on the new UI layer that floats above the converted windows, so it stays visible while you drag. Checked it in-game with a real item on the cursor. No change you can see yet; it takes effect as the inventory and vendor windows move over.
  • Started moving the backpack to the new UI framework: a reusable inventory grid that draws your items — icon, name, and count — wired to the existing move and stack rules. Rendered the full backpack in a live test and it matches the current window. Next up: the full window with weight, tabs, and drag-and-drop.
  • Built the backpack on the new UI framework: the full window now renders with a draggable frame, your items with icons, and the live weight readout, all driven by the existing inventory rules. Verified against a real character in a live test. Still to come: making it the default backpack you open.
  • Wired stacking into the new backpack: dropping one item onto a matching one combines them, using the same rules as today. Part of the ongoing backpack rebuild on the new UI framework.
  • The backpack now opens on the new UI framework. Your items, icons, quantities, and carried weight all show in a rebuilt window you can drag, resize, and reopen without it going blank. Dragging picks an item up onto the cursor, double-clicking uses or equips it, and dropping one item onto a matching one stacks them. Only your own backpack changed this round; the bank and loot windows follow.
  • Right-click now works in the new backpack: right-clicking an item opens the same menu as before (equip, repair, lock, link in chat, and the rest), wired to the existing item actions.
  • Added a search box to the new backpack: type part of an item name and the list narrows to matching items.
  • The new backpack now updates while open: dragging an item out or using one refreshes the list right away instead of waiting for a reopen.

Quests

  • Fixed a grammar slip in the "Tell Raymond or Stanley About the Fire" journal entry, where one sentence had an extra word. The wording is corrected in English and will refresh in the other languages.

Combat

  • Six skills (Skewer, Break Armor, Break Weapon, Pull, Splintering Strike, Flaming Bash) no longer apply their debuff when the whole swing is dodged. The debuff now waits on the attack landing, the same way the other skills already behave.
  • Fixed the Air magic defensive passive Well Grounded, which was giving only half the protection of its Fire and Water counterparts. It now reduces incoming air and lightning damage at the same rate as Fire Proof and Cold Blooded, reaching about 50% air resistance at skill level 100 instead of 25%.
  • Fixed Shield of Ice so its damage-avoidance protection lasts as long as the spell's other effects. It was expiring at half the duration of the fire resistance and critical bonus, so the shield lost its avoidance early.
  • Fixed the Shield Charge effect list, which showed its stun chance twice and never displayed the knockdown chance. The second line now correctly reads as the knockdown. The skill already knocked targets down; it just was not labeled.
  • Fixed the Torpor skill tooltip, which could show a negative cooldown at high skill. The displayed cooldown now clamps at zero, matching the actual timer. The clamp covers every skill.
  • Fixed the summoned Ice Elemental's attack slow, which did nothing for summoners without Water Magic Specialization because it scaled entirely off that skill. It now has a base slow of about 20% for every summoner, still boosted by Water Magic Specialization.
  • Lightning Storm's stun now scales with air stun bonuses like Rapid Discharge, matching how other air spells behave. With no air stun bonuses the duration is unchanged.
  • Lightning Storm's duration now increases with Air Magic Specialization, as its description promises. It previously stayed a flat 10 seconds regardless. Without the specialization it still lasts its base 10 seconds.
  • Fixed Fire Arrow so its burn over time and its two debuffs (reduced fire resistance and reduced healing) all last the same length. The burn was running slightly longer than the debuffs. This matches how Flame Fist already behaves.
  • Fixed a Stone Fist stun that Knight's Grace could not clear in duels and PvP. The stun was flagged in a way that made it behave like a non-removable effect; it now clears like every other stun.
  • Fixed Bolster Balance keeping its shield-required resistance bonus after the shield was unequipped. The resistance now updates on equipment change and drops when the shield comes off, matching the skill's other bonuses.
  • Fixed sprinting draining Focus while in walk mode. Walk mode caps your speed so the sprint did nothing, but it still burned Focus. Sprint no longer engages while walk mode is on.
  • Fixed the Light spell leaving behind glow visuals that never went away and stacked up, causing severe frame-rate drops. A repeat cast that does not replace the existing Light no longer spawns an extra glow.
  • Fixed Melody of Mending stacking twice on the same target. It now allows only one heal-over-time per target at a time, matching the other bard heals.
  • Fixed the over-encumbrance penalty carrying into ghost form after death (seen with Nefario's curse). It now clears on death and reapplies after resurrection only if you are still overweight.
  • Fixed combat rolling being blocked while over your weight limit even at full Focus. Focus now pays the encumbrance penalty, so the roll works unless you are actually out of Focus.
  • Fixed fall damage breaking stealth. Silent Movement and other stealth skills are no longer canceled by falling; damage from enemies still breaks stealth as before.
  • Fixed Healing Burst ignoring your life attunement. It was the only heal that did not scale with attunement, so Tap Soul's negative life attunement did not reduce it. It now scales like the other heals.
  • Fixed a PvP display bug from the old bug backlog: Stone Fist showed its stun icon on the attacker's view of the target even when the stun had not landed, so the skill looked unreliable (from-jira #1994). The attacker's target bar now waits for the confirmed result and only shows the stun when the defender is really stunned. The same correction covers other chance-based control icons shown on another player, such as roots and mesmerize.
  • Also stopped restored and synchronized combat effects from billing the caster a second time for weapon durability, reagents, and glyph charges. Logging back in with active effects no longer wears your weapon.
  • Fixed Thrust not applying weapon poison or other on-hit weapon effects when it landed. The same fix restores on-hit weapon effects for other skills that use variable-damage attacks, such as Puncture, Piercing Shot, and Multishot.
  • Fixed Taunt wearing down shield durability on every cast even though it deals no damage. It no longer charges weapon or shield durability, matching the other no-damage stance skills.
  • Fixed Chaotic Clone with the Chaos specialization showing a stealth buff without actually hiding you. It now applies real invisibility like the other stealth skills.

Launcher

  • Crash reports from a client that got stuck on the loading screen are now labelled as a scene-load failure instead of being lumped in with startup failures, so that kind of hang is easier to spot and chase.

UI Toolkit

  • Started the inventory-side UI Toolkit conversion: rebuilt the in-game item-query window as a searchable, sortable results list with item icons and hover tooltips on the shared window chrome. This landed a reusable item-icon list column that the backpack, bank, and vendor windows will build on as those conversions follow.
  • Started the UI Toolkit rebuild of the item drag-and-drop plumbing — the groundwork behind moving items between bags, the bank, vendors, and mail. First piece landed: converted windows can now be recognized as drop targets when you release a dragged item over them. No in-game change yet; this clears the way for the inventory and vendor windows to move over next.
  • Added the floating icon layer that carries a dragged item above the new UI windows — so when the inventory and vendor screens move over, you still see what you are holding while you drag it. Still groundwork; it connects to the drag system with the first inventory window.

Rendering

  • Started an experimental Pixel Art mode for the client: the live 3D world drawn as low-resolution pixel art, with the pixels holding still while the camera moves instead of the usual crawling that screen filters produce. The scene renders at one third of screen resolution with the camera snapped to a pixel-sized grid every frame, gets reduced to a 32-color palette with ordered dithering, and scales up with hard pixel edges. The UI, nameplates, and text stay full resolution. Developer console toggles only for now.
  • Built the measurement rig with it: a scripted camera bench that replays fixed motion paths and counts changed pixels frame to frame, plus 37 new editor tests including a render proof of the core trick. First numbers: a small sideways camera drift re-decides 1.25% of pixels with plain low-res rendering and 0.00% with the grid snap on.
  • First live run of Pixel Art mode in Soltown. Two fixes came out of it: the low-resolution redirect now happens at the end of the frame update instead of the camera pre-cull callback (assigning the render target in pre-cull silently misses that frame on Unity 6, which presented a sky-only image), and the stability bench had its motion-compensation direction reversed. With those in, the full pipeline works in a real town: pixelated world, full-resolution UI and nameplates, live console toggling between the old and new modes.
  • The stability numbers from that run, measured on a 612x340 pixel grid: a sub-pixel camera wiggle re-decides 36.1% of pixels with normal rendering and 4.5% through the old mosaic filter, while the new grid snap holds camera-caused flicker at zero, matching its 0.00% result in the controlled test scene. The surprise was the scene itself: wind-blown foliage, water, and townsfolk re-decide 51% of low-res pixels every frame with the camera perfectly still. Taming that animation churn is exactly what the stepped-animation and steady-lighting phases of the plan are for, and now there is a hard number to beat.
  • Correction from later the same day: the "everything in shadow" seen on that first run was not a bug at all. In-game time runs about twelve times faster than real time, and the sun was setting between the comparison shots. Verified side by side at a pinned midday: rendering to a texture matches normal rendering, shadows and all. A new editor test now guards that path permanently, and the bench already pins the clock during measurements.
  • First in-game screenshots of Pixel Art mode: the same Soltown street rendered normally and through the pixel path at a pinned midday, with the interface staying full resolution over the pixelated world. The look is far from final: dark ground currently leans purple in the 32-color match and the dithering reads strong in shadow, both on the tuning list for the look pass.
  • Finished the render-quality half of the Pixel Art mode polish pass. The upscale now uses an analytic filter that keeps pixel edges hard at any window size: whole scale factors reproduce exact pixel blocks, fractional ones confine blending to a band thinner than one screen pixel, verified by 3 new editor tests. Writing those tests caught a subtle flaw in the popular version of this filter, which softens one pixel column at every block edge even at exact whole-number scales; our version centers the blend band on the edge instead.
  • Two smaller fixes in the same pass: the render target is cleared on creation so the first frame of the mode no longer shows a flash of uninitialized memory, and the in-game photo camera works while the mode is on, producing a low-resolution photo to match the look instead of failing on a size mismatch.
  • The Pixel Art mode pixel grid now anchors to the real camera distance: the stabilizer reads the live zoom and camera-collision distance every frame instead of a fixed 5 meters, held through a small deadband so the grid stays perfectly still once the camera settles instead of rescaling a hair per frame while zoom easing finishes. First person keeps the fixed mid-range anchor. Benchmark runs pin the distance for their whole run so their numbers stay comparable.
  • Two new opt-in Pixel Art mode stabilizers: a camera rotation snap that quantizes turning to whole-pixel angular steps, with the in-between remainder smoothed by the same sub-pixel scroll already used for movement, and a field-of-view tuner (0.5x to 1.2x) that can narrow the view to cut perspective-induced pixel drift. 17 new editor tests pin the math, including two render tests that would catch a wrong-way scroll sign as doubled motion.

Docs

  • Rewrote the Lua addon API reference so each category opens with a quick-reference table that links to a full entry per function: the call signature, its arguments, the return value and failure values, and a short example. It now covers the whole scripting surface, from player and pet stats to targeting, party, inventory, the UI widget calls, sound, timers, and saved variables, taken straight from the client bindings.
  • Published the Lua addon documentation as a public website, no login required: a landing page, the authoring guide, the full API reference with a category sidebar and a per-function search, and a host-internals page. It is generated from the same docs kept with the code, so it stays in step with the game.

Audio

  • Fixed tree chopping playing its sound on only every other swing. Pine and maple trees now play a chop sound on every swing, and chopping one tree no longer mutes another nearby one.
  • Fixed the accordion and other instruments that use one recording per key jumping oddly on the top note. The 8th key now plays its own high note instead of repeating the lowest key's sound, so the scale climbs smoothly.
  • Crafting station sounds now stop when a craft finishes or when you walk away from the station, instead of lingering after you leave and stacking a second copy when you craft again.
  • Escorting companions and creatures now make their combat bark when a fight begins rather than repeating it every few seconds while switching between enemies.
  • Summoned Wisps now have sound effects. The summoned Wisp pet was silent while the wild Wisp had its movement and casting sounds; the summoned version now uses the same sound set.

Lua Addons

  • Fixed a hole in the addon safety system: a disabled addon could still have its functions run from the /lua command. Disabled addons now stay completely inert, defining nothing, until you enable them.
  • Buff-icon addons can now show your buffs using the real in-game skill icons, and hovering an icon shows the skill name, its effect, and the time remaining. Before this an addon had to ship its own artwork and could not say which skill an icon was. A ready-made Buff Icons addon is included as an example, and the addon API reference gained the new icon and tooltip calls.

Images

Tooling

  • Reworked how this development log is generated: each entry is now stored as its own file and the pages are rebuilt from them on publish, so several people writing at the same time no longer overwrite each other's updates. The published pages read exactly as before.
  • Wired the dungeon builder to use the new deco data: props now snap to the correct surface when placed - wall pieces seat flush against a wall and turn to face the room, ceiling pieces hang from the ceiling, floor pieces sit on the floor - and a piece that can't find its surface fails the build instead of floating. Added a pathfinding safety check that bakes the dungeon's navigation mesh and fails the build if decoration has walled off a room, so a dungeon can never ship with an unreachable section. Both are covered by automated tests.

Build

  • Added a failover procedure for the legacy build farm so the game-client builds no longer depend on a single machine. Each platform (Windows, Mac, Linux) normally builds on its own machine to keep the Unity import cache warm; if that machine goes offline, a spare can now take over that platform's builds in about a minute, with a helper to check the current assignments and switch them. Verified the switch and switch-back on the live server without disrupting normal builds.
2026-07-23 · 106 items

Headlines

  • Last night's test server release was skipped by a bug in the release gate itself, not by anything wrong with the game code. Fixed, and the release is running now.
  • Player dungeons and basements can be named: the owner sets a name at the entrance, everyone sees it paired with the owner's name, and kill statistics can finally tell one player's dungeon from another's.
  • Lua addons got a safety pass: they now run in a sandbox with a watchdog against stuck scripts, install disabled by default, and can save settings between sessions.
  • Every in-game tooltip now renders on the UI Toolkit interface. Items, skills, locations and equipment comparison all moved over, and the old tooltip rendering code and prefabs were removed.
  • Search All My Stuff is built: one search across your inventory, bank, lot chests, mail, and vendor listings in every scene, with the named chest that holds each match. From wishlist request #1104; riding the next chaos build.
  • Crash report triage: the build-49 farming crash confirmed dead on build 50 with server logs going from 1,248 errors to zero, and the launcher's crash reporting fixed to survive damaged Linux settings files and to label logs carried over from an earlier session.
  • The community addon store is deployed and live: a package format, an AI reviewer that reads every submission and writes a description plus a safety verdict, admin approval before anything lists, and the website all running and verified end to end. The in-game Community Addons window and submit flow ship with the next client update.
  • The combat HUD status bars moved to the UI Toolkit interface: combatant nameplates, the party frame, companion bars, the skill-up popup, and the quest tracker, plus the teleporter destination picker and the ransom window.
  • A tracker bug sweep fixed ten reported bugs in one pass: artifact repair by right-click, the frozen lot tax countdown on new claims, the uncraftable Clay Tip Jar, teleport window text clipping, draggable deck labels, two Lua addon API bugs, and in-game windows lingering over the avatar select screen.

Community

  • Nightly forum sweep filed 5 wishlist ideas (per-account blazon slots, lot-free dungeon entrances for town owners, an in-game Lua addon installer, a 7-item request bundle, and restoring the old bag inventory skin) plus 2 bug reports (frozen tax countdown on newly claimed taxed lots, a blocking mob spawn in Spindle Extreme) to the tracker.

UI

  • Fixed pop-up option menus opening behind the newer windows. Menus like the Social panel Loot Mode list and the player Dungeon window options were drawing behind the window and could not be clicked. They now open in front and stay on screen. The fix is at the shared menu code, so every converted window and every future one gets it.
  • Play-mode testing of the new menu code caught two positioning bugs before they shipped. Menus opened in the top-left corner instead of at the pointer, and a menu opened near the bottom-right corner hung off the edge of the screen. Both came from the on-screen clamp running before the menu had been measured. Verified both cases in the editor after the fix.
  • Converted the lot storage slot tooltip to the UI Toolkit interface, keeping its wording and layout. Added the shared icon groundwork the remaining tooltip types (item, skill, scene, equipment comparison) reuse.
  • Converted the item tooltip to the UI Toolkit interface. Hovering an item still shows its icon, dye pattern, heraldry, name and details as before, now drawn on the new interface.
  • Fixed formatting codes such as [c] and [/c] showing as plain text in the converted windows. Buff and item hover tooltips were the worst case; the markup translator now understands every code the old UI emits, so colored text renders in color instead of leaking bracket codes.
  • Window titles and list rows in the converted windows now translate old-style formatting automatically, so window conversions get correct text without per-window wiring. 53 automated checks cover the translator and the windows it feeds.
  • Converted the skill training-mode tooltip to the UI Toolkit interface. The Training, Not Training, Maintaining and Unlearning badge and its explanation now render on the new interface.
  • Converted the location tooltip to the UI Toolkit interface. Hovering a place still shows its name, summary, town and explored markers and the two-column details, with Hold Ctrl to expand.
  • Converted the skill tooltip to the UI Toolkit interface. The full skill card (icon, description, costs, requirements, current and next level rewards) now renders on the new interface.
  • Converted the equipment comparison tooltip to the UI Toolkit interface. Hovering gear you could equip shows it beside what you have on for a side-by-side compare.
  • Finished moving every in-game tooltip onto the UI Toolkit interface and removed the old tooltip rendering code and prefabs.
  • Rebuilt the equipped-deck HUD display on the UI Toolkit interface. It shows your equipped and alternate deck names when both are set, and you can drag it and it remembers where you put it.
  • Began the groundwork to move the in-game status bars (health and focus, party frames) onto the UI Toolkit interface, starting with a shared bar element that reproduces the fill and the brief damage or heal flash the old bars showed.
  • The destination picker for public teleporters and the Sextant now runs on the UI Toolkit interface. It keeps the same sorted list, the default arrival point preselected, undiscovered spots shown but not choosable, and selection by mouse or arrow keys.
  • The on-screen quest tracker moved to the UI Toolkit interface. It lists your tracked tasks, updates as you make progress, and clicking a task opens your journal to that entry.
  • The skill advancement popup (a skill's icon, name, level, and progress bar shown when it levels up) moved to the UI Toolkit interface.
  • Combat nameplates (the name and health/focus bars over creatures and players) moved to the UI Toolkit interface, including the damage and heal flash on the bars and the fade with distance. A few extras (active rune-effect icons, guild and party markers, and clicking the nameplate itself to target) are off for now and return in a later update.
  • The ransom window (The Price of the Oracle) moved to the UI Toolkit interface, keeping the ransom list, the selected-item detail pane, and all the pay, give up, clear, and collect actions.
  • Party-member bars and companion bars moved to the UI Toolkit interface. The party list is draggable and remembers where you put it, party rows show the leader star and let you click a member to target them, and your companions show in their own list.
  • Fixed the teleport scroll destination window cutting off the bottom of letters like y and p. The same fix protects every other new-UI list that shortens long text with three dots.
  • Deck names next to the deck swap icon can no longer be dragged around the screen. They sit fixed by the icon and mouse clicks pass through them to the game world.
  • In-game windows from the new interface (Players in Scene, Oracle, Titles, Party Finder, Guild War list) now close automatically when exiting to the main menu instead of floating over the avatar select screen.
  • Fixed window title bars pushing the pin checkmark and close button past the right edge of the window on pinnable windows.
  • Hovering a row in the new-UI lists now brightens the text over a clearly darker highlight. Hovered rows on the tester board were nearly unreadable, light text on a light wash.
  • The journal no longer opens itself after login. A journal left open across a zone change or logout was remembered as open and came back on every login until closed by hand.
  • Fixed the Air interface theme blowing out to white: the drifting ambient effect was tinted pure white over already pale panels. It now drifts as a soft sky shade and window fills sit a step off white, so text and buttons keep contrast.
  • Tester board rows no longer slice the bottom off letters with tails.
  • Friendly skills cast on your own targeted pet now land on the pet instead of a nearby party member. Pets stay lower priority only for untargeted casts.
  • The tester verification board gained a Directives only filter that hides tester-filed bug reports, so directives can be worked without wading through reports. The choice persists between sessions.
  • The pet sheet damage line now reads the summon's real attack, so gear like the Summoned Water Creature Damage necklace shows its effect. The bonus always worked in combat; only the sheet was wrong.

Build

  • Fixed the build gate that skipped last night's test server release. The gate checks that a server file added to one project list also lands in the other, and it crashed on startup on the Linux build machines instead of running the check. Nothing was actually wrong with the code; the check itself had a bug that only showed up on machines without Visual Studio installed, so the gate that runs on Windows kept reporting green while the release path was dead.
  • Found a second build gate that was reporting success without checking anything. The per-push version of the same server-file check ran an old copy of the checker left on one of the build machines, from a checkout that had not been refreshed since 17 July. That copy predated the fix that lets the check run without Visual Studio, so it skipped and passed. It now runs the copy from the code being pushed, so an out-of-date build machine can no longer turn the gate into a no-op.
  • Hardened the commit helper every session here uses. Passing it several files at once quietly committed only the first one, because the extra names were being absorbed by the commit-message option instead. It now refuses the ambiguous form outright rather than committing less than it was asked for.
  • Repaired the last two scene validation jobs on the legacy build server after the old build machine retirement. One was still assigned to the retired machine, the other sat behind a stale queued build and an agent allow list. Both are running on the current machines again, and the navmesh check already cleared the pending scene backlog with nothing to rebuild.
  • Wired the server-file check to run automatically on every push, instead of only on a schedule. Drift between the two project lists now shows up within about a minute of the code landing rather than at the next nightly run.
  • Paused the hourly reported-content job for the dev shard on the legacy build server. It had failed every hour since July 1 because the dev shard service it reads from is down, roughly 530 red builds. The live shard version keeps running and is unaffected.
  • Fixed the nightly automated test run, which had been reporting failures since Monday: eight recently added UI and lighting tests need a real graphics device, and the test runner launched without one. The runner now runs with graphics enabled; verified all previously failing checks pass.

Housing

  • Player dungeons and basements can now be named by the lot owner from the entrance Options menu (50 character cap, same character rules as lot names). The entrance tooltip and window show the custom name together with the owner's name, plus a [PvP] tag when Open PvP is on.
  • Kill and location records from inside a player dungeon or basement now carry the custom name, the owner, and the plot id as extra trailing fields, so different players' dungeons can be told apart in the statistics. The scene column itself is unchanged and existing consumers keep parsing. Lua addons can read the name via ShroudGetCurrentDungeonName() and ShroudGetCurrentDungeonOwner().
  • Follow-up on dungeon naming: the rename dialog's input field now accepts the full 50 character limit (it stopped at 30 while validation already allowed 50).
  • Fixed the tax countdown freezing for the first day on newly claimed taxed lots. The countdown now ticks from the moment of claim; the amount of tax owed is unchanged.
  • Fixed the solid door basement entrances (wood and metal gothic arch) not responding at all: the interactive part of the decoration was wired to a different spot than the clickable part. Owners get the options window again and visitors can enter.
  • Fixed claiming a lot from its sign: the deed window could lose track of which lot the sign belonged to and drop the Claim Lot option. The sign now hands the exact lot to the deed window.

Lua Addons

  • Lua addons now run in a safety sandbox: an addon's file access is limited to the addon folder, so installing a community addon is safer.
  • Added a watchdog so a stuck addon can no longer freeze the client. An addon that keeps erroring is now turned off automatically, and every addon error in chat now starts with the addon's name so you can tell which one is at fault.
  • New addons now install disabled and must be enabled in the addon manager. A chat line reports when a new addon is detected, so nothing you download runs until you allow it.
  • Addons can now save settings that persist between sessions, per character or per account, through a new saved-variables API.
  • Fixed the /lua chat command: reload, unload, path, running a snippet with /lua code, and calling an addon function by name all work now.
  • Published a full addon authoring guide and API reference for addon makers, including the adjustments existing addons need.

Server

  • Built the server side of the player item search from wishlist request #1104 (search all my stuff). One indexed query walks every container an account owns across all scenes, plus vendor listings and ransom holdings; results carry which chest or pouch holds the item, which character carries it, and named storage crates. Capped and rate limited, with the worst hoarder account measured at 38 ms.
  • Hardened the GM item lookup while in there: it now requires dev or admin access (it was reachable by any logged-in client), rejects empty queries, cleans up its database cursors, and no longer does one database round trip per matched item on lot storage.
  • Reconciled the shared server code mirror that had drifted since the source import: the client copy gained a missing pet data handler and the crown repair item logging, and both sides are byte-identical again.
  • Oversized pet data can no longer break loading another player nearby: the reply is trimmed to fit the message size limit instead of being dropped whole, with a log line when trimming happens.
  • Deleting a character can no longer cost the account a slot: deletion now also removes the character's name record, so a re-save racing the delete gets detected and cleaned automatically instead of lingering as an invisible slot-eater.

Unity client

  • Added the Search All My Stuff window from wishlist request #1104. Type a few letters and press Enter to search everything you own: inventory on any character, bank storage in every town, mail attachments, chests on your lots in any scene, storage crates, crafting stations, vendor listings, and ransom holdings. Each row shows the quantity, the place, and the named chest or pouch holding the item; results on your lot in the current scene can be marked on the compass. Open it from the window selector, /findmystuff in chat, or a bindable hotkey.
  • Ran the full test suite headless after the item search work: 2,527 of 2,529 tests pass, including all 25 new item search cases; both new window prefabs import clean. Fixed a compiler warning the run surfaced in the new search window. The two failures are in unrelated areas and are noted for follow-up.
  • The loot roll popup, the roll or pass window that appears when your group shares loot, moved to the new UI framework. It keeps the item tooltip on hover and the strip of items still waiting for your choice.
  • Moved four more windows to the new UI framework: the Send CS Message report window and three support tools for renaming a guild, renaming a player, and clearing a guild description. The shared form code behind the old versions was retired.
  • The town access management window (add residents, raise stewards, and manage the banned list) moved to the new UI framework. It is the last of the housing permission windows to convert.

World

  • Restored the single merged Hilt Fortress entrance door in the Novia Region 9 underground passage after a cross-team content sync brought back the old two-door setup. One door again offers both the multiplayer dungeon and the quest scenario, with the quest option shown only while the quest is active.
  • The observatory telescope no longer shows its own tube in the zoomed view. It hides its whole model while you look through it and restores it when you step away.
  • Fixed towns with a salt or fetid fishing statue losing the water depth readout (and the depth-based trophy quality scaling) for all their real water. The statue now only changes the water type.
  • Hardened the light fade logic so a lit light can no longer be stranded dim or fully dark by unlucky fade timing (three latent defects found in an earlier lamp investigation).
  • Scene map captures learned four lessons for the next recapture: gathering nodes stay off maps, house furniture is no longer photographed through missing roofs, roofs render at full detail, and water paints as water instead of showing the lakebed and whatever hides under it.
  • Pushed the Island Challenge navmesh fix through the build pipeline: the rebaked pathfinding data was in the repo but builds kept shipping the stale copy because only the data file had changed, so the scene itself now carries a change to force its data to rebuild.
  • Distant creatures stopped bouncing and freezing: the far ground clamp now tracks terrain every frame, brief network delays no longer halt movement playback, and moving creatures keep their walk animation at range instead of sliding with frozen legs.

Addons

  • Started the community addon sharing service. Uploaded addon packages are strictly checked (file types, size limits, archive safety) and stored with a review lifecycle so every version waits for admin approval before it can appear in game. 234 server-side tests cover the format and lifecycle rules.
  • Added the community addon sharing epic to the roadmap, with a matching entry on the public roadmap page.
  • Client groundwork for addon packages: the package manifest format, install folder rules, and safety checks on downloaded archives are in, with about 90 new automated tests. Hand-installed single-file addons keep working exactly as before.
  • The addon sharing service now has its web API: authors sign in with their game account, submissions are checked and queued for review, and the game can list, download, and count installs of approved packages. 273 server-side tests.
  • The game can now install addon packages into their own folders and run them, with your hand-installed single-file addons untouched. Installing a package leaves it turned off until you enable it, the same safety rule new addons already follow.
  • Wired the game client to the addon store: it can list packages, download and install them, sign in with your game account to submit your own, and report installs. The store window that uses all this is next. A shard with no store configured just shows it as unavailable.
  • The addon store service is feature complete. Submitted addons are read by an AI reviewer that writes a plain description for players and a detailed report for the team, flags risky patterns, and does a second skeptical pass on anything not clearly safe. A public catalog page and an admin review console round it out.
  • Built the in-game Community Addons window: browse approved addons, install and update them, remove them, and turn them on, with a My Submissions tab. Submitting your own addon works from inside the game too, signed in with your game account. Open it with /addons.
  • Wrote the server setup scripts for the addon store so it can be deployed to the web host in one step once given the go-ahead.
  • Verified the addon package code end to end: all 138 Lua addon tests pass along with the new store tests, confirming that hand-installed single-file addons behave exactly as before after the package changes.
  • The community addon store service is deployed and running. Submitting a test addon end to end confirmed the full path: the server checks the package, the AI reviewer reads it and writes a description and a safety verdict, and it waits for admin approval before listing. The public site is served over HTTPS with the admin review page locked down. The in-game window that uses all this arrives with the next client update.

Crash Reporting

  • Reviewed the client crash reports uploaded from the test shard over the last two days. The farming crash spam from build 49 (16,000 errors in one session log) is confirmed gone on build 50: server logs recorded 1,248 of those errors the day before the fix and zero since.
  • Fixed two launcher crash-report defects: a damaged Linux settings file made the launcher misclassify every session as a failed start (it now recovers the exit stamps and reports the file state), and a launch that dies before the engine boots no longer presents the previous session's log as the crashed one.
  • The client now clears its in-world crash marker when it returns to character select, ending false in-world crash reports from menu quits, and disables text rebuilds during shutdown, which removed dozens of font errors from the tail of every uploaded log.
  • Filed a bug from the same triage: one Linux session ran at 11 fps on a high-end graphics card with constant low-memory warnings from the graphics driver.
  • Released launcher build 22 for Windows and Linux with the crash-report fixes, and deployed the matching receiver update. Installed launchers self-update on next start; the next round of Linux reports will say whether the settings file on the affected machine is missing or damaged.

Client

  • Fixed item tooltips showing leftover content from other tooltips. After casting a skill, grabbing a decoration, or hovering sheet music, the next inventory item you hovered could show that skill or object stacked inside its own tooltip. Reported by testers with screenshots this morning. Regression tests added.
  • Raw materials with no crafting bonus, fish included, no longer show an empty Material Crafting Bonus heading in their tooltips. The heading now appears only when there are bonus lines under it.

Docs

  • Documented the addon store: a service and admin runbook, a player-facing packaging and submit guide in the Lua addon docs, and a fix to a stale note that claimed addons had no runaway-script watchdog (they have had one since the sandbox pass).

Infra

  • Tracked down both failures from the afternoon test run. One was already fixed upstream minutes later (a Lua addon test asserting the wrong rejection order). The other was a race in the test harness itself: the editor assistant plugin was answering stale tool calls during batch runs and logging from a background thread, which the Unity test framework cannot tolerate mid-check. The headless runner now puts that plugin to sleep for the duration of a run and restores it after.

Tutorial

  • New Isle of Storms tutorial step: Lock Your Gear. After the hotbar lesson, new players get a task and an on-screen hint to right-click a worn item and choose Lock To Inventory, which protects it from accidental sale, trade, or salvage. Completing it writes a journal entry.
  • Item locking now raises a game-wide notification when an item is locked or unlocked. The new tutorial step listens for it, and EditMode tests cover the notification rules and the two new journal entries.

Lua

  • Fixed ShroudGetInputText() returning only the visible part of an input field. Addons now get the full typed text back.
  • Fixed string.byte() corrupting byte value 255 into 63. The full 0 to 255 range now round-trips through string.char and string.byte, so addons can store binary data in strings safely.

Items

  • Fixed right-click Repair on artifacts: it now uses an ancient essence from your bags instead of giving up after trying an ordinary repair kit first. Drag and drop was already fine.
  • Blocked loot attempts now say why in plain words (party loot rules, or loot that belongs to another player or party) instead of doing nothing at all.
  • Obsidian Chainmail now accepts patterns in all five slots. The Obsidian pieces were missing from the pattern eligibility lists for chain armor.

Crafting

  • Fixed the Clay Tip Jar recipe, which could not be crafted at all after its move to Smelting. It is now discoverable at a smelting station with 6 clay and can be taught like the other clay decorations.
  • Threshing wheat no longer increases carry weight: sacks of wheat grain and flour are lighter, so threshing reduces weight a little and milling keeps it unchanged.

Combat

  • Golem magic cancellation no longer strips Silent Movement and Shadow Form. The two stealth skills carried a leftover Moon magic tag, so anything that cancels the nine magic schools caught them too.
  • Fixed the balance report tripling skills that randomly pick one effect per cast. Chaos Bolt, Obsidian Onslaught, and Juxtapose now show their real averaged damage on the next report refresh, with a test pinning the math.
  • Savage Sonata now shows its song ring: the burst on a successful start and the circling ring around the performer while the song runs. The ring effects were never wired up for it.

Audio

  • Blink, Summon Skeleton, and Reveal Hidden now play cast sounds. All three had no audio authored on their effects at all; Blink and Reveal Hidden even had dedicated recorded clips that were never wired up.
  • Liches and the remaining plain-voiced skeletons (Awakened Dead, Cursed, Fighter, Guardian, Archmage, Prince) moved to the deep rasping undead voice treatment, and the full voice set was regenerated and republished. Voice changes are live on a fresh login with no patch.
  • The republished voice set also restores the Ebon Dawn Ritual Master's intended male voice and gives Eugena in Solace Bridge her missing voice.

Localization

  • Repaired broken text markup in four interface strings and six store descriptions that the translation checker had been rejecting. They pick up translations in all seven languages on the next fill pass.
  • The translation source generators can no longer sweep out hand-registered records, and the 18 records lost to an earlier sweep (Ultima mode labels, compass toggle strings, teleport window columns) are restored. A keep list now protects hand adds.

Networking

  • Players on slow machines no longer get kicked to the title screen during long scene loads. The connection is given 90 seconds on the client and two minutes on the server to ride out a heavy load, up from 30 seconds on both.

Quests

  • Skarde in Spindelskog now mentions the bag of runestones in his replies so Bodil's errand can be continued with a click. The hand-off only answered one exact typed phrase before.
2026-07-22 · 30 items

Headlines

  • Twelve more windows moved to UI Toolkit across batches 7 and 8: the lot and deco permission editors, dungeon entrance and connection, leaderboards, the journal, the custom NPC dialogue editor, the Languard Gemstrike and Puzzle Box mini-games, the enchant and masterwork bonus-effect picker, and the lot deeds window.
  • Widened the dungeon builder's deco library to 493 props across 31 categories, the groundwork for teaching it to decorate rooms with intent instead of scattering pieces.
  • Every one of the 493 dungeon props now carries a card describing its look, its proper surface, its path-blocking, and its story role, so rooms can be dressed with intent instead of guesswork.
  • Crafting stations can now use lot storage: mark placed containers as crafting supply, tick the new Use lot storage option at a station on your lot, and recipes count that stock, fill the table from your backpack first, and take only the exact shortfall from the marked chests. Every take is named in chat, container permissions still decide who may pull, the chests are claimed only for the moment of the pull, and the crafting engine itself consumes nothing but the table. Eleven new tests pin the pull arithmetic.

UI

  • The dungeon entrance moved to the new UI, with the dungeon picker folded into the same window: enter your dungeon or a sample dungeon, flip through the No Dungeon option and every dungeon deed you own, and the options menu (Open PvP, transfer contents to bank, adventure mode, lot access) all work as before, including the warning before a swap sends your dungeon contents to the bank.
  • The chest, player vendor, and door access-permission window moved to the new UI: a sortable list of who can open it (you shown as Manager, others as Guest), type a name and press Enter to add a player, select a row and Remove Permissions to take one off, with the add limits and the you-cannot-remove-yourself rule preserved. Three legacy list classes retired with it.
  • The Decoration Placement Settings window moved to the new UI: four dropdowns (who can remove or modify a decoration, add to or take from a container, and add vendor listings), each with Kindred, Trustee, Co-Owner, and Private, remembered between sessions and applied to items as you place them.
  • The Leaderboards window moved to the new UI: pick a board on the left, choose the timeframe and Rank By column, and the ranked table fills in with your own row highlighted and sortable columns. The data download and cache work as before. Three legacy list classes retired with it.
  • The dungeon-piece connection window moved to the new UI: pick the piece that connects at a socket, see its point value against your dungeon point limit, and buy more limit with gold or crowns, with previews, snapping, and confirmations working as before. Double-clicking a matching piece in your bags still selects it.
  • The lot access-permission window moved to the new UI: Access and Banned tabs where you add players by name and set their role (Guest, Kindred, Trustee, Co-Owner, Tenant), revoke access, ban and unban, plus the restricted-access, strict decoration-move, and guild chapter house toggles. Three legacy list classes retired with it.
  • The Custom NPC dialogue editor moved to the new UI: it shows the NPC current dialogue and lets you import a new dialogue script, browsing your Ink files by name and date, compiling, and uploading, with the same result messages as before.
  • The Journal moved to the new UI: Tasks, Journal, and Entries tabs with details for the selected entry, a search box on each list, Track and Untrack to show tasks on your HUD, and a Settings tab for the HUD task list. Clicking a task on the HUD still opens the Journal to it.
  • The Languard Gemstrike teletype mini-game moved to the new window system: the game screen, dungeon, text, and command buttons are unchanged; the window frame, close, pin, and dragging are new.
  • The Puzzle Box code-guessing mini-game (the one that opens certain mystery boxes) moved to UI Toolkit. The A to F letter steppers, the black and white peg feedback, the ten-try limit, and the open-the-box reward flow all carry over; the scoring moved to a unit-tested model and the two old NGUI helper scripts retired.
  • The enchant and masterwork bonus-effect picker moved to UI Toolkit. When a craft lets you choose the bonus effect, the window now shows a card per effect with its name and stats, a Revise Effects button to reroll when the recipe allows it, and no way to dismiss it without choosing (picking is what finishes the craft). The awaited crafting logic that drives the choice is unchanged; only the window was rebuilt.
  • The lot deeds window (your My Lots list) moved to UI Toolkit. Deeds now show in a sortable table with name, type, location, past-due tax, and days-remaining columns; claiming a lot, paying taxes, clearing tax debt, adding tax credit, and upgrading eligible deeds all carry over, and the pay-tax and add-credit prompts are unchanged.
  • Started moving the in-game hover tooltips onto the UI Toolkit interface. The shared tooltip host is in place and plain text tooltips render through it, and the groundwork lets the already-converted UI Toolkit windows show tooltips too. Item and skill tooltips come next and keep the current look until then.

Community

  • Filed 9 items to the tracker from the community forums: player suggestions on naming player dungeons, searching personal storage, stealth visibility, skill balance, and instrument crafting, plus two bug reports on golem spell cancellation and a Lua text function.

Combat

  • Raised the stealth self-view tint so you can faintly see your own character while stealthed (day 2% to 5%, night 0.5% to 2%). Helps you track where you are standing at night and indoors. Other players and stealthed NPCs render the same as before.

Crafting

  • Started on crafting stations using materials from the lot they sit on. Storage containers can now carry a crafting supply designation, the first piece of an opt-in system where the crafting table counts and pulls missing ingredients from designated chests on the same lot. Container take permissions still decide who may pull, and nothing changes unless the new option is turned on.
  • The lot storage side of crafting moved forward on the server: three new scene operations let a crafting station ask what the lot's designated supply chests hold, claim just the chests a pull needs, and release them afterward. The claim uses the same per-chest locks the game already applies when a player opens a chest, none of the new operations move items themselves, and a crashed client cannot leave a chest stuck claimed: the server clears its claims when the player disconnects or after five minutes.
  • The client side of crafting supply counts went in: the game can now ask the server what the lot's designated supply chests hold and show it on recipe ingredient rows, which read like 3/10 (+12 lot) with their own color when lot storage is what makes a recipe craftable. The display stays off until the crafting window option that turns the whole feature on arrives.
  • The pull itself went in: with the new Use lot storage option on, clicking a recipe fills the crafting table from your backpack first and takes only the exact shortfall from the lot's designated supply chests, with a chat line for every take naming the amount, the item, and the container it came from. The chests are claimed for just the moment of the pull using the same locks as opening them by hand, the server builds every moved item itself, and a first-time confirmation explains what the option may touch before it can be switched on.
  • The two checkboxes went into the interface: Use lot storage sits under the Only craftable filter in the crafting window, and placed storage containers gained a Crafting supply checkbox next to their permission settings. Marking a chest and enabling the option is now the whole setup.
  • Batch crafting joined the lot storage system: crafting 20 of something pulls the whole remaining shortfall from the supply chests once, up front, instead of touching the chests per item, and the quantity spinner counts lot stock while the option is on. A planning bug the new tests caught was fixed on the way: two ingredients resolving to the same material could plan more out of one stack than it held. 11 tests now pin the pull arithmetic.
  • Two more safety tests joined the lot storage work: one fails the test suite if any item creating, destroying, or moving call ever appears in the supply operations (which only read chests and set claim markers by design), and one checks across a grid of request and stack shapes that a pull is never planned for more than was asked or more than a chest holds. 13 tests now cover the system, and the crafting and consumption code itself is verified unchanged by the whole feature.
  • Ran the lot storage crafting work through an adversarial review and fixed what it found. The important result: no way to create items without consuming materials and no duplication, since every move goes through the game's existing checked transfers and the crafting code is unchanged. The fixes: two ingredients made from the same material could take slightly more than asked from a chest, which is now summed and taken exactly; the option could disable itself after one use or get stuck if the connection dropped mid-pull; and a few cases where a chest's in-use marker could stick and leave it unopenable now always clear or retry.

Dev Tools

  • Fixed the client test harness hold mode on Windows: the game client it launched was shut down together with the runner instead of staying up for the driving agent. The client now detaches and keeps running.

Tooling

  • Broadened the dungeon builder's decoration catalog from 259 to 493 props across 31 families, adding cages, altars, coffins, corpses, bookshelves, banners, urns, sacks, statues, cauldrons, alchemy glassware and more. Emitted a flat classification queue that will drive an upcoming pass to examine each prop and record how it should be placed.
  • Built the deco cataloger for the dungeon builder: it stands each of the 493 props on a clean lit stage, measures its size, collider footprint, pivot and light/particle/sound payload, works out whether it would block a walking path and how much floor it eats, and saves three reference angles per prop. Ran the whole set with no failures, producing the geometry and imagery the classification pass will read.
  • Classified all 493 dungeon decoration props: a fleet of agents examined each prop's reference renders and recorded a card describing what it is, its condition, whether it is a centrepiece or background filler, which surface it belongs on (floor, wall, ceiling, water, tabletop or hanging), whether it blocks a walking path, and its in-game story role and which props pair with it. Built a browsable catalog to review the whole set and excluded pieces that only make sense as structural swaps rather than placed decor.

Build

  • Closed a gap where a server file added to one project file but not its parallel copy would compile everywhere yet ship missing from the build the test server runs. One check now catches the mismatch when the change is committed, rejects it at the server before it can land, and flags it in CI within a minute, with a one-command fix to reconcile the two. The check needs no special build tools, so it runs the same on every machine. This was the miss that failed a nightly build gate earlier this week.
2026-07-21 · 97 items

Headlines

  • A connection lost while zoning no longer strands the game on the loading screen with no way out but Task Manager: one class of disconnect was going unhandled, and the same wedged session filled the log file with 5,000 spawn errors (#1040)
  • UI rebuild batch 4 complete, five windows in one day: the three guild war windows (war list, scoreboard, declare war), the Looking For Group window, and the quit dialog now run on the new interface system, with sortable columns, live countdowns, per-player kill tables, and ten more legacy UI classes retired.
  • Designed a full Chaos Magic rework: the signature nuke finally resistable, spells that work from the first trainer visit, deck-shuffling glyphs, a grandmaster transformation, and Cabalist sieges and shardfall storms drawn from the game's own lore.
  • Batch 5 of the UI overhaul is complete: all 20 small windows converted in one day. The confirmations, Pay Lot Taxes, three report windows on one shared form kit, rename, the treasure map with its runic flip side, help, the Tablet of Finding, the HUD timers strip, Choose One rewards, the housing lot list, the phonograph, teleport to player, and the internet radio all run on the new UI. Around 25,000 lines of legacy window data retired, four latent bugs fixed on the way through.
  • Fixed the new UI windows grabbing Esc and leaking clicks and typing into the game world; Esc now closes the window you used last instead of opening Options on top.
  • The dungeon builder went from plan to a working dungeon in a day: a knowledge base covering all 666 kit pieces, then a build engine that assembles a walkable sewer network from a JSON plan, lights and floods it with torches, water, webs, and crates, populates it with monster spawners, a loot chest, and a lever-gated portcullis, and bakes the navmesh so it can actually be played. Every layer places from the same plan and re-runs with zero changes.
  • Mega-farm farming round 2: found and removed the 20,000 object cap that corrupted plant updates on 41k-spot farms, second watering passes send again, and relogs will show true plant state.

Community

  • Filed 17 player suggestions and one Lua addon bug from the forums to the tracker, spanning building QoL, crafting, and API requests.

Items

  • The White Birthday Candle now shows its own white icon, body, and flame. The white set had been file-copied from the original candle with clashing internal ids, so it fell back to the plain candle look everywhere.

Decorations

  • The three placeable shipwreck pieces could spawn an older model without the adjusted size and colliders depending on which machine built the game; their ids are now unique and the deco items always use the adjusted versions.

World

  • Checked in pending world edits: terrain touch-ups in Port Harmony and on the Novia forest road, and a brighter fog and ambient lighting pass on the Sequana Colossus zone.

Dev Tools

  • Voice pipeline staging now picks an OS-appropriate default folder, and the stray staging files a Mac run had scattered (including the newer Frost Giant voice maps) were merged into the proper location. Also cleaned up leftover metadata for UI scripts removed in the interface rebuild.
  • Dungeon builder: the engine now dresses what it builds. Four new passes (water, deco, lighting, ambient audio) place theme props from the same manifest that drives the shell, each prop anchored to its room so layout edits carry the dressing along.
  • The test sewer went from bare stone to a lit, dripping tunnel run: water in the gutters, tilted wall torches, puddles, webs, crates, and drip loops, all placed by the engine from data mined out of the shipped sewer scenes. Re-running every pass changes nothing, which is the property the whole system is built on.
  • Fixed the scene report filename cleaner to strip the same set of unsafe characters on every platform; reports written on a Mac could carry characters Windows rejects. Also dropped eight orphaned asset bookkeeping files left behind by the retired legacy dialog prefabs.
  • Dungeon builder: the engine now populates a dungeon, not just decorates it. New passes place monster spawners, loot chests, a lever-gated portcullis, the entrance and exit points, and then bake the walkable navmesh so creatures and players can actually move through the rooms it built.
  • Ran the whole gameplay layer through an automated review of 38 checks against the real game code before committing. It caught a handful of ways the builder could have placed objects that looked right but would not work in play, plus three cases where a validation pop-up would have frozen the editor mid-build; all fixed, and the test dungeon rebuilds with zero changes on a second run.
  • Dungeon builder: added the checks and the shipping groundwork. A test suite now opens the engine's output and confirms every room, spawner, chest, and the navmesh match the plan, and a dry-run reports exactly what registering a new dungeon with the game would do before anything is written. Wrote up the whole system and its knowledge base in the repo docs.
  • Dungeon builder: dungeons can now grow after they are built. Each one ships with sealed stubs at its edges; opening one lets the builder add a new wing, remove the old cap, and rebuild only the new section while leaving everything already placed untouched. Proved it on the test dungeon by opening a stub into a fresh tunnel run with the water and navmesh extending to match.
  • Fixed the dungeon builder dropping props outside the tunnels: a crate and barrel were floating in the void beside the walkway. Floor props now snap down onto the actual floor, and if one is placed past the wall where there is no floor the build stops and flags it instead of shipping a prop in mid-air.
  • Fixed the dungeon builder standing a large dungeon gatehouse across a round sewer tunnel, where its square frame cut through the walls. A gate that blocks a passage is now placed as part of the tunnel opening, using the sewer set's own barred grate that matches the round bore, with a wall switch to open it, instead of a mismatched prop dropped in at a guessed angle.

Client

  • Fixed the loading screen hanging forever after a lost connection. If the server closed the link while you were zoning into a scene, the game sat on the loading screen with no message and no way back to character select except ending the process. Found in two overnight crash uploads from the same player, 45 minutes apart, entering the same zone. One class of disconnect was going unhandled; all of them now run the same recovery (#1040, verify task #1043).
  • The same wedged session had creatures retrying their spawns against the dead connection forever: the two uploads carried 5,035 and 3,857 identical errors with full stack traces, growing the log file to 3.5 MB, heavy enough to get the client kicked off the logging service for spam. Spawning now stops when the connection is down, and a repeating failure reports three times then a running total, so that storm collapses to 54 lines. 11 new tests, including one that fails if a future disconnect code is ignored the same way.
  • Crash reports from the launcher now carry what Windows itself recorded about the session: whether the game faulted and in which component, whether the graphics driver reset, and whether the machine lost power. Prompted by a report the same night where the game vanished with a healthy 86 fps a few seconds earlier, no crash file, and a log that simply stopped, leaving nothing to tell those three apart. Only the game's own records are collected, other programs are left alone, and personal paths are stripped before anything is sent (#1041).
  • Fixed the observatory telescope so it actually magnifies. Looking through a placed telescope and scrolling now narrows the view and enlarges the moons, planets, and stars, the way a telescope should. Before, zooming just slid the camera a couple of metres forward and did nothing to the sky.
  • Distant land holds its detail while you are zoomed in through the telescope, and aiming slows down at high magnification so a small mouse move no longer whips across the sky.

Creatures

  • Summoning a water elemental no longer logs a missing-script warning. The pet prefab carried a leftover empty component, there since the original import from the old version control, that its sibling elementals had already had removed.

Infrastructure

  • Last night's automated build stopped before it started: a server file added with the global dev deco work was registered in one of the two project files and not the other, so it would have been missing from the build the test server actually runs. Added the missing entry and confirmed the server compiles and publishes clean.
  • Wired the project-file consistency check into the commit path so that mismatch is caught locally instead of hours later on the build machine. It only runs when a server project file is part of the change, and refuses the commit with the exact missing line to add.
  • Published the Chaos Magic rework design doc to the team wiki's Design Plans chapter, next to the other feature plans, and refreshed the wiki assistant's doc map so it can answer questions about it.

Lua addons

  • Added four Lua addon functions that report what is under the mouse cursor: ShroudGetDescriptionUnderMouse, ShroudGetNameUnderMouse, ShroudGetKindUnderMouse, and ShroudGetIdUnderMouse. They cover NPCs, other players, world items and containers, placed decorations, inventory and vendor items, and UI elements, returning the same tooltip text the game already shows with formatting codes stripped.

Dev Portal

  • Region fields across the dev portals now show real region names from the designer-authored list checked in yesterday: the character viewer and the scenes portal read "Regalis and Midmaer" or "Perennial Coast" instead of internal codes like NoviaRegion03. The scenes region filter and text search understand the friendly names too.

UI

  • Rebuilt the guild war list window on the new interface system: guild names, scores, and live time remaining in sortable columns, active wars grouped on top, ended wars tinted by outcome, forfeit and scoreboard actions on the right-click menu.
  • Rebuilt the guild war scoreboard and the declare-war window on the new interface system. The scoreboard shows both guilds' scores with per-player kills and deaths tables and a live countdown; the declare-war window keeps its duration picker and cancel-while-waiting behavior.
  • Rebuilt the Looking For Group window on the new interface system: two-line listing cards with leader, member count, description, started-ago time, and an inline Join button, plus a filter box. Fixed the listing age showing the wrong number of days after the first day.
  • Rebuilt the quit and exit dialog on the new interface system. The confirmation, the server logout countdown, and the please-wait stage now live in one window; the ransom warning, Enter-to-confirm, and the no-hang shutdown guard all carried over.
  • Started UI conversion batch 5 (20 small windows). First up: the PVP zone entry warning now uses the new-style confirmation window, with its Ask me every time checkbox intact. The old NGUI dialog was retired.
  • Fixed the skills window keeping capped skill levels on the icons after leaving a level-capped zone (shardfalls, PvP arena, Opalis ruins). The window now repaints skill levels on every scene change, so a skill trained past the cap reads its true level again at home instead of the capped 100 until relog. Display bug only, stored skill experience was never affected. Player-reported on live; the same code ships on chaos. Tester verification task #1056 filed.
  • Batch 5 continued: the repair kit confirmation moved to the new-style window, keeping its Ask me every time checkbox. Another NGUI dialog retired.
  • The follow-your-party-leader prompt joined the new-style confirmations. Same Follow and Stay Here choices; the Episode 2 access check is unchanged.
  • The party summon prompt moved to the new-style confirmations. Go and Stay Here work as before, including the PvP zone warning variant.
  • The instance restart prompt (Reload or Stay here when a server instance is closing) moved to the new-style confirmations, retiring the last of the old yes/no dialog windows.
  • The Pay Lot Taxes window was rebuilt in the new UI style: days slider and number box stay in sync, Enter confirms, and the window locks itself while the payment processes. About 3,000 lines of legacy window data came out of the deed list in the process.
  • Fixed the converted UI Toolkit windows leaking input to the game: clicks inside the tester, GM, Oracle, tip jar, and game table windows no longer hit the world behind them, and typing in their text boxes no longer moves the character or fires hotbar keys. New shared SotAUitkInput signals (pointer over a window, text box focused) feed the same global gates the old NGUI UI used.
  • Esc now closes the front-most open tool window instead of opening the Options menu on top of it (new SotAUitkEscapeStack registry consulted by the game Esc chain, most recent window first). Esc while typing deselects the text box first; the next press closes the window.
  • Releasing a dragged inventory item over one of the new windows no longer drops it into the world underneath. Also fixed the pointer-over checks of the Oracle, tip jar, and game table windows testing a vertically mirrored area (all four now share one screen-to-panel conversion). 26 new EditMode tests cover the registry, the input gates, and chain wiring.
  • Wrote up the batch 5 working plan (recipes, remaining 14 windows, and the gotchas found so far) into the repo docs so the batch can continue from any machine. Roadmap updated to match.
  • The stuck spot and task problem report window was rebuilt in the new UI style: reason dropdown, comment box with a live 500 character counter that turns red at the limit, and a Submit button that stays off until a reason is picked and a comment is typed. First window on a new shared form kit (SotAUitkForm) the remaining report forms will reuse; about 2,100 lines of legacy window data retired with it.
  • The report content window (/reportcontent in chat) moved to the new UI on the same shared form kit: reason dropdown, comment box prefilled from the chat command, and the window stays open until the report goes through. Another 2,100 lines of legacy window data retired.
  • The report player window finished the report-form family on the new UI: all six reasons, the player name header, and both ways in (the chat command with a reason prefill and the player right-click menu) work as before. Screenshots and recent chat still ride along with the report. Three report windows now share one form kit.
  • The rename window (items, pets, houses, vendor naming) moved to the new UI: current name shown, live name filtering as you type (letters, numbers, one apostrophe, single spaces), an inline invalid-name message, and Set to Default to clear a custom name. All the rename flows in the game go through this one window; about 1,900 lines of legacy window data retired.
  • Deleted the dead player feedback survey windows (a star rating form and its launcher) after confirming nothing in the game opens them: three classes and two window prefabs gone.
  • The treasure map window moved to the new UI: the map shows in a draggable window, Flip Map turns to the mirrored back with the hint still written in the runic or handwriting font, the page turn sound plays, and several maps can be open at once. Also fixed the X button on multi-instance windows (like the guild war scoreboard) leaving an invisible window behind.
  • The in-game help window (contextual hints for crafting stations, banks, and other firsts) moved to the new UI: resizable, pinnable, same help text, and the Show Hints checkbox still tracks the Options setting both ways. Fixed a leak where every help window left its hint-toggle handler behind after closing. Keyboard key lighting still follows the window.
  • Fyndoro's Tablet of Finding moved to the new UI: write a name, get the location, once a day per tablet. The daily cooldown message, the placed-on-lot flow, and all the result messages work as before.
  • The HUD timers strip (team PVP score and countdown, battleground phase timer, treasure map event timer) moved to the new UI: same numbers, drags as one piece, position remembered. The timing logic behind it now lives in small tested modules, and a battleground crash right as the scoreboard loads was fixed along the way.
  • The Choose One reward window (pick a single item from a bundle) moved to the new UI: icons and names in the list, the are-you-sure confirmation before the pick is final, and the already-known-emote guard all work as before. Three legacy list classes retired with it.
  • The housing lot list (town guide and lot conversations) moved to the new UI: owner, house name, lot type, basement, and dungeon columns that sort on click, the available count up top, and Set Compass Destination working as before. Fixed a handler leak the old window left behind on every close.
  • The phonograph song list moved to the new UI: one row per wax cylinder with icon, song, composer, and album, Play and Stop with the now-playing readout, live list updates as cylinders enter or leave your bags, and double click to play.
  • The Select Player window for teleport scrolls moved to the new UI: friends and party members with live locations, unreachable players greyed out, the PVP zone warning still in the path, and a fix for a subtle case where the game could lose track of who you picked while the teleport was being checked.
  • The Aether Vibration Device (internet radio) finished the batch: station list with your saved stations intact, Play and Stop with the current station readout, and adding or editing a station now happens in a panel inside the window instead of a separate popup. One whole legacy window (the old add-station popup) retired outright.
  • Both PVP stats windows moved to the new UI: the open-PVP kill list (your row in green, the same who-you-can-see rules, everyone visible in battlegrounds) and the team stats window with the Virtue and Chaos rosters under the live score and round timer. The timers strip and this window now share one timing component with no duplicated display code left.
  • The quantity picker (splitting stacks, buying in bulk, mail and trade amounts) moved to the new UI: slider, number box, and nudge buttons in lockstep, arrow keys to fine tune, Enter to confirm, Escape to back out, opening right at your mouse like before.
  • The guild description editor moved to the new UI: the description loads with your guild name, officers with the right role edit and submit, everyone else gets a read-only view with a notice, and the window closes itself if your role changes or you leave the guild.
  • The vendor manager (every item you have posted on player vendors, worldwide) moved to the new UI: icon, name, and town per listing, stored vendors highlighted, multi-select Send To Bank with the confirmation and count summary, and the Refresh cooldown as before.
  • The crown store window moved to the new UI: five packages with live prices, sale prices shown next to the struck-through original with the Sale badge, the Best Seller and Best Value ribbons in place, and Buy opening the checkout as before.
  • The /loctrack location overlay (area name and live coordinates, handy for reporting exact spots) moved to the new UI, and a dead loading-popup prefab nothing referenced was deleted.
  • The Select Destination window for teleport scrolls moved to the new UI: every discovered destination with Summary, Tier, and Episode columns, a filter box, tournament towns colored by event and sorted to the top with their switch, hover reasons on places you cannot enter, and the PVP warning honoring its setting. The biggest single window converted so far.
  • The basement entrance moved to the new UI, with the basement picker folded into the same window: enter your basement, flip through the empty basement and every deed that fits your lot, and the options menu (Open PvP, transfer contents to bank, lot access) all work as before, including the warning before a swap sends your basement contents to the bank.
  • The center-screen HUD messages (locked doors, tutorial prompts, zone and party notices from around thirty game systems) moved to the new UI: same centered banner, timed messages clear themselves, persistent prompts stay until satisfied, and rapid messages still queue in order.

Dungeon Builder

  • Started an AI-assisted dungeon build system: a skill that designs and builds full dungeon scenes from the modular art kits (geometry, deco, lighting, spawners, loot, secrets, world wiring), with approval gates before anything ships. Plan approved; first target is a two-level drainage dungeon beneath Castle Atos.
  • Mapped every dungeon construction system in the project to ground the builder: six modular art kits on an 8m grid, the deco layer, spawn/loot data, scene registration, and the existing random-dungeon and scene-analysis tooling the new system reuses.
  • First knowledge-base pass for the dungeon builder: 666 kit pieces cataloged with parsed roles, and six existing dungeon scenes mined for how designers actually place them. The data settled two layout rules the plan had guessed at: pieces snap on a 2m grid with an 8m room pitch, and floors stack on a 5m vertical module.
  • Measured every dungeon kit piece in the Editor: exact bounds and every opening on all six faces of all 666 pieces, probed with ray grids. Straight halls read as two clean doorways, T-intersections as three, and barred drain grates are detectable by how much of the opening the bars block.
  • The dungeon knowledge base now has a full data definition per piece: every doorway on all 666 kit pieces identified with position, size, and a confidence score built from three independent sources (measured geometry, naming conventions, and real placements in shipped scenes). Straight tunnels read as two opposed doorways, T-intersections as three, X as four, endcaps as none. A sewer theme palette ties the pieces to matching deco families, monsters, loot, and fog settings for the Castle Atos pilot.
  • Worked out how the dungeon kits hand off between themes and wrote it into the knowledge base: dedicated adapter pieces (sewer tunnel into dungeon stonework, tunnel into cistern), room walls pre-punched with another kit's doorway, cave and sewer corridor mouths that match closely enough to butt directly, breakable walls used as secret cross-theme passages, and the shipped-scene habit of changing theme on a level drop. The two sewer-to-dungeon adapters turned out to share their exact shell with the well-used cistern adapters, so their snapping rules carry over.
  • Pinned down how the theme adapter pieces actually orient: the sewer-to-dungeon tunnels keep their round sewer bore running straight through and carry a squared dungeon doorway on one side wall, so they add a side exit rather than capping a corridor. The transition staircase climbs one 5m level into a dungeon-floored landing, matching how shipped scenes stack dungeon halls above the sewers. Determined from the mesh materials, real scene placements, and renders of each piece.
  • Knowledge base hardened and the build engine core is in: a test suite now guards the whole piece catalog (it immediately caught one piece with an inflated footprint), every water channel was measured with floor depth-maps instead of eyeballed (two profiles: half-meter gutters and the big 1.5m-deep cistern trenches), and the theme adapters carry exact measured doorways. On top of that sits the first engine layer: a dungeon manifest format and a deterministic placer that validates piece fit, doorway matching, sealed seams, and reachability before anything touches a scene. Structural placement is locked to the raw kit pieces; the deco variants stay out of walls and floors.
  • The dungeon builder now has its operator manual: a skill that walks from a one-line description through lore research, a design document with ASCII floor plans for approval, the build passes, a screenshot review, and shipping. Two approval gates are built in so nothing reaches the game without sign-off.
  • The engine built its first dungeon. A ten-piece sewer network with an entrance run, three junction types, a door frame, and five sealed expansion stubs went from a JSON plan to a walkable Unity scene: every piece on the grid, every seam tight, the floor channel running unbroken through the tunnels. Re-running the build is a clean no-op, which is the property that will let dungeons grow in later passes without disturbing what is already built.

Build Infrastructure

  • Retired one of the legacy build farm machines and moved its player-report jobs to another build agent. Their first runs on the new agent hung: the jobs connect to the game database over SSH, the key file came out of source control with loose file permissions, and SSH rejected it and sat waiting on a password prompt that a build agent can never answer.
  • The report jobs now tighten the key file permissions before connecting and carry a one-hour timeout, so a stuck run cancels itself instead of parking a build agent all day.
  • The permissions fix alone was not enough: the report job fires a dozen SSH connections at the database box in the same instant, and the new agent is fast enough that the server's connection throttle dropped a couple every run. Split the job into two waves of six connections each; the reports built green end to end with the full set of files published.
  • Moved the rest of the retired build machine's jobs to the remaining build agents: the per-commit game client checks, server tools, the backend deploy packager, and the analytics jobs. The old localization jobs stay retired with the machine. First runs are re-syncing their working copies, which takes a few hours each; the backlog that piled up while the jobs had no machine is already draining.
  • One more difference between the retired build machine and its replacement surfaced in the report jobs: the new agent's file-copy tool speaks a newer protocol that two of the older game servers cannot follow, so reports generated but never made it back. The affected jobs now fall back to the older copy protocol. All three report flavors (live, QA, dev) now run green end to end.

Combat

  • Wrote a full design doc for a Chaos Magic rework after a deep dive into the skill trees and the Obsidian lore. The plan makes the school's signature nuke resistable for the first time, lets every Chaos spell work from trainer level instead of unlocking deep at grandmaster, and adds three new passives so Chaos matches the passive depth of Fire and Death.
  • The rework proposal gives Chaos a deck-warfare identity with spells that discard and redraw glyphs, a grandmaster transformation capstone, and two new glyph combos. On the world side it proposes Obsidian artifacts that carry a visible tradeoff, the four Cabalist town sieges that never shipped, shardfall storm events on the astrology clock, and a Destiny Pool scrying basin that forecasts where the Cabalists strike next.
  • Added the Chaos rework to the roadmap as a new epic with a phased plan: the balance patch first, the new spells second, the world content third. The public roadmap page picked up the entry too.
  • Caught a balance-audit bug while double-checking the Chaos numbers: the tool added up every outcome of Chaos Bolt's random elemental roll, but the game only picks one per cast. Modeled correctly the spell lands near the middle of the pack instead of far above it, so the damage cut drafted this morning is withdrawn and the audit tool goes in for a fix (#1050).

Server

  • Fixed the red chat error Server: Unknown operation code 4200430430 that appeared twice after every scene load on chaos build 48 (player report #1055). The new global deco list request was never wired into the scene server operation router, so the server rejected it as unknown; the GM Global Deco window was dead for the same reason. Verify task #1057.

Build

  • New gate check-rcv-dispatch.ps1 in the chaos-release preflights and the nightly portwire gate: fails when a generated request dispatcher has no call site in hand-written server code. That exact miss compiles clean and only surfaces as red error text in game.

Itemization

  • Bone armor stopped calling itself leather. The tooltip material line read "Leather Light Armor (Head)" on every bone piece, including the Obsidian Bone set added yesterday; it now reads "Bone". The armor still behaves as light armor with the same crafting station, masterwork options and set bonus (#1063)

Economy

  • Vendor sale mail now lists what was on the item: the bill of exchange shows one line per enchantment and masterwork under the item name, with failed attempts collapsed to a count line. Applies to old sale mails already in mailboxes too, since the full item snapshot was always stored with the mail.
  • Sold sheet music and player-written books are now named by their actual title in the sale mail subject, letter, and chat notice. The server looks up the title at sale time and stamps it into new sale mails; older mails keep the generic wording.

Farming

  • Second round on the mega-farm agriculture bug after a tester failed verification on a 41,277 spot farm. The client capped tracked lot objects at 20,000 and the first overflow corrupted every later plant update in the scene, so watering stopped showing at about 23,000 planted spots and a relog showed nothing watered. The cap is gone: the tracking table now grows as needed and an overflow can no longer corrupt anything. 10 new tests pin the bookkeeping.
  • Also fixed in the same pass: the second watering sweep was dropped client-side before it was even sent for any plant still awaiting fresh server data, plant data reloads still ran one at a time with a timeout bug that re-issued duplicate requests, and an oversized watering batch could hang the rest of the pass. Reloads now run nearest-first and pause while the player acts, and batches split below the message size limit.
  • Server side of the same bug: watering silently skipped planters briefly locked by growth updates, which is why a random subset showed watered after a restart, and one mid-batch save error dropped every remaining planter. The lock now retries and logs, and each save is isolated so the rest of the batch persists.

Images

2026-07-20 · 150 items

Headlines

  • Hilt Fortress lost its 2019 two-door workaround: one entrance door again at all three entrances, with a choice window only while the Vermillion Lens quest is active (#987)
  • UI rebuild batch 3 complete in one day: Titles, Blocked Players, Players in Scene, the player note editor, and all four invitation prompts now run on the new UI system, on shared window parts extracted from the Social window
  • Lua addons gained two long-requested powers in one day: reading your current target (name, health, focus, buffs, debuffs, stats; other players' details stay private) and sharing saved variables with custom NPC conversations, both wishlist requests open since 2024 (#745)
  • The Options window now runs on the new UI framework: all 7 tabs and about 150 settings rebuilt, a smooth keybinding editor, and a first-ever UI Scale slider. The largest single window of the UI rebuild so far.
  • Ten player-filed bugs swept today in three passes: eight silent shrine caretakers voiced (11 more never-voiced NPCs caught by the same fix), skeleton archers recast to an undead rasp, Atolls of Atos fishing flipped to salt water, the invisible Well of Aldur wisp narrowed to runtime state, the shattered Simple Mantle Clock repaired, the Sequanna Colossus elevator no longer vanishing at certain camera angles, the Air Elemental summon visible again, the Faerie Belt shrinking its wearer again, Crystal Shield no longer buffing invisible still-loading players, and the Jotungrund Frost Giant trading his game-show voice for a deep boom, live without a build (#891, #904, #902, #900, #817, #744, #743, #871, #822, #825)
  • The scenes portal went from 34 to all 291 zones in one day of designer-driven iteration: full NPC, quest, creature, chest, merchant, and spawner detail per scene, drill-down tables with loot values, a sortable list view, and a nightly build task to keep it fresh.
  • A month of team content caught up in one pass: 124 changelists brought in, fixing the broken store pet decorations (white cubes on lots) and adding garden bowers, new candle colors, and dozens of world fixes.

Community

  • Nightly forum sweep filed 8 wishlist ideas and 1 bug report from player forum threads (map art style, building snap-to-alignment, launcher player count, PvP battlefield mode, dynamic PoT maps, party loot-roll opt-out, more Obsidian crafting recipes, and a Lua addon scripting stutter).
  • The catnipgames.net front page now shows a live player counter for the Chaos shard: how many players are logged in and in game, refreshed every minute (#908). Test bots are not counted. If the number stops updating the badge hides itself.

UI

  • Fixed the vendor search slowdown reported by Saturday night's crash uploads: after hovering listings to load their details, the game could sink below 10 fps and never recover, forcing a quit (#915). Search rows now keep a stable identity when their full details arrive, a listing that appears twice in the results can no longer break the list, and the list rebuild recovers from a bad pass instead of repeating it every frame. Regression tests added; verify task #916.
  • Tracked down why interface text kept getting its bottom sliced off in the rebuilt windows. The interface font needs 19.2 pixels per line, more than the engine's stock font, and each window had its own hand-picked row height copied from the window before it, so a too-short value kept spreading. Row heights now come from one shared place, long names truncate with an ellipsis instead of being cut mid-letter, and a new test fails the build if a height drops below what the font actually measures.
  • Picked the next five windows for the UI rebuild and wrote the batch plan: the titles list, the players-in-scene list, the blocked players list, the four invitation prompts (party, guild, guild war, duel), and the social note editor. The heavier social windows (mail, party HUD, emotes) wait until the drag and drop foundation exists.
  • Extracted the Social window's titlebar, drag, resize, pin, and position memory into a shared window chrome with reusable window and bridge bases, so each coming conversion starts from common parts instead of a copy. The Social window now runs on the shared chrome with identical behavior, guarded by new structure tests.
  • Started on UI size options. There has never been a way to change how big the interface is, and with the interface rebuild underway now is the time to settle it. The groundwork landed: one setting drives both the old and new interface systems together, so the heads-up display and the rebuilt windows stay the same size as it changes rather than drifting apart. The slider that exposes it comes next, followed by a separate text-size setting for readability.
  • Converted the Titles window to the new UI system, the first of the batch-3 five. Same features (set or clear your worn title, bold active title, gold founder titles, sortable list, double-click to wear), now in a movable resizable themed window that remembers its position. The Social window's list component was generalized so the coming conversions reuse it. Verify task #923.
  • Two more windows converted to the new UI system: the Blocked Players window (block by typed name, multi-select unblock, online players sort first, right-click player menu) and the player note editor (per-player private notes, save-button and character-counter behavior unchanged). Verify tasks #927 and #926.
  • The Players in Scene window joined the new UI system: same name colors and ordering (party, admin, guild, PvP, friend, everyone else, unknown PvP players as a gray question mark until targeted), right-click player menu, and the PvP-scene swap to the stats windows. Verify task #928.
  • The four invitation prompts (party, guild, guild war, duel) moved to the new UI system by rebuilding their one shared base, with the queue behavior and the PvP-flag warning intact. That completes all five pieces of UI rebuild batch 3 in a single day. Verify task #930.
  • Rebuilt /fps as a UI Toolkit Performance window: average fps, the fps during the slowest 5% of the last 30 seconds, and a 15 second frame-time bar graph with 16.7ms and 33.3ms gridlines. The old plain text counter is retired.
  • The graph recolors bars at the 60 and 30 fps thresholds, follows the active UI skin, and the window remembers where you drag it. New frame-time sampler underneath with 21 new EditMode tests.
  • Started moving the Options window to the new UI framework: built the complete replacement window (7 tabs, about 150 settings, and the full keybinding list) plus 31 automated tests. Not player-visible yet; the switch-over comes next.
  • The Options window (the Esc menu) now runs on the new UI framework: all 7 tabs, about 150 settings, a smooth-scrolling keybinding editor for about 180 actions, and a new UI Scale slider (75 to 150 percent) that resizes the whole interface. The window is movable and resizable and remembers its position. The old 80,000-line options screen and six of its helper components were retired; settings still apply instantly and every entry point (Esc, login screen) works as before. Verify tasks #955 and #956.
  • Fixed dropdown text getting its bottom sliced off across the rebuilt windows (reported on the new Options window's theme pickers). The shared theme removed the stock vertical padding from text boxes months ago but never did the same for dropdowns, so every fixed-height dropdown clipped its value. One theme change heals them all, the Options window now uses minimum heights everywhere text lives, and a new test locks the rule in for both control kinds.
  • Fixed checkboxes vanishing under the mouse in the rebuilt windows (reported on the new Options window). The engine's stock theme has its own hover and click rules for checkbox art that quietly override ours, so pointing at a toggle blanked its circle. The shared theme now restates the art for every state, and a new test keeps it that way.
  • Swept the rest of the rebuilt-window controls for the same stock-theme override problem behind the vanishing checkboxes: dropdown plates, text boxes, and slider handles all had engine hover rules waiting to repaint them light. All restated in the shared theme with test coverage, ahead of anyone hitting them.
  • Fixed the backgammon window breaking apart at its smallest size (tracker #876). Each tavern game now carries its own minimum window size: backgammon stops at 840x600, the size that still holds its full board, bar, and bear-off trays, while chess and checkers keep their smaller 640x520 floor. The board area also clips anything that would poke outside the frame. Commit 7a58611ec7.
  • Raised the vendor listings window minimum width so the Location column and its header clear the scrollbar with a real margin at the smallest size (tracker #471, following up the earlier column-overflow fix).
  • The faint white square in the bottom right of the Oracle window (tracker #535) was the window resize grip. It now sits nearly invisible until hovered, where it brightens to show the drag-to-resize corner. Applies to all the new-style windows that share the grip.
  • Fixed the bank window opening with a cut-off item list (tracker #464). The list viewport now tracks the window size continuously, so a bank opened remotely through a Bank Access Device fills the dialog on the first frame instead of after a manual resize. A new layout test guards the prefab wiring.

Client

  • Morning sweep of the overnight crash uploads and boot logs: the title-screen boot freeze fix and the Linux startup crash fix both shipped in chaos build 44 today. Boot completions over the prior 36 hours were 83 of 108 starts on the old build; the next sweep checks build 44's rate.
  • Ran the full editor test suite over the UI rebuild groundwork: all new window-chrome and social-window guards pass. Fixed a stale guard that still read the old tester fly-mode file after that code moved, and filed the one remaining failure (a compass options label missing its translation record) as #921.
  • Fixed the rebuilt UI Toolkit windows going dead after their first close: Social, Players in Scene, Titles, Blocked Players, the note editor, invitation prompts, and the /fps window all opened once per session and then refused to appear again. The window contents were discarded when hidden and never rebuilt on reopen. Reproduced in the live chaos client, fixed in the shared window layer so every current and future converted window inherits the repair, and pinned by new guard tests.

Lighting

  • Investigated the "Frosted Glass Lamps emit very little light" report (#646) with measured editor renders and a check of the shipped content packs: the lamp lighting chain is healthy at every layer, and the dark-lamp look matched the content packaging bug already fixed in build 35 (#661; testers confirmed lamps on chaos in #719). Closed with the evidence attached.
  • Added LampLightIlluminationTests: an editor render test that fails if a lamp-strength point light stops lighting a surface through the deferred pipeline, if the lamp prefab light data drifts, or if the custom deferred lighting shader diverges from Unity's builtin result.

Dev Portal

  • The character viewer can now send your own game client somewhere with one click. Each town on a character's page has a Go there button that loads that scene in your running client. It works for any game admin, with no special launch options.
  • Added a countdown to the portal front page: days until DragonCon (September 3) and until the test servers open to everyone (September 8). Tiles switch to Today on the day and drop off once a date has passed.
  • Scene Analysis pages now list every NPC in a scene: a filterable roster with merchant, bank, trainer, and vendor role tags, level, spawn count, quest-giver badges, and each trainer's teachable skill list. Kingsport shows 55 NPCs; the 34 baked scenes carry 483 NPC records total.
  • Added a Quests panel per scene: quest cards with player-facing titles, steps completable in that scene versus the full quest, the NPCs involved, prerequisite chains, and the full journal text of every step. Quests reachable only through shared NPCs like town criers and the Oracle fold away separately.
  • Added a Creatures panel (hostile and ambient spawns with counts, levels, and boss tags) plus per-type resource node breakdowns. All 34 baked scenes were republished with the richer data, and 21 new editor tests cover the extraction.
  • Owner feedback on the new scene pages: NPCs whose quest actions live in shared include files (like the Helpful Automaton's guides) showed no quest involvement. Quest credit now follows each conversation's nested includes, which grew Kingsport's quest list from 9 to 16 and its quest-giver count from 8 to 10.
  • Scene pages also gained a Discoveries table (each point of interest with how it unlocks: by visiting, only during quest stages, or both) and a NavMesh tile showing the baked navmesh size and the date it was last regenerated.
  • The scenes portal now covers all 291 scenes, up from 34: every zone baked with thumbnails, entry shots, NPC rosters, quest detail, creatures, chests, discoveries, and navmesh data. Portal-wide that is 2,215 NPCs, 3,365 creature entries, and 1,339 quest entries.
  • Designer feedback pass on the scene pages: the NPC and Creature tables split into Generic and personal name columns ("Refugee / Abigail"), and the NPC versus creature call now follows the game's own talk rule, so hostile mobs with authored conversations (Necropolis spirits, skeleton fighters) list as creatures with their display names kept.
  • The Spawners, Chests, and Merchants tiles now open drill-down tables: every lootable container with its loot bundle, approximate gold value, position, and prefab; every spawner with its mob, level, kind, and faction; every merchant with its sale inventory and what it buys. Chests broke down by container type along the way, and Kingsport's mystery 4 crafting stations turned out to be 2 Alchemy, 1 Butchery, 1 Cooking.
  • The scene grid gained a Cards or List toggle: list rows show a thumbnail plus sortable columns for warnings, NPCs, creatures, spawners, median level, chests, resources, stations, quest givers, and live fps and load times. Numeric columns center per owner request.
  • New scene-analysis build task on the build server: bakes the portal data on the Windows agent and publishes it, data-only by default with an optional screenshot refresh. A guard refuses to publish if the build tree is older than what the portal already serves, after a trial run from a stale tree nearly rolled the pages back.
  • Character viewer: fixed player towns showing the wrong name. Town identity lives in the scene scenario, not the shared template scene, and the name map only knew templates, so every town on a template rendered as one example town (a governor of Isle of Apples showed as governor of Ocllo; a character logged out in Anseldale showed Magna Planitia). The map now carries all 524 town and scenario entries under their full scene ids, and an unknown town falls back to its own name instead of a sibling's.
  • Character viewer: the Towns tab Scene column now shows the backing scene asset name next to the town name, and the Overview panel gained a Region row. Vendor search location names pick up the same corrected data on its next refresh.

Mounts

  • Gate levers now work while mounted (#878). Riders could already open doors and city gates from the saddle, but lever-operated gates like the Owl's Head north gate and the Castle Atos drawbridge still refused with a dismount message. Levers that drive a gate or drawbridge now respond while riding, the moving gate no longer knocks the rider off, and switches that do not drive a gate still require dismounting.

Docs

  • Corrected the Unity test-runner notes: the MCP command line accepts a per-call timeout option, so class-level test runs behind a fresh compile no longer lose their summary to the default 60 second limit.
  • Wrote a five-page Player-Owned Towns deep dive for the team wiki: what a PoT actually is (a scenario row layered on a shared template scene), the full size-tier table, the owner asset and server-report pipeline, how the server sets a town up, and step-by-step runbooks for changing a town's owner, size, or template today. Also put the two existing PoT ops runbooks on the wiki shelf.
  • Wrote the plan for managing player-owned towns from the team portal with no client build: owner and size move into the game database as the runtime source, every change goes through an admin operation with an audit trail, and a new towns admin page fronts it. Template switching among already-shipped templates is a later, gated phase. Added the matching roadmap epic.
  • The deep dive surfaced one real data bug: the client and server size tables disagree on the Devopolis tier's square footage (250,000 vs 166,800). Harmless today because live towns bake from the client table, but the plan pins it so the drift test starts green.
  • Wrote up two test-runner traps from today: an unfiltered EditMode run pulls scene-loading fixtures and ran hours without finishing, and the async result callback does not survive a mid-run domain reload, which leaves a sentinel file claiming a long-dead run is still going. The runbook now carries the namespace filter to use, the ghost-run check, and the cancel recipe.
  • Wrote up two traps that make a branch merge in the shared repo look like a hang rather than a stuck process: the Unity YAML merge helper waiting forever on a conflicted file, and the shared index being held by a parallel session. Both now have a diagnosis and a recipe in the operations docs.

Lua Addons

  • Fixed the addon garbage collector interface after a forum report: collectgarbage("count") now returns memory use in kilobytes instead of nil, and a new collectgarbage("step") runs a time-budgeted incremental collection (default 3ms, capped at 50ms) so addons no longer need the full collect that froze a frame for 140-190ms. Unknown modes still return nil and addons still cannot disable collection.
  • Added a ShroudRealDeltaTime global for addon diagnostics: the existing ShroudDeltaTime is clamped at 100ms by the engine, so long hitches all read the same; the new value reports the real frame duration. Also stopped rebuilding the ShroudServerTime string every frame; it now updates once per second.
  • Added a current-target API: 16 new functions report the targeted creature or player's name, health, focus, buffs and debuffs, and stats, resolved the same way as the target frame. Fills a buff-monitor wishlist request open since 2024.
  • Kept fair-play limits in the new target API: another player's stats stay private apart from health and focus, and creatures that hide their health hide it from addons too, with a new ShroudIsTargetHealthHidden flag so an addon can show a placeholder instead.
  • Buff lists from ShroudGetPlayerBuff, ShroudGetPetBuff, and the new ShroudGetTargetBuff now carry a rune id, a debuff flag, and a stack count. A new ShroudLuaApiVersion global lets addons detect the API level, and 9 new EditMode tests pin the rules.
  • Lua addons can now read and write the saved variables that custom NPC conversations keep with their saveVariable and loadVariable script functions (#745, a forum request open since 2024). Four new functions (ShroudLoadInkVariable, ShroudSaveInkVariable, ShroudHasInkVariable, ShroudDeleteInkVariable) work on the same per-character store, so an addon can react to what a conversation saved and a conversation can read what an addon wrote.
  • Values cross the bridge in the exact string forms the conversation runtime parses back: whole numbers stay whole (42, never 42.0), booleans become 1 or 0. An EditMode suite pins the shared storage key format and the guards, so saves before character select fail cleanly and a saved empty string stays distinct from never saved.

Localization

  • Numbers in translated clients now follow the selected game language instead of the Windows region format. A German client on English-region Windows showed 15,000 Punkte and now shows 15.000 Punkte; gold, experience, prices and quantities are covered everywhere a number lands in a sentence (Redmine #785, verify #920).
  • Reworded three German templates that forced an unmodified name into a grammatically declined slot, including the landmark discovery message, which now reads Position auf Kompass und Karte markiert: followed by the place name. Regenerated the German client text files.
  • Found during that rebuild: an automated regeneration of the localization source database had dropped 18 hand-added records (Ultima mode options, compass toggle text), so the next text deploy for any language would revert those strings to English. Kept the affected file out of the commit and filed #919; an existing guard test already fails on the drift.
  • Caught the nightly text generator dropping the 53 hand-registered Social and Theme Editor translation records from the source database (the shipped language files were unaffected). Restored them and registered the new batch-3 window strings; noted on #919 so the generator fix covers this file too.
  • Restored 105 dragon display-name records the automated localized-text regen dropped from the source db (the job ran from a checkout that predated the dragon totems) and rekeyed the Rise Shaft slot tooltip so translations pick up the new text. The regen-skew gotcha is documented in the localization notes.
  • Filled all seven languages for the rebuilt Options window and the day's other new interface text: about 1,800 new lines per language translated, validated, and shipped into the client language files. Coverage stays at 99.4 to 99.8 percent everywhere. A handful of lines whose English source has broken formatting tags stay in English until the source text is fixed.
  • The localization source db can no longer be stomped from the old build machine: the Perforce-to-git bridge now record-diffs every incoming change to the source files and restores any record a stale regeneration would delete, with an explicit override for intentional prunes. The dragon and UI window records it already lost this week are what prompted the guard.
  • Localization source regeneration moved into the repo: the string extractors now run from the git tree (ported to Python 3, Perforce calls disabled) under the same deletion guard. The first run brought in a month of missing strings, 450 from code and 43 from assets (table games, rebuilt UI windows, tip jars, vendor search), minted ids into 9 assets, and marked 24 rewritten messages for retranslation.
  • Fixed a long-standing extractor bug the Unity 6.5 reserialization exposed (the single-quote scan lost its place on doubled escaped quotes) and merged a duplicated chat error string into one shared record.

Maps

  • Regenerated the 25 scene maps added on July 16. They were captured before the terrain data repair landed, so most of them had white untextured ground baked into the image. All 25 scenes were recaptured from the repaired terrain, every image reviewed, and the set re-accepted: 24 images changed, and East Vauban Foothills was already correct. The recomputed calibration matched the existing registry entries exactly.
  • Added a recapture mode to the map capture batch: scenes can now be re-queued by name after their maps are accepted. The normal batch only targets scenes that have no map entry yet, so accepted maps could not be retaken before this.

Gameplay

  • Party members can now skip item loot rolls while still receiving their gold share. Any member can check the new Skip loot rolls (keep gold share) box in the Social window Party tab; while it is checked they are never entered in rolls and get no roll prompts. Requested on the official forum (tracker #911, verify task #925); rides the next chaos build.
  • Obsidian Forge expansion (player wishlist): a full Obsidian Chainmail set (5 pieces) with two new forge materials, Coil of Obsidian Wire and Obsidian Binding. Dark undyeable look, magic resistance and chaos attunement per piece, 1 percent melee damage reflection carried by the wire, and a far lower fizzle penalty than obsidian plate (39 vs 54 set total) for casters.
  • More Obsidian Forge recipes from the same wishlist item: obsidian versions of the round, triangle, and rectangle shields (darkened shield prefabs, reflection from the sheets), a 5-piece obsidian bone armor set built on a new Obsidian Enforced Bone Plate component, and a craftable Obsidian Ring and Necklace kept well below the artifact Obsidian Bands. 18 new recipes total, loot-taught in Hilt Fortress like the existing obsidian plate.
  • The obsidian look reuses existing meshes with darkened material clones (the same technique the obsidian plate set already used), so the whole expansion shipped without new art. Recipe hash uniqueness verified across all 3,275 recipes; 27 new EditMode tests cover the recipes, stats, and the classification isolation that keeps obsidian components out of generic recipes.
  • PvP trophies (the skulls, jawbones, and hands claimed from a defeated player's remains) now record their history: the tooltip shows who collected the trophy, the zone the kill happened in, and the in-game date of the fight. Crafting a trophy into another item keeps the lines. Trophies claimed before the change are unchanged. (#695, verify #946)

Tester Tools

  • Fixed the tester Duplicate button leaving item stacks red until relog. Rapid x1000 clicks aborted the duplicate partway once a stack neared the 32,767 cap, and the aborted request left the stack permanently flagged as pending. The tool now checks the cap up front, reports skipped stacks, and greys the button out until the duplicate finishes (Redmine #934).
  • Duplicating an item inside an open container no longer clones the container along with it, and copies of non-stacking items are capped at 100 per click. Six new editor tests pin the selection and validation logic.
  • Client control harness gained a dialog verb that opens, closes, and inspects any HUD window by name and flags windows that are open but rendering nothing. A new scenario cycles every converted window through close and reopen so the next dead window is caught on the GM build instead of by a tester on chaos.

Server

  • Root-caused a tester's 12-minute login lockout from this morning: a player-dungeon instance wedged the moment he zoned in, login kept answering "waiting for character to leave the previous scene", and every retry extended the hold because re-authentication refreshes the session record the gate waits on. The login gate now frees a character whose scene has stopped reporting for 4 minutes, so the worst case dropped from 12+ minutes (unbounded while retrying) to about 4 (Redmine #935).
  • Hardened the scene-leave path around the same incident: the session release now runs even when scene cleanup throws, game connections that go silent for 2 minutes are disconnected, one request can no longer add more than 100 items to a bag, and a new watchdog logs any scene operation that runs longer than 2 seconds or queues longer than 10.

Dungeons

  • Rise Shaft dungeon room follow-up from an owner report: the totem slot takes elf, troll, and dragon totems again (the dragon change had replaced the old elf/troll support instead of adding to it), and the hover text reads "Elf, Troll, or Dragon Totem Slot" instead of the stale elf-and-troll line. Spawn locations are filtered by totem type now, so a dragon totem spawns just the dragon and elf or troll totems never wake it.
  • Dragon totem decos were rendering at 2.7m tall with a 5.1m wingspan (the foyer statue at the wrong scale), which made the placement ghost unusable in the room. Rescaled to 0.59m, in line with the other totem lines, and switched to the standard totem box collider.
  • Fixed monsters standing frozen at their spawn points in player dungeons (tracker #877). Spawning now waits for the dungeons wall and door seals to finish applying before placing monsters, and a monster whose spot no longer sits on walkable ground is nudged to the nearest usable spot. Two fire elemental spawn spots in the lava grotto rooms were moved onto walkable ground outright. A new editor test replays all 205 spawn points across the 16 spawn rooms against their baked navigation and failed 26 of them before the fix. Commit 5a759d7bd4.
  • The same test flagged the Hilt Basement spider room: 16 of its 34 spawn points stand well off the rooms stale baked navigation, beyond what the new runtime nudge can recover. Filed as tracker #971 for a rebake; the test carries an exclusion for the room until then.
  • Hilt Fortress is back to one entrance door at each of its three entrances (Nightshade Pass, Paladis Passage, Equitas Passage). Players not on the Vermillion Lens quest enter the standard dungeon directly; players on that quest step get a choice window for the standard dungeon or the solo quest version (#987).
  • The 2019 door split also left an old auto-routing door active on the Nightshade Pass tower gate that could force quest players into the solo version of Hilt Fortress. It now uses the same choice window. 11 new editor tests cover the door candidate logic and the scene config of all three entrances.

Taming

  • Taming necklaces now credit the tamer (player wishlist #698): capturing a creature adds a yellow "Tamed by" line under the crafter credit plus a gray line with the in-game capture date. Re-taming replaces the credit, releasing the pet clears it, and it disappears once a pet is permanently gone. Resurrecting another player's pet leaves their credit alone. Verify task #944.
  • The tamer credit is server-checked: only the capturing player's own name is accepted and the capture time is stamped by the server, so the line on a traded necklace is trustworthy. Covered by 4 new EditMode tests.

Portal

  • Added the missing Character Viewer card to the dev portal landing page; the character search and admin page is now reachable from the portal instead of only by direct URL.
  • Hardened the work blog publish after the morning counter outage: the live player counter now builds itself from the shared page script rather than page markup, and publishing refuses to deploy if required page furniture is missing, so the same class of mistake gets caught before it reaches the site.
  • Character Viewer: the page now shows which server it is reading. A Chaos badge sits next to the title on the search page and the character page.
  • Character Viewer: deleted characters now appear in search results with a deleted tag and a created date. Their page shows a notice explaining the character was deleted, and admin actions are disabled for them.
  • Character Viewer: renamed characters now list their former names with date, reason, and who made the change. The server keeps a permanent rename record going forward; older renames appear where the portal audit trail recorded them.
  • Vendor search redeployed with the corrected town names and a full re-index of all 286,967 listings: vendors in player towns now show their actual town in search results instead of another town built from the same template.

Housing

  • Large structure decorations can now be placed on balconies, walkable roofs, indoor floors, and the tops of building blocks and platforms. The pass covers 174 items: clock towers, the bell tower, guard towers, gazebos, pavilions, tents, windmills, greenhouses, outhouses, stone platforms, standing stones, boulders, tombstones, devotionals, and more. From a player wishlist request.
  • Decoration placement gained an optional grid snap from a player wishlist request (#907): while holding a deco, G toggles a placement grid aligned to the lot and Alt+G cycles the cell size through 1m, 0.5m, 0.25m, and 0.125m. Rows of blocks, casks, and fences line up flush, stacking keeps the surface height, and wall decos snap within the wall plane.
  • With the grid on, Q and E rotate the held deco in 15 degree steps. Designer snap points such as display shelves and totem slots still win over the grid, both keys can be rebound under Options Controls, and the snap state and cell size persist per player. 47 new EditMode asserts pin the lattice math and the key wiring.

World

  • Fishing in Atolls of Atos now draws from the salt water table (#902). The zone-wide water volume was set to fresh water, so every catch and the fishing experience came out freshwater in open ocean. Lands in the next chaos build.
  • The Sequanna Colossus ruins elevator could turn invisible at some camera angles while its shadow stayed and players could still ride it: the moving platform was flagged as static scenery, so the baked visibility data culled it at its parked spot. Cleared the flags there and on 25 other movers (mine carts, dungeon platforms, the Blood Bay airship, the Rhun floating island), rebaked the scene visibility data, and added an editor test that keeps mover geometry non-static (tracker #744).

Audio

  • Eight more silent shrine caretakers speak now (#891): Fendrys in Aerie, Ardal in Point West, Raimi in Brookside, Koen in Etceter, Caden in Kiln, Xed in Jaanaford, Jephthah in Northwood, and Elon in Fortus End, plus seven colleagues at the same shrines. Six carried the same stale template data that silenced Tomas Cucu. The Kiln and Jaanaford pair were filed under crossed scene pointers that the voice exporter did not follow but the game did; the exporter now resolves conversations the way the game loads them, which surfaced 11 more never-voiced NPCs that got voices in the same pass. 2,131 lines generated and published; clients pick them up on next login.
  • Skeleton archers die with a bone-rasp undead voice now (#904). Players reported the dying word sounded like a living man giving an order; the archers were on a plain human voice while the bloodbone fighters already had the undead treatment. Recast and rebaked, live on next login. A pass for the remaining plain-voiced undead is filed as #965.
  • Recast the Frost Giant in Jotungrund from a playful announcer voice to a deep booming one (a leftover from the first auto-casting pass). Regenerated his 48 voice lines and published them to the voice CDN, so the fix is live without a client build (tracker #825, verify #980).

Graphics

  • Dug into the invisible Will-O-Wisp in the Well of Aldur (#900). The likely suspect, the engine stripping shader variants from asset bundles, is ruled out with build-and-render experiments that now live on as regression tests, and the wisp assets render fine in isolation at every quality level. The remaining suspects are the creature runtime visual state systems, which need a live client session to pin down.
  • Hardened the creature fade-in that left the summoned Air Elemental nearly invisible, showing only its metal rings: a stalled fade now completes instead of hanging forever, a missing dissolve mask no longer aborts creature visual setup, and the hair material shipped 69 percent dissolved and was reset. The miner hat lamp beam also shipped fully dimmed and was restored (tracker #743).
  • Ultima mode kept its video-options setting but lost its visual effect after any scene change; the rebuilt scene camera never re-applied it. The retro look now survives zoning (tracker #516).

Content

  • Confirmed why Island Challenge creatures still stand frozen after the navigation rebake: the rebaked data never reached the shipped builds. Client logs show every island spawner failing its navigation snap on the two most recent builds, both built after the fix landed in source. The scene wiring in the repo checks out, so the gap is in build packaging; filed as tracker #969 and the tester task is on hold until a build actually carries it.

Trackers

  • Closed tip jar bugs #874 (Visitors See dropdown rendering outside the window) and #873 (window staying open after changing zones) as already fixed: both were covered by the earlier tip jar fix pass that shipped with chaos build 44, and the tester reports predated it. Verification rides the existing tester task #887.

Travel

  • Fixed overworld travel speed staying locked to whatever terrain you started running on, broken since around 2021 (#741). The per-tile speed refresh was wired to a movement mode the game stopped using; it now runs from the active movement state, on foot and mounted, and the terrain speed table is pinned by new editor tests.

Combat

  • Shield of Ice, Cocoon of Night, and Cleansing Rain now honor the reagent conservation stat from wands and staves (#740). Their consume-chance data was a fixed number that ignored equipment; a new editor test sweeps every spell for the same data mistake and pins the known exceptions.
  • Crystal Shield no longer attaches its buff visual to an invisible object (tracker #822, verify #979). Friendly arc targeting could pick another player whose avatar had not finished loading into the scene. Targeting now skips players who are still loading, and the buff falls back to the caster as before.

Decorations

  • Pennant pole flags and the pirate flag now turn to follow the wind (tracker #819). Placed flags kept whatever direction their lot gave them, so identical pennants pointed different ways on differently rotated lots; the cloth now swivels around its own pole to the scene wind heading, which drifts over time, while the base keeps the player chosen rotation. Covers the 10 pennant decos, the 5 town pole flags, and the pirate flag; wall and standing banners do not flutter and are unchanged.
  • A new editor test pins all 16 flag prefabs to the wind alignment setup, so a future art edit that drops it fails the test run.
  • The Simple Mantle Clock no longer renders shattered: its 2005-era model file carried 8 broken polygons that the Unity 6 importer trips over, dropping 140 of its 568 triangles. Repaired the model file in place; the wooden case and numbered face are whole again (tracker #817).
  • Fixed the new pet decorations (Ceramic Bowl, Ceramic Food Bowl, Ceramic Water Bowl, Pet Bed) showing as unknown white cubes that could not be placed (tracker #986). The store items had shipped before their art and item definitions reached the build; the missing files are now in and placed cubes heal to their real models on next scene load.

Tools

  • New repair script for 2005-era model files: it drops the broken polygons that the Unity 6 importer trips over (the Simple Mantle Clock bug class), keeping names and references intact so prefabs keep working. Comes with a dry-run audit mode for the project-wide sweep (tracker #984).

Items

  • Fixed the Faerie Belt doing nothing when equipped (tracker #871, verify #978). The belt gained durability in an old item pass, and any belt stored since before that change read as permanently broken, which switched off its shrink effect while shrink potions kept working. The belt has no durability now, so every existing belt shrinks its wearer again with no item exchange. Also exempted the cosmetic shrink from per-scene gear caps and fixed equipment visuals keeping full size when rebuilt on a shrunken character.
  • Ran the new Faerie Belt and Crystal Shield test fixtures in the Editor test runner: all 15 tests pass. Fixing that run also caught an invalid hand-written meta file that had kept the belt fixture out of the compiled test assembly.
  • Oracle replies now follow the selected UI skin (tracker #369). The markdown renderer used fixed dark text colors that made answers nearly unreadable on the light Air skin; colors now come from the shared skin tokens, and a new test fails the suite if a fixed color sneaks back in. Also removed the dead pre-markdown Oracle chat window that rendered raw markdown through NGUI color codes.
  • The Oracle taming guide now lists the equipment bonuses to a tamed pet's level (tracker #469): per-rarity numbers for the seven artifact families, read from the item data, plus a note that the taming necklace grants none. Deployed to the Oracle service and confirmed with a live query.

Zoning

  • Fixed the false Reconnecting to the game service message at the halfway mark of zone loads. Zoning re-authenticates with the server before the scene load, and a slow load could stall the confirmation, triggering a second redundant reconnect that also flashed the player offline to friends. The loading checkpoint now waits for the in-flight handoff instead of tearing it down (tracker #520).

Crafting

  • Centered the Only craftable checkbox under the Recipes header on crafting stations and shrank its row background to fit the content instead of spanning the full window (tracker #513, #514).

Social

  • Party member name tags above characters rendered as solid colored blocks after joining a party (tracker #521). The party tag draws with a see-through-walls text material whose shader predated the engine upgrade; it has been regenerated against the current text renderer, and party names, titles, and guild lines read normally again.

Economy

  • Get Directions now works for vendor listings that come from the search index (tracker #468). Search results always carried the vendor lot id and the client now uses it, so searched listings and buy orders mark the vendor on the compass. Rows with no locatable vendor grey the button out instead of showing an error.

Creatures

  • Closed the Elysium Mines T-pose report (tracker #544) as already fixed: the July 15 animation repair covered the satyrs there, and testers verified satyr and imp animations on chaos on July 17.

Repo

  • Merged the day's parallel work back into a single branch: 39 incoming commits integrated, with the work log reconciled so it carries every bullet both checkouts wrote today. Also cleared seven leftover files from the retired NGUI list windows.

Infrastructure

  • Caught the content pipeline up on about a month of team changes (124 changelists): new pet decorations, garden bower and fern urn revisions, birthday candle colors, shipwreck pieces, book placement flags, stuck-spot fixes, and localization updates.
  • Fixed three content-import bugs found during the catch-up: renames left a stale copy of the old file behind (which broke asset identity for the birthday candle and shipwreck pieces), files from certain automated checkins were silently skipped, and a storage-rotation marker could delete a live file. Re-applied the handful of local changes the catch-up had overwritten, including the German localization payload (18k records restored) and the occlusion-plugin cleanup on ten scenes.

Images

Dev Tools

  • Added global dev-placed deco: devs can place decorations in any scene with no lot, pick how long they stay (an hour up to a year, or permanent), and the props appear for every player in every copy of that scene until they expire. Placing uses the normal decorate flow and never consumes the item; /gmdeco toggles the mode.
  • New Global Deco page in the GM tools lists every dev placement in the game with item, scene, age and expiry, sortable by any column, with teleport, extend and remove actions. Removals and extensions reach live scenes within a minute.
  • Dev-placed props are real decorations: chairs can be sat on and crafting stations work. Expiry cleans them up automatically, including scenes that were offline when the timer ran out. Container contents and saved lamp state are planned as a follow-up.

GM Tools

  • Added GM lot eviction for NPC towns. The lot sign's Evict Resident action, previously limited to player-owned-town governors, now works for GM accounts in any town. The evicted player keeps everything (deed to their bank, decorations to the Property Manager) and every GM eviction is logged for review.

Oracle

  • Removed the Oracle's daily bug report limits. Players previously hit a cap of 5 filed reports per day and were asked to try again tomorrow; there is no daily cap now. Hourly limits stay in place to catch abuse. The change is committed and will reach the live Oracle service with its next deploy.