The Silk Web | DEVLOG
www.thesilkweb.tsw/devlogconnected

DEVLOG

Weather that is never saved

2026-09-23 · world · rendering

It started as a much smaller request: a few bugs drifting over the catching areas so the overworld felt inhabited. Building that as a one-off would have been quick. Building it as a general particle engine meant the same code could also carry mosquitoes over the lakes, leaves coming down in autumn forests, a slow mist in the caves, and, once it existed, the sky itself.

The game already had a word called weather, and it meant something else: a fixed reading of how cold, warm or wet each patch of ground is. That never changes, and the stamina system leans on it. So the new thing is called sky weather everywhere in the code, and it adds to the ground's own reading rather than replacing it. Walking through a cold marsh in the snow is harder than either one alone.

Nothing about it is saved. Each day's sky is rolled from the world's seed and the date, the same trick that lets terrain regenerate byte for byte instead of being stored tile by tile. Load a save on a rainy afternoon and it is still raining, because it could never have been anything else. A day's weather also no longer runs midnight to midnight: it opens at a rolled hour and lasts a rolled few, so a clear morning can turn wet by lunch.

Two things only showed up after it shipped. New games kept opening in rain, often enough to read as broken even though the odds were fair, so the first day of every world is now simply clear. And writing the last missing test file found a real bug: switching from one kind of weather to another cleared the old particles but kept a spawn credit that had been quietly piling up the whole time the field sat full, so the new weather arrived as one sudden burst instead of fading in.

Trust level needed no new save data at all

2026-09-17 · progression · design

Steps walked, captures, dissections, resources gathered, days survived: the leaderboard already needed a full bundle of lifetime stats, computed fresh and submitted on sleep. Trust level draws from that same well instead of inventing its own counters. It is derived, not stored, recomputed once on load and then only watched for increases from there.

The perks came out smaller than the first draft. Shop discounts and stamina resistance only ever apply from the current tier, not every tier passed through on the way there, and an early version that listed the whole track with past tiers marked as gained implied they stacked, which they do not. The trust page now shows only the perks actually in effect, plus one line naming what the next level unlocks.

Both new laptop tabs shipped broken in the same commit and were caught the next session: neither list had actually been added to the screen's own controls, which in this UI framework means a tab draws empty and also freezes the laptop's input the moment it opens. The screen now checks on construction that every tab's focus target is a real registered control, so that particular failure cannot happen silently again.

The one thing worth knowing if a level ever looks wrong: trust can go down. Losing a neglected pet lowers the total by the same amount gaining one raised it, because pets owned reads a live count, not a lifetime one. Whether that is the right call is still open. For now it is at least consistent in both directions.

The dissection table finally opens

2026-09-15 · content · mechanics

The table has been real furniture since M7: purchasable, positioned by world generation, reserved on the interior's own wall run. Pressing E on it just showed a dismissible message saying it was not ready yet. That placeholder outlived a surprising number of other systems built after it.

It now opens a three-state screen: pick a caught bug, confirm you understand the specimen will not survive it, and read what came out. Nothing about the catching or the terrarium changed underneath it. Dissection reads the same player state every sale and every terrarium slot already reads, and removes the bug from wherever it actually is, carried or already stored, the same way selling already does.

The nicest find was in the Bug-pedia's own gate, not the table. A species you have caught but never dissected still shows up, just without its full write-up, which means the catalogue quietly became a record of curiosity satisfied rather than a checklist of species seen.

The E that was never really floating

2026-08-18 · rendering · testing

Stand next to something you can use and an "E" appears beside it. Until this week that "E" was written directly into the map tile: its glyph replaced, its background blended toward a highlight, and the three original values stashed so they could be put back when you walked away. It looked close enough to floating. It was not floating at all: the tile underneath was genuinely gone for as long as the prompt stood there.

Forest canopies had already solved this for a different reason. A tree here is drawn two cells tall by keeping a decorative entity one cell above the trunk, and an entity built with no background paints nothing behind its own shape, so the ground shows through around the leaves. The prompt is that now. Everything under the letter reads through it.

The better reason to move it is not the look. A repaint has to remember what it covered, and this world has another system that repaints every tile from scratch on each sunrise and sunset. Those two can race, and the losing outcome is not a flicker: it is the highlight being captured as if it were the tile's real colour and restored later as one. That exact shape has cost this project a bug before.

