Twelve years of picking this up and putting it down again, newest first.
2026-09-22
Nine days since the last entry and the list is long again. There is a trailer now! Everything in it is recorded straight out of the game, and the music under it is the game's own score, which is the biggest new thing, so I will start with that.
The trailer, with sound
The music is generated while you play. I wanted to try writing the music in code instead of shipping a track, and it turned out to be the most fun I have had on this project in a while. It is plain Web Audio with no samples and no library. There is a felt piano built from four stretched partials with a hammer of banded noise, a chorused string ensemble, a formant choir, brass swells whose filter opens with the note, glass bells on loops of their own, a sixteenth-note pulse stepping into a tempo delay, and the long soft swelling notes from the very first spike. I took those out at one point and had to put them back because it just did not sound right without them. The percussion is machine noises.
The key and the theme come out of the career seed, so every pilot gets a different song, and a song is a chain of movements about six minutes each that never repeats. A movement has one chord progression, one chord every two bars, and its sections only change which layers play and what the melody does. Twelve situations sit on top of that as presets: exploring, mining, a raid, fuel critical, docked, the memo at the end of a contract, the dock rooms. The game tells the score which one it is in and the switch glides over twelve seconds and lands on the next bar. The sound effects come out of the same instruments and get played in the running key, so the laser opening is a note in the song. It is off by default, on the Sound tab, because I am still not sure everyone wants that.
Every sound effect came out at a different loudness, so there is a script now that renders each one alone, measures it and prints a trim table, and the tests check that every one stays within three decibels of its target. The other problem was that the engine held on to every note it had ever played, so the CPU went up to 63 % and the memory kept growing. It is about 4 % now.
Then a batch of small effects. The laser charges up and flickers instead of snapping on. Asteroids glow red along their cracks while you mine them, which took three passes because the first version tinted the whole asteroid. Your hull flashes when it takes a hit, a raider glows as it takes damage and scatters debris when it goes, turrets spark at the muzzle, the camera shakes a little when a container comes aboard. All of it goes through one particle layer that is a single draw call, because it has to run well on the tablet too.
The Hopper with its drones out
The Shipyard is gone. It is three rooms now, Market, Inventory and Fit, because everything you own is an item. A laser is an item, a drone is an item, and every hull keeps its own fit, so the spare laser comes off the Surveyor and goes on the Ordinal and the game does not quietly rebuild a mount you had unfitted, which is what the old buy-and-confirm till did. The drone bay is a module you open, with a row per cradle, and there are three kinds of drone to put in them: mining, survey and escort, five tiers each. Escorts patrol the ship and shoot back. A mining drone that finishes its asteroid now goes on to the next one you have queued instead of flying home to sit in the bay, which had bugged me for a week.
The base got most of the month. A module goes up piece by piece now, footing first, then the body, the glazing, the livery, the lamp last, and every stage is drawn on its own. The first version just put a mask over the finished module. The base is a hub with arms: the core stays put with its dish turning and the modules ride arms that turn three degrees a minute around it, up to twenty-four of them, connected by spokes and ring segments so nothing floats. There is a berth to dock at. Bases and turrets take the sector's light like the ship does.
A base with eight modules built, and the ground it claims
And there is territory. Everything you build claims the ground it can reach, a base its range, a turret its own, and the union of those is painted onto the map in your company's colour, desaturated so a red department does not look like a raid. It is a smooth minimum over the discs, shaded once into a texture and repainted only when something changes, under the same fog mask as the sky, so it never shows over space you have not explored. Upgrade a turret, and it does upgrade now, three tiers for range and damage, and the claim grows with it. What a claim is worth in a contract, and what happens when two companies claim the same ground, is designed but not built yet.
A service vessel alongside
Fuel and shielding run down on a sortie, and when they do out in the field you can call a service vessel. It jumps in outside your view, comes alongside, both ships hold, a nozzle goes across and three repair drones orbit the hull throwing sparks, and then it settles the bill at the dock's price plus a quarter and leaves.
The hold got a transfer window for moving cargo by the unit to a base or a container, and a Keep aboard group on the Ship pane that says which refined stock and which raws never go in a container. That group is also where a run of bugs came from: a full hold would sit there with auto-mine on and never drop, in three different ways depending on whether you were surveying, exploring or refining. So there is a fuzzer now. It drives the actual game code, the command queue and the tour planner through random scenarios drawn from a seed, and the one rule it checks is that a ship with auto-mine on, an asteroid it is allowed to mine and room to drop a container mines something within twenty seconds. Eleven of sixty seeds stalled before the fix and none after. Twenty-four seeds run in the normal test pass and a failure replays from its number. I should have built that months ago.
Auto-explore does not stop at every waypoint any more. It queues the next leg while the current one is still flying, from the point where the throttle would otherwise start braking, so the ship sweeps through the belt in one line and only stops at the last leg. When it uncovers an asteroid worth mining it drops the exploring and turns for it in the same tick, still carrying its speed. I like watching it take the corners.
The rest was the tablet. The dock used to freeze for over a second while a texture page went up to the GPU in one call, so pages go up in strips now, one strip every two frames, and the bake itself runs in a worker. What finally explained it was a Chrome trace taken inside the tablet: none of the long tasks were my code, they were the browser waiting for its own GPU process to hand a transfer buffer back, and one frame between strips was not enough time for that, so now it waits two. The station textures also went from 519 megabytes to 208 by only allocating a page when something needs it.
2026-09-13
Asteroids break apart while you mine them now. That was the one thing that had bugged me for months: you put the laser on an asteroid, the number went down, and the asteroid sat there looking exactly the same until it popped at the end.
An asteroid mined down to nothing
It is continuous, and it is not an animation that plays. Cracks open first, then the pieces come away and the small ones shrink off before the big ones, all of it driven straight off how much of the asteroid is left. Stop mining and it stops where it is. The curve is remaining cubed, so at half mined it still looks nearly whole and then the last quarter goes to bits fast. Linear felt wrong the moment I saw it.
My first try was splitting each asteroid into equal slices around the centre, and the spike came up looking like a pie with a bite out of it. What fixed it was cutting in two over and over with a jagged line that both halves share, so you cannot see the cut until it opens and the pieces come out uneven. The pattern comes off a seed made from where the asteroid sits in the world rather than its id, so it breaks the same way after a save and a reload.
Small thing that had annoyed people: when you come back after a while the game plays the owed time through in front of you, and while it did that Escape was dead. The catching-up panel has a Pause on it now and Escape opens the pause menu. Recall and Main menu stay off until it has finished, because leaving the sector halfway through a catch-up is how you would lose the time.
And the base is done, which is the bigger half of this batch. You research the Station Core, fly a hold of refined stock out to somewhere you like and put one down, and from then on it grows: eight slots around the core. Storage bays for the drones to deliver into, a solar array, and a reactor once there are quarters and air and water and food for the crew it needs. Then the modules that actually do something: a refinery bay running on the base's own clock, a cradle with two mining drones of its own, a fabricator for ship components, a laboratory, an exchange that sells the surplus while you are off somewhere else.
A base with its eight modules built
Power and crew are the part I did not see coming. The core supplies twelve megawatts, a reactor is thirty, but the reactor needs two crew, and crew need quarters and air and water and food, which are four more modules drawing power out of the twelve you started with. So the ORDER you build in is its own little puzzle, and you can wedge yourself by filling slots with the wrong things. I like that much more than a build menu where everything is just money. Pretty cool!
2026-09-09
Two days after the last entry and already a lot to write down. The short version: mining is a whole loop now.
Asteroids are made of materials. One to three each, silicates, ferrite, carbonics, hydrates, volatiles, lattice, and you do not know which until you survey the asteroid. There is a refinery on the ship that turns the raw stuff into plate stock or ceramic or graphite, one batch at a time, and a switch that keeps it running on whatever pays best. The hold is measured in cubic metres now, so a full hold actually stops the laser. That sounds obvious but it changed everything about how a contract plays. When it is full you drop a container where you are and a shuttle from The Company jumps in, picks it up and pays you. Or, in the dangerous sectors, pirates get there first.
A raid on a container
Pirates. They jump in outside your view, skim the container and fly off with a share of it. Your own lasers turn on them if they get close enough to the ship, and you can build a gun turret station out of refined plate and leave it standing next to your containers. While one is in the sector the whole edge of the screen glows red. I made it way too strong the first time :D
The bigger hulls have a drone bay. Two mining drones on the Hopper, four on the Tender, and they fly out to the asteroids around you and mine them at the ship's own rate, two on one asteroid when there is nothing else left. And survey drones, which go and read whatever the sensors found. Watching six little things buzz around the ship while it works is my favourite thing in the game right now.
The Hopper with its drones out
Everything on the hull is a module now, with a power draw, and the hull has a budget. So you can switch the refinery off to get a third laser running. The Shipyard is where you build the whole loadout and pay once. The first station core can be placed in the sector as well, with a storage bay, and the drones deliver to it instead of the hold. That is the start of the base building, which is the next big thing.
And the interface got rebuilt again. The sidebar tabs moved into the action bar, one window open at a time, and a button starts pulsing when there is something to do behind it. It is the same on the tablet and on the desktop, and the tablet is where I actually play it.
A Hopper with all three lasers running
It is starting to feel like a real game. There is a list of things I want to do next, the ships look a bit flat and need lights and details, and the stations need to grow into something. But you can play it for an evening now and it does not fall apart. Pretty cool!
2026-09-07
Over two and a half years since the last entry here! Things escalated again. So here is what happened, roughly in the order it happened in.
The dock: the ship moored in its berth over the sector sky
I started with the map. That cell based lookup from 2024 was still lying around, the one in the video further down this page, and I wanted to see what happens when the world simply does not stop. So it gets made in 1024 pixel chunks out of a seed now, the chunks near the ship stream in and the ones you left behind get dropped again, and a fog of war sits on top of it all, so you only ever see what you flew through yourself. I panned around for a few minutes in every direction I could and the memory never moved. Pretty cool!
Then I got it running on a tablet. Tapping moves the ship, a long press on an asteroid starts the laser, pinch zooms. That meant every screen had to be redone, so I built a small kit of components on a set of shared tokens first and put the UI back together on top of that.
The menu turned into a dock. The ship sits moored there with the sky of the sector you are going to next behind it, and off it there are four rooms: Contracts, Shipyard, Research, and the employers who are not The Company. On a tablet you swipe from one to the next. The colors took a few passes, the first version was way too red and way too dark.
Mining an asteroid belt
The asteroids got thrown out and done again as shaders. Each type is one fragment shader, and when a contract starts the game bakes every variant twice, once for the color and once for the normals and the height, and after that the asteroids are lit live while you fly. So they turn, and they crack open where you have been mining, and the whole layer is still a single instanced draw call. Nine types, sixteen shapes each, and I did not draw any of them.
The ship is a shader as well and the old drone sprite is retired at last. Four hulls: Surveyor, Kestrel, Dray, Ordinal. I did not want four ships that just happen to be parked next to each other, so I wrote down how one single company would go about building a ship, a design language, and drew all four classes out of that. Twelve of them went on a board, three survived, and then a fourth one got made by fusing two of the survivors. Every employer builds in one of them.
The concept board: four classes in one design language
And there is an actual game around the mining now, which is the part I am most surprised by. You sign a contract, it has a quota on it, you fly out and hit the number and a memo comes back with the figures. In between there is the Shipyard with five tiers for every component, and Research, where you buy a blueprint and then read it while you are flying around out there anyway. Your standing climbs from Probationary up to Retained and that decides what they will even sell you. Get to the top and the others start writing to you, and you can take their job and keep your skills and your blueprints.
Mining, movement and sensor radius level themselves up while you use them, and each level shaves 5 % off that upgrade, all the way down to half price. Eight of each fit inside one contract and then the ship is done, so a contract does end at some point. There is one at the end of the board with no finish on it at all: 3,000 resources at 0.15 credits each, paid out when you call to be brought back in.
Some things I am just happy with. The Volatile asteroids only discharge out in the hazard sectors, and when one goes it throws the ship 260 pixels off, and then the ship sits there and waits the 20 seconds out and goes back to what it was told to do. The bigger hulls have more than one laser and every turret aims for itself. The camera glides after the ship. And the music streams now, it used to decode 74 megabytes into memory, which was not great.
None of it is finished and I have a long list of things that still do not work. But for the first time it feels like the game that has been stuck in my head since 2014. The longer version of all this goes on YouTube as usual.
2024-01-20
From the this point onwards things escalated pretty quickly. You can find the details in the video description, but here are some highlights: Entity Component System, command queue with visualization, info panel, ship upgrades
2024-01-09
After some time passed, it was the start of the year again and I was watching some videos about spacial hashing and some other algorithms in a quest to understand how large game worlds would work. Very interesting stuff!
I started to implement a simple cell based lookup and rendered the result out into a png file. It was painfully slow and cumbersome.
I can do better! So I decided to visualize it in the browser using my trusty old friend PixiJS!
Initially it was only plotting dots on the world, and drawing a circle around the point highlighting the points inside a radius. But of course there needed to be interaction! So I added some mouse events and made the circle move around the canvas.
2022
"Ah the start of the year. Time to build this space game that's stuck in my head!" - That was probably what I was thinking in 2022. I started checking out the Rust programming language and was happy coding in a low level language again. I did use C++ a long time ago, but Rust was just so much better and safer to use. So I began looking for a game engine and found Bevy! And let me tell you: Bevy is such a joy to develop with! The entity component system is just phenomenal! I implemented some of the ideas from Bevy into my current implementation as well. Though I must say it's nowhere near as performant of course.
I made some devlog videos showcasing my progress as well
2014/2015
Over christmas I started animating a small dot on a canvas, because I wanted to see how games actually move things around. This initial implementation started with a simple HTML page and a setInterval timer and evolved into my first attempt to build a game. I eventually started streaming the development on Twitch for a few days and it was a lot of fun!
I found an old video that shows the progress that I made. Unfortunately it was written in CoffeeScript and some other old technologies, so I could not get it working again.
The game was using PixiJS as well (canvas rendering back then) and used the same assets that I found on OpenGameArt.
It had an entity component system, storage indicators, a command queue and acceleration / deceleration for the ship movement, pretty cool!