URL: https://linuxfr.org/news/escenadil-un-moteur-de-jeu-d-aventure-en-mode-texte Title: Escenadil, un moteur de jeu d’aventure en mode texte Authors: anaseto Davy Defaud, baud123, claudex, Florent Zara, Benoît Sibaud et Bruno Michel Date: 2012年09月23日T21:25:01+02:00 License: CC By-SA Tags: jeux_linux et perl Score: 25 [Escenadil](http://bardinflor.perso.aquilenet.fr/escenadil/) est un projet libre de moteur de jeu d’aventure en texte, sous la même licence que [Perl](http://fr.wikipedia.org/wiki/Perl\_(langage\) "Définition Wikipédia"), que j’ai commencé au mois d’août. Le but est de pouvoir facilement écrire une petite aventure (voire pas si petite) en éditant un simple fichier [_YAML_](http://fr.wikipedia.org/wiki/yaml "Définition Wikipédia"). ---- [Page du projet Escenadil](http://bardinflor.perso.aquilenet.fr/escenadil/) ---- Concept de « scène » ------------------ Le jeu s’organise autour de l’idée de « scène » (_escena_, en espagnol) : une scène se présente comme un _texte_ avec un certain nombre de _choix_ possibles, lesquels nous font passer à d’autres scènes. Les *choix* peuvent se présenter de façon connue à l’avance (choix a,b,c...) ou non, auquel cas un choix est déterminé par une entrée texte du joueur. Le jeu fournit aussi quelques variables, pour simuler un inventaire d’objets, par exemple ; ou l’usage de drapeaux, pour déterminer si un certain choix doit ou non être présent, suivant les circonstances. Comment créer une aventure -------------------------- C’est plutôt facile, il suffit de rédiger un texte en YAML, en suivant une structure qui correspond au concept de scène. En général, ça ressemble à quelque chose comme : ```yaml --- # nom de la scène initiale "ma_première_scène" --- # Quelques données nums: argent: 20 flags: sait_parler_elfique: 1 --- # Puis viennent les scènes ma_première_scène: name: "Texte court descriptif (facultatif)" text: "Tu vois un vieil elfe dans la forêt cherchant des champignons." choices: premier_choix: text: "Vendre des champignons au vieil elfe" go: "nom de la scène suivante" effects: - "num+:argent:10" - ... requirements: - "flag:sait_parler_elfique" - ... autre_choix: ... autre_scène: ... ``` Pour plus de flexibilité, une notion d’*état* offre la possibilité d’afficher plusieurs textes différents dans une même scène, suivant les circonstances. On écrit dans ce cas : ```yaml ma_première_scène: ... state: "mon_état" text: mon_état: "texte" autre_état: "autre texte" ... ``` L’état peut être modifié grâce aux *effets*. Par exemple, l’effet `state:ma_première_scène:autre_état` change l’état de la scène, et si l’on revient sur celle‐ci, un autre texte sera affiché. On peut utiliser les données dans les effets et pré‐requis. Voici quelques exemples : - on peut activer des *flags* avec `flag:nom`, et les utiliser pour ne faire apparaître certains choix que lorsque l’on veut, ou faire apparaître aussi du texte additionnel dans certains cas grâce à la clé `text_flags` ; - la table *nums* permet de faire des comparaisons (`<`,`>`,`=`) utiles pour les prérequis, et des additions grâce aux effets ; - la table *texts* permet de conserver une table type `clé: "texte"`. Elle est utile par exemple pour récupérer des entrées du joueur et les réutiliser ensuite en les interpolant dans le texte en mettant la clé entre deux _« @ »_. Tester le fichier YAML ---------------------- Le moteur de jeu s’accompagne aussi d’un petit script pour tester quelques propriétés d’un fichier YAML contenant une partie, pour éviter quelques erreurs communes. Il vérifie, par exemple, que dans un `go:"nom_de_scène"`, la scène en question est bel et bien définie. Plus d’informations ------------------- Pour le moment, il n’y a pas d’autre documentation que la documentation _pod_ et une page _man_ générée avec. Sur la page du site, on trouve un lien vers le dépôt _Git_. Il y a aussi une archive `tar.gz` au même endroit. Le jeu a les dépendances suivantes : - Perl (v 5.10 ou plus, testé avec avec la v 5.12 et v 5.16) ; - _Curses::UI ;_ - _YAML::XS_ (YAML marche aussi avec une petite modification, voir le fichier `readme.markdown` dans les sources) ; - _List::MoreUtils_. Points à améliorer ------------------ Il faudrait que j’écrive une histoire, afin qu’il y ait un bon exemple (il n’y a qu’un petit exemple en anglais assez ridicule pour le moment)... Et sans doute beaucoup de choses, auxquelles je n’ai pas pensées. L’idée c’est de rajouter des fonctionnalités sans que ça ne rende plus compliqué d’écrire une histoire simple, et qu’on n’ait pas besoin d’autre chose que d’un fichier YAML pour les données. ![Pièce 1 du concours Plee the Bear](http://www.stuff-o-matic.com/ptb/linuxfr/puzzle/puzzle-1.png)

AltStyle によって変換されたページ (->オリジナル) /