HOLLOWCUT Devlog
Devlog · updated 30 Sep 2026

Cantorite: Harrowfall — Devlog

A real-time strategy game for the browser, in TypeScript on Three.js, built in phases by Claude. This page follows it from the first frame to today: what changed in each step, why, and what it looked like at the time.

Then and now

The same kind of shot — the default match, about thirty seconds in — from builds of old commits run again for this page. Scroll sideways: oldest on the left.

Phase 8 · 17 Sept
Phase 17 · 18 Sept
Phase 23 · 19 Sept
Phase 29 · 20 Sept
Phase 41 · 21 Sept
Phase 47 · 21 Sept
Phase 54 · 23 Sept
Phase 57 · 23 Sept
Phase 58 · 23 Sept
Phase 62 · 25 Sept

The eras

Each step of the roadmap lives in PLAN.md, the project's source of truth; these sections group them by what they set out to do.

17 Sept · 9 entries

The first playable prototype

In one evening the project went from an empty scaffold to a complete core loop: select, move, fight, harvest, build, produce, and beat a scripted AI. The simulation was kept free of rendering from the first commit so that networking could come later without a rewrite.

18 Sept · 9 entries

Terrain, roster and generated maps

The next day turned the prototype into a game with depth: elevation that matters, a bigger roster behind a classic sidebar, crystal fields, seeded procedural maps with a setup screen, and cities that could appear in real matches.

19 Sept · 6 entries

The playtest, and six fix phases

A full playtest found that combat did not actually happen on its own, the default opening earned nothing and the board was hard to read. Six phases fixed what it found, then added the frame around a match: pause, menus, a minimap and settings.

19 Sept – 20 Sept · 13 entries

The look, and nine worlds

With the game working, attention turned to how it looks: proper lighting, shadows and post-processing, then the Alien Worlds pack, nine selectable biomes, fog of war, a restyled UI and alien cities. Almost every phase here began as a short request from the user.

20 Sept – 21 Sept · 6 entries

Showcase, imports and playtest rounds

A showcase that parades every model, a documented import pipeline, and three rounds of the user playing the build and sending back annotated screenshots: much bigger maps, a calmer AI and a stack of rendering bugs.

21 Sept – 22 Sept · 11 entries

A faction roster, and making it fast

A three-faction art direction and the first rigged Directorate models arrived alongside four performance rounds that measured before changing anything: draw calls, triangles, scene walks and level of detail. A worker move was deferred on its numbers, and a WebGPU renderer was added behind a flag.

23 Sept · 4 entries

The classic RTS feel

Asked why it did not feel like a classic RTS, the project answered with a playtest-driven feel pass, a sculpted and painted ground, organically grown cities and the full Directorate roster, now built procedurally in code rather than generated.

23 Sept – 24 Sept · 3 entries

Round two, with parallel agents

Work moved to parallel agents on their own branches, each verified in a real headless-GPU match: eight look streams in phase 58, then a free-rein push for the best RTS it could be, then up to four players with alliances.

24 Sept – 25 Sept · 2 entries

Faction specials

The Directorate gets its own layer on top of the shared roster: a Field Commander hero, a Recovery Crawler, walls and a Transit Relay, while the Swarm's visual style is set for the next phase.

25 Sept – 26 Sept · 5 entries

Going live, and the long roadmap

The game gets a public address, the models move to Blender, a second playtest list is split over parallel agents, and a second developer joins with an eighteen-phase roadmap for the Vesper Reach.

26 Sept – 27 Sept · 11 entries

Four factions and a living world

Two days with two agents working side by side on one machine: the Swarm and Umbra got whole rosters and their specials, the non-playable Harrow arrived with a world of their own, each faction got a homeworld, world events started falling out of the sky, and the late-game frame got a performance plan with its first steps landed.

27 Sept – 28 Sept · 7 entries

A living game, overnight

One night, many branches in parallel: the game got its name, a map that fights back, a tutorial and a thirteen-mission campaign, new ways to play, a world with water, night and minor factions, and bases that run on power and can pack up and move.

28 Sept · 12 entries

A new look, and playtest round three

The new interface landed in the morning; the rest of the day followed a long playtest: bigger experimentals, a proper anti-air defence, power you can read and protect, units that stop chasing, AIs that finish their matches, and a fix for the late-game slowdown. The game also ran as a desktop app for the first time.

28 Sept – 29 Sept · 7 entries

Why it slowed down, and why phones crashed

Two reports from the playtest needed digging rather than guessing: a match that became unbearably slow after ten minutes, and iPhones that reloaded the page just before a match began. Both were measured first, then fixed, and the numbers are below. Along the way came a question worth answering properly: would a desktop app, a store app or a native rewrite make the game faster?

28 Sept – 30 Sept · 13 entries

Endgame, a wider world, and 2v2 online

The rest of playtest round three landed overnight: matches that end when the bases are gone, a much tougher HQ, units that see further, cover and suppression for infantry, minor factions that fight back, side objectives all over the map, the invaders' own music, and online play for four.

Planned · 10 entries

What's next

What the roadmap holds next, from the latest playtest and the launch plan. Nothing here is promised or dated.

17 Sept · phases 0–8

The first playable prototype

In one evening the project went from an empty scaffold to a complete core loop: select, move, fight, harvest, build, produce, and beat a scripted AI. The simulation was kept free of rendering from the first commit so that networking could come later without a rewrite.

  1. 0 17 Sept

    Repo scaffold

    done

    An npm-workspaces monorepo with a Vite + Three.js client and an empty simulation package; an orthographic RTS camera you can pan, zoom and rotate.

    The founding requirement: a browser RTS whose simulation never touches rendering, so networking can be added later without a rewrite.

    67a51b9
    The first frame: an empty grid, four marker boxes and an orthographic camera that pans, zooms and rotates. From a chat · 17 Sept
  2. 1 17 Sept

    One controllable unit

    done

    Click to select a unit, click to move it; it finds its way around obstacles with A* on a grid.

    Roadmap: prove the command pipeline (input produces commands, the sim applies them) on the smallest possible slice.

    50ffcab
    One unit (the cone), a wall to path around, and the enemy marker at the top: click-to-move on an A* grid. From a chat · 17 Sept
  3. 2 17 Sept

    Selection and combat

    done

    Drag-box multi-select, simple formation moves, and basic combat: attack-move, health bars and death.

    Roadmap: the core loop needs fighting before it needs anything else.

    bfa01ab
    Two selected units ordered across the wall; the dashed lines are their planned paths. From a chat · 17 Sept
  4. 3 17 Sept

    Harvesting

    done

    Resource nodes and a harvester that gathers, returns and earns credits on its own.

    Roadmap: the economy half of the core loop.

    5ae9a41
    A harvester heads out to a resource node (the yellow dot) on its gather-and-return loop. From a chat · 17 Sept
  5. 4 17 Sept

    Base building

    done

    Place buildings, watch them construct, and queue units at a factory.

    Roadmap: base building and production.

    3a45d2d
  6. 5 17 Sept

    A scripted AI

    done

    An AI opponent that runs its own economy, builds a factory and sends attack waves.

    Roadmap: single-player versus a simple AI was the proof-of-concept opponent.

    50595b0
  7. 6 17 Sept

    Real models

    done

    Placeholder boxes become stock low-poly models loaded through an asset registry, tinted per team, with a distinct model set per faction.

    Roadmap: swap primitives for free CC0 art without gameplay code ever naming a file.

    1399e0a
  8. 7 17 Sept

    Touch input

    done

    Every interaction gets a touch equivalent: multi-touch camera, tap to select, cancel placement.

    Requirement from the start: mouse first, but touch must be additive, not a rewrite.

    b5b364d
  9. 8 17 Sept

    Polish and win/lose

    done

    A HUD, a win/lose condition, sound stubs and environment polish: the proof of concept is complete.

    Roadmap: close out the first playable milestone.

    98bcfcb
    Time machine, phase 8 (98bcfcb): the finished proof of concept 30 s into the default match: stock models, a wall, two HQs and their units. Time machine · 17 Sept
    Same build zoomed out: the whole 40x40 test map under a starfield. Time machine · 17 Sept
