Orbit2D has cost nothing to play for its whole life, and everything in it today will keep costing
nothing. This round adds the first thing you can pay for, and I want to be exact about what it is
and what it deliberately is not, because this is the round where a free game either keeps its
manners or loses them.
It is called the Deep Charter. It is £4.99, once, and it contains ten extra worlds, five suit
colourways, three drone finishes and a name for your colony. That is the entire list.

What I refused to sell
The obvious version of this feature is boosts. Instant sulfur. A crate of rations. Double xp for
an hour. Skip the dig. They convert well, which is exactly why they are everywhere.
I am not selling them, and the reason is not principle, it is that they do not work in this
particular game. Orbit2D has no opponents, no leaderboard, no timers and no way to fall behind. The
only thing pressure comes from is the cold and your own patience. Sell a shortcut past the digging
and you have sold a shortcut past the game — and then the ending, which reads back what you actually
dug and built and names what kind of colonist you were, reads back a purchase instead of a
character. There is no price at which that is a good trade.
So the rule I wrote down before I wrote any code: nothing in the Charter can make you dig
faster, build cheaper, or level quicker. Not one of the six things in it touches a number
the game uses. They are places to dig, colours to wear, and a name.
And what I had already promised
The download page for the Android app said, in plain words, “no ads and no in-app purchases”. I
wrote that because it was true when I wrote it. Adding a shop makes part of it false, and quietly
deleting a promise is worse than having made it.
So it has been rewritten rather than removed, and the commitment behind it has been made
narrower and firmer at the same time: every world, rank, talent, objective and ending that
exists in Orbit2D today stays free, forever. Nothing that is in the game moves behind a
payment — not now, not when there are more players, not ever. The Charter can only add. If I ever
break that, the log will say so on the day I do it.
There are still no ads, and there is still no ad code anywhere in either build.
Ten more worlds
Tidehold, Sable Reach, Winter Assay, Thin Ice, Coldsmith, Gallows Frost, Vault of Hours, Slow
Thaw, Ember Assembly and The Long Room. Worlds 21 to 30, each a real seed with its own region
layout, landmarks, save slot and rank — the same generator as the twenty free ones, not a reskin.
They appear in the picker greyed out with a CHARTER tag, and I thought about hiding them
instead. Hiding them is politer and less honest: you would find out the game had extra worlds from a
shop panel rather than from the game. Clicking a locked world does not throw a modal at you either
— it scrolls to the Charter panel and says which world you tapped and that the twenty above it are
the whole game.

Colours, and how little it took
The suit and the drone are drawn from a palette object — eight named colours for the suit, five
for the drone. Every plate, boot, visor, vent and nav light reads from it. Which means a colourway
is a palette, not a sprite: six suit palettes and four drone finishes cost about eighty lines and
not one byte of image data. The suit is still built from the same skeleton, so a rime-white
colonist shivers, huddles and swings a pick identically to a standard-issue one.
The one I keep landing in is signal black with a red visor, which was not planned and looks
like something that should not be down there.
No accounts, so a purchase is a code
Orbit2D has never had a sign-in and is not getting one to sell a colour pack. So the entitlement
is a code — O2D-XXXX-XXXX, eight characters with a checksum, so a mistyped one is
rejected before the server is even asked. You type it in once, the server checks it against the
ledger, and from then on the Charter lives in your own browser. That matters more than it sounds:
it means the pack keeps working with the network off, including inside the Android app, which is
where most of the playing happens.
A code activates on up to four devices, because a cleared cache should not be a lost purchase,
and it can be re-sent by replying to the email it arrived in. The codes are minted by a completed
payment and nothing else — the game cannot mint one, and neither can anybody poking at the
endpoint.
Payment is Stripe’s hosted page. No card detail passes through orbit2d.co, and the shop code
holds an email address, a code and a payment reference — no name, no address, no card, no account.
The privacy policy has a new section spelling exactly that out.
Two honest limitations
First: card payments are not switched on yet. The whole flow is live and working, but the
checkout is currently a clearly-labelled test page that issues a code without taking money, because
the processor is not connected. Nobody is going to be charged by accident, and nobody is going to be
asked for card details by a page that cannot take them.
Second: you cannot buy the Charter inside the Android app, and that is deliberate. Google
requires digital goods bought in an Android app to go through Play Billing, and Play Billing needs
the app published, which it is not yet. So the app hides the buy button and keeps the redeem box —
buy on the web, redeem anywhere. Pretending otherwise is how apps get removed.
The uncomfortable part
I have spent nine rounds arguing that this game should respect the person playing it — no timers,
no nagging, no dark patterns, no five-second-video-for-a-reward. Putting a price on anything at all
is the first time that claim can be tested rather than asserted. The test is not whether I sell
something. It is whether the free game is worse after the shop exists than it was before it.
It is not. Nothing was removed, nothing was nerfed to make room, and no world, rank or ending
moved. If that ever stops being true, it will be in this log, in the same plain words.
Live now at orbit2d.co as v0.9.0.
Leave a Reply