[I6] Consulter des "topic" hors livre/PNJ

Mince alors, ça doit pas être bien compliqué mais je dois me prendre la tête sur des bêtises… je vois pas comment créer un verbe du type « penser à » qui permettrait de donner des infos sur une liste de « topic ». Autant ça marche bien avec les PNJ, autant en dehors j’ai tjrs un souci pour récupérer la variable donnée au verbe.

Genre, version ultra basique, si je fais :

Extend 'reflechir' replace * 'a'/'au' topic -> Penser;

[PenserSub; switch (topic) { 'bar': print "Un coin vraiment sympa.^"; default: print "Vous vous perdez dans vos pensées pendant quelques secondes avant de reprendre vos esprits.^"; } rtrue; ];

pareil avec switch(second) ou avec switch(n) et [PenserSub n;

Vu que certains d’entre vous ont bien bossé sur la grammaire, si vous avez une idée…

T’as regardé dans le DM4? Là sans ordi sous la main je vois pas le problème, ça m’a l’air bon… :confused:

Sinon un petit truc que j’ai découvert y’a pas longtemps, c’est Info.h de Jesse Burnenko (une extension sur inform-fiction.org) ; ca permet de créer des objets de type « Topic » qui sont reconnus dans les « ask/tell », ce qui veut dire que tu peux faire des name et des parse_name compliqués pour reconnaitre des trucs cools. Je m’en suis servi il y a peu pour une conversation avec un NPC où j’arrivais à détecter « demander à mon amie quel jour elle repart » pas trop difficilement :slight_smile:

Je n’ai pas trop envie de remettre la tête dans I6, mais j’avais modifier un bout de code de Yoruk qui utilisait le topic :
http://auraes.free.fr/tmp/dragon_modifier.html
http://auraes.free.fr/tmp/dragon_modifier.inf
Il y a des exemples d’usage du topic dans le DM4 avec consult_from, consult_words, etc.
(Par contre, je ne comprends pas ton code dans PenserSub !? (Et rtrue; n’est pas indispensable car implicite pour une fonction hors d’un objet.))

Oui, c’est vrai que rtrue c’est devenu un réflexe mais ici il a pas trop de sens !
Par contre l’exemple donné ne convient pas, parce qu’on est encore dans « Life ». Effectivement, pour consult ou ask/tell on trouve des exemples, dans le DM et ailleurs, mais pour avoir un équivalent qui fonctionne en dehors, c’est pas la même chose. Pour une raison que je ne comprends pas encore, le switch que j’utilise dans le verbe ne récupère pas le COD tapé lors de la commande. Du moins, si j’utilise « topic » (ce dont j’ai besoin pour utiliser une chaîne de caractères, parce que si j’utilise « noun » seuls les objets en jeu sont pris en compte et ce n’est pas ce que je veux).

Au lieu de rediriger ton verbe ‹ reflechir › vers → penser, tu devrais le rediriger vers → Consult; La bibliothèque d’i6 initialisera alors les variables dédiées correctement. Tu n’auras plus qu’a tester dans ton objet : before Consult: que le verbe saisi soit bien réfléchir.
Je ne pense pas que tu puisses utiliser le topic autrement.
(Voir DM4 page 131)

Ah, bonne idée ouais merci, j’utilise pas le verbe consulter par ailleurs donc ça ne poserait pas de souci. Par contre il faudrait du coup envoyer le nom de l’objet à consulter. Il faut pas que le joueur ait besoin de préciser « consulter mémoire à propos de » donc il reste à trouver comment envoyer cet objet en dur depuis les fichiers du jeu (j’aimerais éviter de modifier la « lib » si possible, dans une optique de partage open source à terme).
Bon, à voir !

Pas sûr ! J’ai vraiment pas la tête dans I6 mais dans un décompilateur/compilateur de jeux Scott Adams.
Je jetterai éventuellement un œil cet après-midi. Ta première idée est peut-être la bonne. Il faudrait regarder si : wn, consult_from, consult_words, etc sont corectement chargés dans Pensersub, (sinon le faire) et utiliser NextWord().
Ou pas.

Question bête: c’est-y pas parce que tu as mis ‹ bar › et qu’il faudrait mettre « bar » ? :slight_smile:

(Ptet qu’un topic c’est un string et pas un mot du dictionnaire?)

Bonne remarque, des fois des détails de ce genre peuvent passer inaperçus pendant des heures :open_mouth: mais là ce n’est pas le cas, pour les topic on est bien sur de l’apostrophe. Si on met des guillemets ça génère des erreurs.

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

Object lieu
with description « lieu »
has light;

[ Initialise;
location = lieu;
];

[ PenserSub;
wn = consult_from;
while (consult_words) {
switch (NextWord()) {
‹ bar ›: « Un coin vraiment sympa. »;
‹ physique ›, ‹ quantique ›: « Max Planck ! »;
‹ femme ›: « Superbe ! »;
!default:
}
consult_words–;
}
« Vous vous perdez dans vos pensées pendant quelques secondes avant de reprendre vos esprits. »;
];

Include « Grammar »;

verb ‹ reflechir ›
* → Penser
* ‹ a ›/‹ au › topic → Penser;[/code]

Super, merci, j’avais encore jamais eu à toucher ces wn, consult_from et autres consult_words, et j’ai encore un peu de mal à trouver les bonnes traces à écrire pour débugger efficacement de l’Inform et bien voir ce qui passe dans les tuyaux…
C’est reparti !