The first test written for the new version failed immediately, on a crash nobody had seen yet: the map only allocated one entity layer, and asking for a layer above the canopy threw outright rather than clamping. In the real game that would have fired the first time a player stood next to anything at all. It never got the chance.

Teaching without a tutorial

2026-08-17 · design · ui

The obvious version of this is a guided first day with a checklist, and it was on the table. It lost because the game is about wandering where you like and a checklist argues with that on the first screen. The other obvious version is a wall of controls at startup, which everyone skips.

So: a short tip appears the first time each thing actually matters. The first log you can search. The first nightfall. The first time you are too tired to keep searching. The first time you own a rope and are standing underground. Each one fires once per save, ever, and the tip for a tool only exists if you own that tool, so nothing is ever explaining a key you cannot press.

The triggers deliberately avoid the ones the story already uses. Story moments own the first catch, the first bug stored and the first sale, as narrative; a mechanics tip firing at the same instant would land on the player twice at once. The two systems teach in the gaps the other leaves.

Most of these are not events at all. "Standing next to a desk" is a state, and a state has no moment to hook. They are polled together on one check that collapses to a single boolean the moment there is nothing left to say.

The game got a reason to exist

2026-08-14 · story · content

For a long time this was a game about catching bugs because catching bugs is nice. That is enough to build a loop on and not enough to finish anything with. The throughline it has now reframes the loop rather than replacing it: a lonely entomologist with one field season to prove a protected tract is worth keeping, against an Environment Office that has clearly already decided. You were always filling a terrarium. Now the terrarium is a record somebody has to answer.

Twenty-nine full-screen story moments hang off thirteen kinds of trigger, and none of them are new engine work: they run on the exact Yarn dialogue system the in-game mail already used. That was a deliberate steer early in the design. A story screen is a piece of mail with a different frame around it, and inventing a second content format for it would have bought nothing.

The nicest surprise was how much of it was already reachable. Several triggers can fire more than once per save, and the queue that consumes them was always capable of chaining several beats off one trigger kind. No content had ever exercised it. Writing the story was mostly finding out what the engine had quietly been able to do the whole time.

Movement stopped snapping

2026-08-11 · feel

Grid positions are integers, so the fix was never going to be a fractional position; it is a separate visual position easing toward the real one, driving a cosmetic entity while the logical one keeps snapping underneath.

Then real play found the parts no headless check could. The player visibly duplicated mid-step, because hiding the real entity turned out not to suppress rendering at all. The glide read as dash-then-pause, because it was outrunning the step cadence and idling. The camera shook in every small room, because the sub-cell pan kept computing an offset for a view that had nowhere left to scroll.

The last one was the interesting one: diagonals were never smoothed, because a diagonal step covers more ground in the same time budget. The right model turned out to be deriving a constant velocity per step from that step's own distance and the time until the next one is due, which needed no tuning constant at all and deleted the two that existed.

Postcards, and the bug the tests caught

2026-08-02 · online · testing

Free-text mail between strangers is a content moderation problem, and this game has no report queue, no moderators, and accounts that cost nothing to re-create. An allowlisted set of postcards turns that into a volume-control problem instead, which is one you can actually solve with caps and a block list.

The rules that matter are counted per account in the database, not per IP: a daily send cap, a cap on how many unread slots one sender may occupy in one recipient's inbox, and an inbox limit that rejects rather than evicting, because evicting the oldest message is itself the flood attack.

Writing the first server-side tests in the project immediately paid for itself. An early draft of the delete endpoint did a real delete, which silently erased the sender's own record of the same message too, since both views read one shared document. It is a soft-delete flag now.

The laptop grew a browser

2026-07-28 · ui · online

The in-game laptop started as a single strip of tabs: catalogue, sell, buy, gear, tools, food, resources, mail, pets, ranks. That was already at its character budget. The strip is centred text on a fixed-width surface, and one more tab would have silently overflowed rather than wrapped.

So it became a browser. There is a home screen listing websites now, each one drawing only its own tabs: Garden Place for buying and selling, Tools 'ants Tuff for gear, Butter Fly for food and resources, Snail Mail for post and ranks, Wanna-Bee Friends for pets, and Bug-pedia standing alone as an app rather than a site. Backspace steps back to the list from anywhere.

The nice part is that it made room without any new concept. A site is a display name, an address and a list of tabs it owns. Adding the next online feature is adding a row.

↑↓ moveENTER selectTAB next pageBKSP back© Nightly Bug Games