UmweltDocs
Guides/Games and mods

Games and mods

Problem. Dialogue gating is a pile of boolean flags. knows_about_betrayal = true says nothing about when, from whom, or whether it survived a later revelation. Save files diverge and nobody can explain why an NPC said the wrong line.

How it maps.

  • The mod loads the engine in-process (the .NET binding, or the C ABI from any language), or spawns umwelt serve save.umw. No SQL.
  • entity.ensureBatch registers the game’s characters by their own ids when a save loads.
  • The day being played is a draft: promote it when the player sleeps, discard it with purge when they quit without saving.
  • A gate is a query: does this NPC hold this knowledge at this position? Gossip is transmit; a scene is witness; the night’s forgetting and trust changes are holding.adjustBatch, transition.batch and disposition.setBatch. The game decides the rules; the engine records them.
  • Secrets carry who may know them. Telling one to the wrong person is never blocked: it returns a SECRET_BREACH warning and shows up in breaches.
  • Hooks fire more than once, after a reload or a rewind. Pass attemptId and a replayed commit applies exactly once.
JSON
{"v":1,"id":"1","op":"hello","payload":{"protocol":{"min":1,"max":1},"client":"game-mod/1"}}
{"v":1,"id":"2","op":"holds","payload":{"projectId":"save","holder":"npc-guard","claimKey":"<claim key>","at":{"tick":420}}}
The change feed (`changes`) is append-only, so a mod can poll it to react to what another system just recorded.
Was this page helpful?