Dans cet article, nous allons voir la syntaxe de base d’Inform, ce qui nous donnera tous les outils nécessaires pour créer un jeu, certes simple, mais complet. Expérimentez un peu avec les différents exemples donnés afin de vous assurer de bien comprendre le fonctionnement d’Inform, testez régulièrement le projet, mais ne vous inquiétez pas si quelque chose vous échappe : le chapitre suivant vous accompagnera dans la création de votre première fiction interactive.

Et si vous n’avez pas encore lu la partie 1, c’est par ici !

Les lieux et les objets

Concepts de base

Revenons un peu sur le code utilisé pour placer les objets dans le jeu, et expliquons-le un peu mieux, même si le langage naturel permet de comprendre ce qui a été fait.

Tout d’abord, il faut savoir que l’état initial du monde du jeu est créé à partir de phrases déclaratives écrites au présent. De plus, chaque objet, au sens large du terme, doit posséder un type particulier. Par exemple, l’oasis est de type « endroit », le dromadaire de type « animal ». Les types représentent l’essence même de l’objet, et déterminent ce qu’il est possible de faire avec lui.

Pour créer un objet, il faut donc écrire :

Nom de l'objet est un type de l'objet.

Commençons par les lieux où se déroulera l’histoire du jeu.

Les lieux

Nous avons suivi la règle énoncée ci-dessus pour créer un endroit dans la partie précédente :

L' Oasis (f) est un endroit.

Le déterminant est très important : c’est lui qui indique à Inform le genre et le nombre de l’objet ou de l’endroit en question. Ici, comme le déterminant est ambigu (« l’ »), il faut ajouter (f) après le nom de l’oasis pour qu’Inform sache que le mot est féminin. Il ne faut pas non plus oublier que, pour qu’Inform sache où s’arrête le déterminant et où commence le nom, il faut ajouter une espace après l’apostrophe dans des situations comme l' Oasis.

Ajoutons maintenant une description à notre nouvel endroit. Il y a deux méthodes pour y parvenir.

Pour ajouter une description à notre endroit, nous pouvons l’écrire entre guillemets, juste après l’avoir créé (si vous ne l’aviez pas encore remarqué, tous les textes qui seront affichés en jeu doivent être écrits entre guillemets dans la source) :

L' Oasis (f) est un endroit. "Une belle oasis ensoleillée...".

Nous aurions aussi pu spécifier explicitement quelle doit être la description :

La description de l' Oasis est "Une belle oasis ensoleillée...".

Pour les endroits, la première façon est la plus répandue, mais les deux façons de faire sont valides. Pour les objets autres que les endroits, il faut utiliser la seconde méthode.

Nous sommes maintenant en mesure de créer plusieurs autres endroits :

La Crypte est un endroit. Le Désert est un endroit.

Mais il y a un problème. Le joueur commencera dans le premier endroit défini dans la source (ici, l’oasis), mais comment pourra-t-il se rendre autre part ?

Il faut relier les endroits entre eux. Nous pouvons faire cela en les situant les uns par rapport aux autres. Par exemple :

La Crypte est au sud de l' Oasis.
Le Désert est au nord de l' Oasis, à l'ouest de l' Oasis et à l'est de l' Oasis.

Ces phrases créent les endroits s’ils n’ont pas été créés auparavant.

Les différentes connexions possibles sont :

  • nord, sud, est, ouest ;
  • nord-ouest, sud-ouest, nord-est, sud-est ;
  • au-dessus, en dessous, à l’intérieur, à l’extérieur.

Testons cela :

Oasis
Une belle oasis ensoleillée...

Vous pouvez voir un dromadaire.

>aller au sud

Crypte

>nord

Oasis
Une belle oasis ensoleillée...

Vous pouvez voir un dromadaire.

Une petite note sur la casse : les majuscules n’ont pas d’importance pour les références à un lieu ou un objet dans le code, mais le nom du lieu ou de l’objet s’affichera en jeu de la même façon que sa première occurrence dans la source. Il est conseillé d’écrire les lieux avec une majuscule et les objets tout en minuscules.

