Knowledge has a body.

When a pawn dies, their pack stays where it falls — but the new pawn doesn't inherit your recipes. Crafting knowledge now drops as a tangible data shard alongside everything else: a small pickup containing the survival skills the dead pawn had earned. If you don't recover it (or someone else gets there first), that knowledge is gone from the world.

The reasoning: storage that lives on a UI menu doesn't mean anything. Storage that lives on a body the player has to hike back to — across the world clock that didn't pause — does. The first run where a sympathetic NPC found my old shard before I did and started selling my recipes to a hostile faction was the moment I knew it was working.

Wiring up the cost ledger.

Shipping the first pass on the Wrought system this week. Five powers, all hooked into the existing survival pipeline so that nothing lives in a parallel "magic resource" world. Burn warms you and damages your skin. Sense improves perception and degrades your eyes. Read pulls fragments from corpses and gives you a migraine. Every activation spends from a Psyche pool — and overdrawing into the reserve permanently shrinks it. The most rewarding moment so far: watching a player at the late stage of Rustblight have to actually think about whether to use Suppress or take the hit and fight visible.

The cold has more knobs now.

Three small survival systems landed this week, all interacting through the same SurvivalState ledger. Heat sources stack with insulation, so a campfire next to a broken stone wall is meaningfully warmer than one in the open. Ignition gates mean you can't light anything during precipitation — no fires in falling snow, no torch in driving sleet. Overworked is a long-tail debuff that accrues when you push through exhaustion; sleeping clears it slowly. Mood is the soft layer over all of it: pawns who haven't slept, eaten warm, or seen another human are different operators of the same body.

The trick to making these feel like one design rather than four is that they all read and write to the same survival state. The pawn isn't tracking heat in one bucket and morale in another — they're tracking one state that happens to expose itself through different UI affordances. None of these systems would matter alone. Together they make the difference between camping and surviving.

Sleeping is dangerous now.

Phase 2 of the rest system landed. Campfires are now real survival infrastructure: integrated with the heat-source ledger, gating ignition during precipitation, restoring stamina at a rate that depends on insulation and exhaustion. Bedroll variants matter. Sleeping in the open is lethal in a way that menu-based "sleep until morning" never could be.

The piece I didn't expect to enjoy as much as I do: dreams. Sleep is no longer a fade-to-black. The pawn dreams, and the dreams are generated — pulled from things the world has actually done to them. The first time my Wrought pawn dreamed of the dead pawn whose body I never recovered, I sat staring at the screen for a minute. The system was telling me a story I had built without writing it.

The world keeps running while you're dead.

Spent the past sprint making the calendar real. Faction goals tick on a global clock; settlements rise and fall on a schedule the player isn't part of. Most importantly: the calendar continues during pawn-death, between save loads, and during the recovery mission. Your second pawn doesn't start in a world frozen at the moment of death. They start in a world that has moved on without them. The first time I tested a long succession gap and walked back to find the old mech half-buried with someone else's tracks around it, I knew the system was working.

Settlements move.

Spent a sprint on the migration system for NPCs and settlements. The old model had factions and named NPCs anchored to fixed map locations: a town was a town because the JSON said so. Now every settlement has a viability score that ticks against weather, faction relations, resource depletion, and the calendar. When viability falls below threshold, the population migrates — packs up, walks across the map, and reseeds somewhere new. Possibly closer to you. Possibly into the territory of someone they used to be at war with.

What this gets me: the map's politics aren't decorative. A peace can hold for two pawn-cycles and then collapse because someone's water source dried up and they took everyone they could carry to a place they had no right to. By the time you find them, it's somebody else's problem — or yours.

Externalizing every line.

Less glamorous than the others, but mechanical: every player-facing string in the codebase now routes through Loc.T() against an externalized dictionary. No more hardcoded English in UI, dialogue, item names, anything. Translation is the implementation. The architecture step is making it impossible to add a new line without giving the localization service a key for it.

Why bother now, in pre-alpha? Because retrofitting localization onto a finished game is a horror story I've watched other studios live. Doing it before there are 15,000 strings — when there are 800 — is the difference between a Sunday afternoon and a quarter.

Interaction system: enrich, don't type-check.