18 Sept · phases 9–17

Terrain, roster and generated maps

The next day turned the prototype into a game with depth: elevation that matters, a bigger roster behind a classic sidebar, crystal fields, seeded procedural maps with a setup screen, and cities that could appear in real matches.

  1. 9 18 Sept

    Elevation that matters

    done

    Height tiers that change pathfinding and give the higher unit a damage bonus; later, ramps became the only way up.

    Confirmed with the user up front: elevation is gameplay, not decoration.

    d5e2266
  2. 10 18 Sept

    A bigger roster

    done

    More unit and building types from the full Space Kit, plus world decoration props.

    Roadmap: the first "next level" expansion after the prototype.

    bb68235
  3. 11 18 Sept

    The build sidebar

    done

    A right-hand build panel covering the whole roster, with icons rendered from each model.

    Reordered ahead of resource fields: a roster nobody can reach through the UI is not done.

    5f97cc2
  4. 12 18 Sept

    Resource fields

    done

    The single crystal becomes a field of many crystals that deplete as they are harvested.

    Roadmap: make harvesting look and play like a classic RTS.

    8f7449f
  5. 13 18 Sept

    Generated maps and setup

    done

    Seeded, symmetric procedural maps and a pre-game setup screen (size, resources, credits, seed), built on the planet-select menu.

    Roadmap: replayability beyond one hand-made map.

    892a821
    The menu side-track that phase 13 grew from: a first planet select with Testgrid and two locked worlds (17 Sep). From a chat · 17 Sept
  6. 14 18 Sept

    World decoration

    done

    Rocks, craters, containers and barriers scattered over both the static and generated maps.

    Roadmap: the board looked empty.

    2df09a7
  7. 15 18 Sept

    Terrain visual pass

    done

    The debug grid goes, the ground gets a painted texture and real rock cliffs around every height change.

    “Are you able to make the ground for the map more visually appealing…”
    43c31f5
  8. 16 18 Sept

    Showcase diorama

    done

    A separate, non-playable showcase map: two bases, rock formations, a monorail and a mixed city built from stock tiles.

    A direct ask from the user: a purely visual map using every available asset.

    7a35ddf
  9. 17 18 Sept

    Cities in real matches

    done

    Generated maps can include mirrored cities whose buildings block movement and whose roads are open ground.

    “Can the game engine now use this to generate semi-random cities for the maps?”
    28808df
    Time machine, phase 17 (e22bc16): the classic sidebar with generated icons, resource fields and scattered props on a textured ground. Time machine · 18 Sept
    Same build zoomed out: the whole map. Time machine · 18 Sept
19 Sept · phases 18–23

The playtest, and six fix phases

A full playtest found that combat did not actually happen on its own, the default opening earned nothing and the board was hard to read. Six phases fixed what it found, then added the frame around a match: pause, menus, a minimap and settings.

  1. 18 19 Sept

    Combat that happens

    done

    Units acquire targets by themselves, attack-move and stances, muzzle flashes and explosions, real audio and under-attack alerts.

    The first full playtest found two armies could stand inside each other forever: nothing ever set an attack target.

    63d5955
  2. 19 19 Sept

    The first 60 seconds

    done

    A default opening that actually earns money, right-click orders, and on-screen control hints.

    Playtest finding: the default start had zero income and no way to learn the controls.

    cc77868
  3. 20 19 Sept

    A readable board

    done

    Team-colour decals, crystals that no longer look like scenery, shadows and legible elevation.

    Playtest finding: you could not tell whose base was whose, or what was a resource.

    2d4fc95
  4. 21 19 Sept

    Camera and commands

    done

    Edge scrolling, zoom toward the cursor, pan bounds, selection modifiers and rally points.

    Playtest finding: the camera and ordering felt unfinished.

    63b6a32
  5. 22 19 Sept

    Balance and AI

    done

    The roster is re-costed, resources scale with map size, buildings have a build radius, and the AI defends and diversifies.

    Playtest finding: economy and AI were flat.

    484d674
  6. 23 19 Sept

    The frame around the match

    done

    Pause, a pause menu and end screen, elimination victory, a responsive layout, a minimap, settings and key remapping.

    Playtest finding: the match had no frame around it.

    5994b1e
    Time machine, phase 23 (47ba84d): after the playtest fixes: team decals, crystals that read as resources, control hints and a minimap. Time machine · 19 Sept
    Same build zoomed out: stepped elevation and the map edge. Time machine · 19 Sept
19 Sept – 20 Sept · phases 24–36

The look, and nine worlds

With the game working, attention turned to how it looks: proper lighting, shadows and post-processing, then the Alien Worlds pack, nine selectable biomes, fog of war, a restyled UI and alien cities. Almost every phase here began as a short request from the user.

  1. 24 19 Sept

    Make it look good

    done

    Image-based lighting, a low sun with visible shadows, ambient occlusion, bloom and anti-aliasing, and units that face where they move.

    “the graphics of the game are very basic… how do we go to the next level.”
    19714fb
  2. 25 19 Sept

    Alien world dressing

    done

    Trees, spires and ground cover from the Low Poly Space Alien Worlds pack, and a mountain horizon outside the map.

    “can we use these assets for world building — the bases and buildings can stay as they are”
    d4ff20c
  3. 26 20 Sept

    Biomes

    done

    The first level becomes the night Glacier world: indigo ground, glowing flora and a real planet behind the menu.

    “make the game's first level look more like this style… really try your best”
    868f546
  4. 27 20 Sept

    Mountain edges

    done

    Every plateau edge grows rocky outcrops, so raised ground reads as a ridge instead of a stamped step.

    “Please also make the edges of elevated parts of the map look like mountains using the assets”
    22428eb
  5. 28 20 Sept

    Nine worlds

    done

    All nine biomes become selectable planets, and the menu restyles itself to the world you pick.

    “this is the art style I want to work towards, different biomes etc.”
    a3e3716
  6. 29 20 Sept

    Ground, edges and derelicts

    done

    Each biome's ground slabs become floor patches and ledge caps, scree gathers under drops, and alien structures stand as landmarks.

    “can we look at potential floor tiling in the biome's asset packs too? I think that might take it to the next level.”
    1cf67bc
    Time machine, phase 29 (558b6bd): the night Glacier world from the Alien Worlds pack, with glowing flora, spires and rock outcrops. Time machine · 20 Sept
    Same build zoomed out: the whole map dressed in the biome. Time machine · 20 Sept
  7. 30 20 Sept

    Fog of war

    done

    You only see what your units see; unexplored ground is black, explored ground dims, and enemy buildings are remembered.

    The last item from the original playtest that changed the game itself: the enemy base was visible from frame one.

    d293453
  8. 31 20 Sept

    The render, sharpened

    done

    Real MSAA, a subtle rim light, per-biome colour grading and moving cloud shadows.

    “are there easy ways to make it a bit more nice looking? Eg post processing, edge smoothing…”
    45f68a9
  9. 32 20 Sept

    A contour on what you command

    done

    A subtle outline around your units and buildings only, so they separate from the scenery.

    “Outlines for player interactive stuff might be good. Make it subtle.”
    7c086be
  10. 33 20 Sept

    Tilt-shift and lit windows

    done

    A miniature-style tilt-shift band and lit windows on buildings; a softer-shadow experiment was tried and rejected.

    “As for the rest of the style improvements: let's do it.”
    c2642a4
  11. 34 20 Sept

    The in-game UI

    done

    One biome-driven skin across the HUD, and a sidebar that shows cost, what a thing does, and why you cannot build it yet.

    “Would be good if it follows the style of the rest of the game.”
    83e193c
  12. 35 20 Sept

    Alien cities

    done

    Generated cities are built from the alien pack's structures, tinted to each world, instead of stock city blocks.

    “Lets use the buildings from this asset pack for the city generation.”
    be3d057
  13. 36 20 Sept

    Tone mapping, and the glacier floor

    done

    A tone-mapping bug that made every biome's exposure setting inert is fixed, and the glacier ground gets contrast.

    “The colors of the ground match everything else too closely… Maybe make it slightly lighter?”
    8b98ef3
