Ce qui suit est un tutoriel pour écrire des fictions interactives à analyseur syntaxique en français avec l’outil DAAD Ready. Cet outil est téléchargeable ici, et permet de créer des jeux d’aventure graphiques pour une demi-douzaine de plates-formes rétro comme l’Amstrad CPC, le Commodore 64, ou le MSX. Ce tutoriel a été écrit par Uto (version originale ici), le développeur de l’outil ; je le remercie d’avoir inclus dans la dernière version de l’outil ma traduction française de ses bibliothèques ! — Hugo

Ce tutoriel sert à vous montrer comment utiliser DAAD Ready, une suite d’outils faite pour vous simplifier la vie avec DAAD. DAAD Ready est seulement disponible pour Windows, donc vous aurez peut-être besoin de Wine sur d’autres systèmes. Sinon, vous pouvez aussi utiliser le compilateur DRC tout seul, mais cela demande plus de travail.

Créons un jeu simple où l’on doit s’échapper de la tour où l’on est enfermé.

Commençons !

En premier lieu, faisons une carte simple :

Diagramme montrant la géographie du jeu que nous allons réaliser.

Ceci est une vue en coupe d’un château. La connexion avec les flèches signifie qu’elle n’existe que dans un sens.

Si vous utilisez DRC tout seul, faites une copie de BLANK_FR.DSF (qui se trouve dans TOOLS/DRC) et appelez-la TEST.DSF. Si vous utilisez DAAD Ready, double-cliquez sur un des fichiers .BAT (par exemple ZXTAPE.BAT) et choisissez « French ». Cela créera un fichier TEST.DSF dans le dossier DAADReady.

Vous pouvez modifier TEST.DSF avec votre éditeur de texte préféré.

Créons des lieux

La première chose à faire est d’écrire les descriptions des lieux. Comme vous l’avez vu, chaque lieu sur la carte a un nom — que l’on utilise à l’oral — mais aussi un numéro — utilisé par DAAD. Nous allons créer des étiquettes pour pouvoir y faire référence en utilisant les noms plutôt que les nombres ; par exemple, on veut pouvoir écrire 2 ou lCaserne pour la caserne.

Cherchez la section /LTX dans votre fichier DSF et remplacez son contenu par :

/0 "La Tour#nUn jeu d'évasion"
/1 "Vous êtes près de la porte d'entrée. Vous voyez une cheminée et la table du garde."
/2 "La pièce est pleine de lits, tous vides."
/3 "Le vent siffle dans l'escalier en colimaçon. Une vieille armure semble monter la garde."
/4 "Une pièce silencieuse, dont la seule source de lumière est celle de la lune à travers le soupirail. Vous voyez un squelette prisonnier de chaînes attachées au mur."
/5 "Attention à la marche dans ce vieil escalier. À mi-chemin, une torche accrochée au mur éclaire les environs."
/6 "Un grand lit remplit presque toute la pièce. La fenêtre est condamnée par des barreaux."

Le #n est un saut de ligne. Il y a quelques caractères spéciaux pour DAAD de la sorte, mais celui-là est le plus courant.

Maintenant, juste avant la section /CTL, ajoutons des définitions pour identifier les lieux par leur nom :

define lIntro 0
define lHall 1
define lCaserne 2
define lEscaliers 3
define lCellule 4
define lEscaliers2 5
define lChambre 6

Avec ces #define, nous pouvons maintenant écrire lCellule pour le lieu numéro 4.

Maintenant, regardons la section /CON (connexions). Ajoutez ceci sous la ligne /CON, qui permettra au joueur d’aller d’un lieu à un autre :

/0
/1
EST lCaserne
/2
OUEST lHall
EST lEscaliers
/3
HAUT lEscaliers2
OUEST lCaserne
/4
EST lEscaliers2
/5
BAS lEscaliers
HAUT lChambre
/6
BAS lEscaliers2

Ça veut dire quoi ? Le lieu 0 (/0) est juste l’écran introductif du jeu (c’est pour cela qu’il n’est relié à aucun autre lieu). Pour les autres lieux, définissez une connexion en spécifiant une direction et une destination. Par exemple, depuis le lieu 2, si vous allez à l’est, vous arriverez aux escaliers, et si vous allez à l’ouest vous arriverez au hall d’entrée. La connexion entre les escaliers et la cellule n’existe pas quand on démarre le jeu, donc on ne la définit pas.

Maintenant, testons le jeu, ce qui peut être fait en double cliquant un des fichiers BAT dans le dossier DAADReady (par exemple ZXPLUS3.BAT). Cela compilera votre jeu, et si tout s’est bien passé, le lancera dans un émulateur. Lisez les notes sur l’écran pour savoir comment démarrer le jeu une fois que l’émulateur a démarré (c’est automatique sur certaines plates-formes).

Le passage secret

