Le Récit Interactif- Xyzzy

Conception, écriture et enjeux.

Séance A : Inform, ...

Rappel : le code minimum pour les IFA

Pour qu'un texte soit opérationnel avec Inform (attention, c'est différent avec Playfic), il est nécessaire de déclarer le nom de la fiction entre guillemets suivie du nom de son auteur et de créer une première room.

"Nom de la fiction" par nom de l'auteur.
La piece1 is a room.

Créer des synonymes pour les objets

Les synonymes permettent de donner plusieurs noms pour faire appel à un objet.

Dans certains cas, vous pouvez avoir besoin d'utiliser des synonymes pour désigner le même objet.

Si j'ai besoin par exemple de faire en sorte que le lecteur puisse parler de lame, sabre, épée ou arme pour désigner l'objet que j'ai désigné dans le code par "lame", je dois écrire :

Understand "lame/sabre/épée/arme" as lame. 

De cette manière, je peux évoquer la lame en parlant d'épée ou de sabre dans différentes descriptions sans induire l'utilisateur en erreur.

Des synonymes pour les verbes

Il est également possible de créer des synonymes pour les verbes:

Understand the command "attraper" as "examine".

A partir du moment où le synonyme est crée, il est possible d'écrire "manipuler" pour examiner un objet.

Attention : faire en sorte que le verbe utilisé pour être un synonyme ne soit pas déjà pris pour une autre commande.

Bonne pratique : lier le code au texte

Il est possible que l'écriveur oublie de créer un objet qu'il décrit pourtant ce qui peut créer une situation frustrante pour le lecteur qui ne peut interragir avec cette objet.

Par exemple, je peux créer une room appelée clairière :

La clairière is a room."Il n'y a rien d'anormal dans la clairière à l'exception d'une jolie petite pierre noire qui retient votre attention."

Mais vous pouvez oublier de déclarer la pierre dans le code. Pour être sûr de ne pas vous tromper, il est possible de relier le code au texte, Inform vous Inform que vous avez oublié la déclaration.

Pour ce faire, il suffit d'ajouter des crochets "[" "]" (les mêmes que pour les commentaires) autour de l'objet à déclarer.

La clairière is a room."Il n'y a rien d'anormal dans la clairière à l'exception d'une jolie petite [pierre noire] qui retient votre attention."

Si vous jouez ce code un message d'erreur s'affiche vous rappelant qu'il faut rajouter la déclaration de la pierre noire.

la pierre noire is an object in La clairière.
La clairière is a room."Il n'y a rien d'anormal dans la clairière à l'exception d'une jolie petite [pierre noire] qui retient votre attention."

When : des commandes relatives à une situation

Si je souhaite empêcher le personnage d'aller au nord, je peux écrire :

Instead of going north, say "Désolé mais vous ne pouvez pas aller par là."

Mais il est probable que très vite, quand il sera dans une autre situation, le personnage aura besoin d'aller au nord. Comment faire en sorte que cette action ne s'applique qu'à un moment donné?

C'est "when" que nous avons déjà vu pour "when play begins" qui va nous sauver. "When" permet dans notre cas par exemple d'empêcher l'action seulement quand le personnage est dans une zone ou une pièce.

Instead of going north when the player is in le désert, say "Désolé mais vous ne pouvez pas aller par là."

Une fois que le lecteur n'est plus dans le désert, il peut à nouveau retourner au nord.

Nous venons de voir un exemple d'utilisation de "when the player is in [a room]", quand le personnage est dans une room. Mais il est également possible d'appliquer when à d'autres situations, comme par exemple quand le personnage porte ou est habillé de quelque chose.

Instead of going north when the player carries [le poids], say "Vous êtes trop chargé, vous ne pouvez plus bouger."

Dans ce cas, le lecteur ne pourra aller au nord que s'il ne porte plus le poids

When est compatible avec les conditions, il est donc possible de mixer tout ce que nous avons pour l'instant, instead, before et after avec les conditions et when, comme par exemple :

