Quelqu’un sait-il pourquoi il y a ces ATROCES espaces après la description de la room et de son contenu, la première fois qu’on y est ? C’est un truc à me faire arrêter l’IF, ça.
Il doit y avoir quelque chose dans ton code qui provoque ça. Ça le fait pour chaque pièce ?
je viens de créer une room pour tester : apparemment non.
En plus il n’y a vraiment rien de particulier dans ma room de départ, ni de rule qui calcule de truc particulier après " looking "…
[code]AsileRoom is a room. It is dedans. « [line break]Vous vous trouvez dans la salle principale de l[‹ ]Asile de Nuit de la rue Baal-Zahram. Une vingtaine de [fcs]lits[endfcs] superposés dans une pièce sans fenêtres, faiblement éclairée par des [if the NéonsAsile are unseen][fcs]néons[endfcs][otherwise]néons faiblards, clignotant de temps à autres, et[end if] qui donnent à tout un air jaunâtre. La plupart des lits sont occupés ; essentiellement des [fcs]hommes[endfcs], et parmi eux, essentiellement des blancs. Ouvriers journaliers trop pauvres pour se payer un logement, anciens combattants sans pension, clochards sans âge, qui tutoyaient déjà la misère bien avant le début de la guerre, malades mentaux, drogués, paumés terminaux. On compte quelques [fcs]femmes[endfcs], moins d[ ›]une dizaine, qui disposent de leur propre ‹ coin ›, sous la surveillance discrète mais sans faille des Soeurs. Une odeur indéfinissable plane, remugles de crasse et d[‹ ]alcool, de détergents et de [if the LaverieAsile is unseen][fcs]lessive[endfcs][otherwise]lessive[end if], de [if the CuisineAsile is unseen][fcs]soupes[endfcs][otherwise]soupes[end if] qui bouent depuis des heures ; l[ ›]odeur de la fatigue et du dénuement. Les Soeurs passent de lit en lit, distribuent les premiers repas, donnent des oreillers et des couvertures. Un [fcs]calme[endfcs] relatif règne. ». The printed name is « À l[']Asile de Nuit ».
SoeurMachin is a religieuse in AsileRoom. « [fcs]Soeur Machin[endfcs] se tient derrière son bureau, juste à l[']entrée de la salle. Tout le monde passe par elle pour obtenir un lit, un repas, des médicaments de base. ». Understand « machin » or « soeur machin » as SoeurMachin. The description of SoeurMachin is « [line break]Une nonne. ».[/code]
il y a forcément quelque chose qui provoque ça, lié à la première arrivée dans cette pièce, en tout cas on ne le voit apparemment pas dans le code plus haut… peut-être un événement aléatoire ?
Non, justement, pas d’événement aléatoire, pas de changement de variable, pas de mouvement de PNJ ou d’objet, rien …
Je t’enverrai le code complet par mail, c’est très court. Après peut-être dû à l’une des extensions (dont je ne suis pas l’auteur, je veux dire)
Sinon, essaie de taper « rules on » avant d’aller dans l’endroit, pour voir quelle règle affiche le saut à la ligne.
merci Natrium, je ne pensais que ça donnerait un truc pareil :
Ce sont tous ces trucs qui produisent ces lignes blanches alors ?
A priori je dirais que c’est la règle « other people looking » qui t’en fait un, mais je sais pas à quoi ça correspond…
c’est quoi, la rule qui vérifie s’il y a des PNJ dans la room ?
Il me semble qu’il s’agit de la règle qui se lance quand des PNJ effectuent l’action « regarder » (par exemple quand le joueur tape « >Jean, regarde », ou via code, « try Jean looking ».
Normalement, ça affiche un truc du genre « Jean regarde autour de lui », mais il me semble que les actions effectuées par les PNJ n’avaient pas de message par défaut dans 6G60.
pourtant je n’ai aucune ligne à la " try Soeur Machin looking "
c’est plus sûr si j’écris toujours " try the player (action) " ?
Normalement, il n’y a pas besoin de faire ça.
Il peut s’agir d’une conséquence indirecte à quelque chose dans ton code, ou une extension (mais ça m’étonnerais un peu).
J’investiguerais d’abord du côté des « try looking » s’il y en a, et je les désactiverais un à un jusqu’à ce que ça ne se reproduise plus, comme ça on sait d’où ça vient. Ou alors tu montres le code et on cherche, mais je ne préférerais pas avoir à faire ça.
Sinon, s’il s’agit du même code que l’Observatoire (avec le système de mots-clefs), je te dirais que c’est pas codé de façon optimale (ou que l’extension qui permet de faire ça ne l’est pas), parce que d’après ce que j’ai pu deviner, tu outrepasses le parser à coup de hache, et ça cause des bugs. Par exemple, si on tape n’importe quoi, ça réaffiche le prompt sans message d’erreur, et ça fait quand même passer un tour. De même si on tape une commande valide dans une FI normale (« x moi » ou « regarder »), mais pourtant « sauter » fonctionne.
Après, peut-être que tu as corrigé ces problèmes depuis, ou que ça n’a rien avoir avec ton problème actuel, mais possiblement que du code bancal quelque part cause des effets secondaires indésirables. À voir…
(aussi, petite clarification, ce n’est pas 6G60 qui n’a pas les messages par défaut pour les actions effectuées pas les PNJ, mais l’extension française pour 6G60.)
Voilà le système :
Texting is an action applying to one topic. Understand "[text]" as texting.
C’est aussi con que ça … Ensuite pour chaque situation du jeu :
Instead of texting when the CurrentChapter is AsileDeNuit1 and the player is in AsileRoom and ChoixDeBase is true :
if the player's command matches "lits"
begin ;
say "[line break]Blabla lits." ;
otherwise if the player's command matches "néons" ;
say "[line break]Blabla néons." ;
otherwise ;
do nothing ;
end if.
Évidemment ça n’empêche pas le joueur de taper " incendier la poubelle " même s’il n’y a pas de poubelle et que l’action incendier ne lui est pas proposée.
Pour verrouiller tout ça j’ai de façon bête et méchante tapé des lignes de trucs du genre :
Understand the command "détruire" as something new.
Understand the command "examiner" as something new.
Understand the command "fermer" as something new.
Understand the command "fouiller" as something new.
Understand the command "frapper" as something new.
Understand the command "ouvrir" as something new.
Understand the command "parler" as something new.
Understand the command "prendre" as something new.
Understand the command "tuer" as something new.
Understand the command "penser" as something new.
Je me doute bien que ça n’est pas idéal mais c’est la solution la plus rapide que j’ai trouvé quand je codais L’Observatoire. Bien sûr je n’ai pas pensé à toutes les actions, ce qui fait que « sauter » fonctionne, alors que d’autres verbes de base, non.
Il faudrait que je trouve un moyen de court-circuiter le parser, comme tu dis, mais pas à la hache…
Par contre il n’y a pas de try looking dans mon code (en tous cas dans aucune partie du code qui sert avant l’affichage de cette room)…
Bon, pour ceux qui veulent un jour publier un bêtisier d’Inform, j’ai résolu mon problème, je ne sais pas POURQUOI ça déconnait, mais bon.
Azthath est divisé en chapitres et quand je lance le jeu, j’ai un menu qui s’ouvre avec le choix du chapitre que je veux jouer.
Pour résumer ça marche comme ça :
[code]A GameChapter is a kind of thing.
The CurrentChapter is a GameChapter that varies.
AsileDeNuit1 is a GameChapter. The description is « [AsileDeNuit1Start] ».
Include Azthath_Chapitre_AsileDeNuit1 by Stéphane F.[/code]
Et quand tu choisis un chapitre, donc, ça examine « l’objet » chapitre, ce qui donne du texte d’intro, et divers changements de variables, PUIS move the player , vers la room qui me posait problème.
J’ai viré ce principe d’examiner un objet chapitre (qui au fond n’a rien de nécessaire, je ne sais pas pourquoi j’ai fait ça ) pour simplement, quand on choisit dans le menu, faire les changements puis move the player, et là ça roule. Les lignes blanches venaient donc apparemment de là… mais POURQUOI, ça ça restera un mystère je pense…
Et pour empêcher Natrium de sautiller fort peu à propos :
Instead of doing anything other than texting or looking :
do nothing.
Na.
Est-ce que des fois le personnage-joueur change dans ton jeu, genre après le choix du chapitre ? Parce que changer de joueur en cours d’action peut avoir cet effet (mais ce n’est pas un bug). Exemple :[code]Test is a room.
Alice is a woman in Test. Bob is a man in Test. The player is Alice.
Before looking: now the player is Bob.[/code]Le truc, c’est que si le joueur regarde en étant Alice, il va devenir Bob juste avant. Mais comme c’est Alice qui a commencé l’action, c’est toujours elle qui la continue. Du coup, comme on est maintenant Bob, on voit Alice regarder depuis le point de vue de Bob. Je sais pas si c’est clair.
Après, ce n’est peut-être pas ça, mais ça peut toujours être utile à savoir.
Concernant la modification du parser, c’est vrai que c’est toujours délicat à modifier. J’ai réfléchi à comment faire, mais je ne suis pas trop sûr. Une possible solution qui je pense fonctionnerait est de modéliser tous les mots-clefs par des objets dans la pièce, et de rajouter « Understand « [a thing] » as examining » (l’idée d’examiner n’est en fait pas si mauvaise que ça !). Comme ça, juste taper le nom d’un objet le fait examiner. Après, on peut mettre la conséquence des action dans des « Carry out examing the néons » et ajouter des synonymes en utilisant le système d’Inform.
Le gros avantage, c’est qu’on garde le parser d’Inform (donc pas de grosses bidouilles à faire pour des cas particuliers), ça simplifie le code (plus de « if the player’s command matches « lits » »), et les erreurs quand le joueur tape n’importe quoi ne sont pas considérées comme des actions qui font passer le temps, mais bien comme des erreurs.
Ou alors tu utilises Twine.
Mais je comprends que pour le concours t’as juste pris ce qui te semblait le plus rapide, je fais la même chose dans l’urgence.
Fin de l’apparté, tu peux faire un autre sujet si tu essaies quelque chose de ce côté-ci.
(et oui, quand je dois exécuter une action au hasard, c’est toujours sauter, je ne sais pas trop pourquoi…)
Oui, mais comme je suis snob je fais ça autrement :
the hero is a person that varies
(parce qu’en fait j’ai besoin dans mon code de différencier " the player " et le héros du chapitre en cours, pour X raisons)
Du coup ça n’a pas l’effet que tu décris.
Pour le court-cuircuitage du parser, ça peut fonctionner je pense (en tout cas ça fonctionne pour l’instant, après mes modifs d’hier) si je bloque TOUTES les actions à part look et mon action d’entrer un mot-clé. Du moins en " temps normal " … par contre si le joueur clique sur le nom d’un objet (qui existe réellement comme objet dans le code, je veux dire, comme une banane) le jeu lui propose plusieurs actions de base (prendre, manger, etc) et là ces actions sont temporairement possibles. Mais je ne vais pas développer ici, oui.
Si ça peut aider niveau implémentation du court-circuitage : quand j’avais fait OneWordParsing, ce que j’avais fait dans le cas où on veut reconnaître aucun verbe c’est préfacer la commande du joueur avant tout parsing par « verbless » et définir l’action « verbless » comme étant : « verbless inventaire » = inventaire, « verbless nord » = nord, « verbless [thing] » = examiner thing, « verbless [tout autre truc] » = je ne comprends pas. À voir si c’est transposable en I7…
Je ne comprends pas, tu peux peux taper un exemple code qui utilise « verbless » ?
(aucune référence à ça dans la doc d’I7 en tous cas)
Je pense que ce que Mule veut dire, c’est d’ajouter un mot bidon (ici, « verbless ») au début de la commande avant qu’elle soit analysée, comme ça elle est toujours considérée comme ne voulant rien dire. Et rajouter ce même mot bidon dans les lignes de compréhension des actions qu’on veut garder, pour qu’on puisse toujours les utiliser.
Bien que c’est faisable avec I7, je pense qu’il y a des moyens plus élégants (comme désactiver toutes les actions à la main, comme Azathoth l’avait fait). Par contre, je vois pas l’intérêt de garder l’action texting, puisque le but était justement de la remplacer par examiner.
Pour ce qui est du hero qui varie, je comprends que tu puisses vouloir séparer le héros en tant que tel du joueur, mais dans tous les cas, il faut quand même changer le player, non ? (pour gérer l’inventaire de chaque personnage séparément, par exemple).
Oui, j’ai crée « texting » pour justement ne pas avoir à créer un objet dans le code, par mot-clé. Le joueur tape son mot-clé et ensuite
if the player's command matches "blabla", say "ceci cela"
Ou simplement vider l’inventaire du joueur une fois le chapitre fini