Chaque élément de votre jeu appartient à un type (on dit aussi une classe) : un lieu, un objet, un animal, un contenant… Le type détermine le comportement par défaut de l’élément (un contenant peut s’ouvrir, un support reçoit des objets sur lui, un animal est vivant, etc.).
Le moteur fournit une hiérarchie de types. Les plus spécifiques héritent des plus généraux : un animal est aussi un objet, donc tout ce qui vaut pour un objet vaut pour un animal.
| Type | Hérite de | Rôle |
|---|---|---|
lieu | — | un endroit où l’on se déplace |
objet | — | toute chose manipulable ou décrite |
vivant | objet | base des êtres vivants |
animal | vivant | une créature |
personne | vivant | un personnage (PNJ) |
contenant | objet | contient des objets dans lui |
support | objet | reçoit des objets sur lui |
porte | objet | sépare deux lieux, s’ouvre / se ferme |
obstacle | objet | bloque un passage |
fond | objet | un décor présent dans plusieurs lieux (voir Fonds) |
La cuisine est un lieu. Le couteau est un objet dans la cuisine. Le chat est un animal dans la cuisine. Le placard est un contenant dans la cuisine.
Vous pouvez définir un type personnalisé qui hérite d’un type existant, avec la formule Un X est un <type>. Tous les éléments de ce type partagent alors le comportement du type parent — et tout ce que vous déclarez sur le type devient le défaut de ses instances.
Un familier est un animal. Un familier est affamé. -- défaut : tout familier est affamé…
Un familier est un animal. → un familier est aussi un animal (donc un objet).Un familier est affamé. → chaque familier est affamé par défaut.Le chien est repu..
L’état affamé utilisé ci-dessus est un état personnalisé : il doit être déclaré avant (ici une bascule affamé / repu).
Un type personnalisé peut lui-même servir de parent à un autre. L’héritage se propage sur toute la chaîne, et on peut poser un défaut directement dans la déclaration du sous-type :
Un chaton est un familier affamé.
Un chaton est alors aussi un familier, un animal (et un objet), et il est affamé par défaut.
Le nom du type sert ensuite à viser tous ses éléments à la fois : compter (''%%[nombre de familiers]%%''), tester si X est un familier, ou écrire une règle avant examiner un familier.
affamé et repu forment une bascule. Un familier est un animal. Un familier est affamé. Un chaton est un familier. La maison est un lieu. Le chat est un familier dans la maison. Le chien est un familier dans la maison. Le chien est repu. Le minou est un chaton dans la maison. Le joueur est dans la maison. action recenser: dire "Familiers : [nombre de familiers].". si le chat est affamé, dire "Le chat est affamé (défaut du type).". si le chien est repu, dire "Le chien est repu (défini sur l'instance).". si le minou est un familier, dire "Le minou (chaton) est aussi un familier.". si le minou est affamé, dire "Le minou est affamé (défaut hérité en chaîne).". fin action règle avant commencer le jeu: dire "Essayez : {/recenser/}.". fin règle
personne[nombre de <type>]