Before going north when the player is in le désert :
	if the player carries le [poids]
		say "Vous êtes trop chargé...";
	otherwise:
		say "Vous partez";

Exercice : GPS

Consigne : Créer deux rooms, B est au sud de A. Dans A, il y a un GPS. Le personnage doit porter le GPS pour aller dans B. Quand le personnage examine le GPS, un message différent s'affiche selon qu'il soit dans A ou B.

Description avec aléatoire

Dans certains cas, il est pratique de varier les descriptions pour un objet ou une pièce afin de donner plus de profondeur à la fiction. Avec [one of] texte 1 [or] texte 2 [or] texte x [then purely at random], il est possible de faire en sorte qu'un message différent s'affiche à chaque fois qu'une même interaction est effectuée.

Par exemple, si je décris une pièce et que je souhaite qu'à chaque fois que le lecteur la regarde, un nouveau message apparaisse, je peux écrire :

La grande étendue is a room. The description of La grande étendue is "[one of]C'est un grand espace avec pas grand chose de visible [or] A bien y regarder, il y a quand même deux ou trois choses [or] Vous remarquez d'ailleurs ce [morceau de bois] bizarre [then purely at random]."

La première fois que le lecteur regarde la pièce, il lit "C'est un grand espace avec pas grand chose de visible." puis la seconde fois, au lieu d'avoir la même phrase, il découvrira sur son écran "A bien y regarder, il y a quand même deux ou trois choses." etc.

A la fin, si le lecteur recommence l'action plus de fois qu'il n'y a de choix, les descriptions se renouvellent en reprenant l'ordre qu'elles avaient au début.

Nous verrons un peu plus tard que d'autres options sont possibles.

A noter le point final après "[then purely at random]" qui s'ajoute après chacun des choix, il est ainsi possible de rajouter une phrase finale qui reviendrait dans toutes les descriptions en écrivant simplement après [then purely at random].

Créer ses propres kinds

Avec Inform, il est possible créer ses propres objets. Créer un objet revient à créer un nouveau kind.

La création d'un kind n'est en soi pas très compliquée. Il suffit d'écrire :

sabre (ou le nom du kind à créer) is a kind of thing. A sabre is usually portable.

Dans notre exemple, nous avons créer un objet de type sabre. Nous pouvons dire que:

katana is a sabre in le dojo.

Un objet de type sabre du nom de katana est ainsi crée. Comme nous n'avons rien rajouter, le katana est portable.

L'objet "is usually portable" signifie que par défaut l'objet présente cette caractéristique mais qu'elle peut-être changée. Si on veut dire qu'elle est toujours ainsi, on pourrait écrire "katana is always portable", ce qui dans notre exemple semble d'ailleurs plus juste.

Katana is always portable.

Créer ses propres properties

En plus de la création de nouveaux objets, il est aussi possible de créer de nouvelles caractéristiques.

Ces nouvelles caractéristiques ou "properties" ne s'appliquent pas qu'au nouveaux objets et peuvent être utilisés pour des kinds pré-existants.

Pour créer une nouvelle propriété, il suffit de l'ajouter à un kind:

sabre is a kind of thing. A sabre is usually portable. sabre can be sharp or nonsharp.

Les propriétés ne vont pas forcément par pair, il est possible de créer un objet "cup" ayant une propriété avec trois options par exemple :

cup can be small, medium or large.

Nous reviendrons par la suite sur l'intérêt de ces propriétés car il n'est pas encore toujours facile de comprendre en quoi il nous est utile de savoir en créer de nouvelles.

Nous pouvons pour l'instant nous contenter de les utiliser lors des conditions.

Les scènes - les premières bases

Une scène, c'est quoi

Une scène permet de gérer l'écoulement du temps dans une IFA, elle se déroule en plusieurs moment

  • le début qui peut déclencher une action de type quand la scène commence, il se passe ceci.
  • le déroulement : à chaque tour de la scène, il se passe ceci, ou au bout de temps de tours, il se passe cela.
  • la fin de la scène qui peut déclencher ou arrêter une action.