Les choses

La chose est le type le plus basique qu’un objet peut avoir. Les choses sont utilisées pour représenter un peu tout et n’importe quoi, tant que l’objet ne possède pas de caractéristique particulière.

Créer un objet est aussi facile que créer un endroit, si ce n’est qu’il faut spécifier son emplacement :

Le palmier est une chose dans l' Oasis.

Pour créer un objet de type plus spécifique, il suffit de remplacer chose par homme, femme, animal, contenant, ou tout autre type existant (pour les curieux, voir l’onglet « Index », sous-onglet « Kinds », pour en obtenir la liste). Nous l’avions déjà fait pour le dromadaire :

Le dromadaire est un animal dans l' Oasis.

Cela permettra de donner des réponses types plus adaptées à la nature de ces objets (qu’ils soient vivants ou non) ainsi que de leur attribuer des propriétés spécifiques. Ainsi, pour un être vivant, la réponse par défaut à l’action « toucher » sera « Vous savez tenir vos mains tranquilles », alors que pour un objet inanimé, cela sera « Vous ne sentez rien de particulier ». De même, le joueur sera en mesure de mettre des objets dans un contenant, mais pas dans une simple chose.

Nous avons donc une petite oasis où se trouvent un palmier et un dromadaire.

D’ailleurs, ce palmier est très bien, mais il y a un petit problème de conception, que vous avez peut-être remarqué si vous avez testé le jeu : essayez de prendre le palmier avec la commande « prendre le palmier » ; la réponse « Voilà qui est fait » sera affichée. En consultant votre inventaire avec « inventaire » (abrégé par « i »), vous le trouverez effectivement dans vos affaires :

>i
Vous avez :
  un palmier

Comment résoudre ce problème ? Utilisons des propriétés.

Les propriétés

Les objets possèdent des propriétés, qui déterminent leur façon de se comporter. Sans le savoir, vous en avez déjà utilisé une : la description. En effet, la description est un texte qu’un objet possède, et qui est affiché quand le joueur le regarde.

Les propriétés les plus basiques sont des adjectifs, qui représentent l’état actuel dans lequel se trouve les objets qu’ils qualifient. De nombreux adjectifs sont déjà utilisables par défaut, dont un qui va nous permettre de résoudre le problème du palmier.

Car si les objets définis comme être vivants ne pourront pas être transportables par défaut (c’est une question de savoir-vivre…), ce n’est pas le cas de notre arbre.

Ajoutons-lui une caractéristique. Pour qu’il soit impossible de le prendre, il suffit de dire qu’il est fixé sur place :

Le palmier est une chose dans l' Oasis. Il est fixé sur place.

Il est possible de simplifier :

Le palmier est une chose fixée sur place dans l' Oasis.

Essayez de le prendre à présent. Le jeu vous répondra que c’est impossible.

Maintenant que le problème du palmier est résolu, ajoutons une chose qui représentant un chemin vers la crypte. Nous savons comment faire pour qu’il soit impossible de le prendre :

Le chemin est une chose fixée sur place dans l' Oasis.

Mais imaginons que nous voulons que le chemin soit un objet mineur, faisant partie du décor, et que le jeu n’indique pas « Vous pouvez voir un chemin » après la description de l’endroit. Pour cela, il suffit de le rendre décoratif :

Le chemin est une chose décorative dans l' Oasis.

Une chose décorative est automatiquement fixée sur place, il n’est donc plus nécessaire de l’indiquer.

Le chemin ne sera plus mentionné automatiquement par le jeu, mais le joueur pourra bien sûr toujours interagir avec lui, l’examiner… Et nous pouvons toujours indiquer sa présence dans la description de l’oasis, en y ajoutant par exemple « Un chemin mène à la crypte au sud ».

Ajoutons maintenant, pour plus de réalisme, du sable.

Le sable est fixé sur place dans l' Oasis.

Mais ce n’est pas bon, car maintenant le jeu nous annonce :

Vous pouvez voir un dromadaire, un palmier et un sable.

Le déterminant indéfini pose problème : « un sable » n’est pas correct, puisqu’il faut un article partitif.

