Bibliothèque (French.h) : pistes d'amélioration

Oui, mais dans le cas d’Akien ça passe pas du tout, le héros est une souris :slight_smile: Mais la solution est simple : définir une classe Humain et y traiter les ordres intelligemment.

Pour l’action LookUnder, que nous avons tous tendance à oublier en tant qu’auteurs, ne devrait-on pas chercher une réponse par défaut qui reste satisfaisante dans toutes les situations ?

La réponse par défaut actuelle est : « Vous ne trouvez rien d’intéressant. »

C’est assez mauvais pour des objets sous lesquels on n’est pas censés regarder (regarder sous le gros rocher), parce que cela suggère qu’on a pu réellement regarder.

Contraintes :

  • la réponse doit être cohérente que l’on ait le droit de regarder sous l’objet ou non
  • si on choisit de transférer « regarder derrière » (en plus de « regarder sous ») vers LookUnder plutôt que Search, la réponse doit être cohérente aussi pour cette action

Avez-vous une idée ?

Remarque annexe pour les auteurs : regarder/fouiller sous ou derrière un objet peut être pertinent dans de nombreuses situations du point de vue du joueur, pensez à gérer cette action quand elle est pertinente.

je propose toujours mon :

:slight_smile:

plus sérieusement, le problème c’est qu’il ne me semble pas faisable de trouver une réponse qui puise satisfaire à la fois une action possible et impossible dans ce cas. Le mieux serait de pouvoir tester si l’objet fouillé n’est pas scenery ou fixed in place, et de donner une réponse en fonction de cela, mais cela sera un peu une usine à gaz pour pas grand chose. En fait, cela sera juste pour intercepter si le joueur passe des commandes pas forcément très logiques (même si parfois il n’en a pas conscience), ex : fouiller sous le bloc de 15 tonnes, fouiller sous la tour eiffel, mais aussi, fouiller sous la buche (on ne sait pas forcément si c’est trop lourd ou pas)
Je ne suis pas un très grand partisan du « fouiller sous », car c’est souvent synonyme de « fouiller » tout court : si on fouille « un pot », on fouille le pot et son environnement. Je vois surtout la pertinence de « fouiller sous » dans le cas de « fouiller sous le lit »…

Je pense que si, le tout est de trouver une formulation. Par exemple : « Vos efforts ne produisent aucune découverte notable. » Ça suggère un peu moins qu’on a réellement pu regarder sous le bloc de 15 tonnes . Et je suis sûr qu’on peut trouver mieux.

Ou encore, très lourd : « Dans l’hypothèse où cette action aurait abouti, vous ne trouvez rien d’intéressant », ou « Vous ne trouvez rien d’intéressant, pour peu que votre recherche ait un sens »

Sinon, en désespoir de cause, « Vous ne trouverez rien ainsi. » a le mérite d’éviter les réponses à côté de la plaque (ce n’est pas très loin de ton « Impossible ! » :slight_smile:).

En tout cas M. Nelson a décidé pour nous puisque l’action LookUnder existe, donc on doit faire en sorte que l’action renvoie toujours quelque chose de pertinent… Si on trouve une formulation pour le cas général les auteurs n’auront plus qu’à gérer le seuls cas pertinents, comme « regarder sous le lit ».

oui, en tout cas ils ne se sont pas trop embêtés parce que la réponse est « You find nothing of interest. ».

J’aime assez le « Vos efforts ne produisent aucune découverte notable. ». Pour être encore plus neutre, on peut imaginer « Votre action ne produit aucune découverte notable. » ou encore « Cette action n’aboutit à aucune découverte notable. »

note : en fait au début je croyais lookunder renvoyait simplement à search.

je viens de voir que l’on avait jadis utilisé pour cette action « Mes recherches furent vaines. » Je présume que c’est JB qui avait trouvé cela soit pour ekphrasis, soit pour lieux communs. Je trouve que c’est une bonne formule, qui reste assez neutre.

Liste des derniers changements :

  • verbe « creuser » : ajout des grammaires « * ‹ dans › noun » et « * ‹ dans › noun ‹ avec › held » (donnant l’action Dig)
  • regarder « sur » renvoie maintenant Search et non Examine, conformément à la lib anglophone
  • Correction de la formulation « sauter par dessus (objet) » ou « sauter au dessus de (objet) » qui ne fonctionnait pas, car LanguageToInformese transforme le mot « dessus » en « sur -lui ». Une fois adaptée la grammaire du verbe pour en tenir compte, ça marche.
  • Message par défaut pour LookUnder : « Vos efforts ne produisent aucune découverte notable. » au lieu de « Vous ne trouvez rien d’intéressant. », afin de moins suggérer qu’on a effectivement pu regarder sous l’objet en question (il est encore temps de se manifester si vous trouvez une meilleure formulation).
  • Message par défaut pour Exit modifié de « Sortir d’où ?! » en « Vous n’êtes à l’intérieur de rien pour le moment. », plus proche de la version anglaise. Comme toujours je suis preneur des idées pour une meilleure formulation.
  • Maintenant, si on tape « attacher le pied et la chaise », qui causait le message « Vous ne pouvez pas utiliser le mot tout (ou une liste) avec ce verbe », on a le message : « [reformulez : attacher … avec …] » (vieux problème soulevé par Eriorg lors du travail sur Lieux Communs). Cette solution n’est pas excellente mais il me semble que ça apporte une petite amélioration. Rappel : le problème, au départ, est lié au fait que « … et … » est compris comme une liste et qu’on ne peut donc pas utiliser le mot ‹ et › comme préposition dans la définition d’une grammaire.

