The engine
What runs your world. Read this when you want to know the order things happen in.
The engine has no attributes, damage types, conditions, dice convention, or level curve of its own. It reads all of them from your world.
Actions and events
An action is a request: walk north, attack that, buy this. It says what you want, not what happens. Actions cover movement, combat, trade, items, talking, searching, the party, quests, and time.
An event is a fact that has already happened. Events carry their numbers, so a roll arrives with its notation, every die, the natural result, the modifier, the total, the number it needed, and whether it landed. Interfaces show the arithmetic from this.
The engine never produces a sentence. It names a message and hands over the facts. Your systemText supplies the words.
A turn
- Mods may block the action or replace it.
- The action resolves.
- The dice used are recorded into the save.
- The world settles.
- Anything your content emitted is handled, and anything that emits, four rounds deep.
Settling always runs in this order:
- Everyone perceives.
- Anything noticed is acted on.
- Party passives run.
- A finished fight ends. A started fight begins. Anyone new joins it.
- Combat start and end triggers fire.
- Reactions fire.
- Creatures take their turns.
- Arc endings, then your
victoryWhenanddefeatWhen.
Your effects do not write state. They produce a list of intents and the engine decides each one. The dead take no damage. Resources stop at their limits. An immune creature shrugs off a condition. An id that does not exist is refused, not crashed on.
What a save holds
Which world and version, the dice mid sequence, the time, every creature, the party, where you are, generated maps, the current fight, fired triggers, what each person remembers, the open conversation, flags, known lore, the purse, faction standing, quest progress, deeds, and whether you have won.
Only base facts are stored. Attributes and current resource values are kept. Maxima, guard, and initiative are recalculated on every read.
Characters, monsters, and townspeople are one kind of thing. Any of them can fight or talk.
Replay
A starting number plus the choices made reproduces a run move for move.
- The dice live in the save. Loading resumes mid sequence.
- Randomness is split by purpose: one stream for the dungeon, one per fight, one per loot roll. A longer fight cannot change the dungeon. Rerolling a map moves only the map.
- Nothing asks the computer for the time or for a random number.
- Initiative ties break by id. Quests are offered in a fixed order. Followers move in party order.
- Chance is rolled last. A trigger that fails its condition spends no randomness.
Checks
Every uncertain outcome is one check: roll, add a modifier, compare against a difficulty. Your world sets what a check rolls, what advantage and disadvantage roll instead, which results are critical, and how fractions round.
The natural roll decides criticals. A rolled 1 with a bonus of nine is still a fumble.
Stats
Worked out in four steps. Each step sees the ones before it and nothing after.
- Attributes. Stored.
- Modifiers. Each sees only its own attribute value.
- Resource limits. See attributes, modifiers, level.
- Derived stats. See all of the above, plus resources, equipment, conditions.
A resource limit cannot reference a derived stat.
onDepleted effects. Death follows only if the creature is still at the floor afterwards and the resource is the one named vitalResource. Heal one and apply a downed condition means stabilised.Combat
- A fight starts when something perceives you strongly enough to attack. Sharing a map is not enough.
- Anything joining partway through takes its turn at the end of the order.
- A fight ends when one side is gone, or when neither side perceives the other. Checked at the top of a round.
- Moving out of reach of an enemy provokes a free attack from it.
Using an ability runs in this order:
- Whether it can be used at all: conditions,
requires,when, cooldown. - Spell slot.
- Other costs, calculated once and reused for both the check and the payment.
- Targets.
- Payment.
- Concentration and cooldown.
- Result against each target.
The result is one of three:
| Attack roll | Against a stat on the target, plus its cover. |
| Saving throw | Target rolls. Success is worth nothing, half, all, or effects you name. |
| Neither | The effects happen. |
The world
- Maps are generated on first arrival and kept. A ransacked shrine stays ransacked.
- Movement is one tile at a time, including a long click. Anything interesting interrupts the journey.
- Travel between areas needs a declared connection.
- Fog of war is what has been seen, not where you have walked. The party shares it.
- Perception is a signal strength from 0 to 1 at the observer. Thresholds decide what it means, not distance.
Each step of movement, in order:
is it your turn -> is the tile adjacent -> is the terrain passable
-> is anything standing there -> can you afford it
-> parting blows, and did you survive them -> you move
-> mark what you can now see -> leave scent and sound
-> terrain effects -> enter the room -> spring any trap
-> advance the clock, outside combat -> followers catch upQuests
- Objectives watch events. Nothing about combat or travel knows quests exist.
- Counted progress lives in the flag
quest:<quest>:<objective>:count. - The current stage is the first one holding an unfinished objective that is not optional. It is calculated, not stored.
- Rewards pay experience to the whole party.
Prose
Every engine sentence comes from a systemText key. There is no English fallback. A missing required fragment stops the world loading.
Saves across edits
A save records the world, the version, and a fingerprint of the contents.
| Different world | Refused. |
| Same world, contents changed | Refused unless you accept the drift. |
| Different mods installed | Warning. |
Every edit changes the fingerprint, so saves made while building will ask before loading.
Playing
- The buttons under the map are the engine's own list of what is possible here.
- The command bar completes from the same list.
- A refusal names what was understood and what was missing.
- An ambiguous target opens a picker with positions.
- An unreachable tile still offers the walk, with the reason it will fail.