20 Sept – 21 Sept · phases 37–42

Showcase, imports and playtest rounds

A showcase that parades every model, a documented import pipeline, and three rounds of the user playing the build and sending back annotated screenshots: much bigger maps, a calmer AI and a stack of rendering bugs.

  1. 37 20 Sept

    The showcase, expanded

    done

    The showcase becomes a set of biome-aware maps with a labelled parade of every model in the game and a citadel map around a user-supplied hero asset.

    Neither presentation map showed the roster the game actually uses.

    b75d1b3
  2. 38 20 Sept

    The citadel factory, and an import pipeline

    done

    The citadel becomes both factions' Vehicle Factory, and model importing becomes a documented tool with a cameo generator.

    The user asked for the citadel as the Vehicle Factory, and for the next linked model to take an hour rather than a day.

    159b465
  3. 39 20 Sept

    Big maps and a calmer AI

    done

    Large maps 2.9x bigger, a Relaxed AI that is actually relaxed, units that defend nearby allies, and crystal fields that regrow.

    “the maps are way too small. A large map should actually be large. Like really large.”
    edbccce
  4. 40 20 Sept

    Six follow-up fixes

    done

    No more units spawning stranded, a home-based turret for Relaxed, longer turret range, faint range rings, and shorter decorative rocks.

    Direct feedback after playing the phase 39 build.

    7e5a53b
    Ember world during the phase 39/40 feedback round: a harvester returns to its refinery past the lava-red flora. From a chat · 20 Sept
    Screenshot the user sent from their own playtest of the phase 39 build. From a work session · 20 Sept
  5. 41 21 Sept

    Bigger again, and a better opening

    done

    Maps grow again, models are rescaled against each other, and the camera opens tilted over your own base.

    “maps should be way bigger. A small map should be the current large.”
    b8eab0e
    Time machine, phase 41 (b462800): fog of war, the tilted camera opening on your own base, a subtle outline on what you command. Time machine · 21 Sept
    Same build zoomed out: everything you have not explored is black, and maps are much larger now. Time machine · 21 Sept
  6. 42 21 Sept

    Combat rules and render bugs

    done

    Vehicles fire on the move, outposts work anywhere, fields spawn near every base, and phantom shadows from off-screen objects are fixed.

    A large round of direct feedback with three annotated screenshots.

    8276e3b
    One of the user's annotated screenshots behind phase 42: dark patches with no visible source, later traced to the shadow camera. From a work session · 21 Sept
    Another annotated report from the same round: more stray dark shapes next to units and buildings. From a work session · 21 Sept
    Playing the phase 41 build on a teal world just before the phase 42 fixes. From a chat · 21 Sept
21 Sept – 22 Sept · phases 43–53

A faction roster, and making it fast

A three-faction art direction and the first rigged Directorate models arrived alongside four performance rounds that measured before changing anything: draw calls, triangles, scene walks and level of detail. A worker move was deferred on its numbers, and a WebGPU renderer was added behind a flag.

  1. 43 21 Sept

    Performance, round three

    done

    About 6,000 draw calls down to 1,114, with no shader recompiles during play and an identical frame; plus a render-scale setting.

    Measured: two-thirds of all JavaScript time was the renderer recompiling shaders.

    fb2e5c7
  2. 44 21 Sept

    Three factions: art direction

    done

    A roster plan for Directorate, Swarm and Umbra; Meshy-generated models first, then a switch to units and buildings built entirely in code.

    “Let's make a style for each roster/faction. So each faction gets their own buildings and units.”
    654f30c
    The Directorate trooper as Meshy first generated it (image to 3D), for the three-faction roster. From a chat · 21 Sept
    The Swarm trooper from the same Meshy pass. From a chat · 21 Sept
    Concept review: Directorate, Swarm and Umbra troopers side by side in the model viewer. From a chat · 21 Sept
    The turn away from generated models: the Directorate heavy tank built entirely in code, firing in the procedural viewer. From a chat · 23 Sept
    Review sheet of the first procedural Directorate buildings: HQ, Barracks, Vehicle Factory, Airbase. From the repo · 23 Sept
  3. 45 21 Sept

    The first rigged unit

    done

    A Meshy-generated, animated Directorate trooper replaces the stock soldier, after two skeleton-cloning bugs were fixed.

    The first model from the new art direction to reach a match.

    ad301d2
  4. 46 21 Sept

    The Directorate roster

    done

    Directorate vehicles, factory and harvester plus a Heavy Infantry mech; the Barracks and Vehicle Factory split production.

    Continuing the phase 44 roster; found a rotation bug that had silently done nothing for units since phase 38.

    651ad19
    The Directorate roster in a match: Barracks and Vehicle Factory reskins, Heavy Infantry in the sidebar. From a chat · 21 Sept
  5. 47 21 Sept

    Performance, round four

    done

    5.49M triangles down to 745K: the new trooper went through the import pipeline, and unseen skeletons stopped animating.

    Measured: 86% of the frame's triangles were 43 soldiers.

    2cf6200
    Time machine, after phase 47 (ce7b93b): the Directorate roster on Glacier after the triangle-budget performance round. Time machine · 21 Sept
    Same build zoomed out. Time machine · 21 Sept
  6. 48 22 Sept

    The static world, unwalked

    done

    About 8.5 ms a frame recovered by culling the static world ourselves instead of walking 12,000 objects every frame.

    Measured: 12,072 of the scene's 12,243 objects never change.

    a6f61e6
  7. 49 22 Sept

    Level of detail

    done

    The model pipeline emits simpler versions and the game swaps them by on-screen size: 62% fewer model triangles at default zoom.

    Measured: a 40-pixel soldier was drawn with 7,109 triangles.

    8ed4658
  8. 50 22 Sept

    Simulation in a worker

    deferred

    Designed, measured and deferred: moving the sim to a Web Worker would cost more per frame than the sim itself.

    Measured before building: a 1.13 ms round trip against a sim that costs under 1 ms.

    9494fdc
  9. 51 22 Sept

    The detached dark shadow

    done

    A reported dark mass beside buildings turned out to be ground plants under newly placed buildings; they are now cleared.

    The user reported it with an annotated screenshot.

    dbc1791
    The user's report of a "detached dark shadow" next to buildings, which turned out to be clustered ground plants. From a work session · 22 Sept
  10. 52 22 Sept

    A WebGPU backend

    done

    An opt-in WebGPU renderer behind a flag, with a parity mode for fair comparisons.

    three.js already shipped WebGPU sharing the same scene classes, so it could be tried without forking the scene graph.

    b415525
  11. 53 22 Sept

    One renderer, TSL everywhere

    in progress

    The five custom shader patches move to TSL so WebGPU can become the only renderer.

    The user reported that WebGPU was "rendering just fine, fps seems stable".

    4e86f8d
23 Sept · phases 54–57

The classic RTS feel

