Language / Langue : FR | EN
Declarations in objects: define items and their initial locations in the room. They use the native bot commands: take, inspect and drop.
Important: YAML objects do not support if: or visible-if: directly. To make an object conditional, use another room, an event, a choice, a tag, or an object with remove: true.
- id: library text: | A cluttered table stands in the room. An old chest rests against the wall. objects: - name: grimoire location: table furniture_description: "An old wooden table. A dusty grimoire lies on it." description: "An old grimoire with yellowed pages." pickup_text: "You take the grimoire from the table." furniture_reaction: "Examine the table" pickup_reaction: "Take the grimoire" object_reaction: "Examine the grimoire" - name: key location: invisible description: "A small silver key." pickup_text: "You pick up the key." - name: old_potion remove: true location: invisible remove_text: "The old potion disappears from your bag."
| Field | Effect |
|---|---|
name: | Object identifier. Optional for empty furniture, required for an item or removal. |
display_name: | Player-facing name, without changing the identifier. |
empty-furniture: true | Scenery accessible only through its furniture. |
location: | Furniture or place where the object is located. Default: invisible. |
description: | Text shown when the player examines the object. |
furniture_description: | Text shown when the player examines the furniture/location. If missing, the engine falls back to description:. |
pickup_text: | Text shown when the object is taken. |
absent: true | Declares an initially empty slot that can be activated. |
remove: true | Removes this object when entering the room, equivalent to the legacy -name prefix. |
remove_text: | Text used on removal when remove: true. |
furniture_reaction: | Button shown to examine the furniture. |
pickup_reaction: | Button shown to take the object. |
object_reaction: | Button shown to examine the object. |
inventory-limit: | How many copies the player may hold. Without a retained limit: one copy. 0: unlimited. |
inventory-limit-message: | Optional text shown when the limit is reached. |
throw-missing-message: | Optional text shown when the player throws an object they do not carry. |
location: defines visible furniture. With location: chest, the player can examine chest. furniture_description: describes the chest, while description: describes the object itself.
location: invisible means the object exists in the room but is not directly listed as a visible object to take. This is useful for internal states or event-managed objects.
Declaring the same name: several times now means several real copies, including across different furniture or rooms. Taking one no longer hides the others, and each keeps its own description in the scenery.
objects: - name: coin location: chest description: "A worn silver coin." - name: coin location: purse description: "A coin still warm from someone's hand."
The inventory groups them as coin x 2. Throwing, using or removing an object only consumes one unit, and the historical object / -object conditions keep their meaning.
inventory-limit: sets the maximum. Without a limit retained from a previous declaration, the player holds one copy. 0 means unlimited.
objects: - name: torch location: wall inventory-limit: 3 inventory-limit-message: "You already carry three torches."
Going over the limit is a normal narrative answer, not an error: the engine states how many copies are already held and what the limit is, then leaves the commands available. The two optional messages accept the usual text processing, including v_variable_v and t_variable_t.
In if: fields, test objects by name:
if: "key" # player owns key
Or:
if: "-key" # player does not own key
A structured condition compares the number of copies held.
events: - if: object: coin quantity: 3 operator: ">=" text: "You have enough coins to pay the ferryman."
The editor offers this setting in its condition builder.
Recommended form:
events: - if: ~ do: - object: rusty_key to: inventory description: "An old rusty key." - object: fake_key to: inventory remove: true text: "Your keyring changes."
The legacy action-string form is still accepted:
do: - "rusty_key&&inventory&&An old rusty key." - "-fake_key&&inventory&&null"
description: and furniture_description: accept the same media syntax as narrative text: images [[url]], sounds <<url>> and videos ((url)).
objects: - name: map location: table description: "A map of the kingdom.\n[[https://example.com/images/map.png]]" pickup_text: "You take the map."
Clicking an object in the inventory automatically runs inspect <object>.
name: remains the stable identifier used by conditions, effects and saves. display_name: supplies a readable player-facing name:
objects: - name: workshop_key display_name: workshop key location: table description: A small iron key.
The player can type take workshop key, examine workshop key, or use workshop_key. Display-name matching ignores case, accents and repeated spaces. Commands, aliases, identifiers and explicit action targets keep priority; furniture and variables can still be examined even if an object shares their display name.
The inventory numbers distinct objects sharing a display name, for example drink 1 and drink 2; these labels can be typed. Copies of the same identifier remain grouped. Always use identifiers in conditions and effects. t_action_target_t also contains the resolved identifier.
In the editor, Display name expands on demand and stays open when populated. French syntax: nom_affiche:.
In an interaction's do: block:
do: - display_name: workshop_key value: identified workshop key
The effect changes the display name without changing the identifier or quantities. Saves retain it. Setting value: “” restores the identifier workshop_key, even if the original declaration supplied another display name. This effect is not allowed inside loop bodies. In the editor, use Rename an item, with the object and its new display name. French syntax: nom_affiche and valeur.
empty-furniture: true describes furniture without an item to take. Players can inspect the furniture, but cannot take or inspect this scenery as an item. Its name: is optional: the engine then creates an internal identity. Use furniture_description: and, if needed, furniture_reaction:. Pickup, item inspection, display name and inventory limit fields provide no item interaction for this scenery.
objects: - name: workshop_key display_name: workshop key location: table furniture_description: A key rests on the table. description: A small iron key. - name: empty_table empty-furniture: true location: table furniture_description: The table is empty. - name: statue_scenery empty-furniture: true location: statue furniture_description: An old stone statue. furniture_reaction: Examine the statue
Place an empty-furniture entry after the ordinary objects on that furniture. The first object still present supplies its description; after taking the key, examine table shows “The table is empty.” The statue illustrates permanent scenery.
location: invisible keeps the historical uses of a hidden item; it is not empty furniture. With remove: true, removal takes priority: an item name is required and the linter warns that empty-furniture is ignored. The editor preserves hidden field values and lets you correct contradictory settings. The linter rejects the secret key on objects; secret achievements keep their own setting. French syntax: meuble-vide: true, endroit, desc_meuble and reaction_meuble.
Taking an item deactivates one declared instance in its furniture. put and place return it to an available declaration of the same item. These forms are equivalent: put piece in coffre, place piece on coffre and put piece coffre. Without furniture, put piece finds an available slot. A custom action with the same name takes priority. A refused deposit removes nothing from the inventory.
Different items can share furniture. Inspecting furniture uses the first declaration with an item still present. Items are taken in declaration order; deposits fill free slots in reverse order.
title: 'Wiki 4.17: stacks' vars: capacite: 2 rooms: - id: atelier text: A chest and a table. objects: - name: piece location: coffre description: First coin. inventory_limit: v_capacite_v - name: piece location: coffre description: Second coin. - name: cle location: coffre description: A key. - empty-furniture: true location: coffre furniture_description: The chest is empty. choices: - command: rester button: Stay to: atelier
Here, piece can be taken twice. After putting one back in coffre, the second declaration becomes present first. inspect_from coffre inspects the first item currently in that furniture; take_from coffre takes it. These commands target the slot, even if the same identifier exists elsewhere. French: examiner_objet_dans coffre and prendre_dans coffre.
absent: true reserves an initially empty slot. It can be filled after taking, transferring or activating an item.
title: 'Wiki 4.17: activation' rooms: - id: atelier text: A table, a chest and a box. objects: - name: cle location: table - name: cle location: coffre absent: true - name: bille location: boite absent: true actions: - verb: ranger target: all button: Store the key do: object: cle to: coffre - verb: apparition target: all button: Reveal the marble do: object: bille activate: boite choices: - command: rester button: Stay to: atelier
After take cle, {object: cle, to: coffre} transfers one carried unit into the chest. {object: bille, activate: boite} activates an absent declaration without consuming inventory. A room: field can target another room. Test presence with if: {object: bille, in: boite, quantity: 1, operator: “>=”}.
The first active declaration specifying a limit is used in the current room. If none specifies it, the last encountered limit is retained; otherwise the default is 1. A reference such as v_capacite_v is read again when adding an item. 0 means unlimited. Lowering the limit does not remove already carried units.