Adventure Game Type
Reference for the adventure game type — designer configuration and player rules.
For platform-level configuration shared across all game types, see Shared Game Configuration.
Game Parameter
| Parameter | Default | Description |
|---|---|---|
| Character lives | 3 | Number of lives a character has before being permanently removed from the run |
Designer Configuration
How the World Fits Together
Game
├── Locations (the places characters can be)
│ ├── Item placements (items initially found here)
│ ├── Creature placements (creatures initially here)
│ ├── Wandering monster spawn point (periodic random spawning)
│ └── Location objects (interactive scenery)
│ ├── Object states (e.g. locked, open, broken)
│ └── Object effects (what happens when players act on the object)
├── Location links (paths between locations)
│ └── Link requirements (conditions to see or use a path)
├── Items (things characters can carry)
│ └── Item effects (what happens when players act on an item)
├── Creatures (monsters and NPCs)
└── Wandering monster tables (reusable weighted creature lists)
└── Entries (creature + weight)
Location
Named places in the adventure world. The world is built by connecting locations with links.
| Field | Description |
|---|---|
| Name | Display name shown on turn sheets |
| Description | Narrative description shown to players when they are at this location |
| Starting location | If enabled, new characters spawn here and dead characters respawn here |
Requirement: at least one location must exist and at least one must be marked as the starting location before a run can be created.
A unique background image can be uploaded for each location to display on that location's turn sheets.
Location Link
Directed connections between locations (exits / paths). A link from A to B does not automatically create a link from B to A — both directions must be added separately for two-way movement.
| Field | Description |
|---|---|
| From location | The origin location |
| To location | The destination location |
| Name | Name of the exit shown to players (e.g. "North Door", "Rope Bridge") |
| Description | Narrative description of the link when it is visible and unlocked |
| Locked description | Description shown when the link is locked or blocked |
| Traversal description | Narrative shown when a player successfully moves through this link |
Writing conventions: Use neutral third-person for Name and Description — avoid player-relative direction words such as back, return, retreat, or again, since the player may never have visited the destination before. Name the exit by what it is or where it leads (e.g. "The Cemetery Gate", "Toward the Open Graves"), not by travel history (e.g. "Back to the Gate"). Traversal descriptions describe the act of moving; you may name the destination the player just chose.
Location Link Requirement
Conditions that control whether a link is visible to players or can be traversed. Multiple requirements on the same link and purpose all apply — every condition must be met.
| Field | Description |
|---|---|
| Purpose | traverse — gates movement through the link; visible — gates whether the link appears on the sheet at all |
| Item | Item required (used with item-based conditions); maps to adventure_game_item_id |
| Creature | Creature required (used with creature-based conditions); maps to adventure_game_creature_id |
| Skill | Platform skill required (used with skill-based conditions like character_has_skill); maps to adventure_skill_id |
| Condition | The condition that must be met (see below) |
| Quantity | Number of instances required to satisfy the condition |
Item-based conditions:
| Condition | Meaning |
|---|---|
in_inventory | Player has the required number of this item in their inventory (unused) |
equipped | Player has the required number of this item equipped |
Creature-based conditions:
| Condition | Meaning |
|---|---|
dead_at_location | At least the required number of this creature are dead at the current location |
none_alive_at_location | No living instances of this creature exist at the current location |
none_alive_in_game | No living instances of this creature exist anywhere in the run |
Skill-based conditions:
| Condition | Meaning |
|---|---|
character_has_skill | The character must have learned the specified platform skill |
> Example: A crumbled staircase link uses character_has_skill with the Climb skill. Characters without Climb cannot traverse the link; it appears locked (or hidden if purpose is visible) on their Location sheet.
Effect on the turn sheet: if a visibility requirement is not met, the link is hidden entirely. If a traversal requirement is not met, the link is shown but marked as locked, displaying the locked description.
Location Object
Interactive scenery at a location. Objects can have discrete states and trigger effects when players perform actions on them.
| Field | Description |
|---|---|
| Location | The location this object belongs to |
| Name | Name shown to players (e.g. "Locked Chest", "Ancient Lever") |
| Description | Narrative description |
| Initial state | The state the object starts in for each new run; leave unset for a stateless object |
| Hidden | If enabled, the object is not visible until revealed by an effect |
Location Object State
Discrete named states for a location object (e.g. "intact", "open", "broken", "activated"). States form a state machine — effects transition objects from one state to another.
| Field | Description |
|---|---|
| Name | State name (e.g. "locked", "unlocked", "open") |
| Description | Description shown when the object is in this state |
| Sort order | Display ordering for the states |
Validation: the game validator checks for unreachable states, dead-end states, and objects whose initial state does not match any defined state.
Location Object Effect
Rules that define what happens when a player performs an action on an object. Multiple effects for the same action on the same object state all fire together.
| Field | Description |
|---|---|
| Action type | The player action that triggers this effect (see action types below) |
| Required object state | The object must be in this state for the effect to fire; leave unset to fire in any state |
| Required item | The player must have this item in their inventory for the effect to fire |
| Result description | Narrative text shown to the player when the effect fires |
| Effect type | The mechanical outcome (see effect types below) |
| Target state | For state-change effects — the state to transition to |
| Target item | For item effects — the item to give, remove, or place |
| Target link | For link effects — the link to open or close |
| Target creature | For summon effects — the creature to spawn |
| Target object | For object effects — the object to reveal, hide, change, or remove |
| Target location | For teleport and item-placement effects — the destination |
| Value (min) | Minimum value for damage and heal effects |
| Value (max) | Maximum value for damage and heal effects |
| Repeatable | Whether the effect can fire more than once per run |
| Trigger chance | 1–100. Probability that this effect fires when its action is chosen. Default 100 (always fires). Use a lower value for traps and other probabilistic outcomes. |
Action types:
| Action | Description |
|---|---|
inspect | Look at the object |
touch | Touch the object |
open | Open the object |
close | Close the object |
lock | Lock the object |
unlock | Unlock the object |
search | Search the object |
break | Break the object |
push | Push the object |
pull | Pull the object |
move | Move the object |
burn | Burn the object |
read | Read the object |
take | Take from the object |
listen | Listen to the object |
insert | Insert something into the object |
pour | Pour something on or into the object |
disarm | Disarm the object (e.g. a trap) |
climb | Climb the object |
use | Use the object generically |
Effect types:
| Effect | Description |
|---|---|
info | Narrative only — no mechanical change |
nothing | No effect |
change_state | Change this object to the target state |
change_object_state | Change another object to the target state |
give_item | Add the target item to the player's inventory |
remove_item | Remove the target item from the player's inventory |
place_item | Place the target item at the target location |
open_link | Remove traversal restrictions from the target link |
close_link | Add a traversal restriction to the target link |
reveal_object | Make the target object visible |
hide_object | Hide the target object |
damage | Deal damage to the player (random between value min and max) |
heal | Restore the player's health (random between value min and max; cannot exceed 100) |
summon_creature | Spawn the target creature at the player's current location |
teleport | Move the player to the target location |
remove_object | Permanently remove this object from the run |
Item
Item definitions. Items can be carried in inventory, equipped, and used. Items marked as starting items are given to every new character when a run starts.
| Field | Description |
|---|---|
| Name | Display name |
| Description | Narrative description |
| Can be equipped | Whether the item can be equipped to an equipment slot |
| Item category | Free-text category for grouping (e.g. "weapon", "potion", "key") |
| Equipment slot | The slot the item occupies when equipped; required if the item can be equipped |
| Starting item | If enabled, every new character starts the run with one of these |
Equipment slot values:
| Slot | Description |
|---|---|
weapon | Weapon slot — its deal_damage effects supply the wielder's typed damage packets |
armor | Armour slot — its mitigate_damage effects supply typed flat mitigation |
clothing | Clothing slot |
jewelry | Jewelry slot |
A weapon or armour piece may also carry a required strength (required_strength). It is a hard equip gate: a character or creature whose effective STR is below the item's required strength cannot equip or attack with it (see Combat Model).
Effects (unified model)
All mechanical outcomes — weapon damage, armour mitigation, healing, buffs, status effects, and narrative outcomes — are authored as rows in the single adventure_game_effect table. An effect row is attached to an owner (item, object, set bonus, creature attack, or skill), and the same vocabulary is shared across all owners.
| Field | Description |
|---|---|
| Owner type | What the effect belongs to: item, object, set_bonus, creature_attack, or skill |
| Effect type | The mechanical outcome (see effect types below) |
| Application | When it fires: passive (while equipped/known), on_use, on_attack, or on_tick |
| Damage type | For damaging / mitigating effects (see Combat Model for the vocabulary) |
| Status kind | For apply_status — the timed status applied (see Combat Model) |
| Modifier stat | For stat_modifier — strength, dexterity, or intelligence |
| Value (min) | Minimum magnitude (damage, heal, hits stopped, stat delta, duration, etc.) |
| Value (max) | Maximum magnitude for ranged effects (e.g. damage min–max) |
| Result description | Narrative text shown when the effect fires |
| Action type / required item / required location | Gating fields for item-action and object-action effects |
| Target item / link / creature / object / location / state | Targets for the narrative effect types below |
| Repeatable | Whether the effect can fire more than once |
Combat effect types:
| Effect | Typical application | Description |
|---|---|---|
deal_damage | on_attack / on_use | Deals a typed damage packet (value min–max) of the effect's damage type |
damage_over_time | on_attack / on_use | Applies a damage_over_time status: value (min) per turn for value (max) turns |
heal | on_use | Restores health (value min–max; capped at max HP) |
heal_over_time | on_use / passive | Applies a heal_over_time status: value (min) HP per turn for value (max) turns |
mitigate_damage | passive | Flat "hits stopped" of the effect's damage type while equipped; stacks additively |
stat_modifier | passive / on_use | Adjusts STR/DEX/INT by value (min); negative values model armour encumbrance |
apply_status | on_attack / on_use | Applies a timed status of the given status kind (e.g. stunned, held) |
grant_lifesteal | passive | % of damage dealt that heals the attacker; stacks additively |
grant_damage_reflection | passive | % of incoming damage reflected back to the attacker; stacks additively |
grant_max_health | passive | Increases maximum HP above the base 100 |
grant_party_buff | passive | Adds flat mitigation to all characters at the same location |
accuracy_bonus | passive | Adds to adjusted DEX for to-hit (weapon-mastery II / enchanted gear) |
Narrative effect types (folded in from the retired item / object effect tables):
info, nothing, teleport, open_link, close_link, give_item, remove_item, summon_creature, change_state, change_object_state, reveal_object, hide_object, remove_object, place_item, advance_clock.
Item-action triggers (the action that fires an on_use item effect): use, equip, unequip, inspect, drop, pickup.
Notes:
- Weapon damage and armour mitigation are typed — each
deal_damageandmitigate_damageeffect names a damage type. There is no longer an "untyped physical" fallback. - DoT / HoT with value (max) = 0 are permanent while equipped and are cleared when the item is unequipped.
- Passive equip effects from individual items and from active set bonuses are resolved together at the start of each combat turn.
Item Sets
Item sets let the designer group equippable items into thematic collections that grant tiered bonuses when multiple pieces are worn simultaneously.
Item Set fields
| Field | Description |
|---|---|
| Name | Display name shown on turn sheets when a set piece is discovered |
| Description | Thematic flavour text describing the set's history or power |
Set Bonus fields
| Field | Description |
|---|---|
| Item Set | The set this bonus belongs to |
| Pieces Required | Minimum number of set pieces the character must have equipped (not just carried) for this tier to activate; minimum 2 |
| Bonus Type | The mechanical effect granted (uses the same effect-type vocabulary as items) |
| Bonus Value (min) | Numeric value of the bonus (e.g. +3 for mitigate_damage); omitted for narrative bonuses |
| Bonus Value (max) | Upper bound for ranged bonuses; omitted if not applicable |
| Description | Narrative description; required for purely narrative bonuses |
Bonus type vocabulary — set bonuses are stored as adventure_game_effect rows with owner_type = set_bonus, so they use the same effect types as items. The combat-live grants (grant_max_health, grant_damage_reflection, grant_lifesteal, grant_party_buff) and mitigate_damage are the most common; narrative effect types describe text-only bonuses.
How sets work
- Assigning items to a set — each equippable item can belong to at most one set (optional field in the item form).
- Tier activation — at the start of every combat turn the engine counts how many pieces from each set the character has equipped. Every tier at or below that count activates simultaneously (e.g., 2-piece and 4-piece bonuses both apply when 4 pieces are equipped).
- Resolution — active set bonuses are summed together with individual item passive effects and applied as a combined stat block.
Turn sheet rendering
- Set item names appear in gold/amber wherever they appear on turn sheets so players can recognise them at a glance.
- When a player picks up a set piece, the turn sheet includes discovery narration:
> You find Warden's Iron Helm — part of the Crypt Warden set. Equip 2 pieces for: +2 physical mitigation. Equip 4 pieces for: +10 max health.
- When a set tier is active during a combat encounter, the turn sheet shows a gold-coloured summary bar listing active bonuses.
Item Placement
Defines where items are initially found in the world when a run starts.
| Field | Description |
|---|---|
| Item | The item to place |
| Location | The location to place it at |
| Initial count | How many of this item are placed at this location |
Creature
Creature definitions — monsters and NPCs. Includes combat stats, behaviour, territorial range, and how the creature is handled after death.
Creatures use the same combat mechanics as characters: STR/DEX/INT stats, typed attacks, typed mitigation, weapon proficiency and skills (see Combat Model). A creature's damaging attacks are authored as adventure_game_effect rows with owner_type = creature_attack; its innate mitigation and any stat modifiers are authored the same way. There are no scalar attack-damage / defense / attack-hit-bonus columns.
| Field | Description |
|---|---|
| Name | Display name |
| Description | Narrative description |
| Strength / Dexterity / Intelligence | Core stats driving to-hit, equip gates, damage scaling and skills (default 10) |
| Disposition | Behavioural disposition (see below) |
| Max health | Maximum health points |
| Attack method | How the creature attacks — used in narrative descriptions |
| Attack description | Narrative describing the creature's attack |
| Movement description | Narrative shown to characters when a wandering instance of this creature enters their location (e.g. "A ghoul lurches in, grave-dirt falling from its claws."). If blank, the default "A {name} wanders in." is used. |
| Body decay turns | How many turns after death the creature's corpse remains visible on encounter sheets |
| Respawn turns | How many turns after death before a new instance of this creature spawns at its placement location (0 = no respawn) |
| Pursuit range | How many location hops a grudge-holding creature will chase its target from its home location (0 = stays put) |
A creature with no authored damaging attack falls back to a default unarmed attack of 5 crushing damage.
Disposition values:
| Value | Combat behaviour |
|---|---|
aggressive | Attacks the player when encountered; retaliates without being provoked; deals damage when the player flees |
inquisitive | Does not attack first; becomes provoked if attacked |
indifferent | Does not attack; does not retaliate even if attacked |
Attack method values (narrative only — no mechanical effect):
claws, bite, sting, weapon, spell, slam, touch, breath, gaze
A portrait image can be uploaded for each creature.
Creature Placement
Defines where creatures initially appear in the world when a run starts.
| Field | Description |
|---|---|
| Creature | The creature to place |
| Location | The location to place it at |
| Initial count | How many of this creature are placed at this location |
Wandering Monster Table
A reusable list of creatures that can randomly spawn from a spawn point. Tables are game-level resources and can be assigned to multiple spawn points across different locations.
| Field | Description |
|---|---|
| Name | Designer name for this table |
Each table contains one or more entries:
| Entry Field | Description |
|---|---|
| Creature | The creature type that may spawn |
| Weight | Relative spawn probability. Higher weight = more common. The game picks a creature using weighted random selection across all entries in the table. |
Example: a table with three entries — Skeleton (weight 3), Ghoul (weight 2), Wight (weight 1) — will produce Skeletons roughly 50% of the time, Ghouls 33%, and Wights 17%.
Wandering Monster Spawn Point
Configures a location as a source of wandering monsters. Each spawn point references a Wandering Monster Table and controls the timing, probability, and movement of the creatures it produces.
| Field | Description |
|---|---|
| Location | The location where monsters initially appear |
| Monster Table | The Wandering Monster Table to draw from |
| Spawn Chance (%) | 1–100. Probability that a spawn attempt produces a creature. |
| Spawn Interval (turns) | A spawn attempt is made every N turns (≥ 1). |
| Wander Range (hops) | Maximum number of location hops a wandering creature may travel from this spawn point's home location. |
| Move Chance (%) | 1–100. Probability that each wandering creature moves to an adjacent location each turn (default 100). |
| Count Mode | How the live-creature cap is calculated: fixed uses Max Count directly; equal_player caps at the number of active players; half_player caps at half the active player count (rounded down). |
| Max Count | The cap value used when Count Mode = fixed. |
Disabling guard: the spawn point configuration panel is disabled if no Wandering Monster Tables have been created for the game.
Wandering Monster Lifecycle
- Spawn attempt: every
spawn_interval_turnsturns the engine rolls a d100. If the roll ≤spawn_chanceand the number of live wandering creatures from this spawn point is below the cap, a creature is created from the table using weighted random selection. It appears at the spawn point's home location. - Wander phase: after creature initiative each turn, every live wandering creature without an active grudge rolls a d100. If the roll ≤
move_chanceand a random adjacent location is withinwander_rangehops of the home location, the creature moves there. Characters at the destination see the creature's movement description (or the default "A {name} wanders in."). - Grudge priority: if the creature has any active grudge (e.g. from a combat encounter), standard pursuit rules take over entirely — wandering movement is skipped that turn.
- Death: when a wandering creature is killed it is not added to the respawn queue. The spawn point's next periodic check is the sole mechanism for re-entry.
Turn Sheets
Each turn a character receives a set of turn sheets to fill out. Sheets are presented to the player in a specific order, and processed by the game engine in a different order.
| Sheet | Processing order | Presentation order | Notes |
|---|---|---|---|
| Join game | — | — | Sent when a player first joins; handled separately from regular turn processing |
| Skill Training | 0th (before all others) | 3rd | Issued whenever skill_points_available > 0; processed first so newly learned skills apply to combat this turn |
| Inventory | 1st | 4th | Processed first among action sheets; taking inventory actions forfeits combat that turn |
| Actions | 2nd | 5th | Shown early so players see what they are facing before deciding on items |
| Speech | — (global phase) | 6th | Say / whisper / shout using curated phrase templates; resolved before movement when 2+ characters |
| Location | 3rd | 7th | Movement is processed last so the flee penalty uses the final creature state |
| Turn recap | — | 2nd | Read-only summary of previous turn events |
| Map | — | 1st | Read-only explored locations map |
| Combat | — | — | Reserved — not yet available |
| Puzzle | — | — | Reserved — not yet available |
Turn Sheet Background Images
When uploading a background image for an adventure game, select the sheet type the image should apply to.
| Sheet | Description |
|---|---|
adventure_game_join_game | Join game sheet — required; sent when a player first joins |
adventure_game_location_choice | Location sheet — movement and object interaction |
adventure_game_inventory_management | Inventory sheet |
adventure_game_actions | Actions sheet — attack, use item, or cast spell; always present when at least one action type is available |
adventure_game_speech | Speech sheet — say, whisper, or shout to other characters (multiplayer only) |
adventure_game_combat | _(reserved — not yet available)_ |
adventure_game_puzzle | _(reserved — not yet available)_ |
Player Rules
Character Stats
| Stat | Value | Description |
|---|---|---|
| Starting health | 100 | Health assigned when a character joins a run |
| Respawn health | 50 | Health restored after a character dies |
| Unarmed attack damage | 5 | Crushing damage dealt when no weapon is equipped |
| Maximum health | 100 | Base maximum, before grant_max_health effects; healing cannot exceed the effective maximum |
Core stats (STR / DEX / INT)
Every character and creature has three core stats:
| Stat | Drives |
|---|---|
| Strength (STR) | Weapon/armour equip gates (required_strength), STR-based skill access and effectiveness |
| Dexterity (DEX) | The 3d6 roll-under to-hit target for all attacks; DEX-based skill access |
| Intelligence (INT) | Spell/INT-based skill access and effectiveness |
Allocation at first join: a character distributes exactly 32 points across STR/DEX/INT on the join sheet. Each stat must be between 6 and 16 at creation. Stats may later be raised through progression up to a lifetime ceiling of 20.
Location Sheet
Players choose where to move or interact with an object at their current location. Moving and interacting with an object are mutually exclusive — only one can be submitted per turn.
Speech
When a game instance has more than one alive character, each character receives a Speech sheet (web-submit only in v1). Players compose up to three utterances per turn from platform-curated phrase templates with typed slots filled only from in-game nouns offered on the sheet.
| Mode | Audience | Narrative |
|---|---|---|
| Say | All other visible characters at your location | {name} says: {message} |
| Whisper | One chosen co-located character only (fully silent to bystanders) | {name} whispers: {message} to the target; if the target is no longer co-located at turn-start, the speaker sees They were not here to hear you. |
| Shout | Your location plus adjacent locations with an accessible back-link toward you | Attributed at your location; anonymous and directional elsewhere: Someone shouts: {message} from {link name} |
Speech resolves in a global phase before movement, using turn-start positions so co-location is deterministic. Received speech appears as turn events on the next turn's recap and play-sheet sidebars. Negatable templates offer a distinct negative phrasing per locale (not a mechanical "Do not" prefix). Social exclamations (Hello, Yes, Thanks, Goodbye, and similar) are fixed phrases in the catalog — not a separate greeting word slot. Party phrases (help requests, together/alone coordination) are grouped separately from Social greetings. Coordination questions (Should I go to {location}?, Should I attack the {creature}?, and similar) appear in the same category as their related statements (Movement, Objects, Warnings). Warning phrases include attack coordination (Attack the {creature}! / Do not attack the {creature}!) for telling other players which monster to fight or avoid — distinct from the mechanical attack action on the Actions sheet.
Movement rules:
- The player selects one of the exits shown on their sheet
- Available exits are pre-filtered by link visibility and traversal requirements
- The character moves to the chosen location
- If a traversal description is set on the link, it is shown in the turn narrative
Flee penalty:
- If the character moves away from a location where aggressive creatures or grudge-holding creatures are alive, each such creature makes a free flee attack — provided it still has actions remaining in its turn budget
- Each flee attack rolls 3d6 against the creature's adjusted DEX (it can miss); on a hit, damage = the creature's typed attack packets reduced by the character's typed mitigation
- Indifferent creatures without a grudge do not deal flee damage
Object interaction:
- Players can choose to act on a visible object at their location instead of moving
- Available actions are determined by the object's current state and the effects defined on that state
- If an effect requires a specific item, the player must have that item in their inventory (unused)
- All matching effects for the chosen action fire at the same time
Combat Model
Combat uses a single typed, TFT-style resolver shared by characters and creatures.
To-hit — 3d6 roll-under adjusted DEX. Every attack rolls dice and hits when the total is ≤ the attacker's adjusted DEX.
- Adjusted DEX = base DEX + stat modifiers (temporary buffs/curses and passive armour encumbrance) − status penalties (stunned/dazed/hit-chance penalty) + accuracy bonuses (weapon-mastery II / enchanted gear).
- Dice count: 3d6 by default; +1 die if untrained with the weapon (no matching weapon-mastery skill, except natural/unarmed attacks which are always proficient); +1 die if the target is actively defending. Extra dice stack.
- Critical hit: a natural total of 3 on 3d6 (only possible at 3 dice, so untrained/defended attacks cannot crit). A crit doubles each damage packet before mitigation.
- Automatic miss: the natural maximum (numDice × 6) always misses, regardless of DEX.
Typed damage and mitigation. An attack produces one or more typed damage packets. Each packet is reduced by the defender's flat "hits stopped" mitigation of that damage type:
final = max(0, rolled[×2 if crit] − Σ hits_stopped matching the packet's damage type)
Same-type mitigation stacks additively with no cap. Negative hits-stopped represents vulnerability (extra damage taken). Mitigation comes from worn armour (mitigate_damage), innate creature mitigation, and active mitigation_buff statuses (e.g. Shield/Ward spells).
Damage types:
| Group | Types |
|---|---|
| Physical | piercing, slashing, crushing |
| Elemental | burning, freezing, corrosion, shocking, poisoning |
| Wildcards (mitigation only) | physical, elemental — armour/buffs may stop a whole group; never a damage source |
Equip gate. A weapon or armour piece with a required_strength cannot be equipped or used by an actor whose effective STR is below it.
Encumbrance. Armour DEX penalties are authored as passive stat_modifier effects (negative DEX), folded into adjusted DEX like any other modifier.
Status kinds (timed statuses applied by apply_status / DoT / HoT effects):
| Kind | Effect |
|---|---|
stunned | Locks the location sheet (no move/look/search/inspect/object interaction) and applies a DEX penalty (default 4) |
held | Blocks movement; the actor may still fight, use items, and interact with objects |
dazed | DEX penalty (no movement lock) |
hit_chance_penalty | DEX penalty only |
stat_modifier | Adjusts STR/DEX/INT for its duration |
mitigation_buff | Adds typed flat mitigation for its duration (Shield/Ward) |
damage_over_time | Deals value (min) damage per turn for value (max) turns |
heal_over_time | Heals value (min) HP per turn for value (max) turns |
Actions Sheet
Players submit combat actions for creatures present at their location. This sheet is omitted if no creatures (alive or recently dead) are present.
Players submit up to 3 combat actions per turn. Each action is either do nothing or attack, with a choice of target creature.
Sheet display:
- Alive creatures are always listed
- Dead creatures remain visible for the number of turns set by the creature's body decay turns setting
- If only corpses are present the sheet is read-only
- Up to 3 combat actions are available when the sheet is interactive
- The creature card and player bar show STR/DEX/INT, the to-hit target, the typed attack, and typed mitigation
Combat forfeiture: if the player picks up, drops, equips, or unequips items on their inventory sheet that turn, all combat is skipped and the encounter sheet explains why.
Attack resolution (processed in order per action, using the Combat Model above):
- Hit check: roll 3d6 (+1 die if untrained) against the attacker's adjusted DEX. On a miss, a miss event is emitted; no damage is dealt, no grudge is acquired, and no retaliation occurs.
- Damage: on a hit, each typed weapon packet (doubled on a natural-3 crit) is reduced by the creature's matching typed mitigation; the remainder is dealt. Any
damage_over_time/apply_statuseffects on the weapon are applied to the target. - Grudge: non-aggressive creatures acquire a grudge against the attacker on the first successful hit (see Grudge Aggression below).
- If the creature's health reaches 0: the creature is killed; any items it was carrying drop to the player's current location; all of its grudges are cleared.
- If the creature survives: it retaliates if aggressive or if it holds a grudge against this character.
- Creature hit check: the creature rolls 3d6 against its own adjusted DEX. A miss emits a miss event and consumes 1 action from the creature's budget; no damage is dealt.
- Retaliation damage: the creature's typed attack packets reduced by the character's typed mitigation.
- Each retaliation (hit or miss) consumes 1 action from the creature's 3-action budget for the turn.
> Note: every attack — player actions, creature retaliation, creature initiative, and flee attacks — rolls 3d6 against the attacker's adjusted DEX and can miss.
Character death:
- If character health reaches 0 the character is moved to the starting location
- Health is restored to the respawn health (50)
- All creature grudges targeting the dead character are cleared
- A narrative event is generated
Inventory Sheet
Players manage their carried items — picking up items from the floor, dropping items, equipping and unequipping gear, using consumables, and giving items to other characters at the same location.
Players select items to pick up, drop, equip, unequip, use, or give.
Processing order within a single turn: unequip → drop → give → pick up → equip → use
Key rules:
- No ground items when aggressive creatures are present: if alive aggressive creatures are at the location, ground items are not shown and pickup is not offered
- No give targets when aggressive creatures are present: the give recipient list is also hidden when aggressive creatures are at the location; trading is blocked during combat
- Auto-pickup on equip: if a player equips an item that is on the ground at their current location, it is automatically picked up first
- Give auto-unequips: if a player gives an item that is currently equipped, it is automatically unequipped before transfer
- Co-location required: a give only succeeds if giver and recipient are at the same location when the turn is processed; if the recipient has moved away the give fails with a warning narrative event
- Capacity check: if the recipient's inventory is full the give fails silently with a warning narrative event; the item stays with the giver
- Dead recipients: if the recipient is dead when the turn is processed the give fails with a warning narrative event
- Multiple gives per turn: a player may give different items to different recipients in a single turn; each give action is independent
- No chain gives: a character can only give items they held when the sheet was generated; items received from other players during the same turn processing cannot be re-given that turn
Grudge Aggression
Creatures remember who attacked them and become persistently hostile toward those characters for a limited number of turns.
How grudges work:
- When a character attacks a creature (regardless of disposition), the creature acquires a grudge against that character
- A grudge lasts for 3 turns after the last hit; attacking again refreshes the expiry
- While a grudge is active the creature behaves as aggressive toward that specific character — it retaliates on their encounter sheet and may pursue them across locations
- Grudges are cleared when the creature dies or when the target character dies
- A narrative event is emitted on the encounter sheet when a creature with an active grudge is present
Creature Initiative and Action Budget
Each creature has an action budget of 3 actions per turn. Actions are consumed during encounter processing and post-turn phases.
Action budget usage:
- Retaliation during a creature encounter consumes 1 action
- A flee attack against a fleeing character consumes 1 action
- An initiative attack (see below) consumes 1 action
Initiative attacks happen after all player turn sheets have been processed for the turn:
- Any creature with actions remaining that has alive characters at its location will spend those actions attacking them
- Aggressive creatures attack any character; grudge-holding creatures prioritise the characters they hold grudges against
- Each initiative attack rolls 3d6 against the creature's adjusted DEX (it can miss); on a hit, damage = the creature's typed attack packets reduced by the character's typed mitigation
- If a character's health reaches 0 from an initiative attack they are moved to the starting location, their health is restored to respawn health (50), and all creature grudges against them are cleared
Creature Pursuit and Territorial Range
Grudge-holding creatures with a pursuit_range > 0 will actively follow their highest-damage attacker across location boundaries.
Pursuit rules:
- After all turn sheets are processed, a grudge-holding creature identifies the character that dealt the most damage to it that turn
- If that character has moved to a different location and the creature's
pursuit_rangewould permit reaching them, the creature moves one hop toward them along the shortest path - A creature will never enter the starting location (the safe zone) in pursuit
- Pursuit is limited by
pursuit_range: a creature cannot move to a location more hops away from its home location than its range allows - A creature's home location is the location it was placed at (or spawned at) when the run started
Return-home behaviour:
- After pursuit is resolved, any creature that is away from its home location and has no living targets at its current location moves one hop back toward home
- If a creature is back at its home location and has no targets, it stays put
Respawn:
- When a creature respawns it returns to its home location, its grudge list is cleared, and its action budget is reset
Objectives are designer-authored goals that the engine evaluates each turn. They can be hidden until prerequisites are met, chain together through unlock rewards, grant in-world effects on completion or failure, and end the run when a terminal objective resolves.
Objective Fields
| Field | Description |
|---|---|
| Title | Display name shown to players (when visible) |
| Description | Narrative description of the goal |
| Category | primary, secondary, or optional — for display grouping |
| Scope | Who the objective tracks: game_instance (global), account_user (per player), or character (per character) |
| Visibility | visible — shown immediately when the run starts; hidden_until_unlocked — hidden until an unlock_objective reward is applied |
| Sort order | Display ordering |
| Is repeatable | Whether the objective can reset and be completed again after a reset_after_turns cooldown |
| Reset after turns | For repeatable objectives: turns after completion before the objective resets; null means it resets the following turn |
| Is terminal success | If true, completing this objective ends the run as a success |
| Is terminal failure | If true, failing this objective ends the run as a failure |
| Completion mode | instance — one player completing it satisfies it globally; per_player — each player must complete it individually; contributory — multiple players contribute toward a shared total |
Condition Phases
Each objective has three condition sets. All conditions in a set must be true simultaneously for the phase to trigger.
| Phase | Meaning |
|---|---|
unlock | Conditions that must be met for a hidden objective to become visible and active |
complete | Conditions that mark the objective as completed |
fail | Conditions that mark the objective as failed; checked every turn regardless of phase |
Condition Types
Shared (available for all game types):
| Type | Description |
|---|---|
turn_number_at_least | Current turn number is at or above the given value |
objective_status_is | A named objective has a given status (unlocked, completed, failed) |
game_instance_status_is | The run itself has a given status |
Adventure-specific:
| Type | subject_ref | Description |
|---|---|---|
adventure_item_in_inventory | Item ID | At least one character in the run is carrying this item |
adventure_character_at_location | Location ID | At least one character is currently at this location |
adventure_object_state_is | Object ID | The location object is in the specified state |
adventure_creature_dead_at_location | Creature ID | This creature has no living instances anywhere in the run |
Reward Types
Rewards fire when an objective transitions to a new phase. Multiple rewards can be attached; they fire in sort order. Reward target determines who receives the reward.
Shared (available for all game types):
| Type | Description |
|---|---|
append_turn_event | Append a narrative message to the current turn's event log |
unlock_objective | Transition a hidden objective to active |
complete_game_instance | End the run as a success |
fail_game_instance | End the run as a failure |
advance_clock | Advance a named clock by a specified amount |
Adventure-specific:
| Type | target_ref | Description |
|---|---|---|
adventure_give_item | Item ID | Place the item in the triggering character's inventory |
adventure_open_link | Link ID | Remove all traversal requirements from a location link |
adventure_change_object_state | Object ID | Transition a location object to the specified state |
adventure_summon_creature | Creature ID | Spawn the creature at a specified location |
adventure_heal_character | — | Restore health to all characters in the run |
adventure_damage_character | — | Deal damage to all characters in the run |
Ending a Run
A run ends when any of the following occur:
- An objective with
is_terminal_success = trueis completed - An objective with
is_terminal_failure = trueis failed - A
complete_game_instanceorfail_game_instancereward fires (attached to an objective or a clock threshold) - A clock threshold effect of type
complete_game_instanceorfail_game_instancefires (see Clocks below)
Clocks
Clocks are designer-authored pressure timers that advance automatically each turn and/or when objective rewards fire. When a clock crosses a designer-set threshold, it fires a message and one or more effects. Clocks count up from initial_value toward max_value.
Clock Fields
| Field | Description |
|---|---|
| Title | Display name |
| Description | Narrative description of what the clock represents |
| Icon | Optional emoji or symbol shown in turn event messages |
| Max value | The ceiling the clock counts toward |
| Initial value | Starting value when a run begins |
| Advance per turn | Amount added to the clock each turn automatically; use 0 for clocks that only advance via objective rewards |
| Visibility | visible — players can see the clock; hidden_until_active — hidden until first threshold fires; always_hidden — never shown to players |
| Sort order | Evaluation ordering |
Thresholds
Each clock can have multiple thresholds. When the clock's current value reaches or passes a threshold value for the first time, the threshold fires:
- Its message (if set) is appended to all players' turn event log
- Its effects are applied in sort order
Threshold Effect Types
Shared:
| Effect | Description |
|---|---|
append_turn_event | Append a typed clock turn event; may be global or adventure-location scoped |
advance_clock | Advance another (or the same) clock by a given amount |
fail_objective | Force a named objective to the failed status |
complete_game_instance | End the run as a success |
fail_game_instance | End the run as a failure |
Adventure-specific:
| Effect | target_ref | Description |
|---|---|---|
adventure_change_object_state | Object ID | Transition a location object to the specified state |
adventure_summon_creature | Creature ID | Spawn the creature at a specified location |
adventure_damage_character | — | Deal damage to all characters in the run |
adventure_open_link | Link ID | Remove all traversal requirements from a location link |
adventure_close_link | Link ID | Block a location link _(not yet implemented)_ |
Clock Turn Event Delivery
append_turn_event clock effect narrative is stored in game_clock_threshold_turn_event, not in game_clock_threshold_effect.value_json.
| Field | Delivery behavior |
|---|---|
adventure_game_location_id = NULL | Instance-wide event; every player receives witness_message |
adventure_game_location_id set | Characters at that location receive witness_message |
ambient_hear_hops > 0 | Characters within that many location links receive ambient_message |
ambient_hear_hops = 0 | No ambient delivery |
If ambient_hear_hops > 0, ambient_message is required. If ambient_hear_hops = 0, leave ambient_message empty. This keeps local narrative local: a graveyard event should not appear on the turn sheet of a character deep in the cellar.
Character Progression
Characters earn experience points (XP) through exploration and combat. Accumulated XP drives level-ups, which award skill points that can be spent on new skills.
XP Sources
| Source | How XP is awarded |
|---|---|
| Creature kill | Character who delivers the killing blow receives the creature's xp_value |
| Treasure | First time a character picks up an is_treasure item, they receive the item's xp_value |
Level Table
| Level | XP Required | Skill Points Granted |
|---|---|---|
| 1 | 0 | 2 |
| 2 | 100 | 1 |
| 3 | 250 | 1 |
| 4 | 450 | 1 |
| 5 | 700 | 1 |
| 6 | 1 000 | 1 |
| 7 | 1 400 | 1 |
| 8 | 1 900 | 1 |
| 9 | 2 500 | 1 |
| 10 | 3 200 | 1 |
Characters start at level 1 with 2 skill points already available.
Level-up events are announced on the turn recap sheet. Only one level can be gained per turn.
Skill Training Sheet
When a character has skill_points_available > 0 at the start of a turn, a Skill Training turn sheet is issued. The player checks one or more skills they wish to learn. Each skill costs its skill tier in points (a tier-1 skill costs 1 point, a tier-2 skill costs 2, and so on); skill tier is the sole authority for skill cost.
- The sheet lists only skills that are available in the game (enabled by the designer) and that the character does not already know.
- Prerequisite chains are validated at submission time.
- Unspent skill points carry over to future turns.
Skills Reference
The following skills are implemented in the first deliverable. All skills are defined by the platform and are read-only for designers; designers choose which subset to enable per game.
Physical Skills
| Skill | Type | Effect |
|---|---|---|
| Climb | Traversal | Character can traverse location links with condition character_has_skill pointing to this skill |
| Swim | Traversal | Character can traverse location links with condition character_has_skill pointing to this skill |
Mental Skills
_(No skills in the first deliverable.)_
Passive Defense
| Skill | Tier | Type | Effect |
|---|---|---|---|
| Dodge I | 2 | Passive Defense | DEX-gated defensive training (the active-defence die bonus is a deferred feature) |
Spells (Spiritual / Arcane)
Spells are skills with skill_type = spell; they appear as an action on the Actions sheet when known, off cooldown, and affordable. Magnitudes scale gently with the caster's primary stat.
| Skill | Tier | Primary | Effect |
|---|---|---|---|
| Heal I / II | 1 / 2 | INT | Restore health to self or an ally |
| Shield I / II | 1 / 2 | STR | mitigation_buff: stop physical hits for a few turns |
| Ward I / II | 1 / 2 | INT | mitigation_buff: stop elemental hits for a few turns |
| Flame Touch I / Frost Bolt I / Lightning Arc I | 1 | INT | Deal burning / freezing / shocking damage to a creature |
| Acid Splash I / Venom Dart I | 1 | INT | Deal corrosion / poisoning damage plus a damage_over_time |
| Stun I / II | 1 / 2 | INT | Apply stunned to a creature |
| Hold I / II | 1 / 2 | INT | Apply held to a creature |
| Dispel I | 2 | INT | Remove an active debuff from self or an ally |
Weapon / Armor Mastery
| Skill | Type | Applies to | Effect |
|---|---|---|---|
| Weapon Mastery (e.g. Sword Mastery I) | Weapon Mastery | weapon_type | Grants proficiency with that weapon type — attacks roll 3d6 instead of the untrained 4d6 |
| Armor Mastery (e.g. Medium Armor Mastery I) | Armor Mastery | armor_type | Training in that armour class (numeric mitigation/encumbrance bonus is a deferred feature) |
> Mastery skills match a weapon/armour item by its exact weapon_type / armor_type string; the proficiency die bonus is the live mechanical effect under the typed combat model.
Item Types
Assigning a type to an item enables skill mastery bonuses to apply.
| Field | Values | Purpose |
|---|---|---|
weapon_type | sword, axe, club, dagger, spear, bow, staff, unarmed | Identifies the weapon category for mastery skills and proficiency. The blunt family is unified under club (the legacy mace/hammer types were retired). |
armor_type | light, medium, heavy, shield, cloth | Identifies the armor category for mastery skills |
consumable_type | potion, food, scroll, key, tool | Identifies the consumable category (reserved for future skill gating) |
is_treasure | boolean | Marks the item as a reward; awards XP on first pickup |
xp_value | integer | XP awarded when the item is picked up as treasure |
Creature Properties
Assigning properties to a creature enables skills that target specific creature types.
| Property | Description |
|---|---|
| undead | Animated corpses, spectres, and similar |
| beast | Natural animals and vermin |
| dragon | Dragon-kin |
| elemental | Elemental spirits |
| demon | Fiends and demonic entities |
| fey | Fey and magical beings |
| humanoid | Humans, goblins, bandits, etc. |
| giant | Giants and ogres |
| construct | Golems and mechanical creatures |
| plant | Animated plant-life |
| aberration | Alien and unknowable entities |
Creatures may have multiple properties.
Link Requirement: character\_has\_skill
A location link can require that a character knows a specific skill in order to traverse (or even see) the link.
| Field | Value |
|---|---|
condition | character_has_skill |
adventure_skill_id | The platform skill the character must know |
purpose | traverse (most common) or visible |
quantity | Always 1 (ignored for skill checks) |
> Example: A crumbled staircase link requires the Climb skill. Characters without Climb cannot attempt the link; it is filtered from their Location sheet.
Spell Casting
Spells are skills with skill_type = spell. They appear as an additional action on the Actions sheet when the character knows at least one combat spell and has sufficient HP to pay the cost.
| Field | Description |
|---|---|
hp_cost | HP deducted from the caster when the spell is cast |
effect_value_min/max | Magnitude of the spell's primary effect |
duration_turns | How many turns the effect persists (0 = instant) |
cooldown_turns | Minimum turns before the spell can be cast again (0 = no cooldown) |
Heal (the first deliverable spell):
- Restores 20 HP to the caster (capped at max HP)
- Costs 5 HP
- Instant (no duration)
- No cooldown — can be cast multiple times per turn within the 3-action budget
- Context: combat
Deferred Features
The following progression features are documented in todos/adventure_game_progression_system.md and will be delivered incrementally:
- Active-defence die bonus — wiring a Parry/Dodge action that forces an attacker to roll +1 die (the resolver supports
TargetDefending; no action currently sets it) - Passive-defence and armor-mastery numeric bonuses — Dodge and Armor Mastery currently act as gates/flavour; their typed mitigation contribution is pending
- AoE and multi-target spells
- Category investment bonus (+2% per skill in a category)
- Consumable type gating (Literacy, Herbalism, Alchemy, Traps)
- Knowledge skills (Appraise)
- Objective
award_xpreward type