Asked why it did not feel like a classic RTS, the project answered with a playtest-driven feel pass, a sculpted and painted ground, organically grown cities and the full Directorate roster, now built procedurally in code rather than generated.

  1. 54 23 Sept

    The feel pass

    done

    Real idle and run animation, a weapon and sound per role, muster points, randomised starts, a bigger economy, the Directorate HQ and an announcer.

    “It looks okay but I have no feeling like I do using [a classic RTS].”
    8c58f90
    The planet select after phase 54, with the Shoal as the default world. From a chat · 23 Sept
    Time machine, phase 54 (b1c5be0): the Directorate HQ in the game on the Shoal, the new default world. Time machine · 23 Sept
    Same build zoomed out: the start area under fog. Time machine · 23 Sept
  2. 55 23 Sept

    The ground becomes a place

    in progress

    One sculpted heightfield with natural plateaus and cliffs, a painted classic ground, and crystal fields that grow organically.

    “See how this world feels? The elevations feel natural, structures feel natural…”
    67cd9c4
    Phase 55.2: noise-shaped plateaus with smooth cliff lines instead of stepped tiles. From a chat · 23 Sept
    The same terrain pass on Ember: winding ravines through the lava flora. From a chat · 23 Sept
  3. 56 23 Sept

    Cities, rebuilt

    in progress

    Cities grow organically over flat ground with irregular blocks, parks and car parks, drawn from a new procedural civilian building set.

    “I don't like rectangle/square blocks of cities only. It should be more dynamic.”
    ae9f920
    The rebuilt city generator in its sci-fi theme: an organic street plan, towers, parks and car parks. From the repo · 23 Sept
    A generated city in a real match. From the repo · 23 Sept
    A city whose outline follows the flat ground the map offers. From the repo · 23 Sept
  4. 57 23 Sept

    The whole Directorate roster

    done

    Six new units (artillery, APC, railgun skimmer, Colossus, gunship, bomber) and eight buildings, including aircraft, anti-air, repair, walls and an orbital superweapon.

    “Each of the units that's not yet in the roster should be buildable/trainable.”
    38b2abd
    Time machine, phase 57 (38b2abd): the procedural HQ on the painted classic ground, with the full Directorate sidebar. Time machine · 23 Sept
    Same build zoomed out. Time machine · 23 Sept
    A base using the whole roster: annex, airbase, repair bay, rail spire, AA and aircraft. From a work session · 23 Sept
    The Orbital Lance superweapon firing. From a work session · 23 Sept
    Sidebar cameos rendered from the procedural models. From a work session · 23 Sept
    The Colossus, a reverse-jointed walker built in code, firing in the viewer. From the repo · 23 Sept
23 Sept – 24 Sept · phases 58–60

Round two, with parallel agents

Work moved to parallel agents on their own branches, each verified in a real headless-GPU match: eight look streams in phase 58, then a free-rein push for the best RTS it could be, then up to four players with alliances.

  1. 58 23 Sept

    The look, round two

    done

    Eight parallel streams: fewer living cities, procedural world props, per-biome haze, bigger models, the menu as front door, aiming turrets, mountain edges and RTS camera controls.

    Direct, with eight reference screenshots.

    88f4fdb
    Time machine, end of phase 58 (314770b): procedural world props, haze and the mountain edge. Time machine · 23 Sept
    Same build zoomed out: the map edge rising into procedural mountains. Time machine · 23 Sept
    Phase 58.4 on Ember, before and after: per-biome haze and glow. From a work session · 23 Sept
    Phase 58.7: fewer but bigger cities, with some life in them. From a work session · 23 Sept
    Phase 58.8: a Vehicle Factory assembling piece by piece. From a work session · 23 Sept
    Phase 58.6: procedural alien world props replacing the asset-pack scatter. From a work session · 23 Sept
  2. 59 24 Sept

    The best RTS we can make

    done

    Layered combat effects, a living battlefield, a classic command interface, a perspective camera, veterancy, garrisons, new infantry, a smarter AI and several performance rounds.

    “I'm giving you free reign… make it the best RTS you can imagine.”
    e13d459
    Phase 59.1: layered explosions, tracers and burning wrecks in a battle on Ember. From a work session · 24 Sept
    Phase 59.2: working buildings, with moving parts and parked vehicles. From a work session · 23 Sept
    Phase 59.8: a garrisoned city building collapsing under fire. From a work session · 24 Sept
    Phase 59.3: the classic command interface, with selection brackets and sidebar tabs. From a work session · 23 Sept
    Phase 59.13: skirmish setup with a live map preview. From a work session · 24 Sept
  3. 60 24 Sept

    More players, and alliances

    done

    Up to four players (2v2, free-for-all) with an alliance table, shared vision, per-player colours and AIs that defend their allies.

    “Would it be possible (also for performance) to have more than 2 players? And teaming?”
    bbee8ab
    Skirmish setup for 2v2: player slots, teams and colours. From a work session · 24 Sept
    The minimap of a four-player free-for-all on a Large map. From a work session · 24 Sept
    Six minutes into a 2v2 with AI allies. From a work session · 24 Sept
    A match with an ally (phase 60): allies share vision and are drawn in their own colour. From a work session · 24 Sept
24 Sept – 25 Sept · phases 61–62

Faction specials

The Directorate gets its own layer on top of the shared roster: a Field Commander hero, a Recovery Crawler, walls and a Transit Relay, while the Swarm's visual style is set for the next phase.

  1. 61 24 Sept

    Faction specials: the Directorate

    in progress

    Each faction gets its own passive, upgrades, buildings, units and powers; first the Field Commander hero, the Recovery Crawler, walls and the Transit Relay.

    “What kind of upgrades/buildings/units/powers would you implement?… Write to a plan.”
    7acd161
    The Field Commander, a procedural armoured mech, leading an attack. From a work session · 25 Sept
    The Field Commander in the viewer. From a work session · 25 Sept
    The Recovery Crawler towing a wreck home for salvage. From a work session · 25 Sept
    The Transit Relay: a squad arriving in a flash. From a work session · 25 Sept
  2. 62 25 Sept

    Swarm style baseline

    in progress

    The Swarm's look is set with two procedural creatures (Larvum skirmisher and Bio-launcher), shown in the showcase only for now.

    Phase 61's plan puts the Swarm, its core roster and its regrowth specials next.

    6636239
    Time machine, current p59 head (ab88ddd): the same 30-second opening today, with the classic sidebar and the perspective camera. Time machine · 25 Sept
    Same build zoomed out. Time machine · 25 Sept
    Swarm style baseline: the Larvum skirmisher, built in code. From a work session · 25 Sept
    Swarm style baseline: the Bio-launcher. From a work session · 25 Sept
25 Sept – 26 Sept · phases 61–81

Going live, and the long roadmap

The game gets a public address, the models move to Blender, a second playtest list is split over parallel agents, and a second developer joins with an eighteen-phase roadmap for the Vesper Reach.

  1. CI 25 Sept

    Hosted on Cloudflare Pages

    done

    Every push is type-checked, sim-checked, built and held to an asset budget (74 MB, 683 files; the raw Meshy exports stay out). Pushes to p59 deploy a preview at a preview address; master will be production.

    “Say i want this hosted somewhere else.. what would you propose?”
    be6abde
    The live preview: the menu at a preview address, loaded with no console errors. headless Chrome · 26 Sept
  2. 62 26 Sept

    The Swarm, remade in Blender

    done

    The Larvum is no longer cute: a lean, spiky four-legged hunter with a tusked jaw and green eyes, 7.7k triangles, four animations, team-coloured plates. The Bio-launcher is on its last bake.

    “they need to be more fear-inducing. Especially the slug looks kinda cute.”
    The final Larvum (round 6) in the game renderer; the blue plates take the team colour. From a work session · 26 Sept
  3. 61 26 Sept

    The Field Commander, from a base model

    done

    After a first all-Blender armour body (below), the user found a free hand-modelled, rigged cyborg soldier; it is being cut from 337k to about 12k triangles, repainted in team colours and wired in. Only the reduced game model goes into the repo.

    “It still looks a bit messy for me. Would it help if you could download a base model and work from there?”
    Round 1 of the from-scratch Blender Commander, before the switch to a base model. From a work session · 25 Sept
  4. PT 26 Sept

    Playtest round, 2026-09-26

    done

    Eight fixes on three branches: garrisoned buildings glow in the occupant's colour, harvesters prefer fields over 100 credits, huge artillery and Rail Spire range, building repair for credits, a hover fix, railways that follow slopes, and homeworld resupply when every harvester is gone.

    user's playtest list; homeworld resupply is the one exception to "no free income for whoever is behind".

    1584af5
  5. 64+ 26 Sept

    The Vesper Reach roadmap, 64–81

    planned

    Eleven research documents became eighteen phases: foundations, world events, a living map, economy, tech structures, map types, Boot Camp, the Harrow invaders, modes and replays, spectacle, water and air, a thirteen-mission campaign, minor factions, Conquest, and last, abilities and bases that move. The work is split into a world-and-rules track for the second developer and a factions-and-presentation track.

    “It should become a full game in the end. You are the creative mind behind this.”
    89da3d2
    The roadmap on highlights.html, with the proposed owner on every phase. docs/gameplay/highlights.html · 26 Sept
    Who builds what: the two tracks and the ground rules. docs/gameplay/highlights.html · 26 Sept
