← All devlog posts

v0.4 status — visual rework and a much bigger map, still not shipped

v0.4 is late. I do this in the hours I'd otherwise spend on CTFs or reading CVE writeups, so "late" means "the scope grew past what I budgeted," not "something's broken." What was going to be a couple of new scenarios turned into a rework of how the whole battlefield reads, and I'd rather hold it than ship it half-finished. Status dump below, same way I'd write up a project before handing it to the next shift.

Sprites, and the building/badge split

Every unit and building got redrawn — hand-composed pixel art this time, not the flat-shaded procedural shapes the first pass used. More interesting than the art itself is the classification rule behind it, because I ended up solving it the same way I'd triage assets in a real environment: by what the thing is, not by what it's called.

A node that's a place — SOC Headquarters, a file server, a database, anything you'd actually write into a crown-jewel asset register — gets a full isometric sprite with a hue-shift shader over it, so one rendered asset recolors to red or neutral-gray depending on who owns it at runtime instead of needing three hand-painted variants. A node that's a network control — firewall, gateway, a segmentation boundary — never gets a sprite. It's a flat hex badge with a glyph, full stop, because a firewall's job is what it does to a route, not its curb appeal. I kept that boundary strict even where it was tempting to blur it: a node that's internally called "firewall" but is actually a critical chokepoint still renders as a badge, because its role is still "controls a route," regardless of how important the thing behind it is. Anything without dedicated art yet just fails safe to the badge instead of throwing a missing-texture error. Same instinct as defaulting an unknown service to deny instead of allow.

Construction, unit deploys, and compromise spreading through a node's structure all got proper draw passes too, instead of instant pop-in and a flat recolor.

Audio exists now

Didn't before. It's all synthesized — sine and triangle tones with short envelopes, generated from a script, same "don't hand-import assets you can generate" policy the sprites used to follow before this pass. Split by event class so a scan sweep, a kill confirmation, and a compromise alert are distinguishable without looking at the screen: selection, orders, production, detection, danger, containment, resolution — basically log-level severity, but as sound design. Placeholder fidelity, real taxonomy. There's a hook already wired for per-unit acknowledgement lines; nothing's recorded into it yet.

The map got 6x bigger, and had to earn it

The old map fit on one screen, which meant zero real network segmentation — everything was in blast radius of everything else. The new Large Enterprise map is 7200x2400, 36 nodes, 10 of them strategic objectives, laid out in actual segments: internet edge, DMZ, corporate, identity, dev, cloud, data centre, SOC. A few mechanics only exist because the map finally got big enough to need them:

Mistakes, for the record

Writing these down mostly for myself, but a status update that only lists wins isn't one I'd trust from anyone else either.

Why it's not shipped

Two structural changes at once — the building/badge split and a 6x map — is more surface area than I'd normally take live in one release, and a few of the larger systems on the new map are still running placeholder art instead of something dedicated. More to the point: the large map has only been exercised by a scripted bot opponent so far. No human has sat down and played a full match on it. I don't ship anything I haven't dogfooded, and this hasn't been dogfooded yet.

Next

Finish the remaining art, get a real human playtest of Large Enterprise logged, then ship. Join the wishlist if you want the ping when it's live.