====== 3. Le chat sorcier et les animaux ======
Un cirque sans bête, c’est un théâtre. On installe maintenant **Anatole le tigre** dans la cage de Lucia, et — surtout — on rencontre enfin **Crépu**, le chat sorcier d’Aurélien. Crépu sait des choses. Il en dira la moitié. À l’envers.
===== La classe ''animal'' =====
Côté DSL, un animal se déclare exactement comme une personne, avec la classe ''animal'' à la place :
Anatole est un animal dans la roulotte de Lucia.
Sa description est "Anatole, le tigre vedette de Lucia. Pelage roux barré de noir, trois cents kilos de muscle assoupis.".
réaction d’Anatole:
dire "Anatole entrouvre un œil paresseux, vous renifle, et se rendort dans un long ronronnement de moteur diesel.".
fin réaction
[[djnc>wiki_tuto-cirque_03_a_anatole|tester cet exemple]]
Lancez l’exemple et essayez ''parler à Anatole'' : le moteur **refuse**. C’est normal — **par défaut, un animal ne parle pas**, contrairement à une personne. Le bloc ''réaction'' qu’on a écrit reste légitime (on pourra l’invoquer nous-mêmes dans une règle), mais la commande ''parler'' n’y a pas accès tant que l’animal n’est pas marqué comme ''parlant''.
📚 Pour aller plus loin : [[reference:definitions:noms_autorises|Noms autorisés]], [[reference:definitions:objets|Classes d’objets]] (objet, personne, animal, vivant, …).
===== Un animal qui parle =====
Pour qu’un animal devienne interactif via ''parler à'', on lui ajoute explicitement l’état ''parlant''. C’est le cas de Crépu, qui n’est pas qu’un chat ordinaire :
Crépu est un animal parlant dans la roulotte du maître Aurélien.
Sa description est "Un vieux chat gris-ardoise au poil hirsute, un seul œil jaune ouvert, l’autre fermé en permanence. Une mèche blanche lui barre le front.".
réaction de Crépu:
dire "« Mmh. L’apprenti·e. On me l’avait promis. »".
fin réaction
[[djnc>wiki_tuto-cirque_03_b_crepu|tester cet exemple]]
> ℹ️ ''animal parlant'' combine la classe ''animal'' et l’état ''parlant''. On peut empiler classe et états dans une même déclaration ; on aurait pu écrire séparément ''Crépu est un animal.'' puis ''Crépu est parlant.''.
===== Les réactions structurées =====
Avec une réaction simple, Crépu répond toujours pareil. On veut mieux : qu’il **réagisse au sujet** que le joueur évoque, et qu’il ne se répète pas mot pour mot dès le deuxième passage. C’est le rôle des **réactions structurées**, qu’on enrichit ici de deux mécaniques :
* la **balise** ''[1ère fois]…[2e fois]…[puis]…[fin]'' pour faire varier un texte selon le nombre de fois où il a déjà été affiché ;
* un **bloc conditionnel** ''si … : … sinon : … fin si'' à l’intérieur d’une réaction.
Le moteur route les commandes ainsi :
* ''parler à Crépu'' → bloc ''basique''
* ''demander X à Crépu'' → bloc ''concernant X'' (si déclaré)
* ''demander X à Crépu'' avec ''X'' inconnu → bloc ''concernant un sujet inconnu''
réactions de Crépu:
basique:
dire "[1ère fois]« Mmh. L’apprenti·e. On me l’avait promis. »[2e fois]« Encore toi ? Bon, je t’écoute. »[puis]« Qu’est-ce que tu veux savoir aujourd’hui ? »[fin]".
concernant le tour:
si la roulotte de Lucia est visitée:
dire "« Le pas de côté. Une vieille recette de famille — enfin, de la famille de quelqu’un d’autre. Tu réuniras les quatre accessoires, puis tu réaliseras le tour. »".
sinon
dire "« Pas si vite. Tu n’as même pas fait connaissance avec le tigre de Lucia. Va d’abord voir le cirque, puis reviens. »".
fin si
concernant Aurélien:
dire "« Aurélien ? Excellent élève, en son temps. Trop pressé d’apprendre. Comme toi. »".
concernant le miroir:
dire "« Le miroir est cassé, oui. Pas vraiment cassé — disons… mal ajusté. »".
concernant un sujet inconnu:
dire "« Ah. Cette question-là, je préfère y répondre plus tard. Beaucoup plus tard. »".
fin réactions
[[djnc>wiki_tuto-cirque_03_c_reactions|tester cet exemple]] — **état final du chapitre**.
Trois subtilités à noter dans ce bloc :
* Dans ''basique'', la **balise** ''[1ère fois]…[2e fois]…[puis]…[fin]'' insère trois variantes du même texte selon le nombre de passages — on évite la répétition mot pour mot sans avoir à écrire trois blocs séparés.
* Dans ''concernant le tour'', la **condition** ''si la roulotte de Lucia est visitée'' utilise l’état ''visité'' (positionné automatiquement par le moteur dès que le joueur entre une première fois dans le lieu). Crépu s’adapte donc à la progression du joueur sans qu’on ait besoin de gérer un état personnalisé. //(On vérifie volontairement la roulotte de Lucia plutôt que celle d’Aurélien : comme « demander à Crépu » oblige à être dans la même roulotte que lui, sa propre roulotte est forcément déjà visitée.)//
* ''concernant Aurélien'' fonctionne parce qu’on a déclaré Aurélien comme un ''concept'' au chapitre 2 — on peut parler de quelqu’un qui n’est pas physiquement dans le jeu.
> 🐾 //Crépu en dit beaucoup et rien à la fois. Notez ces phrases-là : elles prendront un sens différent au chapitre 7.//
📚 Pour aller plus loin : [[reference:routines:reaction:start|Les réactions structurées]], [[reference:texte:mise_en_forme|Balises 1ère fois / 2e fois / puis]].
===== Récapitulatif =====
* ''X est un animal …'' déclare un animal (mêmes propriétés qu’une personne).
* Par défaut, un animal **ne parle pas** : il faut ajouter l’état ''parlant'' pour que ''parler à'' devienne utilisable.
* **Forme courte** : ''réaction de X: dire "...". fin réaction'' → une seule réponse possible.
* **Forme structurée** : ''réactions de X: basique: … concernant Y: … concernant un sujet inconnu: … fin réactions''.
* Le moteur route ''parler à X'' vers ''basique'' et ''demander Y à X'' vers ''concernant Y''.
* À l’intérieur d’une réaction, on peut placer des **conditions** ''si … : … sinon : … fin si'' et des **balises** dynamiques comme ''[1ère fois]…[puis]…[fin]''.
Au prochain chapitre, on s’intéresse aux **accessoires de magie** qu’Aurélien a laissés dans sa roulotte — et on découvre comment leur attacher des **états personnalisés**.
Suite : [[tutoriels:cirque:partie4_accessoires|4. Les accessoires de magie]]