Pour résoudre cela, il faut modifier la propriété indefinite article du sable (notons au passage que cette propriété n’a pas pu être traduite) :

L' indefinite article du sable est "du".

Cela affichera un résultat correct, mais comme il est évident qu’il y a du sable dans un désert, nous pourrions le rendre décoratif. Mais nous pouvons faire encore mieux. Si nous souhaitons que le sable soit présent dans plusieurs endroits à la fois, il faut changer son type « chose » en « toile de fond ». Une toile de fond est toujours décorative, et donc également fixée sur place.

Profitons-en pour ajouter un soleil.

Le sable est une toile de fond dans l' Oasis, dans le Désert et dans la Crypte.
Le soleil est une toile de fond dans l' Oasis et dans le Désert.

N’oubliez pas qu’un objet ne doit être une toile de fond que s’il se trouve dans plusieurs endroit à la fois. S’il s’agit d’un simple décor dans un endroit unique, la propriété décoratif suffit.

Lorsque plusieurs objets (ici, des lieux) sont concernés par une action ou une définition, il est possible d’utiliser une virgule ainsi que « et » pour les séparer, cela évite d’écrire plusieurs phrases distinctes comme ceci : Le sable est une toile de fond dans l' Oasis. Le sable est une toile de fond dans le Désert.

Il existe bien sûr de nombreuses autres propriétés, mais nous les verrons au fur et à mesure de leur utilisation.

Enfin, en plus des propriétés existantes qui sont utilisées par les règles prédéfinies dans Inform, nous pouvons en créer nous-mêmes, et les utiliser dans des règles que nous écrirons. Nous verrons ceci plus tard, mais voyons brièvement comment créer une nouvelle propriété :

Une personne peut être mort. Une personne est rarement mort.
Une personne peut être heureux. Une personne est généralement heureux.

Ces lignes feront en sorte que chaque personnage créé sera toujours vivant et heureux par défaut (ce qui pour l’instant ne sert à rien, car nous n’avons pas écrit de règles concernant ces propriétés).

Aussi, les mots « mort » et « heureux » ont été utilisés, mais l’auteur peut choisir les adjectifs qu’il veut, même « zedfzg » et « ftagg » s’il le souhaite vraiment, du moment qu’il s’y retrouve ensuite…

Les adjectifs dans l’exemple ci-dessus ont été créés au masculin, bien que le mot « personne » soit féminin. En fait, la version actuelle d’Inform ne reconnaît pas les différentes formes des adjectifs, c’est pourquoi il faut choisir la forme que l’on veut utiliser dans sa source ; par exemple, le masculin singulier, même si on aurait très bien pu choisir le féminin. La seule différence est qu’il faudrait alors l’écrire au féminin partout.
Cela n’est pas valable avec les adjectifs définis par Inform, comme décoratif ou ouvert : il est donc possible d’écrire décorative ou ouverts.

Les synonymes

Nous avons enfin un petit cadre sympathique, mais il nous reste une nouvelle chose à régler pour rendre le jeu encore un peu plus attrayant : imaginons que nous créons un cimeterre (une sorte d’épée courbe) et que le joueur souhaite y faire référence en l’appelant « épée » ou « lame » (parce que c’est plus court, parce que qu’il ne se souvient plus de mot exact…).

Pour permettre l’utilisation de synonymes en jeu uniquement, il suffit d’ajouter :

Le cimeterre est une chose dans la Crypte. La description est "Un beau sabre à la lame courbe et damassée qui scintille de mille feux.".
Comprendre "sabre", "epee", "lame", "courbe" ou "damas" comme le cimeterre.

Nous n’indiquerons jamais les accents dans les synonymes possibles, car l’extension française enlève les diacritiques des commandes du joueur avant de les interpréter. Un synonyme défini avec accents ne sera jamais utilisable.

À présent, le joueur pourra taper n’importe quelle combinaison des synonymes créés pour faire référence au cimeterre, comme « épée », « lame courbe » ou « sabre ».

