Outils pour utilisateurs

Outils du site


en:yaml:modeles

Ceci est une ancienne révision du document !


Language / Langue : FR | EN

Models (YAML)

A model contains reusable rooms. Each instance binds its variable and exit names to those of the scenario.

Example: a healing room

This scenario opens the model, lets the player heal, then returns to the calling room's choices.

title: Infirmary
vars:
  hp: 10
models:
  healing:
    variables:
      health: 0
    rooms:
      - id: sheet
        text: 'Health: v_health_v'
        auto_refresh: true
        actions:
          - verb: heal
            target: all
            button: Heal
            do: health + 5
        choices:
          - button: Leave
            to: end_model
rooms:
  - id: start
    text: You enter the infirmary.
    models:
      - model: healing
        variables:
          health: hp
    choices:
      - button: Finish
        to: victory

The models: definitions are keyed by name, here healing. The start room contains a list of instances: model: healing selects the definition and health: hp binds its generic variable to hp, declared in the scenario.

Internal rooms receive a prefix to avoid ID collisions. end_model resumes after the model: here, the Finish choice becomes available. A generic exit declared in exits: can also be bound to a scenario room in the instance.

Bound lists and collections (4.17)

A model can declare generic lists and collections. Bind them to scenario data in the instance, without copying:

lists:
  products: world.shop.bag
collections:
  hero: world.state

Targets must exist. Paths cross collections only, without list indices. Required properties are checked when a parent is replaced or a saved game is resumed.

See Lists and collections, Tags and Events.

Adding a model to the current room: inline

Set inline: true in the model definition. The model must contain exactly one internal room. Its initialisations, objects, actions, events, choices, shortcuts and HUD panels are added to the calling room, without entering a virtual room. The calling room keeps its ID and text; the internal room's text is not added.

title: A model in the workshop
collections:
  player: {}
models:
  inline_healing:
    inline: true
    collections:
      hero: {health: 0}
    defaults:
      hero: {health: 100}
    rooms:
      - id: content
        hud:
          position: top-right
          scope: room
          text: 'Health: v_hero.health_v'
        actions:
          - verb: heal
            target: all
            button: Heal
            do: hero.health + 1
rooms:
  - id: workshop
    text: You are in the workshop.
    models:
      - model: inline_healing
        collections: {hero: player}
    choices:
      - {command: leave, to: corridor}
  - id: corridor
    text: The corridor.
    choices:
      - {command: return, to: workshop}

Heal acts in the workshop and Leave remains available. Returning preserves player.health. The model's init: entries run on each entry, just like the room's own initialisations, so they can explicitly reset values.

exits: and their instance bindings remain available. For an inline model, end_model refers to the calling room. Simple fields supplied by the model can replace room fields: check display settings in particular. Avoid competing commands and HUD positions; the linter reports a model panel replacing a room panel.

inline controls model integration. scope: room separately controls a panel's lifetime. Without an explicit scope, panels remain persistent, including those from inline models. See HUD panels. French syntax: sur_place: true and portee: salle.

Collection defaults

The example's defaults: block fills only missing properties in bound collections, before validation. Values already supplied by the scenario are preserved, including in nested collections. The target collection must exist: player: {} is sufficient here. Defaults apply to generic collections declared by the model; they do not replace room initialisations.

The editor exposes inline insertion and defaults for each generic collection in the model definition. The French key is defauts:.

The supplied library includes grille_2d, an inline model binding map and player collections. Its demos cover movement, collisions, furniture, doors and optional combat. It uses ordinary room objects and choices, with a panel explicitly scoped to the room. Copy the model and follow its definition comments to prepare the map and bindings.

en/yaml/modeles.1792527075.txt.gz · Dernière modification : de cyrilfiesta