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, 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

Suivons la règle énoncée ci-dessus pour créer un endroit :

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.

Nous pouvons écrire la description de l’endroit 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 est un endroit. "Une belle oasis ensoleillée…".

Ou bien nous pouvons spécifier explicitement quelle doit être la description :

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

La première façon est la plus répandue, mais les deux façons de faire sont valides.

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, conteneur, ou tout autre type existant (voir l’index pour en obtenir la liste) :

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 conteneur, mais pas dans une simple chose.

À présent, nous avons 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 du réalisme et créons du sable. Nous savons comment faire pour qu’il soit impossible de le prendre :

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 il est possible de faire mieux.

En effet, le sable n’est pas un objet que nous souhaitons mettre en avant lors des descriptions (c’est évident qu’il y a du sable dans un désert et une oasis) ; il peut être intéressant de le masquer dans les descriptions, tout en permettant au joueur d’interagir avec lui (l’examiner, le toucher, etc.).

Pour cela, nous utilisons la propriété décoratif :

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

Un objet défini comme décoratif sera automatiquement fixé sur place, il n’est donc pas nécessaire de l’indiquer.

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.

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.

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 :

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

Il existe 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). Si l’on avait écrit morte, il aurait alors été nécessaire de l’écrire au féminin partout.
Ceci n’est pas valable avec les adjectifs définis par Inform, comme décoratif ou ouvert : il est donc possible d’écrire décoratives 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 d’une action.

Malheureusement, les noms des règles 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. 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, mais ce n’est pas obligatoire.

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 !

Attention, les actions n’ont pas été traduites en français non plus, il faut donc utiliser leur nom anglais !

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 !".

Si l’on n’écrit pas l’instruction continuer l’action à la fin d’une règle after, alors le message par défaut ne sera pas affiché (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 « 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

Concrétisons donc cela :

Instead of climbing or entering le dromadaire, dire "L'animal ne se laisse pas faire.".

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 : les tests et les 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.

Ceci é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 joueur a le cimeterre:
		dire "Il est vrai que vous avez de quoi tuer la bête.";
	sinon:
		dire "Vous pourriez frapper la bête avec vos poings.";
	dire "Mais vous n'êtes pas si cruel.".

Voici la syntaxe à suivre :

  • 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 joueur porte le cimeterre et le joueur 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 joueur a 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 joueur 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, si le joueur a le cimeterre, la description de celui-ci 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 ne le porte pas, il 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 !

Je peux créer un monde interactif avec Inform 7 !Click to Tweet