On pourrait parler des objets maintenant, mais si on faisait ça vous ne verriez aucune énigme dans ce chapitre… Donc nous allons faire en sorte que le joueur puisse entrer dans la cellule, en tirant sur la torche dans l’escalier ; le passage secret se referme si on pousse la torche.

Trouvez /PRO dans TEST.DSF, et juste en dessous, tapez ce qui suit :

define fPassageOuvert 100

>TIRER TORCHE
AT lEscaliers2
ZERO fPassageOuvert
SET fPassageOuvert
MESSAGE "Vous tirez sur la torche, ce qui révèle un passage secret vers l'ouest."
DONE

>TIRER TORCHE
AT lEscaliers2
MESSAGE "On ne peut pas tirer plus."
DONE

Que se passe-t-il ici ? #define fPassageOuvert 100 nous permet de définir que le flag numéro 100 a pour nom interne fPassageOuvert. Un flag est une petite boîte qui contient un nombre entier ; il y a toujours un nombre dedans, et il ne peut y en avoir 2. DAAD a 256 flags, numérotés de 0 à 255, et la valeur stockée dans chacun de ces flags peut être comprise entre 0 et 255.

Pour notre tâche actuelle, on utilise le flag 100, on le nomme fPassageOuvert, et on va dire que si la valeur de ce flag est à 0, le passage est fermé, et sinon, le passage est ouvert. Quand le jeu démarre, les flags ont tous une valeur de 0 par défaut, donc le passage est fermé au début du jeu.

Le processus (/PRO) 5 s’appelle « la table des réponses ». Vous pouvez y ajouter des rubriques pour chaque commande potentiellement tapée par le joueur, et vous décidez ce qui se passe lorsque le joueur tape cette commande. Les rubriques sont organisées et exécutées dans l’ordre, et elles sont toutes lues à moins qu’on rencontre un DONE ou un NOTDONE (voir ci-dessous). Si on regarde la première rubrique, on voit que le joueur doit taper “TIRER TORCHE” pour l’exécuter :

>TIRER TORCHE
AT lEscaliers2
ZERO fPassageOuvert
SET fPassageOuvert
MESSAGE "Vous tirez sur la torche, ce qui révèle un passage secret vers l'ouest."
DONE

Les lignes suivantes sont des « condacts ». Les condacts sont du code DAAD, certaines étant des conditions, certaines des actions. Les actions sont exécutées directement (elles font quelque chose) et les conditions sont évaluées ; la rubrique s’arrête et est rejetée quand une condition échoue.

Par exemple, dans le code ci-dessus, la première condact est :

AT lEscaliers2

Il s’agit d’une condition, qui est vraie uniquement si le joueur est dans le lieu lEscaliers2 ; sinon, la rubrique échoue et tout le reste de la rubrique est ignoré. Cette condition est là pour que, si le joueur n’est pas dans le bon lieu, il ne peut pas tirer sur la torche.

Ensuite, on regarde si le passage est ouvert. Si le passage est ouvert (= le flag fPassageOuvert n’est pas 0), on ne peut pas l’ouvrir ; donc on regarde si la valeur du flag est 0, et si ça n’est pas le cas le reste de la rubrique sera ignoré, encore une fois (SET, MESSAGE et DONE ne seront pas exécutés par le programme). Cela explique la ligne ZERO fPassageOuvert.

Maintenant, si on continue, ça veut dire qu’à ce stade, le passage était fermé, on était dans le bon lieu, et on a tapé « TIRER TORCHE » : l’action va donc réussir. Comment coder cela ? Tout d’abord, on va donner au flag une valeur différente de 0 ; c’est la ligne SET fPassageOuvert, qui met ce flag à 255. Puis on utilise la condact MESSAGE, qui va afficher au joueur le texte entre les guillemets. Et enfin, on dit DONE, une condact qui dit à DAAD « arrête de regarder la liste des rubriques » : le reste du processus 5 sera ignoré et le jeu demandera au joueur de taper une nouvelle commande.

Hé ! Mais il y a une deuxième rubrique !

>TIRER TORCHE
AT lEscaliers2
MESSAGE "On ne peut pas tirer plus."
DONE

Si la rubrique précédente n’est pas allée au bout (parce que les conditions AT ou ZERO ont échoué), alors DAAD va regarder d’autres rubriques. La deuxième commence aussi par la commande « TIRER TORCHE », et si le joueur est à lEscaliers2 et que le passage est déjà ouvert, alors DAAD écrira juste « on ne peut pas tirer plus. », puis verra DONE et arrêtera de regarder ces rubriques. Cette deuxième rubrique est là au cas où la première échoue ; ce n’est pas absolument nécessaire pour votre jeu, mais ça contribue à un sentiment que le jeu est complet, avec une belle finition.

