Que vois-je ? Un compliment ?
Mais bref, commençons par la première question.
Pour les choses non touchables :
Réponse courte : on ne peut pas.
Réponse longue : il faut bidouiller les règles d’accessibilité. L’exemple 216 montre comment faire (section 12.18). Sinon, il y a une extension qui implante ça de façon plus poussée, Far Away par Jon Ingold. Par contre il faut faire attention, car ça peut créer des problèmes si on teste la visibilité manuellement dans le code (« if le blabla est touchable »). Mais je pense que l’extension s’occupe de ça, donc il ne devrait pas y avoir de problèmes. Ce genre de chose aurait du être intégré à Inform, mais bon…
Pour les menus :
Ce sera toujours un peu bricolé, car Inform n’est pas vraiment fait pour ça, mais on peut faire mieux qu’une action. Si c’est vraiment ponctuel, et que ce n’est pas tout le jeu, il vaut mieux utiliser la règle « after reading a command ». Cette règle se déclenche après que le joueur a entré sa commande, mais avant qu’elle ne soit analysée.
J’ai fait un exemple vite fait, à titre « éducatif », mais ça doit être possible de faire mieux (et j’ai peut-être oublié des cas). Par exemple, il faut forcément attendre la fin du tour pour que le joueur fasse son choix, donc les règles qui se déroulent à chaque tour vont se lancer, ce qui n’est pas souhaitable. J’ai utilisé des tableau pour que ce soit modulable facilement, mais on peut aussi faire les vérifications au cas par cas à la place, s’il n’y a qu’un seul menu dans tout le jeu.
[code]Table of Choix 1
Topic Option Réponse
« bonjour/salut » « Dire BONJOUR. » « Bonjour, le joueur[_]! »
« au revoir » or « adieu » « Dire AU REVOIR. » « Ce n’est pas gentil. »
Le menu actuel est un nom de tableau qui varie.
menu en cours est initialement faux.
To montrer (T - un nom de tableau):
maintenant menu en cours est vrai;
maintenant le menu actuel est T;
let N be 0;
parcourir T:
incrémenter N;
dire « [N]. [entrée Option][à la ligne] ».
After reading a command while menu en cours est vrai:
[Si le joueur a entré un nombre.]
si la player’s command correspond à « [number] »:
let N be the number understood;
si N > nombre de lignes du menu actuel or N <= 0:
dire « Veuillez entrer un nombre entre 1 et [nombre de lignes du menu actuel]. »;
rejeter la commande du joueur;
choisir la ligne N du menu actuel;
dire « [entrée Réponse][à la ligne] »;
maintenant menu en cours est faux;
rejeter la commande du joueur;
[Sinon si le joueur a entré du texte.]
sinon:
parcourir le menu actuel:
si la player’s command correspond à l’ entrée Topic:
dire « [entrée Réponse][à la ligne] »;
maintenant menu en cours est faux;
rejeter la commande du joueur;
dire « Veuillez faire un choix parmi les options présentées. »;
rejeter la commande du joueur.
Instead of jumping:
montrer table of Choix 1.[/code]
Je n’ai pas trop commenté, j’espère que ce sera assez clair. La colonne « Réponse » dans le tableau peut être remplacée par une colonne de règles pour exécuter des instructions plutôt que de juste afficher un texte. Pour plus d’infos sur ce genre de tableau avec des topics, voir la section 16.13.
Sinon, pour ne pas avoir à attendre la fin du tour (sans plonger dans I6), on peut facilement assigner chaque choix à une touche du clavier, et afficher le résultat quand cette touche est appuyée. J’ai fait ça dans le Chant des dunes (voir « Part 2 - Affichage du menu principal » du fichier mis en lien), gros projet que j’ai à peine commencé (il faut vraiment que je m’y remette). Il faudra adapter un peu par contre (si cette solution t’intéresse, je peux toujours la montrer dans un cas plus général). Ou alors il doit y avoir des extensions qui permette de faire comme mon exemple, mais quand on veut dans le code et pas à la fin du tour, mais je n’ai pas cherché.