Voici une nouvelle modification :

  • Modification des verbes « (se) lever » et « debout » : création de l’action SeLever qui ne fait que déterminer vers quelle action détourner la commande. Si le joueur est dans un objet, alors l’action est transformée en Exit, après avoir indiqué au joueur comment on a interprété sa commande : « (sortir de [l’objet]) ». Sinon l’action ne fait qu’afficher un message qui pour l’instant est « Inutile. »
  • la formulation « se lever de (objet) » est comprise

Le problème était que « se lever » est toujours automatiquement transformé en « sortir », ce qui peut causer des comportements génants. La correction n’est que partielle, mais je pense que c’est un petit ‹ mieux ›.

La discussion sur flyspray : informfr.tuxfamily.org/flyspray/ … task_id=24

très bien, j’ai adapté cela pour I7 également. J’ai essayé de faire de même pour les précédentes remarques, lorsque c’était possible.

je reviens là dessus :

le problème c’est que cela peut produire des ambiguïtés si par exemple l’auteur créé un tunnel ou un lieu qui implique fortement l’idée d’être à l’intérieur de quelque chose. Après on pourra dire aussi que cela est un défaut de conception de l’auteur, mais on pourrait aussi envisager d’écrire qque chose comme « Veuillez indiquer une direction précise svp » (ou …direction cardinale…) car il peut aussi y avoir plusieurs sorties, d’où l’absence de out_to …

Un petit détail, qui m’est venu à l’esprit récemment en jouant aux jeux du concours… Le message de fin de jeu est actuellement :

Y a-t-il vraiment besoin de mettre « quitter » 2 fois ? Il me semble qu’il suffirait de le mettre une seule fois, en majuscules :

oui tu as raison. Historiquement il n’était peut être pas possible d’utiliser la commande « quitter ». Dans mes archives j’ai trouvé qu’on avait déjà corrigé cela pour un des modes existant, je présume que c’était pour la version de lieux communs (ou c’était JB qui l’avait fait dans le code qu’on a récupéré de son jeu). J’ai retrouvé aussi une version avec marqué « ou quitter (QUIT) », ce qui pourrait expliquer cela mais cela n’a plus lieu d’être.

J’ai corrigé sur notre dépôt svn.

J’ai quelques pistes d’améliorations suite au retour d’Eriorg qui a pointé pas mal d’éléments dépendants des librairies sur mon jeu « Brume », et à des tests personnels.

Je cite:

Remarque 1 :

Remarque 2 :

Ici c’est un problème qu’on avait commencé à approcher avec Stormi mais on a pas encore trouvé la solution miracle. Quand on définit des objets identiques, on ne peut pas agir avec eux en groupe pour certaines actions.
Otto, je vois que dans ton jeu « Lettres volées » le problème n’apparaît pas avec les enveloppes. Particularité d’Inform 7 ou as-tu trouvé une solution que je n’ai pas ?

Remarque 3 :

Remarque 4 :

Le nom « chambre » est dans la propriété ‹ name › du lieu de même nom, mais regarder le ‹ name › d’un lieu renvoie un message d’erreur. Je pensais pourtant que ça renvoyait ‹ look ›, mais peut être que l’erreur vient de mon code ?

en fait j’ai créé les timbres de la même manière que les enveloppes. Je soupçonne un synonyme de traîner quelque part et d’interférer. Effectivement, pour les pluriels, c’est des fois difficilement géré. D’un autre côté, avec les enveloppes quand on fait « x enveloppes », cela dit « rien de particulier concernant l’enveloppe ». Cela me semble difficile de gérer cela pour plusieurs objets. Pour les timbres, qui marque le même message d’erreur que toi, j’ai feinté ainsi ensuite :

Understand "x timbres" or "regarder timbres" or "examiner timbres" as a mistake ("Lorsqu[']ils sont accessibles, ces objets ne sont pas à examiner collectivement.").

Je corrige sur le svn pour l’espace, j’espère que je suis bien tombé.

pour : Vous ouvrez le tiroir de gauche.
il me semble qu’inform ne précise qu’il y a qque chose que lorsque justement l’objet en contient un autre.

Vous pouvez me confirmer que la dernière version des bibliothèques francophones est bien la 2.3 :question:

La dernière qui ait été diffusée à tous oui. La 2.4 est en développement (au point mort ces derniers mois, il faudrait qu’on s’y remette pour la finaliser).

Note pour moi-même : il serait bon de sortir la 2.4 avant le concours.

Bonjour,
la routine LanguageNumber(n) située dans French.h pour inform 6 ou 7 est largement boguée.

LanguageNumber(123) affiche:
un centvingt-trois

