Le personnage central de la fiction interactive à parser, c’est l’invite de commande, ou pour faire en anglais, le prompt. Ah, le prompt. Si on a l’habitude, c’est un ami que l’on attend impatiemment pour taper notre idée suivante ; pour un débutant, c’est un symbole arbitraire et déconcertant, dont on a du mal à comprendre ce qu’il nous veut. Par sa forme, le plus souvent un chevron (>), il rappelle les invites de commandes classiques que les programmeurs, notamment sous Linux, connaissent très bien. Naturel dans les années 1970, car c’était la seule interface connue, il a été supplanté par des interfaces graphiques plus intuitives, si bien que, pour beaucoup de joueurs modernes, c’est sans doute la première fois qu’ils voient ce genre de choses.

Cet article vous apprendra diverses façons, dans divers contextes, de modifier le prompt ; bien souvent, vous ferez ces modifications dans un souci d’ergonomie, et pour rendre plus intuitive l’interface, même si vous aurez peut-être des idées pour d’autres modifications. Les possibilités sont illimitées ! Voici cependant quelques choses assez classiques.

En Inform 6, les réponses par défaut sont spécifiées dans la fonction LanguageLM, qui regroupe toutes les réponses de la bibliothèque à des actions (et c’est la partie qu’on traduit pour faire des bibliothèques Inform 6 en français, en allemand, en slovène, etc.). On modifie ces réponses par défaut avec l’objet spécial LibraryMessages, plutôt que d’aller trifouiller dans LanguageLM. Pour ce qui est de l’invite de commandes, ça a été implanté comme une fausse action, Prompt ; ce qui fait que, comme toutes les réponses par défaut, le texte de l’invite de commande est stocké dans LanguageLM, et est modifiable par LibraryMessages.

Concrètement : je veux faire un jeu original où l’invite de commande est à l’envers (waouh). Il suffit d’écrire le bout de code suivant, et de le mettre entre l’inclusion de Parser et celle de Verblib :

Object LibraryMessages
  with before [ ; Prompt: "^< "; ];

Si je veux le changer pour qu’il demande de taper une commande (ce qui est quand même plus explicite, tout de même) :

Object LibraryMessages
   with before [ ; Prompt: "^Tapez votre commande ici : "; ];

Le seul avertissement que je donnerais, c’est qu’il y a des cas particuliers qui ne seront pas remplacés par ce message (enfin, vu les bibliothèques à l’heure actuelle) : les prompts de YesOrNo(), de LowKeyMenu() et celui de la fin (« Voulez-vous RECOMMENCER… »), par exemple. Mais ce sont des cas mineurs, qui se règlent en modifiant directement la bibliothèque.

Le plus beau, c’est que vous pouvez mettre n’importe quel bout de code à cet endroit-là ! Par exemple, vous pouvez faire varier le message de prompt pendant la partie. L’exemple donné dans le Designer’s Manual 4 (exercice 59) est celui d’une invite de commande qui demande « Qu’est-ce que vous, le détective, faites maintenant ? » au premier tour, puis « Et ensuite ? » aux tours suivants ; on peut même dire au joueur au bout d’un certain temps que l’on raccourcit le message. Ça donne :

Object LibraryMessages
  with before [; Prompt: switch (turns) {
    1: print "^Qu’est-ce que vous, le détective, faites maintenant ?^>";
    2 to 9: print "^Et ensuite ?^>";
    10: print "^(Ça ne serait pas fatiguant, les @<< Et ensuite ? @>> à chaque fois ? À partir de maintenant le prompt sera plus court.)^^>";
    default: print "^>";
   } rtrue; ];

À vous de voir comment adapter ce bout de code, sachant que vous pouvez utiliser n’importe quelle condition pour faire varier votre message — à vous de jouer !

Bonus pour les fans de Vorple

Vorple ajoute des possibilités intéressantes, notamment dans l’extension « Vorple command prompt control ». Vous pouvez par exemple préremplir le prompt, ce qui peut être utile par exemple pour faire une section « tutoriel » à votre jeu : lorsque vous laissez la main au joueur, il y a déjà écrit « ouvrir la porte » dans l’invite de commande, et le joueur n’a pas à se demander comment taper la commande. Vous pouvez aussi le cacher, en faisant attention : le jeu n’avance que si des commandes sont exécutées, donc il faut avoir des hyperliens prêts, mais ça rend possible de faire une section (ou un jeu) « à la Twine » très facilement ; pour plus de précisions, vous pouvez voir le message de Corax sur le forum.

Vous pouvez aussi ajouter un un infobulle sur l’invite de commande, par exemple pour un message de bienvenue, ou une indication discrète de ce que le joueur devrait faire ; ce sont des outils plutôt chouettes pour cet effet, car ils sont visuellement distincts du monde décrit dans le jeu, s’adressent directement au joueur et disparaissent au bout de quelques secondes. Par exemple, on peut mettre une bulle sur l’invite de commande pendant le premier tour, en écrivant dans Initialise :

VorpleTooltipPrompt("Si vous n’avez jamais joué à une fiction interactive, tapez TUTORIEL.");

Enfin, une dernière possibilité offerte par Vorple est de mettre un hyperlien sur le prompt ; j’ai déjà utilisé ceci dans mes jeux (par exemple dans Tipelau), pour qu’un clic sur l’invite de commande soit équivalent à l’action « regarder ». Le souci dans Vorple est que le prompt doit être une chaîne de caractères, et donc on ne peut pas rajouter d’hyperliens directement (et c’est dommage ; le prompt est quelque chose de spécial, pris en compte séparément par Vorple). Je vous livre alors mon secret : on peut rajouter un peu de code JavaScript au bon endroit dans le jeu pour remplacer le prompt habituel par une version avec un hyperlien :

Object linkOnPrompt "hyperlink on prompt" VorpleInterfaceUpdate
   with description [; VorpleExecuteJavaScriptCommand("$($(haven.prompt.get()).find('#lineinput-prefix').contents()[0]).replaceWith('
<a class="~vorple-link" href="~#~" data-command="~regarder~" data-silent="~false~">&gt;</a>')"); ];

Avec tout cela, plus d’excuses pour se contenter d’une invite de commande classique !