Un ptit bug dans les biblis d'I6 ?

Oui tout à fait, c’est exactement ça. Tu n’as peut-être pas remarqué Auraes, mais je suis favorable à ce qu’apporte ton amélioration au niveau de la syntaxe pour l’auteur : C’est plus rapide, plus logique d’écrire ‹ grand-père ›, que d’écrire ‹ grand › ‹ père ›.
En revanche, c’est moins pratique si le joueur ne peux pas taper « grand père », et ce n’est pas une solution de contraindre l’auteur à taper non seulement ‹ grand-père › et ‹ grand › ‹ père ›.

Je pense que Jean-Luc a réalisé un beau travail lorsqu’il a traduit et adapté ces bibliothèques en français, d’autant plus que le français c’est beaucoup plus d’irrégularités, de cas particuliers, de genres à gérer que dans la langue originale en anglais. Après, on peut sans doute mieux faire, mais il faut que ça apporte plus d’avantages au final que dans ce qui aura été remplacé.

Il semble plutôt que vous fassiez exprès de ne pas les corriger.

Ça, tu t’abstiens.

Qui agresse qui ?

Personne ne dit le contraire. Il a fait le plus dure. Mais s’il rend son travail public, c’est je pense aussi pour qu’il puisse être amélioré. Mais vous semblez empêcher ces modifications; j’aimerai bien avoir son point de vue. Et si il y a des modifications à faire, et il y en a, je ne suis certainement pas le plus compétant ni le plus intéressé pour les faire.

Dixit.

Cela vaut pour tout le monde, y compris moi. Enfin, en fait surtout toi et moi. Te concernant, le message que tu viens de poster n’est pas un modèle de tact : tu viens encore de nous prêter l’intention de ne pas corriger les bugs alors qu’on n’a fait que dire le contraire. On veut simplement que ça soit fait bien.

Enfin, à titre personnel, j’accorderai beaucoup plus d’intérêt à tes propositions quand je n’aurai plus l’impression d’être considéré comme buté et réticent à tout changement. Tout changement, je le considère, je l’étudie, et le cas échéant je pointe ce qui ne va pas dans la proposition. Quant à corriger les bugs, tout le monde est pour : y a qu’à. Sauf que ça demande de l’investissement et qu’on fait tous ça sur notre temps libre parmi d’autres engagements.

Tentative de résumé de nos échanges, faisant abstraction du ton employé par les uns et les autres :

  • Tu as signalé un problème dans LanguageToInformese et tu as donné une solution : je l’ai corrigé.
  • Tu as signalé un problème avec la gestion des tirets et proposé une solution qui apporte plus d’inconvénients pour les auteurs et les joueurs que la situation actuelle : j’ai bien pris note du problème, mais je ne peux pas appliquer ta correction telle quelle.
  • Tu as signalé un problème sur les pronoms, mais sans dire quel est ce problème (ou bien j’ai mal vu), comment il se manifeste, quelles sont ses conséquences : je n’ai pas encore regardé. Plus d’informations me motiverait sûrement.
  • Tu as signalé un problème avec les accents sur ‹ à › et ‹ là › dans la grammaire, et proposé une solution qui ne convient pas totalement (risque de comportement inexplicable pour le joueur si ‹ à › se retrouve par malheur dans le dictionnaire). J’ai bien noté le problème. On a une solution de contournement à l’heure actuelle, mais on pourrait faire mieux. Y a plus qu’à.
  • Otto a signalé un problème avec les apostrophes dans inform 7 en français. On pourra peut-être corriger dans la lib francophone, à moins que cela ne soit à corriger dans inform lui-même.
  • Tu as signalé que « je » est effacé en premier mot mais pas ‹ tu › ‹ nous › ‹ vous ›. Quelle serait la solution ?
  • Tu as signalé que les ordres donnés à des personnages peuvent être altérés à cause des modifications qu’on apporte au texte. Quelle serait la solution ?
  • Tu as signalé que des fonctions de LanguageLM ont été désactivées : quel est le problème exactement ?

En résumé : merci pour tous les rapports de bug, et merci d’avance pour soit des solutions concrètes qui tiennent compte de tous les paramètres en jeu, soit pour ta patience et ta compréhension.

Point trop n’en faut.

Bon, avant que je parte hiberner pendant de longs mois et sans ordinateur, je prendrai peut être le temps de répondre…

Mais là, je regardai les « Petits trucs bien utiles en Inform 6 » d’Hugo Labrande sur son site hlabrande.fr/if/inform6trucs.html et j’ai quelques commentaires à faire :

1.Éviter (très) localement une clarification :