Si votre objet possède des accents dans son nom, il faut ajouter un synonyme sans accents, sinon le joueur ne pourra jamais interagir avec l’objet !
Par exemple, si nous avions écrit L' épée (f) est une chose, il aurait fallu ajouter Comprendre "epee" comme l' épée, même si cela paraît redondant.

Les règles

Nous pouvons maintenant créer tout un monde avec des lieux, des connexions, des objets, des personnages… Mais ce monde reste terriblement statique, car nous n’avons pas encore vu comment provoquer des réponses s’adaptant en fonction de l’action envisagée.

Il faut donc créer des règles pour rendre notre monde plus vivant. Nous en avons déjà vu une : la règle When play begins, qui permet d’exécuter du code au début du jeu :

When play begins, dire "Une introduction...".

Ici, cela ne fait qu’afficher un petit texte d’introduction (grâce à l’instruction dire), mais nous pouvons imaginer placer là certaines initialisations supplémentaires.

Voyons à présent les règles les plus pratiques, celles qui peuvent modifier le déroulement normal d’une action.

Malheureusement, les noms des règles et des actions n’ont pas pu être traduits en français. Il faudra les écrire en anglais !

Les règles instead

La première d’entre elles, et la plus utilisée, est la règle instead (« au lieu de » en anglais) :