LanguageNumber(1250) affiche:
un mille, deux centcinquante

LanguageNumber(300) affiche:
trois cent
(il manque le « s » à 300)

Bien vu.
J’ai constaté que cette partie avait été remaniée dans le code d’inform 6 (correction de « milles » en « mille »), mais il reste des incorrections.

En indiquant ce code à la place de ce qu’il y a au début, cela corrige pas mal de problèmes :

[ LanguageNumber n f; if (n==0) { print "zéro"; rfalse; } if (n<0) { print "moins "; n=-n; } #Iftrue (WORDSIZE == 4); if (n >= 1000000000) { if (f == 1) print " "; print (LanguageNumber) n/1000000000, " milliards"; n = n%1000000000; f = 1; } if (n >= 1000000) { if (f == 1) print " "; print (LanguageNumber) n/1000000, " millions"; n = n%1000000; f = 1; } #Endif; if (n >= 1000) { if (f == 1) print " "; if (n/1000 == 1) print "mille "; else print (LanguageNumber) n/1000, " mille"; n = n%1000; f = 1; } if (n>=100) { if (f == 1) print " "; if (n/100 == 1) print "cent "; else print (LanguageNumber) n/100; if (n%100 ~= 0) print " cent "; else print " cents"; n=n%100; f = 1; }

j’ai commité le code sur le svn (inform 7 seulement)

Otto, peux-tu poster le résultat de cette nouvelle routine pour les exemples d’auraes ?

Je pense qu’on peut la committer pour inform 6 également.

en fait ça serait plutôt ça :

[ LanguageNumber n f; if (n==0) { print "zéro"; rfalse; } if (n<0) { print "moins "; n=-n; } #Iftrue (WORDSIZE == 4); if (n >= 1000000000) { if (f == 1) print " "; print (LanguageNumber) n/1000000000, " milliards"; n = n%1000000000; f = 1; } if (n >= 1000000) { if (f == 1) print " "; print (LanguageNumber) n/1000000, " millions"; n = n%1000000; f = 1; } #Endif; if (n >= 1000) { if (f == 1) print " "; if (n/1000 == 1) print "mille "; else print (LanguageNumber) n/1000, " mille"; n = n%1000; f = 1; } if (n>=100) { if (f == 1) print " "; if (n/100 == 1) print " "; else print (LanguageNumber) n/100; if (n%100 ~= 0) print " cent "; else print " cents"; n=n%100; f = 1; }

j’ai essayé de faire un code qui permettrait d’entrer des valeurs (par exemple avec « compter 323412 ») et de donner le résultat, mais je n’y arrive pas encore. En entrant qques valeurs prédéfinies, j’ai cela avec le code au dessus (il y a encore quelques espaces en trop pour le moment, mais le reste semble correct) :

123 : cent vingt-trois.
1250 : mille deux cent cinquante.
2400 : deux mille quatre cents.
1251 : mille deux cent cinquante et un.
1142 : mille cent quarante-deux.
300 : trois cents.
552341 : cinq cent cinquante-deux mille trois cent
quarante et un.
45552341 : quarante-cinq millions cinq cent
cinquante-deux mille trois cent quarante et un.

[ LanguageNumber n;   ! -32767 >= n <= +32767
	if (n == 0) { print "zéro"; rfalse; }
	if (n < 0) { print "moins "; n=-n; }
	if (n >= 1000) {
		if (n > 1999){ print (LanguageNumber) n/1000;  print " ";}
		print "mille";
		n = n%1000;
		if (n) print " ";
	}
	if (n >= 100) {
		if (n > 199){ print (LanguageNumber) n/100; print " ";}
		print "cent";
		if (n == 100) rfalse;
		n = n%100;
		if (n) print " "; else print "s";
	}
	if (n==0) rfalse;
	switch(n)
	{
		1:  print "un";
		2:  print "deux";
		3:  print "trois";
		4:  print "quatre";
		5:  print "cinq";
		6:  print "six";
		7:  print "sept";
		8:  print "huit";
		9:  print "neuf";
		10: print "dix";
		11: print "onze";
		12: print "douze";
		13: print "treize";
		14: print "quatorze";
		15: print "quinze";
		16: print "seize";
		17: print "dix-sept";
		18: print "dix-huit";
		19: print "dix-neuf";
		20: print "vingt";
		30: print "trente";
		40: print "quarante";
		50: print "cinquante";
		60: print "soixante";
		70: print "soixante-dix";
		71: print "soixante et onze";
		72 to 79: print "soixante-", (LanguageNumber) 10 + n%10;
		80: print "quatre-vingts";
		81 to 89: print "quatre-vingt-", (LanguageNumber) n%10;
		90 to 99: print "quatre-vingt-", (LanguageNumber) 10 + n%10;     
		default:
			print (LanguageNumber) n - n%10; 
			if (n%10 == 1) print " et "; else print "-";
			print (LanguageNumber) n%10;
	}
];
! "mille un" mais pas "mille et un" ou "mille et une"
! "vingt et un, trente et un, etc" mais pas "vingt et une, trente et une, etc"
! "mille cent, mille deux cents, etc" mais pas "onze cents, douze cents, etc"