← Dev log

The smith who was not in the room

In one test campaign the hero was standing by the well in the village of Rotten Ford, talking to the herbalist. Also nearby, as far as the game was concerned, was the smith. In reality the smith was working in his forge — he had merely been mentioned in conversation: “The elder, Pron. The smith.”

The Master could have addressed him at any moment as a participant in the scene. For a game that rests on the world behaving consistently, that is bad.

Where the extra person came from

We do not store presence anywhere. It is recomputed every time: a character is in the scene if the hero knows them and either they travel with the party or they stand in the same place as the hero.

The rule is simple and, as it turns out, entirely correct. It was not what broke.

The Master had made the active place the entire village. Across the whole campaign the hero never changed location once — not a single move. So everyone he met in that village was tagged with that same village. And since the place matches, they are all standing nearby. The smith at his forge, the elder at his house, the herbalist by the well: from the game’s point of view, the three of them were pressed up against the hero.

The logic worked exactly as designed. The mistake was in the scale of the place.

The rule existed. The check did not

The most galling part: the rule we needed was written down. In three places.

It was in the design document. It was in the description of the place model itself — “a location is the smallest cell in which it is meaningful to ask ‘who is here’; a large container like a city is a parent, not a scene.” It was in the description of the tool the Master uses to create new places, and that same tool already had a parameter for naming the parent.

None of it was checked at runtime. The rule was written down — and remained a wish.

The Master was not breaking it out of spite. It simply did not see the difference between “the village” and “the well in the village”: both are places, both are created the same way, and no reply ever came back with an objection.

Why this is not cosmetic

If it had only been about a list of names on screen, we would have fixed the display and forgotten about it.

But shortly before this we had shipped the relationship mechanics: the Master can change a character’s trust in the hero, record promises, mark witnesses to a death. Every one of those checks asks the game the same thing — is this character here right now?

With the village standing in for the scene, the answer was always yes. Which means you could ruin your relationship with a smith who never saw you, and record a promise nobody heard. One wrong detail in the world model quietly voided three protections built on top of it.

What changed

The rule became a check:

  • A place that contains other places can no longer be made a scene. The attempt comes back to the Master with an explanation — not “you may not”, but “put them at a specific point inside it rather than in the whole thing at once”.
  • Characters fall under the same rule: you cannot put a person “in the village”, you can put them at the forge, at the well, in the cellar.
  • The village did not go anywhere. It became a parent, and the well became the scene.
  • A second ring appeared: “nearby, but not here”. The herbalist in her hut three doors down is not in the scene, but has not vanished from the world either. The Master remembers her, and you can walk to her.
  • Places gained exits, so movement stopped being teleportation by name.

What we took from it

A rule that is written down is not yet a rule. Until something checks it at the output, it stays a wish, and sooner or later it will be broken — not out of malice, but because breaking it turned out to be easier.

Especially when the executor is a language model. It understands an explanation perfectly well, and walks straight past it just as calmly if nothing follows from it.

Now the whole village cannot be made a scene. You can come to the well.