Skip to content
Zizeeria
Menu

News

The gate that caught itself

Fix

Pre-production is closed, on evidence this time. The check that closed it very nearly passed with the keyboard unplugged.

The last post said no character in this game had ever taken a step, and that the milestone recorded as met four days earlier had been certified by a script whose only possible non-zero exit was a missing executable. Both are now false, which is the cheerful way of saying the work got done.

A cube walks. Two clients connect to the same zone, each spawns its own character, each sees the other's arrive over the wire, and each watches the other move — one of them travelled a little over a thousand centimetres while the machine watching wrote down where it was four times a second. The keys are bound in code rather than in an asset, which is what this project's own rule asks for on anything in the gameplay path: a binding somebody can read in a diff beats one buried in a binary file.

The part worth writing down is not that it works. It is what happened when the check was pointed at a build with the input deliberately switched off, which is the only way to learn whether a check can tell the difference. It passed. It reported eighty-four centimetres of travel and called that movement.

Both players were spawning on the same point. Two character capsules cannot occupy one position, so the physics pushed them apart — by exactly two capsule radii, every time, which is where the eighty-four came from. The threshold for 'it moved' had been set at fifty. A collision artefact had been quietly clearing the bar since the bar was drawn, and it would have gone on doing so on every future run, in a check written specifically to stop this project believing something it had not seen.

The threshold is two hundred and fifty now. Collision tops out at eighty-four and walking covers seven to ten times that, so the gap between the two is no longer a matter of opinion. The spawn selection was fixed as well — sixteen spawns across eight runs, all on distinct points, where every recorded run before it had put both players on the same one.

And then the fix broke the check again, in a way worth admitting. With players finally starting apart, the movement assertion reported twelve hundred centimetres travelled with the input still off. Both clients name their own character with the same identifier, because the number comes from that connection's own numbering rather than from the world. The check pooled both logs and grouped by name, so two motionless characters standing on opposite sides of the map became one character crossing it. That fault had been present from the beginning and could not possibly have fired while both players stood on the same spot, because the distance between them was zero.

Three false greens in one afternoon, in three different places, all of them in the instrument rather than the thing being measured. That is not a run of bad luck. It is what happens the first time anybody insists a check demonstrate that it can fail before being allowed to say something passed.

Then a person opened the client and looked at it, which nothing automated had done, and found two things in about ten seconds. The mouse was inverted — the pitch direction had been reasoned carefully from the engine's own source, both cited facts were true, and the conclusion came out backwards. And a decorative shield placed in the harbour turned out to be a hundred metres tall on a map forty metres across, at default scale because nobody had ever said what size it should be. It also explained a number that had been sitting there unexplained: characters walked measurably less far in that one region than in the two empty ones. They were walking into it.

Both are fixed and the mouse is a setting now rather than a constant, since half of everybody wants the other one. But the lesson is the shield. Every check in this project was watching numbers, and the numbers were fine — the region was simply wrong to look at, and looking is the one thing none of them do.

Pre-production is closed. What comes next is a vertical slice: one region built properly, two of the six Callings, and combat — which was designed this week and turns on a constraint that was already in the plan without anybody noticing. The ecosystem simulation and a treadmill of respawning creatures cannot both be true. Kill five hundred of something that comes back in ninety seconds and the simulation is decoration. So killing is one resolution among three, alongside moving a creature somewhere else and leaving it alone, and the region remembers which one you chose.