Outils pour utilisateurs

Outils du site


fr:yaml:modeles

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:yaml:modeles [2026/08/31 21:10] – Wiki : fins de pages homogènes, liens Discord retirés cyrilfiestafr:yaml:modeles [2026/10/20 22:24] (Version actuelle) – Modèles sur_place, portée des encadrés et objets 4.17 cyrilfiesta
Ligne 1: Ligne 1:
 **Language / Langue :** **FR** | [[en:yaml:modeles|EN]] **Language / Langue :** **FR** | [[en:yaml:modeles|EN]]
  
-====== Syntaxe YAML - Modèles ======+====== Modèles (YAML) ======
  
-Les modèles sont des groupes de salles réutilisables - idéal pour les combats, les mini-énigmes, les phases répétitives.+Un modèle contient des salles réutilisables. Chaque instance associe ses noms de variables et de sorties à ceux du scénario.
  
-===== Déclarer un modèle =====+===== Exemple : une salle de soins ===== 
 + 
 +Ce scénario ouvre le modèle, permet de se soigner, puis revient aux choix de la salle appelante.
  
 <code yaml> <code yaml>
 +titre: Infirmerie
 +vars:
 +  pv: 10
 modeles: modeles:
-  - nom: combat_simple+  soins: 
 +    variables: 
 +      vie: 0
     salles:     salles:
-      - id: attaque +      - id: fiche 
-        texte: "Vous attaquez l'ennemi !" +        texte: 'Points de vie : v_vie_v' 
-        init: +        auto_refresh: true 
-          - var: degats +        actions: 
-            valeur: "%=1:6" +          - verbe: soigner 
-        evenements: +            cible: all 
-          - si: "~" +            bouton: Soigner 
-            faire: "pv_ennemi.-.v_degats_v" +            faire: vie + 5 
-            texte: "Vous infligez v_degats_v dégâts !" +        choix: 
-            vers: tour_ennemi+          - bouton: Sortir 
 +            vers: fin_modele 
 +salles: 
 +  - id: depart 
 +    texte: Tu entres dans l'infirmerie. 
 +    modeles: 
 +      - modele: soins 
 +        variables: 
 +          vie: pv 
 +    choix: 
 +      - bouton: Terminer 
 +        vers: conclusion 
 +  - id: conclusion 
 +    evenements: 
 +      - fin: victoire 
 +</code>
  
-      - id: tour_ennemi +Les définitions de ''modeles:'' sont rangées par nom, ici ''soins''. La salle ''depart'' contient une liste d'instances : ''modele: soins'' choisit la définition et ''vie: pv'' relie la variable générique à ''pv'', déclarée dans le scénario.
-        texte: "L'ennemi riposte !" +
-        init: +
-          - var: degats_ennemi +
-            valeur: "%=1:4" +
-        evenements: +
-          - si: "v_pv_ennemi_v <= 0" +
-            vers: victoire +
-          - si: "v_pv_v <= 0" +
-            vers: defaite +
-          - si: "~" +
-            faire: "pv.-.v_degats_ennemi_v" +
-            vers: attaque+
  
-      - id: victoire +Les salles internes reçoivent un préfixe pour éviter les collisions d'ID. ''fin_modele'' reprend après le modèle : ici, le choix Terminer devient disponible. Une sortie générique déclarée dans ''sorties:'' peut aussi être associée à une salle du scénario dans l'instance.
-        texte: "Victoire !" +
-        evenements: +
-          - si: "~" +
-            vers: fin_modele+
  
-      - id: defaite +===== Listes et collections associées (4.17) ===== 
-        texte: "Défaite..." + 
-        evenements: +Le modèle peut déclarer des listes et collections génériques. Dans l'instance, les associer aux données du scénario, sans copie : 
-          - si: "~" + 
-            vers: fin_modele+<code yaml> 
 +listes: 
 +  produits: monde.marchand.sac 
 +collections: 
 +  heros: monde.etat
 </code> </code>
  
