[i7] Prise en compte de la saisie vide

Salut à tous !

Me revoilà avec une petite questions techniques. La règle « After reading a command » permet de filtrer la commande du joueur et donc d’intercepter des erreurs pour les traiter de manière appropriée. Ça marche pour tout, sauf dans un cas : lorsqu’on ne tape rien. Ma question est donc la suivante : comment capter cette erreur ? Je sais changer le message par défaut qui s’affiche, mais ce n’est pas ce que je recherche.

Merci d’avance !

Ça ne marche pas car Inform 7 ne se rend pas au stade reading a command quand la commande est vide (c’est ancré plus profondément dans I6). Dans ce cas, il faut utiliser l’activité printing a parser error.

For printing a parser error when the latest parser error is the I beg your pardon error: try waiting
Le code ci-dessus fera attendre le joueur s’il appuie sur entrée sans rien taper, au lieu d’afficher le message par défaut. En revanche, je ne sais pas si ça peut causer des effets indésirables si l’activité est utilisée, comme ici, pour autre chose qu’afficher un message. Mon code ne fera pas avancer le compteur de tours par exemple, et donc ne lancera pas les règles every turn entre autres (ça peut se corriger avec un « follow the turn sequence rule » mais on touche à la machinerie d’Inform, il faut être sûr de ce qu’on fait).

Peux-tu préciser ce que tu veux exactement ? Si ça se trouve, il y a une extension qui fera ça mieux que ce que je peux faire.

Ah, et bien sûr, pour avoir plus d’infos sur l’activité utilisée ici, et pour avoir la liste des erreurs de parser possible, voir la section 18.35 de la doc.

Et bien il semble que ça marche.

Le système que je mets en place consiste à jouer en mode LDVELH (proposition de choix, saisie de numéros pour agir), mais également à retravailler l’apparence du jeu. Je trouve, bien sûr ça n’engage que moi, que l’affichage classique d’une FI fait un peu primitif. À chaque saisie du joueur, la réponse apparaît à la suite. Ça ne donne pas une impression de texte dynamique, de jeu vidéo. Du coup, tout bêtement, à chaque saisie du joueur, j’ai une procédure qui efface l’écran et affiche ce qu’il y a à afficher. La gestion des erreurs ne devait pas échapper à la règle.

Je ne pense pas que l’astuce que tu m’as donné fera des bugs car le système est au final très simple d’usage. Non, vraiment, je suis plutôt enthousiaste car je me retrouve même avec un code extrêmement propre, facile à organiser.

Ouais ! Excellente question et excellente réponse !

( Et qu’on ne croie surtout pas que je plaisante, je me posais la question moi-même )

Bonjour à tous,

Le 24 décembre n’est sans doute pas le meilleur moment pour poser ce genre de questions, mais enfin …
Comment faire pour transformer une saisie vide en « g », répétition de la commande précédente, très utile dans une conversation ?

Merci et Bonnes Fêtes à tous !

P.S : Certains se souviennent peut-être que je suis venu à Inform 7 parce que j’étais inquiet de la pérennité de Quest ? Eh bien, Quest est mort. Son créateur et unique développeur en a assez, ce qu’on peut comprendre.

Ce n’est pas possible par défaut. Pour ça, il faut modifier le code I6 sous-jacent qui s’occupe du parser (parce que la commande « encore » n’est pas à proprement parler une action). J’ai trouvé plusieurs sujets sur la question sur le forum anglophone, mais ils sont tous assez vieux, ce qui implique qu’il faut adapter les codes proposés à la version actuelle d’Inform (et qu’il faudra vraisemblablement le vérifier à chaque nouvelle version d’Inform).

Je pourrais poser la question là-bas si tu veux.

(Pour ce qui est de Quest, il n’est pas forcément mort, il suffit que quelqu’un reprenne le flambeau. Mais c’est vrai qu’il y a des chances que personne ne le fasse.)

Il se trouve que quelqu’un vient d’écrire une extension pour ça.

Ça ajoute une activité qui permet de manipuler la commande du joueur dans le cas où elle serait vide. Pour que ça répète la dernière action :

[code]Include Empty Command Handling by Daniel Stelzer.

For repairing an empty command:
change the text of the player’s command to « encore ».[/code]
Il faut utiliser cette activité seulement s’il y a besoin de modifier la commande du joueur. Si on veut modifier le message par défaut ou l’affichage de manière générale (comme pour Corax), alors il vaut mieux utiliser l’activité printing a parser error.