Syntaxe des scènes

Généralement une scène prend une majuscule. Elle se déclare ainsi :

L'Arrivé du train is a scene.

Une fois la scène déclarée, il s'agit désormais de dire ce qui fait qu'elle s'enclenche et de qualifier les évènements qui vont s'y produire une fois qu'elle aura débutée, quand elle se déroulera et quand elle sera achèvée.

Le début d'une scène

Il faut dire quand une scène commence. Par exemple

L'arrivée du train begins when the player is in la gare for the first time.

La scène commence quand le personnage arrive dans la gare pour la première fois. Maintenant que nous savons quand elle commence, il convient de décrire ce qui se passe quand c'est le cas:

When L'Arrivée du train begins, say "Vous voyez le train entrer dans la gare."

Ainsi, nous pouvons que quand la scène commence, un nouveau message apparait.

For the first time...

Il est possible de rajouter une indication du type "for the second time" pour dire à quel moment s'enclenche une action.

Le déroulement d'une scène

Quand une scène est enclenchée, nous pouvons faire en sorte que des actions se réalisent à chaque tour par exemple.

Every turn during La fête, say "Il y a quand même beaucoup de bruit".

La fin d'une scène

La fin d'une scène correspond à ce que nous avons vu pour le début d'une scène. Il suffit de déclarer le moment où elle se termine et les commandes qui lui sont associées.

Le Meurtre ends when the time since Le Meurtre began is 2 minutes. When le Meurtre ends,say "Oh non, il y a une nouvelle victime..."

Le nombre de minutes correspondent en fait au nombre de tour.

La structure "ends when the time since [La Scène began is X minutes]" a une syntaxe un peu particulière mais est très pratique pour décider de stopper une action à un moment précis quoiqu'il se passe.

Enchaîner deux scènes

Il est possible de se servir de la fin d'une scène pour en actionner une nouvelle.

Le Meurtre4 is a scene. Le Meurtre4 begins when Le Meurtre3 ends.

Séance 2 : Mise en pratique

Contrainte : Happening au musée

Consigne : Ecrire un huis-clos qui raconte seulement par le biais de l'interaction entre le personnage et les objets de la pièce, ainsi que des évènements générés par des scènes, une courte histoire.Le personnage ne quitte jamais la pièce.

Exemple :

Le personnage principal visite un grenier.

Au début, il n'y a que des cartons. Le personnage doit trouver son cutter pour les ouvrir.

En les ouvrant, il découvre tout un tas d'objets dont les descriptions donnent des informations importantes et qui enclenchent parfois des situations plus ou moins étranges.

Quand il ouvre une boite, une créature sort brusquement (une scène commence) et plusieurs évènements se déroulent pendant plusieurs tours (des objets apparaissent, d'autres sont détruits), avant que la bête ne disparaisse et que le personne retourne à son exploration...

Quelques points de détail

Créer une seule salle (seulement 1 room) avec de nombreux objets placés à l'intérieur.

Vous créérez les kinds d'un grand nombre de ces objets et vous leur ajouterez des propriétés que vous définirez vous même.

Les objets auront plusieurs descriptions qui pourront se succéder alternativement grâce au random vu en cours (pas forcément tous les objets mais au moins certains).

Certains objets n'apparaitront qu'après que d'autres aient été examinés ou manipuler (n'hésitez pas à jouez avec vos nouvelles propriétés).

Les descriptions, l'état de la pièce, etc. évoluent en fonction des actions commises.

Vous ferez un effort particulier en prêtant attention aux descriptions initiales des objets.

Régulièrement, des évènements générés grâce aux scènes se produiront parce qu'un certain temps est écoulé ou parce que des actions sont accomplies.

`

Gaétan Darquié- IUT de Montreuil © 2013 | Dernière mise à jour le 30 septembre 2013