The lid didn't come off
On the frequency panel in the comms module, you try to open it and the game answers:
The protective lid comes off. The panel is accessible.
Nothing comes off. The panel was already accessible, and one second after that sentence the ship is in exactly the state it was in before. There’s a twin further along, on another panel, saying the same thing in different words.
Somebody always investigates a refusal, nobody investigates a yes
Both lines were born on the same day, the 14th of May, in the commit that filled all ten rooms of the ship with words. They sat there for three months without stopping anyone. The gesture that actually works is a different verb, and anybody who tries that one moves on without noticing a thing. Which is precisely why they survived.
When a game tells you no, sooner or later somebody comes and asks why. That happened to us last week with the container held shut by straps: the answer explained how it opened and then said it wouldn’t, a tester went off hunting for a tool that doesn’t exist, and got stuck. That sort of thing gets found, because it hurts somebody.
A yes that does nothing hurts nobody. It goes past. And on the way it has taught the person reading something false about the state of the ship, which is the one job a line of game text can’t get wrong.
The right verb depends on what’s in front of you
The origin is the same as the container’s, and we’re happy to own it twice in a row. When the verbs went from nine to six, we checked which answers moved across from the three verbs we removed. We did not check which of the six remaining verbs carried the effect. Those are two different questions, and we only noticed because somebody got stuck.
Now the two panels behave like the container: both verbs point at the same answer, and the lid sentence is gone. Except that here the primary verb is the opposite one.
On the container, “open” is in charge, because it’s a closed box and the gesture that opens it is just a gesture. On the panels, “use” is in charge, because they are machines, and you don’t take the lid off a machine, you operate it. On the comms handset, “talk” is in charge, because there’s a person on the other end.
Put that way it sounds obvious. Written down nowhere, it becomes a trap instead: in six months somebody looks at those five cases side by side, decides they’re inconsistent, and tidies them up. We’ve seen well meaning tidying before, and it usually deletes something. So the rule is now written down with its five cases listed underneath, and the rule says this: the primary verb is the verb of the gesture, not a fixed verb.
Seeing the right line isn’t proof
Fixing it took half an afternoon. The long part was testing it, and not for the reason you’d think.
If you load a save, open the panel and read the correct answer, you’ve proved almost nothing. You’ve proved the text is wired to the verb. You still don’t know whether the thing the text says happened actually happened.
We found the two checks that count by getting them wrong first.
The first one: open it twice in a row. The second time, a different line has to come out. If the state changed, the first case no longer matches and the game falls through to the next one. If you get the same sentence again, what you have is a verb that talks and touches nothing, which is the original defect wearing a fix as a disguise.
The second one is about the panel further along, the one that’s part of a sequence of confirmations. The risk there wasn’t that the verb would do nothing. It was that it would do it twice. Two doors onto the same command can give two confirmations, and a procedure that asks for three steps would find itself at the second one without anybody having taken it. So the test is that on the second attempt the game refuses: the code is already entered. It refuses. Then we pulled the lever and the sequence closed the way it should.
Two thirty-second checks that none of us had ever written down anywhere.
The missing sound wasn’t missing
One of our own notes said: eight sounds for nine inventory objects. One is missing, go and find out which.
The count was right and the conclusion was wrong. There are eight files, ten objects that ask for one, and no object is silent: two sounds are shared. The two suits make a fabric noise, the two keys make a metal noise.
What fooled us was a comment in the code. Next to the key it said “waiting for a dedicated sound”, next to the suit it didn’t. One sentence, and the same decision looked like a stopgap on one side and a choice on the other. It now says this is the final form, and it says why: the sound tells you what you’re holding, not which of the two you’re holding. Two keys that sound like a key are two keys.
The tool answered with a number
This is the most embarrassing one, and it’s about a tool of ours.
To measure how much text is in a file, and to hunt for typographic mistakes in it, we use a small program that reads the code and pulls out every sentence a player can read. It knows where to look because it has a closed list of the places text is allowed to live.
One place was missing from that list, and it’s where the prose of the interface components lives: the screens the game assembles itself instead of pulling from the writing for the rooms.
If the tool had stopped working we’d have noticed in a second. It didn’t stop. It answered. On one of those files it said three sentences and eighty-six characters, and there are twenty-one and eight hundred and two. There was a number, it looked like a measurement, and three of our editing passes worked on a smaller perimeter than the real one without anybody having reason to doubt it.
We knew, incidentally. It’s written at the bottom of one of our documents, dated July, with its own deadline attached: sooner or later somebody re-measures all the text, and on that day the short number gets expensive. That day now has a date, so we added the missing place. The measured text goes from 1,007 sentences to 1,025.
One detail let us breathe out. On the first of August we closed a punctuation pass declaring two errors in the whole game, and that number had just become suspicious: if the perimeter was short, the count could be short too. Re-run on the wider perimeter, the errors are still zero. It didn’t hold by luck: that pass had been run twice, once on the extracted text and once on the raw code, precisely because extracted text on its own is never enough.
There’s still a handful of sentences the tool can’t reach, and they’re the messages on the save screen. We didn’t chase them with more code. We wrote them out by hand in a list, with their line numbers, so that nobody skips them at the final read-through.
Two names one message apart
The closing credits name the people testing the game. Two new ones arrived a few hours apart, and the second came with an apology: “oh and Matthia too, sorry”.
Mattia Seppolini and Matthia. Two t’s and an h between them.
There were two readings and they led to opposite code. Either it’s a ninth person, and you add a line, or it’s the correct spelling of the previous line, and you fix that one. Get it wrong the first way and the credits name somebody who doesn’t exist. Get it wrong the second way and you delete somebody.
We asked instead of deciding. They’re two people. You don’t guess a person’s name, and a question costs ten seconds against a misspelling that stays carved in.
The tenth round is the last
This is the part that matters most, and it isn’t a fix.
The next test build is number ten, and it will be the last one. After that the text closes: a read-through of everything there is to read and to perform, then we declare it final, then we go back into the recording booth.
What we ask for changes too, because it’s the last time anybody looks at the game before the writing stops moving. The notes will say that nothing reopens afterwards, and the question about the high contrast mode, which has gone unanswered for two rounds, moves to the top instead of the bottom.
And the credits need watching all the way down before then. They’ve changed four times in the last few days and nobody has seen them roll yet.
The release was planned for November. If this chain doesn’t fit inside that, the date moves.