DEVLOG
How this game actually gets built, written up in detail.
What This Is
The release notes tell you what changed. This page tells you why, and what it cost.
Asteroid Dominion is a one-person studio. Every design decision below was a real fork with a real trade-off, and in most cases I picked the option that is worse in one dimension because it is better in the one that matters more. Those are the interesting parts of building a game, and they are exactly the parts that never fit in a release note.
If you want to know which tools I use and where, that is on the About page, stated plainly and split by medium. This page is about the decisions.
Why Your Ship Steers on the Server
The obvious way to build flight controls in a browser game is to let the browser decide. You press a key, your ship turns on your screen immediately, and the server is told about it afterward. It feels perfect, because there is no waiting for anything.
It also quietly breaks combat.
In Asteroid Dominion your shots leave the nose of your ship. Steering and aiming are the same action — there is no separate crosshair to drag around. So the direction your ship is facing is not decoration, it is the single most important number in a fight. And if your browser is the thing that decides that number, then your browser and my browser and the server can all believe three slightly different things about where you are pointing. Somebody has to be right, and it will not always be you.
The symptom is the one every multiplayer shooter player knows: a shot that clearly should have connected, and did not. Not because the game is unfair, but because two machines disagreed about geometry and the server got the deciding vote after the fact.
So I moved the decision. Your client now sends the heading it wants, and the server decides what the ship actually does with it. One authority, one answer, everybody's screen agreeing.
That is not a free win, and I want to be straight about the price. Turning your own ship now has a network round trip inside it. On a good connection you will never notice. On a bad one, you will — and before this change you would not have, because your own ship always turned instantly no matter what the rest of the galaxy thought.
I took that trade deliberately. A game where your own ship feels perfect and your shots land unpredictably is worse than a game where your ship has a few milliseconds of weight and your shots go where you aimed them. The first one feels good and plays badly, which is the harder problem to diagnose and the more frustrating one to lose to.
One detail that softens it: the thruster flames still fire locally, drawn from your keypresses the instant you make them, without waiting for anything. So the ship still looks immediately responsive even while the real turn is being confirmed. That is not a trick to hide latency — the flames genuinely are a local effect and always were. But it does mean the control keeps its feel while the geometry keeps its honesty.
A Game With Almost No Pictures in It
There are almost no image files in this game. The ships, the asteroids, the turrets, the explosions, the shield domes, the cockpit you are looking through — all of it is drawn by code, from scratch, every single frame.
The obvious reason is weight. A browser game that has to load before anyone loses patience cannot ship a sprite sheet for every ship at every damage state in every faction color. But that is not the reason I kept doing it.
The real reason is that a drawing made of code can respond to the state of the thing it is drawing. A ship's hull knows its own faction, so it inks itself in that faction's color without anyone exporting four variants. A shield dome knows how much power it has left, so it renders thinner as it drains rather than switching between three prepared images. An asteroid knows its tier. None of that needs an artist to sit down and draw the in-between states, because there are no states — there is a function, and you give it the numbers.
The cost is that there is no "just swap the PNG." Every look change is a code change, and it has to hold up at every zoom level, on a phone and a desktop, for four factions, against a moving starfield. That is a slower loop than opening an image editor, and it is genuinely worse for iterating on a single asset.
In September I ran a pass over the entire visual language of the game — seventeen categories, from the background galaxy through the player ship, the asteroids, every structure type, and what a ship death looks like. Each one got prototyped on a local study page first, drawn by the same code the game runs, so that what I was judging was the actual thing and not a mockup of it.
The piece I am happiest with came out of that pass: every hull now carries its faction's badge. Concordium wears an unbroken triangle. Unbound wears a broken one, with chains. The Outlaws wear an X. The Bone Collectors wear a winged skull. They started as small black marks on a bright disc, and ended up larger, inked in the hull's own color, riding the gradient stripe down the ship's spine. Unbound went gold in the same pass.
That is a change you can only really make in a procedural pipeline, because it is not one drawing. It is one badge function, called by one hull function, for every ship in the galaxy, at whatever size and angle that ship happens to be. When I got the Outlaw mark wrong, I fixed it once.
The Galaxy Keeps Running After You Log Off
Most multiplayer space games put you in a lobby, count down a timer, and end the match in fifteen minutes. This one does not, and every interesting problem I have had to solve comes from that one decision.
When you sign off, your ship stays in the world. Your claimed asteroids stay claimed. Your turrets keep firing at anything hostile that wanders into range, and if one of them gets a kill, that kill is credited to you while you are not there to see it. The galaxy does not pause because you closed the tab.
Which forces a question every persistent world eventually has to answer, and most of them answer badly: how long does somebody who left get to keep their things?
Answer it too generously and the map fills with abandoned bases owned by people who quit in June, and there is nowhere for a new player to build. Answer it too harshly and going to work costs you your empire. Neither is a game.
What I landed on is a ladder rather than a rule. There is a fully protected window where nothing at all happens to your base. After that, structures begin to rust — slowly, and visibly, so a returning player can see what has been happening rather than finding a crater. Only once the last structure is actually gone does a grace period start, and only after that does your seat in the galaxy open up for someone else. Subscribers get a longer protected window than free players do, and that is one of the things a subscription actually buys.
Guests get their own version of the same idea. Press Play Free Now and you fly for sixty minutes with no account at all. When the hour is up you are signed out, but your ship and your base stay in the world — they do not evaporate the moment you stop being logged in. The Bone Collectors clean up eventually, which is both a mechanic and a joke, and I am not going to apologize for either.
The honest part: this is a design choice with a real cost, and it is not the cost people expect. A world that remembers you also remembers that you stopped playing. Coming back after a week away means coming back to consequences — rust on your towers, a rock you used to own now flying somebody else's colors. I have gone back and forth on how gentle to make that, and I expect to keep going back and forth on it. The one thing I will not do is make it nothing, because a world with no consequence for absence is just a lobby with extra steps.
How a Bot Decides What to Do Next
First, the thing worth saying plainly: the bots are not an AI model. They are game logic I wrote and keep tuning. There is no model generating their behavior, and calling them "AI" is a forty-year-old genre convention rather than a claim about technology.
What they actually are is a ladder. A long list of questions, asked strictly in order, every tick. The first rung that says "yes, I want to act" wins, and nothing below it gets asked at all.
At the very top sits survival. Is this ship in danger right now? If yes, nothing further down the list matters — not the mining job, not the base it was building, not the player it was hunting. It runs, or it fights, or it puts a rock between itself and the thing shooting at it. Everything else in the bot's life is subordinate to not dying, which is also the correct priority for you.
Below survival, the rungs are about role. A commander expands: it claims rocks, builds structures, and spends its command points on the base rather than on the chase. A hauler moves material. A hunter hunts. Because the ladder is ordered and not weighted, a bot's behavior is predictable if you know the order — and that is deliberate. An opponent who does something inexplicable is not hard, it is just noisy. An opponent who reliably breaks off a chase to defend its own base is one you can bait.
The same ladder runs your autopilot. When you press Stay, Circle Asteroid, Hunt or Build, you are choosing which rung your own ship starts at — and the survival rungs above it still overrule you, which is why your ship will break off a hunt to save itself. Learning to read the bots is therefore the same skill as learning to use your own autopilot well. That is not a coincidence; it is the same code.
Each galaxy also carries a named recurring cast — twenty-five pilots who persist between sessions, gain levels, and stay in their faction. They are not respawning nobodies with randomized names. If one of them has been killing you all week, it is the same pilot, and it is better now than it was on Monday.
The newest change here is the smallest and the one I should have made sooner: every bot now wears a BOT label under its ship. "Am I fighting a person right now?" is a question a player is entitled to have answered, and the game used to make you guess. It is drawn with the pilot names, so it obeys the same Settings toggle — if you play with names off, the labels go too.
More
Every shipped version is listed in the release notes, dated, in plain language. If you want the systems themselves rather than the reasoning behind them, the Guide is the hub — eleven pages covering flight, combat, mining, building, the factions, the bots, events, and leveling.
Questions, arguments, and bug reports are all welcome on Discord.