parse_name [ n w; w = NextWord(); while(w) { if (w = 'nom' && action_to_be == ##Action && condition) {n=n+10;} else {n++;} } return n; ],Il sert à quoi le While(w) ? À rien. Il manque un w = NextWord() dans la boucle. parse_name [ n w; w = NextWord(); while(w) { if (w = 'nom' && action_to_be == ##Action && condition) n=n+10; else n++; w = NextWord(); !/* Sinon le while ne sert à rien } return n; ],
2. Quand votre jeu n’a pas de salle plongée dans l’obscurité (Zarf) :

[ OffersLight obj; if (obj == nothing) rfalse; else rtrue; ]; Définir une class room avec l’attribut light semble quand même plus aproprié.Class Room has light; Room jardin; Room parc; etc
3. Reconnaître des noms avec des apostrophes dedans:
« Quand Inform parse des commandes, si il voit des apostrophes, il rajoute un espace après, ce qui transforme le mot en deux mots ; »
Ces sont les librairies française qui font ça : pas Inform, qui ne coupe que le point,la virgule et le guillemet.(un caractère espace et féminin, donc « une » espace et non « un » espace…)

4.Attendre que le joueur appuie sur une touche (Roger Firth):
Est-ce que ce type de conseil n’est pas obselète, et fonctionne il pour Glulx ? [ attendre notNeeded; @read_char 1 notNeeded; rtrue; ]; La déclaration de la routine : read_char 1 time routine → (result)
Pour Zcode :[ attendre key; read_char 1 ->key; ]; Pour être compatible Zcode/Glulx mieux vaut utiliser :
KeyCharPrimitive();
KeyDelay(time);

Tu peux rajouter sur ta liste que :

Vous mangez la pomme | Et traduit, après bidouilles : mangez vous la pomme
Donc rejet du parser (C’est pareil pour Nous.)
Vous regardez | Fonctionne, sauf que la forme pronominale c’est : Vous vous regardez.

En fait, il traite le ‹ vous › ou ‹ nous › comme une forme pronominale.(Je passe sur le fait d’avoir choisi ‹ vous › pour marquer, après le verbe, la forme pronominal. ‹ soi › prête moins à confusion.)

Se regarder : regarder soi.

La solution est simple, tu remplaces cà :! Suppression de 'je' ou 'j^' en début de phrase. ! Par exemple, "je vais au nord" devient "vais au nord". if (Mot(0) == 'je' or 'j^') { EcraseMot(0); Tokenise__(buffer,parse); } par ça :

if (Mot(0) == 'je' or 'j^' or 'tu' or 't^' or 'on' or 'nous' or 'vous') { EcraseMot(0); Tokenise__(buffer,parse); } Par contre vos librairies ne gèrent pas les verbes pour le ‹ tu › ! Le nous et le vous, oui !? Alors qu’ils sont quand même plus improbables et moins utiles.

Pour le ‹ à ›, tu remplaces dans ta routine enleve_accents cà : if (word==0) ! non compris par ça: if (word==0 || word == 'à//') ! non compris
Pour l’apostrophe, tu remplace ça : for (i=WORDSIZE:i<WORDSIZE+NbChars():i++) { if (buffer->i == '-') LTI_Insert(i++, ' '); if (buffer->i == ''') LTI_Insert(++i, ' '); ! ''' !*! autre notation ? '\'' par exemple ? }Par ça : for (i=WORDSIZE:i<WORDSIZE+NbChars():i++) { if (buffer->i == '-') LTI_Insert(i++, ' '); }Et ça, dans ta routine enleve_accents :for (i=at:i<at+len:i++) if (buffer->i=='é') buffer->i='e'; !*! plutôt un switch ? Par ça :for (i=at:i<at+len:i++) if (buffer->i==''') { LTI_Insert(++i,' '); at++; } else if (buffer->i=='é') buffer->i='e';
Et tu testes avec ce bout de code qui affiche le parser. Pour ça, tu rajoutes ça : buferparse(); à la fin de LanguageToInformese() et tu l’enlèveras une fois les tests effectués.[code]!% -C1
!% +language_name=French

Include « Parser »;
Include « VerbLib »;

[ LenMot motn; return parse->(motn4); ];
[ PosMot motn; return parse->(motn
4+1); ];
[ DicMot motn; return parse–>(motn*2-1); ];
[ NbrMot; return parse->1; ];
[ NbrCar; return buffer->1; ];

[ buferparse motn at lgm;
print « ------------------------^ »;
print "bText : ";
for (at = WORDSIZE : at < WORDSIZE + NbrCar() : at++)
print (char) buffer->at;
print "^bParser : « ;
for (motn = 1 : motn <= NbrMot() : motn++){
at = PosMot(motn);
lgm = LenMot(motn) + at;
if (DicMot(motn)) print " [ »;
else print " ";
for ( : at < lgm : at++)
print (char) buffer->at;
if (DicMot(motn)) print "] ";
else print " ";
}
print « ^------------------------^ »;
];
Object Room with description « ROOM » has light;
[ Initialise; location = room; ;
Include « FrenchG »;[/code]

Pour le reste…

Merci d’avoir corrigé mon code, en effet j’ai (encore) oublié w = NextWord()… (c’est la quatrième fois ^^')
Pour 2/ je préfère ma solution : normalement OffersLight parcourt tous les objets de la pièce pour voir si l’un d’entre eux fait de la lumière (que ce soit avec « give player light » ou avec ta solution), mais si on réécrit OffersLight on s’épargne des itérations inutiles sur les objets de la pièce. Le gain de temps doit être de 0.1ms sur un Commodore 64, c’est sûr, mais je préfère tout de même.
Pour 3/, c’est corrigé !
Pour 4/, je recommande l’utilisation de KeyCharPrimitive, deux fois même. J’ai juste mis l’autre code parce que c’est l’ancien que j’utilisais (tiré de « Filaments » ! l’Antiquité quoi ! snif !), mais je vais y réfléchir et il disparaîtra peut-être (je n’avais pas pensé à Glulx, donc il disparaîtra sûrement en fait…).

On s’éloigne du sujet, là. Cependant, si je puis me permettre, Auraes, je trouve que tes messages manquent en général singulièrement de tact - je ne sais pas si tu t’en rends compte, mais c’est ça qui crispe tout le monde. Tu as des idées, une curiosité et une compétence que je reconnaîtrai sans aucun problème, et regarder les biblis pour tenter de les optimiser est super, de même que pour ton aide pour les tests/bêta-tests des jeux. Par contre, tu fais des phrases abruptes et on a l’impression que tu t’énerves quand on ne comprend pas le problème, la solution, ton code, ou qu’on se montre réticents à changer la bibli. J’essaie de passer outre pour me concentrer sur les problèmes en eux-mêmes, mais tout le monde n’a pas la même patience que moi ; c’est bête, si tu tournais tes phrases différemment on perdrait moins de temps à s’échauffer les esprits inutilement ou essayer de contourner les mots pour voir le problème que tu nous a signalé… Bon voilà, c’est tout.

Ah ! ça… l’instinct grégaire ! haro ! haro !

« Attaquez à découvert, mais soyez vainqueur en secret. »

Si tu es dans une pièce allumée, vas-tu parcourir tout les objets de la pièce à la recherche d’une source lumineuse !?
L’appel de la fonction : OffersLight(parent(player));
La fonction : tu remarqueras, à la deuxième ligne, que si le parent de player à l’attribut light, la routine s’interrompt. Donc, c’est bien si le parent de player possède l’attribut light que l’ « on s’épargne des itérations inutiles sur les objets de la pièce. »[ OffersLight i j; if (i == 0) rfalse; if (i has light) rtrue; objectloop (j in i) if (HasLightSource(j) == 1) rtrue; if (i has container) { if (i has open || i has transparent) return OffersLight(parent(i)); } else { if (i has enterable || i has transparent || i has supporter) return OffersLight(parent(i)); } rfalse; ];

Ah oui, exact. Tu veux que je rajoute ta solution sur mon site ?

Je ne veux rien du tout. Ce n’est d’ailleurs pas une solution mais l’usage classique de l’attribut light. Tu raisonnes sur moi comme tu raisonnes sur la routine OffersLight() : c’est à dire faussement.
Quant à la lanterne allumée en plein jour, mieux vaut la laisser à Diogène, il en connait l’usage.
Cordialement.

Bien qu’auraes ne veuille rien du tout, pour ma part je t’invite à mettre cette solution sur ton site. C’est d’ailleurs comme ça que j’ai toujours fait pour avoir de la lumière :slight_smile:

Dans inform7, toutes les pièces ont la lumière par défaut (ce qui est plus pratique), et il faut explicitement indiquer qu’un lieu n’a pas de lumière :

The Sinister Cave is a dark room. "A profoundly disquieting rock formation, apparently sculptured by some demonic hand, this is not a cave in which to relax."

Ah, ben moi j’ai toujours fait « give player light », je ne sais plus d’où ça sort. Je la rajouterai alors :slight_smile:

Je ne savais pas - c’est quand même plus logique !!

Mais de votre Inconcient, chère ami(e), de votre Inconcient !
(Ce « give player light » est admirable ! )

Il semble que ‹ x// › (ou ‹ examine ›) pose un problème dans le fichier grammar.h et ce quelque soit la version des librairies ou du compilateur. Le problème apparait notamment si je modifie ‹ examine › dans grammar.h et que je le remplace par ‹ examin › ou ‹ examiner › ou ‹ exam ›… : x, n’est alors plus reconnu, dans le jeu, comme raccourcis de ‹ examine ›.
Pour tester, un bout de code:

[code]Include « Parser »;
Include « VerbLib »;

Object room « room » with description « description room » has light;
Object item « item » room with name ‹ item ›, description « description item »;

[ Initialise; location = room;];

Include « Grammar »;[/code]> x item
That’s not a verb I recognise.

Pour ceux qui compilent des jeux en anglais et qui voudraient tester, il suffit de modifier ‹ examine › dans grammar.h et de tester > x dans leur jeu.

C’est Gargoyle qui plante. Ça vient bien de lui et non pas du compilateur ou des librairies. J’avais déjà rencontré ce problème. Frotz est bien plus fiable, notamment pour faire des tests.

ça marche aussi pour glulxe, Frotz ? ou juste la z-machine ?

je ne vois pas pourquoi ça fait ça, mais ça n’est sans doute pas lié à Gargoyle, peut-être à bocfel, l’interpréteur par défaut pour gargoyle (qui peut également utiliser frotz)