Instead of taking NomDeLaChose: [« taking » est l'action pour « prendre »]
	dire "D'abord il se passe ça.";
	dire "Puis il se passe ça.".

Une règle instead se déclenche quand le joueur essaye l’action spécifiée (ici, prendre l’objet appelé NomDeLaChose). Cette dernière est alors interrompue et les instructions écrites dans la règle sont exécutées à la place. Il s’agit donc d’une règle spécifique qui va empêcher la règle générale, qui ne provoque qu’un message bateau, de se dérouler.

La ponctuation pour les règles (instead ou autre) doit être comme suit :

  • Le préambule (ici, le « Instead of… ») doit être suivi d’un deux-points.
  • Chaque instruction doit être suivie d’un point-virgule, sauf la dernière.
  • La dernière instruction doit être suivie d’un point, pour indiquer que la règle est terminée.
  • Il est recommandé d’écrire une instruction par ligne pour plus de clarté et d’indenter (avec une tabulation) les instructions.

Si la règle ne contient qu’une instruction, alors il est possible d’utiliser une virgule à la place du deux-points :

Instead of taking NomDeLaChose, dire "Ma réplique super drôle.".

Ceci n’est valable que lorsqu’il n’y a qu’une instruction, et n’est pas obligatoire.

Attention de bien vérifier la ponctuation et la syntaxe dans Inform 7, car langage naturel ne veut pas dire que le logiciel comprend tout ce qui est écrit ! En général, les messages d’erreur générés, bien qu’en anglais, permettent de rapidement voir où se situe le problème, mais il peut arriver que certaines erreurs de ponctuation passent à la compilation du fait d’une structure considérée comme valide, mais que le jeu ne se comporte pas comme attendu.

Ce genre de règle pourra être utilisée pour empêcher l’affichage du message « C’est trop difficile à transporter » lorsque le joueur essaye de prendre du sable : bien que le sable est effectivement difficile à transporter, nous voulons souligner l’absence d’intérêt particulier à prendre du sable dans le désert. Écrivons cela :

Instead of taking le sable:
	dire "Il n'y a pas de technocrate ici pour essayer de lui vendre votre sable, et vous n'avez de toute façon pas de récipient pour l'emporter.".

Le message par défaut sera ainsi remplacé par votre réplique super drôle !

Les règles before

Les règles before (« avant » en anglais) servent à intervenir avant qu’une action ait lieu, mais n’empêcheront pas son déroulement : par défaut, l’action continuera comme si de rien n’était.

Before taking NomDeLaChose:
	dire "Description de ce qu'il se passe.".

Cette règle se déclenchera avant que le joueur prenne le NomDeLaChose. Si le joueur tente de prendre cet objet, le message « Description de ce qu’il se passe » sera affiché puis l’action continuera, le message par défaut sera affiché et le joueur aura l’objet dans son inventaire. Voici un exemple :

Before taking le cimeterre:
	dire "Ce sabre légendaire vous avait toujours fasciné, et maintenant vous pouvez enfin mettre la main dessus.".

Pour éviter que ce message n’apparaisse à chaque fois que le joueur repose le sabre puis le reprend, ce qui ridiculiserait l’effet, nous pouvons préciser que la règle ne peut être appliquée que la première fois que le cimeterre est pris, avec la précision pour la première fois :

Before taking le cimeterre pour la première fois:
	dire "Ce sabre légendaire vous avait toujours fasciné, et maintenant vous pouvez enfin mettre la main dessus.".

Les règles after

Si l’on veut que quelque chose se passe après qu’une certaine action soit réussie, il faut utiliser une règle after (« après » en anglais) :

After taking le cimeterre:
	dire "Bon ben finalement c'est pas si impressionnant que cela de porter ce sabre, mais qu'est-ce qu'il est lourd !".

Par défaut, une règle after empêche la réponse par défaut d’Inform (« Voilà qui est fait », par exemple.) Si on veut que ce message par défaut soit quand même écrit après notre message personnalisé, il faut ajouter l’instruction continuer l’action à la fin de la règle. (Vous n’avez qu’à tester pour vérifier !)

Connaître le véritable nom des actions

Il est important de faire la différence entre une action et une commande.

Quand le joueur tape la commande « prendre le cimeterre », c’est l’action taking qui a lieu. Le joueur aurait pu taper « ramasser le cimeterre », et la même action taking aurait eu lieu.

Dans les règles que nous venons de voir, il faut utiliser le nom de l’action (« taking »), et non la commande (« ramasser » ou « prendre »). Il existe deux méthodes simples pour trouver le nom exact d’une action.

La première consiste à taper la commande de débogage « actions » en jeu, puis de tester différentes actions. Par exemple, supposons que l’on cherche à chevaucher le dromadaire : quels noms d’action utiliser pour qu’Inform comprenne cela ?

Essayons la méthode :

>actions
Actions listing on.

>grimper sur le dromadaire
[climbing le dromadaire]
Vous ne pouvez pas arriver à grand-chose de cette manière.
[climbing le dromadaire - failed the block climbing rule]

>monter sur le dromadaire
[entering le dromadaire]
Vous ne pouvez pas y aller.
[entering le dromadaire - failed the French can't enter what's not enterable rule]

On sait maintenant que ces commandes entraînent les actions climbing et entering (le verbe « entrer » peut sembler étrange ici, mais c’est un verbe générique utilisé pour entrer dans un fauteuil ou monter sur une plate-forme).

La deuxième méthode consiste à aller dans l’index (onglet « Index »), puis à cliquer sur le sous-onglet « Actions » en haut à droite. Une liste des actions possibles en jeu apparaîtra.

Index des actions dans Inform 7
Index des actions dans Inform 7

Cliquer sur une loupe permettra de voir quelles commandes mènent à l’action choisie. Plus bas sur la page, il y a aussi la liste des commandes existantes et des actions qui leurs sont associées.

Concrétisons donc ce que nous voulions faire :

Instead of climbing or entering le dromadaire:
	dire "L'animal ne se laisse pas faire et s'éloigne.".

Remarquons au passage qu’il est possible de créer une règle s’appliquant à plusieurs actions à la fois en écrivant or (« ou » en anglais) entre chacune des actions.

Les conditions

Il ne nous manque plus qu’un concept essentiel pour pouvoir voler de nos propres ailes : n’exécuter des instructions que sous certaines conditions. Cela va se faire avec des « si ».

Mais avant tout, il va falloir copier le code qui suit au tout début de notre source, juste après Include Experimental French Features by Nathanael Marion. La traduction des conditions ne fonctionnera pas sinon. Cela est dû au fait que certaines parties d’Inform ne peuvent pas être traduites de manière « standard ». Les prochaines versions d’Inform devraient corriger le problème.

Include (- 
language French
	
<control-structure-phrase> ::=
	/a/ si ... est début |
	/b/ si ... est |
	/c/ si ... |
	/c/ à moins que |
	/d/ répéter ... |
	/e/ tant que ... |
	/f/ sinon |
	/g/ sinon si ... |
	/g/ sinon à moins que |
	/h/ -- sinon |
	/i/ -- ...
	
-) in the Preform grammar.

Vous n’avez pas à comprendre ce code (il s’agit de quelque chose de beaucoup trop technique), copiez-le simplement dans votre source. Il faut reconnaître qu’il est plutôt embêtant d’avoir à se trimbaler ce code dans chacun de nos projets, alors si cela vous gêne, vous pouvez utiliser les conditions en anglais (if, else) à la place de leur traduction.

Cela étant dit, voyons un exemple de la syntaxe utilisée :

Instead of attacking le dromadaire:
	dire "Attaquer le dromadaire serait-il une bonne idée ?";
	si le player porte le cimeterre:
		dire "Il est vrai que vous avez une arme.";
	sinon:
		dire "Vous pourriez frapper la bête avec vos poings.";
	dire "Mais vous n'êtes pas si cruel.".

Voici la syntaxe à suivre :

  • À l’intérieur d’une règle, commencer la condition par si condition: (ne pas oublier le deux-points). Il est possible de tester plusieurs conditions en même temps en les liant avec et ou ou, comme si le player porte le cimeterre et le player est dans l' Oasis:.
  • Écrire une instruction par ligne sous le si. Ces instructions doivent être indentées un cran plus profond que le si (ne pas oublier les points-virgules). Elles ne seront exécutées que si la condition est vraie.
  • Si l’on veut que quelque chose se passe si la condition est fausse, écrire sinon: (ne pas oublier le deux-points). Le sinon doit être indenté au même niveau que le si. Ajouter un sinon est facultatif.
  • Écrire une instruction par ligne sous le sinon. Ces instructions doivent être indentées un cran plus profond que le sinon (ne pas oublier les points-virgules). Elles ne seront exécutées que si la condition est fausse.
  • Pour exécuter des instructions dans tous les cas, sans se soucier de la condition, écrire la suite de ses instructions en revenant à l’indentation du si.

Si ce n’est pas encore clair, relisez bien l’exemple ci-dessus, testez-le et essayez de le modifier. Il est très important que vous compreniez cette structure, qui est utilisée très souvent.

Un peu comme pour les règles instead, before et after, s’il n’y a qu’une instruction à exécuter, il est possible (mais non obligatoire) de remplacer le deux-points par une virgule : si le player porte le cimeterre, dire "Il est vrai que vous avez de quoi tuer la bête.".

Aussi, il arrive souvent de vouloir qu’une partie d’un texte change en fonction d’une certaine condition. Il est alors possible d’utiliser la syntaxe suivante, intégrée directement dans le texte :

La description du cimeterre est "Un beau sabre à la lame courbe et damassée qui scintille de mille feux[si le player porte le cimeterre]. Vous êtes vraiment heureux de l'avoir trouvé[sinon] est planté dans le sol[fin si].".

Tout ce qui est entre crochets dans du texte n’est pas un commentaire et ne s’affichera pas littéralement. Avec cette construction, le texte sera différent, selon une condition : tout ce qui se trouve entre [si …] et [sinon] ne s’affichera que si la condition est vraie, sinon c’est ce qui est entre [sinon] et [fin si] qui sera affiché. Encore une fois, le [sinon] est optionnel.

Ici, quand le joueur examine le cimeterre, la description de celui-ci, s’il est dans l’inventaire, sera « Un beau sabre à la lame courbe et damassée qui scintille de mille feux. Vous êtes vraiment heureux de l’avoir trouvé. » S’il n’est pas dans l’inventaire, on verra « Un beau sabre à la lame courbe et damassée qui scintille de mille feux est planté dans le sol. ».

Conclusion

Nous avons maintenant toutes les compétences requises pour créer un jeu complet. Cependant, il nous reste encore quelques notions à connaître ; rendez-vous ici pour les apprendre, en même temps que la création de votre première fiction interactive !