**Language / Langue :** [[fr:yaml:syntaxe-base|FR]] | **EN**
====== YAML Syntax — Base ======
The YAML format is the modern JDR-Bot scenario format. It is easier to read, easier to edit, and more powerful than the legacy .txt format.
===== File Structure =====
title: "My scenario"
description: "A short adventure made with JDR-Bot."
markdown: story
font: serif
vars:
hp:
value: 10
description: "Health points"
rooms:
- id: start
text: |
You wake up in a dark forest.
A light glows in the distance.
choices:
- command: forward
button: "Move toward the light"
to: clearing
- command: wait
button: "Stay where you are"
to: bad_end
- id: clearing
text: "You reach a moonlit clearing."
events:
- if: ~
end: victory
text: "You found the way out!"
===== Root Keys =====
^ Key ^ Description ^ Required ^
| ''title:'' | Scenario title. | yes |
| ''description:'' | Description shown in the scenario catalogue and standalone export. | no |
| ''markdown:'' | Global text rendering: ''none'', ''fix'', ''bold'', ''italic'', ''quote'', ''story'', or a code-block language. | no |
| ''size:'' | Default text size in pixels. | no |
| ''font:'' | Default font: ''serif'', ''monospace'', ''cursive'', ''Georgia'', etc. | no |
| ''background:'' | Default text-block background on web/desktop. | no |
| ''text-color:'' | Default text color on web/desktop. | no |
| ''vars:'' | Global numeric variables. | no |
| ''text_vars:'' | Global text variables. | no |
| ''online_vars:'' | Persistent variables shared across playthroughs. | no |
| ''options:'' | Permanent toolbar buttons. | no |
| ''global_aliases:'' | Reusable button labels. | no |
| ''tags:'' | Reusable behavior groups. | no |
| ''models:'' | Reusable room models. | no |
| ''global_events:'' | Events available in every room. | no |
| ''global_actions:'' | Custom actions available everywhere. | no |
| ''global_timers:'' | Timers that survive room changes. | no |
| ''global_events_order:'' | Global event order: ''before'' or ''after''. | no |
| ''rooms:'' | Scenario rooms. | yes |
===== Room Structure =====
- id: room_id
num: 3 # optional explicit number; must stay increasing in YAML order
button: "Home" # label inherited by choices pointing to this room
text: "..."
background: "#111827"
text-color: "#f5f0d8"
init:
- var: die
value: "%=1:6"
objects:
- name: key
location: table
description: "An old rusty key."
pickup_text: "You take the key."
events:
- if: "v_hp_v <= 0"
to: game_over
text: "You collapse."
choices:
- command: go
button: "Go there"
to: destination
if: ~
actions:
- verb: inspect
target: chest
if: ~
text_ok: "An old locked chest."
hud:
position: top
text: "HP: v_hp_v"
===== Room Numbers =====
By default, rooms are numbered in YAML order. ''num:'' can preserve historical room numbers, but explicit numbers must be strictly increasing in the exported document. In the editor, reordering rooms in the left list changes that export order.
===== Endings =====
events:
- if: ~
end: victory
text: "Winning ending."
- if: ~
end: defeat
text: "Losing ending."
===== Important Rules =====
* Room IDs must be unique.
* Variables used in conditions should be declared in ''vars:'', ''text_vars:'', ''online_vars:'' or ''init:''.
* ''~'' means always true.
* Events run in order; the first event that redirects with ''to:'' stops the following ones.
* Object conditions use ''key'' or ''-key'', not ''o_key_o''.
===== See Also =====
* [[en:yaml:texte|Text and formatting]]
* [[en:yaml:variables|Variables]]
* [[en:yaml:evenements|Events]]
* [[en:yaml:choix|Choices and buttons]]
* [[en:yaml:objets|Objects]]