26 Sept – 27 Sept · phases 61–83

Four factions and a living world

Two days with two agents working side by side on one machine: the Swarm and Umbra got whole rosters and their specials, the non-playable Harrow arrived with a world of their own, each faction got a homeworld, world events started falling out of the sky, and the late-game frame got a performance plan with its first steps landed.

  1. 61.2 26 Sept

    The faction framework

    done

    Every slot picks a faction; Command Points earned in combat pay for powers; Powers and Upgrades tabs in the sidebar; share codes carry the setup.

    The plan for faction specials needed one frame all three factions plug into.

  2. 62 26 Sept

    The Swarm roster

    done

    Seventeen creatures sculpted in Blender, from the Larvum to the Hive Titan, plus fifteen buildings grown in code: hive, pools, spines and resin walls.

    “The more elite units should be more fear inducing like giants. Or elite soldiers. Not all 4/6 legged same body creatures.”
    The Swarm roster lined up in a match, small to giant. From a work session · 27 Sept
  3. 63 27 Sept

    The Umbra roster and the Veil

    done

    Thirty-one sleek black-and-magenta models, and the Veil: Umbra units that stand still cloak, and only detectors see them.

    “Please do not make it too trashy and rusted. It is still a high tech game.”
    The Umbra roster: dark glass, magenta light. From a work session · 27 Sept
  4. 61.5b 27 Sept

    A unique defence per faction, and painted icons

    done

    The Aegis Pylon dome, the burrowing Sinkmaw and the Shade Obelisk; then 96 painted classic sidebar icons, one per slot per faction, from model screenshots.

    “Something else I'd like in the roster is a unique defensive building per faction." And: "The icons should pop…”
    The Aegis Pylon's dome taking hits. From a work session · 27 Sept
    The Directorate's painted icon sheet. From a work session · 27 Sept
  5. M 27 Sept

    The mech, rebuilt

    done

    The Directorate mech rebuilt in Blender on the infantry's own body: bulkier armour, an arm cannon and a shoulder cannon, a stomping walk.

    “Probably base it on the infantry, just make it a bit more bulky. The current model is not it.”
    The new mech beside Troopers and a heavy tank. From a work session · 27 Sept
  6. 71 27 Sept

    The Harrow

    done

    The non-playable invaders: faceted ivory and quartz constructs with a gold glow, from the Gleaner to the Tiller titan, now real units in the sim with seams and Anchors you can tame. The wave director followed that evening (see the next page).

    “In game it could do with some kind of golden glow or accents so it stands out.”
    A Harrow Thresher in a fight on Ember. From a work session · 27 Sept
    The Tiller, the Harrow titan. From a work session · 27 Sept
  7. 82 27 Sept

    Faction homeworlds

    done

    Four new worlds: Meridian (the Directorate's Earth), Hivemere (Swarm), Penumbra (Umbra) and Fallow (Harrow), each with its own civilian buildings, props and dormant structures. Fallow is guarded by dormant Harrow wards and a Bastion that sends waves.

    “I'd like to also have a few faction specific worlds… Also civilian/noncombat buildings.”
    Meridian: a modern Earth city in a match. From a work session · 27 Sept
    Hivemere: a titan's carcass on the creep fen. From a work session · 27 Sept
    Fallow: a dormant Harrow colossus. From a work session · 27 Sept
  8. 65 27 Sept

    World events

    done

    A director that rolls events on a budget, with Calm, Normal and Chaotic presets. The Cant Storm grounds aircraft and kills the minimap; the Meteor Shower leaves new crystal; a derelict crashes midway between the bases for anyone to claim.

    “Would you also be able to start on a first world event? E.g. [a storm] or something.”
    A Cant Storm over Glacier. From a work session · 27 Sept
    Meteors falling on their warning rings. From a work session · 27 Sept
    A claimed derelict: strip it or reactivate it. From a work session · 27 Sept
  9. 61.3–63 27 Sept

    Faction specials, and a new AI

    done

    Upgrades, passives and four powers per faction (the Directorate's Rapid Deploy drops a squad from a dropship), the Sensor Array, the Swarm's Clutch Well and larvae, the Umbra Infiltrator and Hologram Projector, and a classic skirmish AI with a new Easy level.

    The phase 61 plan, built mostly by the second agent while this one made the art.

    Rapid Deploy: a dropship lowers its squad on tethers. From a work session · 27 Sept
    Swarm larvae from the Clutch Well in a fight. From a work session · 27 Sept
  10. PT2 27 Sept

    Playtest round two

    done

    Defences build 2.5× further out, a match-end rule: lose your bases, lose the match, enemy pings, superweapon timers, diagonal walls, units that hold at weapon range, bomber sorties, faster crystal regrowth and a Drill per faction.

    The user's playtest feedback, split between the two agents.

    Diagonal walls with their own 45° pieces. From a work session · 27 Sept
  11. 83 27 Sept

    Performance: the late-game frame

    progress

    A replayable late-game bench, then no shader churn (83.1) and a shadow pass on a budget (83.2): cached static shadows and one simple shadow shape per unit, about 5–7 ms off a busy frame.

    A late-game four-player match ran at 47–58 ms a frame; the target is 25.

    The bench's own-base stop, the frame it measures. From a work session · 27 Sept
27 Sept – 28 Sept · phases 66–81

A living game, overnight

One night, many branches in parallel: the game got its name, a map that fights back, a tutorial and a thirteen-mission campaign, new ways to play, a world with water, night and minor factions, and bases that run on power and can pack up and move.

  1. Name 27 Sept

    A name: Cantorite: Harrowfall

    done

    The project gets its own name, after the crystal everyone fights over and the invaders who come to reap it. Names borrowed from older games were replaced with our own (the Swarm's Clutch Well and Sinkmaw, the Cant Storm), and a Credits screen lists what the game is built with and under which licence.

    A game that might one day be sold needs a name and an identity of its own.

  2. 66–71 27 Sept

    A map that fights back

    done

    Watchtowers to hold, salvage crates, guardian lairs of native creatures, rocks and spires you can bring down, and crystal fields that grow when nobody mines them. Tech structures to capture: a Cant Siphon for income, a Relay Mast for vision, a Field Clinic and a Motor Pool to heal and repair. And the Harrow's wave director: mining too much draws them, seams tear open in the crystal, and their waves come mirrored so no side is favoured.

    The Vesper Reach roadmap, phases 66 to 71.

  3. 69, 72 27 Sept

    Map types, modes and replays

    done

    Crater Arena, Crystal Rush, King's Hill and Twin Rivers, each checked for fairness with a badge on the preview. Six quick modes (King of the Crystal, Regicide, Superweapon Race, Treaty, Frenzy, Sudden Death), a long list of mutators, and replays you can scrub and watch from any side.

    Variety between matches, without a map editor yet.

  4. 70, 75 28 Sept

    Boot Camp and the Directorate campaign

    done

    Five short lessons for new players, then Hold the Light: thirteen Directorate missions across the nine worlds on a star map, with a fork in the road, a choice that changes who fights beside you, veterans who carry over, and upgrades between missions. After the first playtest, every mission marks the units and places its orders are about, on the ground and with a ping on the map.

    The first fifteen minutes decide whether someone keeps playing.

    The campaign star map: thirteen missions over the nine worlds. From a work session · 28 Sept
    Mission nine's choice: open a channel to the Swarm, or carry out the strike. From a work session · 28 Sept
  5. 73, 79, 80 28 Sept

    Every unit a decision

    done

    Each Directorate role gets an ability on one key: frag grenades, smoke, jump jets, star shells, a field hub on the APC. Units take more damage from behind and can retreat. Around it: a slow-motion final blow, music that follows the fight, named veterans, and a profile with commander levels, 28 medals and cosmetics you earn.

    Depth per unit, and a reason to come back.

  6. 74, 76, 77 28 Sept

    Water, night and the neighbours

    done

    Shallows, deep water, tidal flats, ice and lava, crossed by bridges and by hover units. Day turns to night, the Saltmarsh tide rises, Ember's vents erupt, and the Apex sleeps in its den until something wakes it. Six minor factions of the Vesper Reach live in settlements with their own moods; win them over or make them enemies.

    The world, round two.

  7. 81 28 Sept

    Bases that run on power, and move

    done

    Every base now runs on lumen: generators power it, and too little power slows production and drops the defences, so generators become worth raiding. Buildings can be sold for part of their price, and the HQ can fold up, drive somewhere else and unfold.

    Bases that are more than a wall of turrets.

28 Sept · phases 75–83

A new look, and playtest round three

The new interface landed in the morning; the rest of the day followed a long playtest: bigger experimentals, a proper anti-air defence, power you can read and protect, units that stop chasing, AIs that finish their matches, and a fix for the late-game slowdown. The game also ran as a desktop app for the first time.

  1. Bezel 28 Sept

    The new look

    done

    A new interface called Bezel: a quiet graphite frame, your faction's accent colour, and one typeface throughout. A new main menu around a turning cantorite crystal, a loading screen, a skirmish briefing, a pause sheet and a debrief. The build menu moved into a tray at the bottom, and phones and tablets get their own layouts, with a compact action bar and a More button.

    Designed as mockups first, then approved by the user before a line of it was built.

    The new main menu. From a work session · 28 Sept
    A Swarm base under the new interface: the build tray, the command card and the minimap. From a work session · 28 Sept
    The same interface on a phone held sideways. From a work session · 28 Sept
  2. 78a 28 Sept

    The Harrow, round two

    done

    The rest of the Harrow roster, and the Tiller: a walking titan with three phases, Tines that lock onto a target, a sweep you can see coming, and a boss bar. Fallen Chaff rise again, and elite Harrow carry marks that show what makes them dangerous. A sandbox page lets anyone try the fights.

    The invaders needed a proper boss.

    The Tiller, with its boss bar at the top of the screen. From a work session · 28 Sept
  3. 78b 28 Sept

    One experimental per faction

    done

    The Colossus, the Hive Titan and the Effigy: one giant each, announced to every player when it is being built. After the playtest they are about a third bigger and a quarter stronger, while a fully promoted one is no longer close to unbeatable.

    “The strongest unit - the giants - … all the way upgraded to the highest rank … It's almost unbeatable.”
    The Directorate's Colossus shooting down incoming missiles. From a work session · 28 Sept
  4. 77.2 28 Sept

    Night, and the light tower

    done

    At night only your own base lights the ground around it, and each faction can build a light tower that shows the dark around it. After the playtest its light reaches twice as far.

    Night should hide things, and you should be able to fight that.

    A Directorate base at night, lit by its own buildings. From a work session · 28 Sept
  5. World 28 Sept

    Map sizes and world fixes

    done

    Small maps are now 128 cells across and Medium 256 (they were 88 and 176), so Medium sits between Small and Large. Bridges were rebuilt so units cross them properly, camp militias defend themselves, Harrow pylons under a dome can be brought down, units stop firing at what they cannot hurt, the Refinery's build area grows with the map, and the Drill pays a little more.

    “A medium map should be a tad bigger. The difference between large and medium is huge.”
    A bridge over a lava river on Ember. From a work session · 28 Sept
  6. Power 28 Sept

    Power you can read, and protect

    done

    A base short of power now shows which buildings stopped and what to build to fix it. Each faction can also protect its generators with an upgrade: the Directorate's Generator Aegis puts a shield on each one, the Swarm's Deep Roots let its glands burrow out of sight, and the Umbra's Phantom Reliquaries raise a hologram twin beside each generator.

    “can we have a way to protect power a bit more?”
    Directorate generators under their Aegis shields. From a work session · 28 Sept
  7. Air 28 Sept

    Air defence

    done

    A bomber run now hurts a base instead of deleting its HQ, and each faction gets a heavy anti-air defence after research: the Skyguard Battery, the Hailspore Colony and the Nightfall Choir, about five times as deadly to bombers as the old turret. Detectors also notice a cloaked unit only closer in than they can shoot it.

    “1 or 2 bombers can destroy an HQ.”
    The Directorate's Skyguard Battery. From a work session · 28 Sept
  8. Units 28 Sept

    Auto-repair, and units that come back

    done

    Buildings can repair themselves five seconds after a fight, for 10 % more than a manual repair; switch it on for the whole base or per building. And units no longer chase a fast raider across the map: past a generous leash they give up and walk back to where they stood.

    “Units will infinitely follow attacking units from their starting point.”
  9. AI 28 Sept

    AIs that finish their matches

    done

    AI matches that ended in a draw two times out of three now do so a quarter to two fifths of the time. The Umbra AI, which never won, now wins about a third of the matches that are decided; the Aggressive AI beats the Standard one; and every AI answers an enemy experimental.

    A skirmish should end.

  10. Mobile HQ 28 Sept

    The Mobile HQ, and more painted icons

    done

    Three new models, one per faction, for an HQ on the move: it folds up, drives and unfolds on the spot. Painted icons for the Drills, the light towers, the Black Market, the Morphling and the Devourer.

    The HQ that moves needed a body of its own.

    The Directorate's Mobile HQ. From a work session · 28 Sept
  11. Speed 28 Sept

    The late-game slowdown, fixed

    done

    The cause: every wreck stayed in the scene as its full, unmerged model (about 500 parts for a harvester) until it sank, so a few fights doubled the work of every frame. Wrecks off camera are now skipped like live units, and they merge back into one piece once they settle: twelve wrecks cost 3.9 ms a frame instead of 15.1 off-screen, and 9.2 instead of 20.5 in view. A slow machine now plays a little slower instead of freezing. Earlier that day, cloak detection got faster too, taking a late-game simulation step from 20.9 to 12.6 ms.

    “It becomes unbearably slow after a while.”
  12. Desktop 28 Sept

    A desktop app, as a preview

    done

    Cantorite now also builds as a Windows app. On a laptop with two graphics chips it picks the fast one by itself, which made frames 3.5 to 4 times faster than in the browser on the built-in chip, and it saves to files. A preview for now; not released yet.

    The first step towards a store release.

28 Sept – 29 Sept

Why it slowed down, and why phones crashed

Two reports from the playtest needed digging rather than guessing: a match that became unbearably slow after ten minutes, and iPhones that reloaded the page just before a match began. Both were measured first, then fixed, and the numbers are below. Along the way came a question worth answering properly: would a desktop app, a store app or a native rewrite make the game faster?

  1. Measure 28 Sept

    Measuring the slowdown first

    done

    The match from the report was replayed at real speed for sixteen game minutes, in the browser and in the desktop app, with every part of a frame timed. The simulation turned out to be cheap: under 2.5 ms a step all match long, with nothing in it growing. Nothing leaked either. The problem was the work of preparing each frame for drawing: the main thread ran at 100 % while the graphics card sat nearly idle at 1 %. That is why lowering the quality from High to Medium hardly helped: pixels were never the bottleneck. From minute 6 frames took 33 ms (30 fps), and in the big fight at minute 15 they took 50 ms (20 fps).

    “It becomes unbearably slow after a while.”
  2. Wrecks 28 Sept

    The culprit: wrecks

    done

    What grew was the number of things in the scene, and it jumped after every fight. A destroyed vehicle left its whole model behind, broken back into its separate parts so it could fall apart (about 500 for a harvester, 491 for a heavy tank), for around 50 seconds. And unlike living units, wrecks were never skipped when they were off screen. Twelve wrecks took a frame from 11 to 20 ms. Now a wreck merges back into one piece three seconds after it falls, and wrecks off camera are skipped: twelve of them cost 3.9 ms instead of 15.1 off screen, and 9.2 instead of 20.5 in view. In the desktop app over the full sixteen minutes, minutes 6 to 14 went from about 30 fps to a steady 60, and the big fight at minute 15 went from 20 to 30 fps.

    Found by counting what was in the scene every thirty seconds.

  3. Bake 29 Sept

    Fewer draws: 3 932 down to 454

    done

    Every separate thing the game hands to the graphics card costs time on the main thread, so the game "bakes" models: parts that never move relative to each other are merged, and identical models are drawn in one batch. A new switch turns all of it off, to show what it is worth. A late-game base costs 3 932 draws and 78 ms a frame without it, and 454 draws and 31 ms with it. On a phone-sized screen it is 5 839 draws against 350. After the wrecks, the largest remaining cost was the scenery: rocks and plants were drawn once per part in every patch of the map. They are now merged per part across everything in view, which took a late base from 638 to 433 draws with an identical picture. Health bars now take two draws in total instead of one each, and the fog-of-war check went from about 2 ms a frame to under 0.1.

    Every change was checked against a pixel-by-pixel comparison, so nothing looks different.

  4. Pacing 28 Sept

    Slower, never frozen

    done

    On a machine that cannot keep up, the game used to try to catch up by running more and more simulation steps each frame, which made the next frame even later. Now it runs at most four steps a frame and lets the game slow down a little instead, with a small "SIM BEHIND" tag in the corner while that happens. Phones and other low-memory devices draw at 30 fps, which cut the main thread's load from 77 % to 46 % without slowing the game. On Medium, unit shadows update every second frame (4.7 ms down to 2.1 to 3.0), and on Medium and Low the resolution steps down a little only when the graphics chip is what holds the frame back.

    A slow device should play slower, not stop.

  5. iPhone 28 Sept

    Why iPhones crashed while loading

    done

    On an iPhone, a web page that uses too much memory is simply closed by the system, and Safari reloads it. The loading screen built and uploaded every model before the match, which peaked at 1 023 MB. A new low-memory mode switches on by itself on iPhones, iPads, phones and devices with little memory: Medium quality, smaller textures on units, no copies kept of images once the graphics chip has them, fewer helper threads, and only the models each faction in the match actually needs. The peak is now 445 MB. Measuring it also turned up 1.2 GB of throwaway data created while working out the size of animated models; that is now computed without it, with identical results, on every device. Desktops look exactly as before.

    “On iOS phones the game seems to crash before loading completes often.”
  6. Threads 28 Sept

    A second thread, measured

    done

    A common suggestion for speed is to move the simulation to its own thread. Measured on the late game: the simulation and the AI together take 0.7 ms a step, and copying the whole game state across to another thread costs about 1 ms. On a desktop that would gain almost nothing. On a slow phone, where a step takes around 30 ms, it will matter, so it is planned for phones, sending a compact 3 KB summary each step instead of the whole state.

    Measure before moving work around.

  7. Apps 28 Sept

    Desktop app, store apps, or native?

    done

    The research question: would wrapping the game in an app, or rewriting it natively, make it faster? Mostly no. App wrappers are packaging: they bring files, store listings and a proper window, but they run the same browser engine, and the desktop app measured exactly the same as the browser. The one real gain is on laptops with two graphics chips, where the desktop app always picks the fast one (3.5 to 4 times faster frames than the browser on the built-in chip). On iPhones every app that shows web content runs on the same engine as Safari, with the same memory limits, so no wrapper could have fixed the crash; only using less memory could. A native rewrite would take months for problems the fixes above already solve. The plan that came out of it: keep the desktop app for the PC release, bring Android first through a light wrapper that runs the live site in the phone's browser engine (the project for it is ready), and follow with iOS once the memory fix has passed on a real iPhone.

    “Research our options to wrap this game in an app wrapper and to use more resources like a native app would.”
28 Sept – 30 Sept

Endgame, a wider world, and 2v2 online

The rest of playtest round three landed overnight: matches that end when the bases are gone, a much tougher HQ, units that see further, cover and suppression for infantry, minor factions that fight back, side objectives all over the map, the invaders' own music, and online play for four.

  1. Endgame 28 Sept

    Win by taking bases

    done

    A side is out once it has no base left: no HQ, no production or economy buildings, no Mobile HQ on the road. Turrets, walls and stray units no longer keep a beaten player alive; they self-destruct, so the map is clean when the match ends. A side down to its last base building has it revealed on everyone's map, so there is never a hunt for one hidden refinery. AI test matches that used to run to a draw now all finish, in about 16 minutes on small maps.

    “I destroyed everything. Nothing was left as far as I could see and still didn't win.”
    An HQ with its free guard beside it. From a work session · 28 Sept
  2. HQ 28 Sept

    A tougher HQ, with a guard

    done

    The HQ has three times the health (3 000), and a free guard turret that hits both ground and air and rebuilds itself 45 seconds after it falls. Losing the HQ no longer ends everything: production and research run at half speed until you rebuild it, for the price of a Mobile HQ.

    “HQ should be way tougher. Like 3x … maybe a free turret/anti air next to it that rebuilds automatically.”
    The HQ is gone: everything runs at half speed until it is rebuilt. From a work session · 28 Sept
  3. Sight 28 Sept

    Units see further

    done

    Units now see half again as far: a soldier 19.5 instead of 13, a scout 25.5, a gunship 27. Enemies no longer vanish the moment they step out of range. Buildings, night and cloak detection are unchanged.

    From the playtest: units saw less than the camera shows.

  4. Cover 29 Sept

    Cover, suppression and thickets

    done

    Three new World options for infantry fights. Light cover: soldiers beside rocks, walls, rubble or a wreck take 30 % less from direct fire. Suppression: machine-gun fire pins infantry down, halving their speed and slowing their fire until it stops. Thickets: patches of brush on the forest and ice worlds hide soldiers from anyone not close by, until they fire; tanks flatten a path through, and bombs burn them away.

    Infantry needed more to do than stand in the open.

    Riflemen pinned down by machine-gun fire. From a work session · 29 Sept
  5. Minors 29 Sept

    Minor factions with teeth

    done

    Camps start with three defenders and grow to six over the match, refilling their losses. The armed camps now raid players they are hostile to with war bands sized by the match time and the map, one band at a time, and a warning on the ticker. Peaceful camps never raid. Still an idea for later: one or two walled strongholds per map to win over.

    From the playtest: two or three soldiers per camp is nothing in this game.

    A war band from a hostile camp at the gates. From a work session · 29 Sept
  6. Map 28 Sept

    Tech sites all over the map

    done

    Capturable tech structures and minor-faction camps used to pile up in the middle of the map. They are now spread in every direction, near and far from each base, and still mirrored so every player gets the same chances.

    From the playtest: everything clustered in the centre.

    The same four-player map before (left) and after: the white markers are tech sites. From a work session · 28 Sept
  7. Music 28 Sept

    Real music, and the Harrow's own

    done

    The music is now composed and rendered in advance instead of synthesised live: one crystal motif in every faction's voice, with calm, tension and combat loops, a menu theme and victory and defeat cues. When the invaders arrive, their own theme of choir, crystal and drums takes over, and a quiet hum rises as your mining draws their attention. Fallen Chaff now visibly climb back to their feet.

    The Harrow should sound as alien as they look.

  8. Online 29 Sept

    Online play for four

    done

    Online play now does two against two: the host picks 1v1 or 2v2, each player picks a team, and the match starts when everyone is ready. Tested with four browsers playing a full minute in perfect step. Built, but not live yet: it switches on once its server is.

    The simulation was kept deterministic from day one for this.

    A 2v2 lobby: four players, two teams. From a work session · 29 Sept
  9. Devlog 28 Sept

    This devlog, on its own site

    done

    The devlog moved out of the game into a site of its own, so its screenshots no longer weigh on the game's download. Old links still lead here.

    Keeping the game lean.

  10. Cities 30 Sept

    Cities that belong to their world

    done

    On the alien worlds the cities are now the ruins of an ancient civilisation, built in code from the world's own stone and growth: causeways that crumble toward the edge, walled precincts, fallen blocks. The earth-like worlds keep the European city, now marked by the war (burnt-out cars, craters, checkpoints, rubble), and every city's edge wears into the land around it. Fallow and Penumbra got calmer, more readable looks, and street lamps pool light at night.

    The owner's ask: cities should fit the map they stand on.

    Thornveil: the ruins of the ancient works. cityshot · 30 Sept
  11. Cities 30 Sept

    City plans: courts, old towns, ruins and roads out

    done

    Cities are laid out to a plan that suits their world. The ancient ruins centre on a paved court with an obelisk and monuments facing it, and an avenue running toward the middle of the map. European towns have a tight old core round a market square with its church. Courtyards fill the insides of blocks, some lots are bombed-out ruins, and the roads out of town lead to a resource field or up a ramp.

    The owner took four of five proposed generator changes and asked for them as the default, with no new menu option.

    Glacier: the court of a formal city, with its obelisk and a monument beyond. cityshot · 30 Sept
  12. Voice 30 Sept

    Short voice lines end cleanly

    done

    Short lines like "Yes, sir" and "Mustering" were recorded inside a longer carrier sentence and cut out of it, and most kept the first sound of the next word. All 209 of them are re-cut in the pause before that word, from their original takes, and a new check listens to the last moment of every shipped line.

    The owner heard "Yes, sir. Thhh".

  13. iPhone 30 Sept

    No more reload after a graphics reset on iPhone

    done

    When iOS takes the graphics memory back (often while Safari is in the background), the game now restores the match in place in a few seconds instead of asking for a reload: textures are redrawn, lighting, shadows and the minimap rebuilt, and the match is paused and saved while the graphics are gone. Phones also use less memory while loading.

    The owner, playing on an iPhone: "That needs to go asap."

Planned

What's next

What the roadmap holds next, from the latest playtest and the launch plan. Nothing here is promised or dated.

  1. Phones Later

    Phones, round two

    in progress

    From an iPhone playtest: no accidental page zoom, a building panel you can close, a compact view of a large selection, one button for all powers, autosave with a Continue button, and a filter that selects only fighting units.

    In progress.

  2. Stores Later

    Android first, then iOS

    in progress

    Android in Google Play through the light wrapper, which is ready; the iOS app follows once the low-memory mode has passed on a real iPhone. A desktop release is prepared alongside.

    User: release on the App Store and Google Play.

  3. Threads Later

    The simulation on its own thread

    planned

    For phones: the simulation and the AI move to a second thread and send a small summary each step, so drawing gets the main thread to itself. Drawing on its own thread may follow.

    From the research above.

  4. Voices Later

    Recorded voices

    in progress

    Every spoken line as recorded audio, then an announcer of its own for each faction.

    The voices have been chosen.

  5. Cursors Later

    Cursors and targeting

    in progress

    Cursors in the game's style, a marker on the ground while you aim a power or an ability, and a gold button for superweapons.

    From the playtest.

  6. World Later

    World events your way

    planned

    A grid in the World options to switch each world event on or off. On the table as an idea: one or two walled minor-faction strongholds per map to win over.

    The rest of the world, round two.

  7. AI Later

    Sharper AIs

    planned

    The standard AI keeps its power up instead of running its base dim, and the aggressive AI plays as the harder opponent for every faction.

    From test matches between the AIs.

  8. Art Later

    A proper HQ guard

    planned

    A guard model of its own for each faction, a gun and a missile pod, instead of the basic turret it borrows now.

    The guard hits air and ground and should look it.

  9. Harrow Later

    The Harrow's endgame, and Conquest

    planned

    Survival, Last Stand and Crisis modes around the invaders, then Conquest: a campaign across some two dozen territories against rival commanders.

    The rest of the long roadmap.

  10. L2 Later

    An AI commander over the API

    planned

    A Claude model plays against you: it sets strategy every 10-20 s from a fog-of-war report, and the scripted AI carries it out.

    “would integrating an AI agent in the game itself be an option to let it play against me?”

The game now

Where it stands today: the showcase first published on 24 September, kept as it was.

EmberA battle under the red dust haze. Tracers and beams have a hot core and a coloured glow, muzzle flashes light the ground, and explosions scale with what died. Turrets turn to their target before they fire; the simulation owns the aim, so the shot and the picture agree.

Combat

Pooled particles and lights, so a 40-unit fight adds about a millisecond. Units earn veterancy, artillery has to deploy, and wrecks burn before they sink.

The same fight, seconds later. Smoke columns rise and drift from the losses.
After the exchange. Husks keep burning for nine seconds, then sink into the ground.
A vehicle explosion. Fireball, smoke column, sparks, dust ring, debris with gravity and a flash of light on the ground.
A burning wreck. Fire, black smoke and embers.
Veterancy. Veteran, elite and heroic ranks raise damage, armour and fire rate. Heroic units heal themselves.
Artillery deploys for 1.8 s before it can fire and has a minimum range. The animation follows the simulation's state.

Bases

Build-then-place: a structure builds in the sidebar, then you place it. Placed buildings assemble piece by piece, and once finished they visibly work.

ShoalA Directorate base. The buildings and vehicles are procedural geometry with canvas-drawn PBR textures and a weathering bake; the infantry are rigged, animated models.
Zoomed out. A crystal field glows at the top, with power pylons, rock outcrops and scrub around the base.
Construction at 10, 35 and 65 per cent, then done. Tall parts rise in bands and small parts drop in with sparks. A scaffold climbs ahead of a glowing weld line.
Buildings that work. Factory doors open as a unit rolls out, generators smoke, and idle turrets sweep.
Tracks and footprints fade over half a minute, all drawn in one call.
A crystal field casts a green glow on the ground and mist around it. The glow dims as the field is mined out.

Cities you fight in

Cities grow over whatever flat ground the map offers, with irregular blocks, T-junctions and roads out into the countryside. Hover traffic runs the streets. Infantry can garrison a building, and buildings collapse into rubble you can walk over.

A generated city in its sci-fi theme: towers downtown, lower blocks at the edge.
Street level. Road tiles are fitted from their neighbours (straight, T, corner, cross), with light pylons and parked hover cars.
A garrisoned building firing. The soldiers inside get extra range and can only be hurt through the building.
A collapse. The standing model sinks and leans while its own ruin rises in its place.
Rubble no longer blocks movement, so the fight can go through where the building stood.

Nine worlds

The same generator on every world, with per-world ground, props, lighting and atmosphere. Hazy worlds get their tint in post-processing, and the map edge rises into procedural mountains.

ShoalPale sand and dry scrub, the default world.
BoneyardGrey flats with a city on the edge.
SaltmarshOlive marshland and cracked mud.
VerdigrisBlue-grey ground with pine stands.
EmberRed dust haze under a low orange sun.
GlacierNight ice with a lit city.
NocturneGreen murk and magenta alien flora.
ThornveilA violet alien world.
AmberfallDusk, with red-lit alien growths.

World props and ancient landmarks

29 procedural props in earthy and alien sets, grouped into sites like container yards, checkpoints and pylon lines. Rare ancient megastructures stand on alien maps and go unexplained.

The ancient set: eroded arches, a black monolith, a ring of pylons round a floating capstone, and glyph seams in the world's own glow colour.
NocturneA halo turning slowly 13 m above a crater, in a real match.
ThornveilA colossal fragment, half-sunk and drifted with sand.
The earthy set: containers, fences, pylons with wires, wrecks, rail track and trees.
The alien set: crystal spires, ribbed growths, glowing pods and bone arches.

Interface

A sidebar with category tabs, and a perspective camera you can rotate and tilt.

The sidebar. Five tabs with counts, a clock-wipe build timer, READY and ON HOLD. Right-click an icon to hold it, and again to cancel with a refund.
Selection. Corner brackets, segmented health bars, control groups and a rally line.

Screenshots are from the game itself, captured headless in Chrome on an RTX 4090, from earlier chat sessions, or from builds of old commits run again for this page ("time machine"). Nothing is retouched. Reference images from other games are left out.