Parser (Inform)

Bonjour,

je trouve que parfois la parser répond d’une manière un peu absurde. Supposons que le joueur insiste pour aller à l’ouest, alors que le seule sortie est l’est par exemple, et bien si le joueur tape : ouest, ouest, o, ouest

Cela répondra quatre fois : Vous ne pouvez pas aller par là.

Étrange non ?

Non.

Si la réponse standard ne te convient pas (bien qu’elle soit acceptée sans pb par les joueurs je pense), tu peux, et c’est toujours un plus je ne dis pas le contraire, la modifier autant que tu veux pour chaque direction!
Je me suis servi un peu de ça dans la cité des eaux.

Exemple:

w_to piece_place,
e_to piece_sortie,
d_to "Prendre par les égoûts? Trop dangereux!^",
u_to "Inutile de se prendre pour spider man...^",

Tu peux même aller plus loin en intégrant carrément du code pour une direction. Ce qui peut te permettre de programmer dix réponses différentes si ça te chante!! Y’a pas vraiment de limite là dessus.
A noter aussi qu’il existe la direction « cant_go » qui correspond à toutes les directions non préparées avec des « w_to », « e_to », etc.

Un exemple qui réunit ces deux derniers points:

	cant_go [;
		if (self hasnt general) {
			print "Hmm... Non, pas par là à priori... Mais le fait d'avoir bougé un peu vous aide à vous repérer un peu plus.^";
			give self general;
			rtrue;
		}
		else {
			print "Inutile d'aller dans cette direction.^";
		}		
	],

c’est logique au contraire, mais c’est une réponse d’ordinateur.
Tu peux également coder quelque chose pour donner une réponse plus personnalisée, par exemple la première fois que l’on demande à aller dans une direction impossible il peut répondre la version par défaut, la seconde fois il peut dire « mais je viens de vous dire que vous ne pouvez aller par là » etc… (je n’ai pas d’exemple à donner, mais c’est faisable).

Ah, je crois que je viens de comprendre la question posée par SIM54 (je n’avais pas compris non plus, au début). Le problème serait le suivant (j’ai vérifié dans un jeu que ça pouvait effectivement se produire) :

>o,o,o,o Vous ne pouvez pas aller par là. Vous ne pouvez pas aller par là. Vous ne pouvez pas aller par là. Vous ne pouvez pas aller par là.

Autrement dit, il y a quatre fois la même réponse sans que le joueur n’ait rien tapé entretemps (parce qu’il a tapé ces 4 actions sur la même ligne).

SIM54, lui, voudrait que dans cette situation, le jeu se rende compte qu’il suffit de répondre une seule fois « Vous ne pouvez pas aller par là. » C’est bien ça ?

Mais je laisse les experts en Inform dire comment obtenir ce résultat…

ok, je vois. J’ai regardé dans le manuel, mais n’ai rien trouvé à ce sujet, je ne sais même pas si c’est facilement faisable.
Déjà, il faudrait tester si la commande est la même (ou produit le même résultat : w, o, west, ouest), et tester si la première au moins fonctionne (et il se passe quoi si seulement la première fois ou les 2 premières fois cela fonctionne ?). Donc pour autant de commandes tapées, il faudrait tester récursivement si ces commandes produisent le même résultat.
Cela me semble compliqué pour pas grand chose : si on tape 4 commandes, surtout si elles sont différentes mais similaires, on peut s’attendre à avoir 4 réponses.

Enfin, il pourrait y avoir des cas où si on insiste, cela produit un événement différent au bout d’un certain nombre de fois que l’on répète la commande (souvent les puzzles qui nécessitent cela sans aiguiller le joueur sont assez injustes…). Si on factorise les réponses, on ne saurait pas exactement quand cela arrive.

(comme on dit, dites-nous ce dont vous avez besoin, on vous expliquera comment vous en passer… :wink: )

Je dois dire que peu de joueurs à mon avis passent leur temps à essayer d’aller quatre fois dans une direction en un coup.
À part si vraiment la description sous-entend qu’il y a quelque chose à l’ouest, mais dans ce cas là c’est la faute de l’auteur.