One of the patterns I'm most proud of: nothing in the UI layer asks if (entity is Lootable). Components describe their own interactions through a small interface, and the UI just renders whatever they declare. Adding a new interaction never requires editing UI code. Adding a new component never requires editing the interaction service. Open/Closed in practice, on a system that's grown by an order of magnitude since the first prototype and still hasn't needed a rewrite.

Pre-alpha is also a build target.

Phase 1 of the Steam plumbing went in: ISteamService abstraction, the Steam-backed implementation, bootstrap wiring so the game can run with or without Steam initialized. No achievements yet, no workshop, no leaderboards — just the foundation. The interesting decision: making it an interface from day one means the editor and CI both run with a no-op stub, and Steam-specific bugs only happen when Steam is actually present. Cuts a class of "works on my machine" reports out of the testing loop.

The reason to do this now, before there's anything to ship: a wishlist page on Steam needs a real depot ID, a real branding pass, and a real handshake. Doing the integration once the game is "ready" is the same trap as localization. This gets done early.

Some violence is patient.

Three phases of a sabotage system shipped this month. You can target a faction's infrastructure — a pump, a generator, a fuel cache — instead of attacking the people guarding it. Partial sabotage lets you damage rather than destroy, which makes the whole thing slower and more political. There's a noise profile that determines whether the act is detected. There's a technician AI that repairs sabotage if the faction has the resources; if they don't, the failure cascades into a chain of dependent systems collapsing on a clock.

The interesting design output: there are now strategies that don't involve combat at all. You can starve a settlement out of contention by repeatedly nicking their water purifier and walking away. The sabotage doesn't have to kill anyone. The cold does that.

The cold has direction.

Wind simulation went in. Each cell of the world has a wind vector that varies on a cadence; particles, snow, smoke, fabric, light objects, and damage radii all sample from it. Standing downwind of a campfire is warmer than upwind. A flare thrown into a strong gale carries further than one thrown against it. Footprints fill in faster on exposed ridges than in valleys.

The visible payoff was supposed to be just snow direction. The hidden payoff turned out to be everything that cares about wind, which is more systems than I'd planned for. Sound propagation. Scent for tracking-NPCs. Aim modifiers for projectiles. Each one was a half-day's work because the foundation was already there.

Throwing is finally a verb.

Throwables (grenades, flares, bottles, nets) used to be: pick the item, click the ground, the thing arrives. Bad — no commitment, no cost, no skill. Two-phase aiming replaces that. Phase one: charge to set throw strength, with a live trajectory arc that respects gravity, wind (now that it exists), and the pawn's stamina. Phase two: a blast-radius preview at the projected landing point, snapping to terrain, showing what's inside the splash and what gets clipped by cover.

The system is simple but it changes the felt economy of throwables. A grenade is no longer "consume one, deal damage in radius." It's a physical commitment — too short and it bounces back; too long and it lands behind cover; too rushed and the stamina spend ruins the next move. The way good throwers are good is now legible.

Named NPCs aren't statblocks anymore.

Every named NPC now drives their AI through a personality matrix, not a behaviour tree. Aggression, paranoia, mercy, greed — each on a scale, each affecting how the same encounter resolves. The Smithy you trade with on one run might appraise your scrap and offer a fair deal. On another run, with a different roll on his cynicism axis, he might flip the bargain into a hostile play if your visible inventory is rich enough.

What this gets me: the named characters feel like people rather than slot-filled archetypes. Different runs produce different versions of the same person reacting to the same world. The first time I noticed a tester refer to "their" Forgemaster vs. "mine," I knew it had landed.

The world has a Z axis.

Cover used to be a 2D affair: tag a wall as cover, units behind it gain a defense modifier, done. The new height-aware system tracks elevation along the line of sight. A waist-high desk gives you full cover from a shooter at the same height — and zero cover from one shooting down off a balcony. Half-height obstacles graduate based on weapon type. Climbing onto something doesn't just look better; it changes the geometry of who can see whom.

Knock-on effect I didn't predict: the AI that picks where to fight got smarter for free. The same brain that already knew "find cover" now solves "find cover that works against this specific shooter." A pawn that holds a high ridgeline because nothing on the ground can effectively shoot up at her is the system telling on itself.

∎ End of feed

More entries arrive when there's something real to share.

Subscribe to the signal

Get devlogs when they land.

Email signups aren't wired up yet. For now, follow along by checking back, or read the full pitch.

Back to the pitch Browse the systems