systemText

Every sentence the engine produces. The engine holds no prose of its own.

The engine emits a key and its facts. These decide the words, in any language. 200 keys, 54 of them fragments.

Two tiers, and why they differ
A fragment is a piece another message interpolates, such as the word that fills {outcome} in an attack line. Nothing sensible can stand in for a missing one and the sentence around it would render with a hole, so fragments are required in the document, and a world that omits one will not load. A message stands on its own and carries a default, so you write only what you want to change.

A value is a string, or a pool reference for weighted, condition gated variation.

"narrative": {
  "systemText": {
    "combat.died": "{name} falls.",
    "move.blocked": { "pool": "blocked_lines" }
  }
}

Placeholders below are the ones a message cannot lose. Dropping one stops the world loading. A new world already has every required fragment. Starting from an existing ruleset brings the rest across.

KeyTierMust keepWhat it saysDefault
grammar.andfragmentJoins the last two items of a list.and
grammar.orfragmentJoins alternatives, as in a gate's unmet requirements.or
grammar.list.separatorfragmentBetween all but the last two items of a list.,
grammar.list.pairfragment{first}{last}{conjunction}A list of exactly two.{first} {conjunction} {last}
grammar.list.manyfragment{head}{last}{conjunction}A list of three or more; `head` is already joined.{head} {conjunction} {last}
grammar.article.consonantfragment{noun}Indefinite article before a consonant.a {noun}
grammar.article.vowelfragment{noun}Indefinite article before a vowel.an {noun}
grammar.countfragment{number}{noun}A counted noun, as in "three hounds".{number} {noun}
grammar.pluralfragment{noun}How a counted noun is made plural when the content declares no plural of its own.{noun}s
grammar.smallNumbersfragmentNumber words from zero upward, space separated. Counts past the end of this ladder are written as digits.no one two three four five six seven eight nine ten
unit.roundfragmentOne round of combat, singular.round
unit.roundsfragmentRounds of combat, plural.rounds
direction.northfragmentBearing word, interpolated into `{direction}`.north
direction.southfragmentBearing word.south
direction.eastfragmentBearing word.east
direction.westfragmentBearing word.west
direction.northeastfragmentBearing word.northeast
direction.northwestfragmentBearing word.northwest
direction.southeastfragmentBearing word.southeast
direction.southwestfragmentBearing word.southwest
direction.herefragmentBearing to the tile you are standing on.right here
direction.nearbyfragmentBearing too close or too diagonal to name.nearby
roll.linefragment{total}{parts}A roll shown as its arithmetic, so a player can learn the system.{total} ({parts}){versus}{swing}
roll.versusfragment{difficulty}The number a roll was measured against. vs {difficulty}
roll.swingfragment{swing}Advantage or disadvantage on a roll. [{swing}]
combat.outcome.criticalfragmentHow a critical reads in an attack line.a critical hit
combat.outcome.successfragmentHow a success reads in an attack line.a hit
combat.outcome.failurefragmentHow a failure reads in an attack line.a miss
combat.outcome.fumblefragmentHow a fumble reads in an attack line.a fumble
combat.attack.unnamedfragmentStands in when an attack names no ability.attacks
combat.check.unnamedfragmentStands in when a check names neither skill nor attribute.check
combat.damaged.resistedfragment{raw}Appended when resistance or vulnerability changed the number. ({raw} before resistance)
combat.attackedmessage{attacker}{target}{roll}{outcome}One attack, with its arithmetic.{attacker} — {ability} on {target}: {roll} — {outcome}.
combat.checkedmessage{who}{roll}A skill or attribute check.{who} — {what}: {roll}.
combat.savedmessage{who}{roll}A saving throw.{who} — {save} save: {roll}.
combat.damagedmessage{who}{amount}Damage taken.{who} takes {amount}{type} damage{resisted}.
combat.healedmessage{who}{amount}A resource restored.{who} recovers {amount}.
combat.diedmessage{who}A creature dies.{who} falls.
combat.conditionAppliedmessage{who}{condition}A condition takes hold.{who} is {condition}.
combat.conditionExpiredmessage{who}{condition}A condition runs out.{who} is no longer {condition}.
combat.conditionResistedmessage{who}{condition}A condition is saved against.{who} shrugs off {condition}.
combat.reactedmessage{who}A reaction fires.{who} reacts.
combat.startedmessage{who}A fight starts, listing who is in it.Combat begins — {who}.
combat.ended.victorymessageThe party won.The fight is over.
combat.ended.fledmessageThe party escaped.You are not followed.
combat.ended.defeatmessageThe party lost.The party falls.
combat.roundmessage{round}A new round begins.— round {round} —
combat.turnmessage{who}Whose turn it is.{who}'s turn.
move.blockedmessage{what}Something stopped a step: a wall, or somebody standing there.Blocked by {what}.
move.blocked.edgefragmentWhat stopped a step when it was the end of the map rather than any terrain.the edge of the world
item.takenmessage{items}Picked up.Taken: {items}.
item.lostmessage{items}Gone from the party's hands.Lost: {items}.
item.droppedmessage{who}{items}A body's spoils, named so they get picked up.{who} leaves {items} behind.
trade.boughtmessage{items}{who}{price}A purchase.Bought {items} from {who} for {price}.
trade.soldmessage{items}{who}{price}A sale.Sold {items} to {who} for {price}.
currency.gainedmessage{amount}Coin arriving any way other than a sale.You are {amount} the richer.
currency.lostmessage{amount}Coin leaving any way other than a purchase.You are {amount} the poorer.
trap.sprungmessage{who}{trap}A trap fires.{who} sets off {trap}!
trap.disarmedmessage{who}{trap}A trap is made safe.{who} disarms the {trap}.
discovered.trapmessage{what}A trap is noticed before it fires.You spot {what}.
discovered.placemessage{what}A hidden place is found.You find {what}.
progress.xpmessage{who}{amount}Experience awarded.{who} gains {amount} experience.
progress.levelmessage{who}{level}A level gained.{who} reaches level {level}.
gate.opened.bypassfragmentAppended when a gate was forced rather than opened. — forced
gate.opened.abilityfragmentAppended when an ability opened a gate. — by power
gate.blocked.missingfragment{what}Appended to a blocked gate, listing what would open it. You would need {what}.
gate.openedmessage{gate}A gate gives way.{gate} opens{how}.
gate.blockedmessage{gate}A gate holds.{gate} will not open.{missing}
requirement.itemfragment{item}An item a requirement asks for.the {item}
requirement.skillfragment{skill}{rank}A skill rank a requirement asks for.{skill} {rank}
requirement.questfragment{quest}{status}A quest state a requirement asks for.{quest} {status}
requirement.factionfragment{faction}Reputation a requirement asks for.standing with the {faction}
requirement.levelfragment{level}A level a requirement asks for.level {level}
requirement.abilityfragment{ability}An ability a requirement asks for.the {ability} ability
lore.learnedmessage{lore}The party works something out. Nobody asked them to, so it is a note, not a quest.You note it down: {lore}
lore.learned.sourcedmessage{lore}{source}The same, when the entry records where it came from.You note it down: {lore} ({source})
quest.offeredmessage{who}{quest}Somebody offers a job.{who} has work for you: {quest}.
quest.startedmessage{quest}{description}A job taken, with what it asks of you.New quest: {quest} — {description}
quest.started.plainmessage{quest}A job taken that has no description.New quest: {quest}.
quest.stagemessage{stage}A quest moves on, when the stage wrote no journal prose.{stage}
quest.stage.journalmessage{stage}{journal}A quest moves on, with the stage's own journal line.{stage} — {journal}
quest.objectivemessage{objective}One objective done.Objective complete: {objective}
quest.completedmessage{quest}A job finished.Quest complete: {quest}.
quest.failedmessage{quest}{reason}A job lost.Quest failed: {quest} — {reason}.
quest.failed.abandonedfragmentWhy a quest was lost: the party walked away from it.abandoned
quest.failed.conditionsfragmentWhy a quest was lost: its `failWhen` became true.conditions changed
quest.failed.timedOutfragmentWhy a quest was lost: its deadline ran out.too much time passed
quest.failed.expiredfragmentWhy a quest was lost: its time ran out while you were elsewhere.time ran out
party.stancemessage{stance}The party changes how carefully it moves.You move at a {stance}.
party.followingmessageThe party closes up.The others fall in behind you.
party.spreadmessageThe party stops following.The party spreads out.
time.dayBrokemessage{day}A new day.Day {day} breaks.
reputation.improvedfragmentWhich way standing moved.improved
reputation.worsenedfragmentWhich way standing moved.worsened
reputation.changedmessage{faction}{direction}{delta}Standing with a faction moved.{faction}: {direction} ({delta}).
deed.witnessfragmentOne witness.witness
deed.witnessesfragmentSeveral witnesses.witnesses
deed.unseenmessageA deed nobody witnessed.Nobody saw that.
deed.witnessedmessage{witnesses}A deed that was seen.{witnesses} to that.
game.victorymessageThe game is won.You have won.
game.defeatmessageThe game is lost.Your party is dead.
sense.nearness.faintfragmentHow a weak or stale impression is introduced.Faintly
sense.nearness.closefragmentHow a strong impression is introduced.Close by
sense.nearness.farfragmentHow a middling impression is introduced.Somewhere
sense.unnamedfragmentStands in when a sense declares no name.sense
perception.investigatingmessage{who}A creature goes to look at what it noticed.{who} casts about, and starts toward something.
perception.lostInterestmessage{who}A creature gives up looking.{who} loses the thread of it.
sense.emptymessageUsing a sense that turns nothing up, when the sense has no name.You stop. Nothing reaches you.
sense.empty.namedmessage{sense}Using a sense that turns nothing up. Always says something.You stop. Nothing reaches you by {sense}.
sense.impressionmessage{nearness}{sense}Noticing something, when the sense wrote no phrasing of its own.{nearness}, something you can {sense}.
look.creaturesmessage{what}Who else is here.You see {what}.
look.creature.plainmessage{name}Looking at a creature whose statblock wrote no description.{name}, and nothing more to be told from here.
look.item.plainmessage{name}Looking at an item that wrote no description.{name}. Nothing remarkable.
look.place.plainmessage{name}Looking at a place that wrote no description.{name}, from here.
look.unseenmessage{what}Looking at something that is not here.You cannot see {what} from here.
refused.actor.missingmessageThe action named somebody who is not in the game.no such character
refused.action.unknownmessage{action}An action this version does not recognise."{action}" is not something you can do
refused.turn.othermessage{who}Acting out of turn.it is {who}'s turn
refused.select.notPartymessageSelecting somebody who is not yours to command.not in the party
refused.move.noMapmessageMoving while not on a tactical map.not on a map
refused.move.tooFarmessageMoving further than one tile at a time.that is not one step away
refused.move.noMovementmessageOut of movement in combat.no movement left this turn
refused.travel.noMapmessageWalking with no map underfoot.nowhere to walk
refused.travel.noRoutemessageNo path to the destination.no way through
refused.travel.noRoadmessageNo connection between these two areas.there is no road that way
refused.travel.noWayUpmessageNo route out of a dungeon by that door.there is no way back up
refused.travel.notYetmessage{missing}The way on is gated, and this is what is missing.not yet — {missing}
refused.travel.notYet.plainmessageThe way on is gated, with nothing to say about why.not yet
refused.travel.unknownAreamessage{area}The module names no such area.no area "{area}"
refused.leave.noExitFoundmessageLeaving a dungeon before the exit is known.find the way out first
refused.leave.nowheremessageLeaving with nowhere to go.there is nowhere to go back to
refused.enter.noSuchPlacemessage{target}Entering something that is not here.there is no "{target}" here
refused.enter.unknownPlacemessageThe place exists in no collection.no such place
refused.enter.unknownDungeonmessage{dungeon}The module names no such dungeon.no dungeon "{dungeon}"
refused.attack.noWeaponmessage{who}Attacking with no ability and no weapon.{who} has nothing to attack with
refused.ability.unknownmessage{ability}The module names no such ability.no ability "{ability}"
refused.ability.notKnownmessage{who}{ability}Using an ability this creature has not got.{who} does not know {ability}
refused.ability.preventedmessage{who}A condition forbids the action type.{who} cannot take that action right now
refused.ability.requirementsmessage{who}{ability}An ability is gated and the gate is shut.{who} does not meet the requirements for {ability}
refused.ability.unavailablemessage{ability}An ability's own condition says no.{ability} cannot be used now
refused.ability.cooldownmessage{ability}{rounds}An ability is still cooling down.{ability} is not ready for another {rounds}
refused.ability.noActionmessageOut of actions in combat.no action left this turn
refused.cost.shortfallmessage{resource}An ability costs more than is left.not enough {resource}
refused.target.nonemessageAn ability that needs a target found none.nothing to target
refused.target.missingmessageNo target was named.no target
refused.target.emptymessageThe named target is gone.nothing there
refused.target.elsewheremessageThe target is on another map.not here
refused.target.outOfRangemessageBeyond the ability's reach.out of range
refused.target.outOfReachmessageBeyond arm's length.out of reach
refused.target.noSightmessageSomething solid is in the way.no line of sight
refused.target.coveredmessageCover blocks the shot entirely.they are behind full cover
refused.flee.noCombatmessageFleeing outside a fight.nothing to flee from
refused.flee.noExitmessageFleeing with no way out.there is nowhere to run
refused.cast.silencedmessage{who}A verbal component with speech prevented.{who} cannot speak the words
refused.cast.boundmessage{who}A somatic component with gesture prevented.{who} cannot make the signs
refused.cast.noComponentmessage{who}{component}A material component the caster is not carrying.{who} has no {component}
refused.cast.notRitualmessage{spell}Casting as a ritual something that is not one.{spell} cannot be cast as a ritual
refused.cast.noSlotmessage{spell}Out of spell slots at that level.no slot left for {spell}
refused.item.unknownmessage{item}The module names no such item.no item "{item}"
refused.item.notCarriedmessageActing on an item nobody holds.you are not carrying that
refused.take.nothingHeremessageNothing within reach to pick up.there is nothing here to take
refused.take.noSuchItemmessage{item}That particular thing is not here.there is no {item} here
refused.equip.notWearablemessage{item}Equipping something with no slot.{item} is not something you wear
refused.equip.notAllowedmessage{item}Equipping something this character may not use.{item} is not for you
refused.unequip.notWornmessageTaking off something not worn.you are not wearing that
refused.use.nothingHappensmessage{item}Using an item that declares no effect.nothing happens with the {item}
refused.use.spentmessage{item}Using an item whose charges are gone.the {item} is spent
refused.give.tooFarmessageHanding something over from too far away.they are not close enough
refused.search.nothingmessageA search that turned nothing up.you find nothing here
refused.disarm.nothingHeremessageDisarming with no trap in reach.there is nothing here to disarm
refused.open.noSuchThingmessage{target}Opening something that is not here.nothing here called "{target}"
refused.open.unknownGatemessage{gate}The module names no such gate.no gate "{gate}"
refused.sense.unknownmessageUsing a sense the module does not declare.nothing here works like that
refused.stance.unknownmessage{stance}Setting a stance the module does not declare.there is no way of moving called "{stance}"
refused.follow.inCombatmessageSetting follow while fighting.in a fight everyone acts on their own initiative
refused.rest.notHeremessageThis place does not allow that kind of rest.cannot rest like that here
refused.rest.inCombatmessageResting during a fight.not while fighting
refused.rest.interruptedmessageA rest broken into.something came looking before you could settle
refused.talk.tooFarmessageTalking from across the room.too far away to talk
refused.talk.nothingToSaymessage{who}This character has no dialogue.{who} has nothing to say
refused.talk.unknownDialoguemessage{dialogue}The module names no such dialogue.no dialogue "{dialogue}"
refused.reply.noConversationmessageReplying with no conversation open.nobody is talking
refused.reply.unknownmessageChoosing a reply that is not on offer.no such reply
refused.reply.lockedmessageA reply that is shown but not available, and wrote no hint of its own.you cannot say that
refused.buy.noStockmessageThis character keeps no shop.they have nothing to sell
refused.buy.noSuchItemmessageNot in stock.they do not have that
refused.buy.tooExpensivemessageNot enough coin.you cannot afford that
refused.sell.notBuyingmessageThis shop does not buy.they are not buying
refused.sell.unwantedmessageThis shop will not take that.they have no use for that
refused.trade.barredmessage{missing}The shop is gated, and this is why.they will not deal with you — {missing}
refused.trade.barred.plainmessageThe shop is gated, with nothing to say about why.they will not deal with you
affordance.barredmessage{what}A way that is shut, and what would open it.barred — needs {what}
affordance.needsmessage{what}A shop that will not deal, and what would change that.needs {what}
refused.quest.unknownmessage{quest}The module names no such quest.no quest "{quest}"
refused.quest.unavailablemessage{quest}A quest whose requirements are unmet.{quest} is not available yet
refused.quest.notTakenmessageAbandoning a quest nobody took.you are not on that job
refused.internal.unknownResourcemessage{resource}Content named a resource the ruleset does not declare.no resource "{resource}"
refused.internal.unknownConditionmessage{condition}Content named a condition the ruleset does not declare.no condition "{condition}"
refused.internal.unknownFactionmessage{faction}Content named a faction the module does not declare.no faction "{faction}"
refused.internal.unknownOpmessage{op}An effect this build does not know.this engine does not implement "{op}"