quest'n'click 4.5.0 · r1

Construite pour quest'n'click 4.5.0, révision r1. Si elle est publiée, et laquelle est la courante, est dit par publication.json.

Conditions

English · Type : référence · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 4.3.0

Une condition est une donnée : une chaîne pour un drapeau, un objet pour le reste, imbriqués avec not, all et any. Les règles (if), les commandes if, les sorties, les sujets, les indices (until), visible, les scripts (while, waitUntil), les écouteurs, les nouvelles de la carte, les objectifs et les buts des points de reprise en prennent tous une. La forme exacte de chaque condition est aussi dans la référence du DSL, générée.

Les conditions

ConditionVraie quand…
'tied' / '!tied'le drapeau est vrai (toute valeur sauf false, 0, '') / le drapeau est faux ou absent.
{ has: 'rope' }l'objet est dans l'inventaire (un objet grisé used compte toujours).
{ flag: 'tries', eq: 3 }le drapeau vaut exactement cette valeur (un nombre, une chaîne ou un booléen).
{ flag: 'tries', gte: 2 }le drapeau est un nombre, 2 ou plus. Un drapeau absent donne faux.
{ flag: 'x', lt: 5 }le drapeau est sous 5, ou n'est pas un nombre (un drapeau absent donne vrai).
{ not: … }, { all: [ … ] }, { any: [ … ] }non, et, ou.
{ visited: 'market' }le joueur est déjà entré au marché.
{ room: 'market' }le joueur est au marché en ce moment.
{ prop: ['lamp', 'on'] }, { prop: ['house.lamp', 'on'] }l'accessoire est dans cet état (dans la salle courante, ou 'salle.accessoire'). Un accessoire jamais changé est dans son état initial, sinon le premier.
{ unlocked: 'market' }le lieu est débloqué sur la carte.
{ seen: 'topic.ask.basket' }ce sujet de conversation a déjà été entendu (voir plus bas).
{ actorIn: ['grandpa', 'house'] }le personnage mobile est dans cette salle (faire bouger les personnages).
{ player: 'laverne' }ce personnage est celui que le joueur contrôle maintenant (héros).

Le code est src/engine/core/cond.ts. L'explication de règle du Studio montre quelle partie d'une condition échoue, et pourquoi (explication de règle).

{
  "room": {
    "id": "market",
    "name": "Le marché",
    "decor": "decor/market",
    "actors": { "seller": { "char": "seller" } },
    "props": { "stall": { "name": "étal", "states": { "closed": "market/stall_closed", "open": "market/stall_open" } } },
    "look": { "seller": "La marchande.", "stall": "Un étal de fleurs." },
    "on": [
      { "id": "market.haggle-done", "verb": "talk", "a": "seller", "if": { "flag": "tries", "gte": 3 },
        "do": [{ "say": ["seller", "Bon. Deux pièces. Prends-les et file."] }, { "set": "deal" }] },
      { "id": "market.haggle", "verb": "talk", "a": "seller",
        "if": { "all": [{ "prop": ["stall", "open"] }, { "not": "deal" }, { "any": [{ "has": "coin" }, { "visited": "market" }] }] },
        "do": [{ "inc": "tries" }, { "say": ["seller", "Trop bas !"] }] }
    ],
    "onEnter": [{ "if": { "flag": "tries", "eq": 2 }, "then": ["Encore un essai. Je le sens."], "else": [] }],
    "hints": [{ "id": "market.hint", "until": "deal", "lines": ["Marchande. Encore."] }]
  },
  "layout": {
    "walk": { "area": [[20, 300], [620, 300], [630, 395], [10, 395]] },
    "entries": { "default": [320, 360] },
    "props": { "stall": { "x": 200, "y": 340, "h": 120 } },
    "actors": { "seller": { "x": 420, "y": 350 } }
  },
  "items": { "coin": { "name": "pièce", "icon": "items/coin" } },
  "characters": { "seller": { "name": "Marchande", "color": "#ffb36b", "sprites": { "idle": ["seller/idle"] } } }
}

seen : ce qui a été entendu

{ seen: clé } lit ce que la sauvegarde retient de ce qui n'arrive qu'une fois : un sujet entendu, un écouteur once déclenché, une option once choisie. Dans un jeu en schéma 3, les clés sont faites des ids stables (src/engine/core/keys.ts) :

ChoseClé en schéma 3Clé sans ids (schéma 2)
Un sujet de conversationtopic.<id du sujet><salle>.<acteur>.<index> (par exemple house.grandma.0)
Un écouteur onceevent.<id de l'écouteur>event.<salle ou game>.<index>
Une option once d'un choicechoice.<id de l'option>choice.<salle>.<texte>

Limite · seen-key-v3 Dans un jeu en schéma 3, { seen: 'house.grandma.0' } (la forme par position que montraient d'anciennes pages) n'est jamais vraie : un sujet qui a un id est noté topic.<id>. Le validateur ne vérifie pas les clés de seen : une clé fausse est fausse en silence.

Les drapeaux dans les conditions

Un drapeau contient un booléen, un nombre ou une chaîne (lequel choisir). 'nom' teste s'il est vrai, { flag, eq } une valeur exacte, { flag, gte } et { flag, lt } un nombre. Pour les objectifs et les buts, préférez une condition qui reste vraie une fois vraie (un drapeau posé une fois, un objet gardé) : le journal ne reprend jamais un objectif accompli (chapitres et objectifs).

npm run validate signale un drapeau qu'une condition lit et que rien ne pose, et un drapeau posé que rien ne lit ; npm run lint signale une condition qui ne peut jamais être vraie (cond-never-true).


Modifier la source de cette page · Signaler une erreur