-===== Instancier un modèle =====+Les cibles doivent exister. Le chemin traverse uniquement des collections, sans indice de liste. Les propriétés requises restent contrôlées si un parent est remplacé ou après une reprise de sauvegarde. 
 + 
 +Voir [[fr:yaml:listes-boucles|Listes et collections]], [[fr:yaml:tags|Tags]] et [[fr:yaml:evenements|Événements]]. 
 + 
 +===== Ajouter un modèle dans la salle : sur_place ===== 
 + 
 +''sur_place: true'' se place dans la définition du modèle. Il doit contenir exactement une salle interne. Ses initialisations, objets, actions, événements, choix, raccourcis et encadrés sont ajoutés à la salle appelante, sans détour par une salle virtuelle. Le texte et l'identifiant de la salle appelante sont conservés ; le texte de la salle interne n'est pas ajouté.
  
 <code yaml> <code yaml>
-- id: rencontre_gobelin +titre: Un modèle dans l'atelier 
-  texte: "Un gobelin surgit !" +collections: 
-  modeles: +  joueur: {} 
-    - nom: combat_simple +modeles: 
-      vars: +  soins_sur_place: 
-        pv_ennemi: 8 +    sur_place: true 
-        nom_ennemi: "Gobelin" +    collections: 
-      sorties: +      heros: {vie: 0} 
-        victoire: apres_combat +    defauts: 
-        defaite: game_over+      heros: {vie: 100} 
 +    salles: 
 +      - id: contenu 
 +        encadre: 
 +          position: haut-droite 
 +          portee: salle 
 +          texte: 'Vie : v_heros.vie_v' 
 +        actions: 
 +          - verbe: soigner 
 +            cible: all 
 +            bouton: Soigner 
 +            faire: heros.vie + 1 
 +salles: 
 +  - id: atelier 
 +    texte: Vous êtes dans l'atelier. 
 +    modeles: 
 +      - modele: soins_sur_place 
 +        collections: {heros: joueur} 
 +    choix: 
 +      - {commande: sortir, vers: couloir} 
 +  - id: couloir 
 +    texte: Le couloir. 
 +    choix: 
 +      - {commande: revenir, vers: atelier}
 </code> </code>
  
-Les salles internes sont automatiquement préfixées pour éviter les collisions.+Ici, Soigner agit dans l'atelier et Sortir reste disponible. En revenant, la valeur de ''joueur.vie'' est conservée. Les ''init:'' du modèle sont exécutés à chaque entrée comme ceux de la salle : ils peuvent donc réinitialiser explicitement des valeurs. 
 + 
 +Les ''sorties:'' et leurs associations dans l'instance restent utilisables. ''fin_modele'' désigne la salle appelante pour un modèle sur place. Les champs simples fournis par le modèle peuvent remplacer ceux de la salle : vérifier notamment les réglages d'affichage. Éviter aussi les commandes et positions d'encadrés concurrentes ; le linter signale un encadré de modèle qui remplace celui de la salle. 
 + 
 +''sur_place'' règle l'intégration du modèle. ''portee: salle'' règle séparément la durée de vie d'un encadré. **Sans portée explicite, un encadré reste persistant, même dans un modèle sur place.** Voir [[fr:yaml:hud|Encadrés HUD]]. En anglais : ''inline: true'' et ''scope: room''. 
 + 
 +===== Valeurs par défaut des collections =====
  
-''fin_modele'' est le mot-clé réservé pour reprendre après le modèle.+Le bloc ''defauts:'' de l'exemple complète uniquement les propriétés absentes des collections associées, avant leur validation. Une valeur déjà fournie par le scénario reste conservée, y compris dans les collections imbriquées. La collection cible doit exister : ''joueur: {}'' suffit ici. Les valeurs par défaut s'appliquent aux collections génériques déclarées par le modèle ; elles ne remplacent pas une initialisation de salle.
  
-===== Voir aussi =====+Dans l'éditeur, la définition du modèle propose l'insertion dans la salle appelante et les valeurs par défaut de chaque collection. En anglais, le bloc s'appelle ''defaults:''.
  
-  * [[fr:yaml:tags|Tags]] +La bibliothèque fournie comprend ''grille_2d'', un modèle sur place associant une carte et un joueur à des collections. Ses démonstrations montrent déplacements, collisions, meubles, portes et combat facultatif. Il utilise les objets et choix ordinaires de la salle, ainsi qu'un encadré explicitement limité à cette salle. Copier le modèle et suivre les commentaires de sa définition pour préparer la carte et les associations.
-  * [[fr:yaml:evenements|Événements]]+
  
fr/yaml/modeles.1788203428.txt.gz · Dernière modification : de cyrilfiesta