Mais que se passe-t-il si la première rubrique échoue parce que le joueur n’est pas dans le bon lieu ? Alors la deuxième échouera aussi, car la condition AT ne sera pas vérifiée, et DAAD essaiera de trouver plus de rubriques pour « TIRER TORCHE » ; comme il n’y en a pas d’autres, on arrivera au bout sans rien trouver pour cette commande, et DAAD affichera : « Vous ne pouvez pas faire cela. » (Ce qui est vrai, il n’y a aucune torche à tirer.)

Fermer le passage

Ajoutons maintenant un moyen de fermer le passage. On utilisera CLEAR, le contraire de SET, qui met un flag à 0. Le code qui suit devrait être maintenant compréhensible :

>POUSSER TORCHE
AT lEscaliers2
NOTZERO fPassageOuvert
CLEAR fPassageOuvert
MESSAGE "Vous poussez la torche et le passage se referme."
DONE

>POUSSER TORCHE
AT lEscaliers2
MESSAGE "Je ne peux pas pousser la torche."
DONE

Ce serait également bien si le joueur pouvait voir que le passage est ouvert même après s’être déplacé dans une autre salle puis être revenu. Nous utiliserons pour cela le processus 3 ; ajoutez le code ci-dessous sous la 3e section /PRO :

>_ _
AT lEscaliers2
NOTZERO fPassageOuvert
MESSAGE "Vous voyez un passage s'enfonçant vers l'ouest dans les ténèbres."

Le processus 3 est simplement le processus qui se lance après avoir montré la description du lieu, et est souvent utilisé pour afficher des informations sur le lieu quand il y a eu des changements, ce qui est le cas ici.

Une différence avec la table des réponses (processus 5), vous ne définirez pas les rubriques de ce processus avec un couple verbe + nom, car il faut que les instructions soient exécutées quelle que soit la dernière commande du joueur. D’ailleurs, quand ce texte s’affiche après la description de lEscaliers2, le joueur a tapé « HAUT » ou « BAS », selon d’où il vient ; ou peut-être « REGARDER », pour décrire le lieu une nouvelle fois. Pour dire que la commande n’a pas d’importance, on utilise les tirets bas (_) : le premier veut dire « peu importe le verbe » et le second « peu importe le nom ».

Donc, à chaque fois qu’on décrit lEscaliers2, on lance le processus 3, et on rentrera dans cette rubrique quelle que soit la commande. Si AT lEscaliers2 est vraie (on est au bon endroit) et NOTZERO fPassageOuvert aussi (le passage est ouvert), on affiche le message au joueur.

Enfin, attention, changer la valeur du flag ne créera pas de nouvelle connexion. En réalité, DAAD ne peut pas créer de nouvelles connexions, mais on peut en simuler une. Pour cela, ajoutez ceci au processus 5 :

> OUEST _
AT lEscaliers2
NOTZERO fPassageOuvert
GOTO lCellule
RESTART

Cette rubrique aura pour effet que, si le joueur tape OUEST et qu’il est dans les escaliers avec le passage ouvert, le joueur sera déplacé dans le lieu lCellule (avec la condact GOTO) et on décrira le nouveau lieu (condact RESTART). Par contre, on pourra passer de la cellule aux escaliers sans souci, car on a défini cette connexion dans la section CON — DAAD vous laisse définir des connexions qui ne vont que dans un sens, ce qui est bien pour les labyrinthes ou si vous avez un trou où vous ne pouvez pas remonter.

On y est presque ! DAAD ne comprend pas beaucoup de mots par défaut, et POUSSER, TIRER, et TORCHE ne sont pas reconnus. Pour que DAAD les comprenne, il faut les ajouter dans la section /VOC, alors ajoutez ceci après la ligne /VOC :

TIRER 200 verb
POUSSER 201 verb
TORCHE 200 noun

Cela dit à DAAD que « TIRER » est le verbe au code 200 ; « POUSSER », le verbe au code 201 ; et « TORCHE », le nom au code 200. Si deux mots ont le même code et le même type, ils sont synonymes ; ce n’est pas le cas ici, car TIRER et TORCHE ne sont pas du même type. Si on veut ajouter un synonyme, comme « FLAMBEAU » pour « TORCHE » (et donc « TIRER FLAMBEAU » marcherait et aurait le même effet que « TIRER TORCHE »), on écrirait :

FLAMBEAU 200 noun

Notez que DAAD ne regarde que les 5 premières lettres de chaque mot ; si deux mots différents commencent par les 5 mêmes lettres, ils ne peuvent pas être ajoutés à DAAD.

C’est l’heure de tester votre jeu et d’entrer dans la cellule ! Bonne aventure à vous !

J’espère que ce tutoriel vous aura donné de bonnes bases en DAAD. Il y a encore quelques choses importantes à savoir, comme la gestion des objets et des images ; je traduirai d’autres tutoriels de Uto, ou bien le manuel de DAAD, s’il y a de la demande ! En attendant, vous pouvez passer sur notre Discord poser des questions !