Je m'y mets, et je vais avoir besoin d'aide :)

Ça y est !

J’ai commencé à coder une toute petite fiction qui pourra éventuellement servir de préambule à une histoire plus longue, qui se passerait dans un train.

Il y a quelques mois je me suis lu la totalité de l’IBG (Inform Beginner’s Guide) et la moitié du DM4 (Inform Designer’s Manual) de Graham Nelson. Je ne commence pas sans quelques bases, donc, mais je pressens fortement que je vais rencontrer des tas de problèmes que vous avez sûrement déjà résolu, je vais donc utiliser ce fil pour vous poser des petites questions de temps en temps.

Je compte sur vous, mes « maîtres » :slight_smile:

*** Question 1 ***
Eh oui, déjà une question, bizarre hein ?

Premier problème épineux : la gestion des articles. Comment coder pour que l’interpréteur me dise « vous pouvez voir le conducteur du tramway » ?

De mémoire il doit manquer la propriété « propername » sur ton conducteur, essaie voir et si ça marche pas je chercherai un peu plus =)

Ou bien il manque tt simplement le « animate » (le propername c’est supposé être utilisé pour les PNJ ayant un nom propre, à la base)

Super ! Bon courage ! Et fais nous part de l’avancement de ce projet.

recupère un des codes de jeu ici :

ifiction.free.fr/index.php?id=jeux

et regarde comment c’est géré. N’aurais-tu pas d’ailleurs utilisé un article dans la définition du personnage ? (son nom)

Utilise « has male animate proper ; » ou qque chose d’approchant , comme disait Adrien.

effectivement, première erreur, j’ai mis « le » dans le short_name du conducteur. Maintenant je vais tester pour voir comment le faire appeler « le » plutôt que « un ».

avec proper, j’obtiens logiquement « vous pouvez voir conducteur du tramway », donc ce n’est pas encore cela.

En fait la problématique c’est de faire afficher un article défini au lieu d’un article indéfini lors de l’affichage du bonhomme en tant qu’objet présent dans la salle.
Je vais peut-être devoir surcharger le message par défaut pour cet objet par un qui contiendra « (the) » ?

Ou carrément « Le conducteur du tramway vous regarde avec insistance » et basta.

Hello jeune Padawan

Je t’invite à consulter les sources de mes jeux sur ginko968.free.fr, si je les donne, c’est surtout pour cela !

En l’occurence, il faut faire la double astuce kiss cool, c’est à dire mettre :

object conducteur « conducteur » train
with name « conducteur »,
description « bla bla »,
life [; (divers codes)],
article « le »,
has proper;

JB

Merci bien, c’est ce « article » qu’il me fallait.

Je m’inspirerai en effet autant que possible des sources publiées par les uns et les autres, mais en gardant un oeil critique sur ce qui pourra me paraître louche :slight_smile:

En l’occurrence le « proper » est-il bien nécessaire ? J’ai déjà animate et male, et sans proper j’ai l’impression que cela fonctionne bien. Il y a un vice caché ?

[EDIT] Tiens j’avais justement le DM4 ouvert à la page qui mentionne la propriété « article » et il me dit que c’est là qu’on précise le nom de l’article indéfini pour l’objet. J’ai peur d’un retour de baton d’une telle « triche » :slight_smile:

En fait le proper n’est pas utile, enfin, il peut le devenir s’il devient un NPC important :wink:

JB

*** Question 2 ***
Le personnage est dans un lieu. Comment faire au plus simple pour que « regarder tramway » ait le même effet que « regarder » tout court ?

Crée un objet tramway avec la même description que ta room.

JB

D’accord. J’avais pensé à cette solution mais je me demandais s’il n’y avait pas plus simple.

Ca peut exister, mais c’est la solution que je prends…

C’est également la solution que je vais prendre… Jusqu’au jour où (si ce jour arrive) je tomberai sur mieux dans le DM4.

*** Question 3 ***
Cette question là est à 100 points car je crois qu’on atteint un certain niveau de difficulté. Nous allons voir si nous sommes à la hauteur. Toute ma considération à celui ou celle qui me donnera une solution.

C’est toujours mon conducteur de tram, j’ai un problème avec sa propriété « name ».

Solution 1 :

        name 'conducteur'

Problème : l’expression « conducteur du tramway », utilisée dans la description (et donc susceptible d’être utilisée par le joueur), n’est pas reconnue.

Solution 2:

        name 'conducteur' 'du' 'tramway'

Cela résoud le problème de la solution 1, mais en provoque deux nouveaux :

  • « du » utilisé tout seul est reconnu
  • « tramway » utilisé tout seul est reconnu et entre en conflit avec l’objet de décor ayant pour nom tramway, et rend ce dernier objet impossible à regarder.
    SOLUTION REJETEE

Solution 3: utilisation de l’extension pname.h

        pname 'conducteur' '.x' 'du' '.x' 'tramway' '.o' 'tram'

Résoud l’un des problèmes de la solution 2 : tramway n’est plus reconnu, en fait l’objet de décor « tramway » a une plus grande priorité grace au ‹ .x › qui est devant le mot tramway dans le pname du conducteur.
En plus grâce au ‹ .o ›, on peut dire soit « conducteur du tramway » soit « conducteur du tram ».
Mais « du » tout seul reste reconnu, et j’ai du mal à m’en satisfaire. Je pensais que pname.h ferait en sorte que la présence du mot « conducteur » soit obligatoire, mais il semble que ce n’est pas le cas

Solution 4 (envisagée à peine sérieusement) :
Utiliser la solution 3 mais intercepter le « du », en créant un objet caché dont la propriété name vaudrait « du » et avec des réactions qui reprendraient celles qu’on a lorsqu’on essaie d’interagir avec un objet inexistant ? Un peu barbare non ?

Est-ce que quelqu’un a déjà rencontré ce type de problématique, et si oui, comment s’en est-il sorti ?
En évitant le problème (ne pas mettre « conducteur du tramway » dans la description et espérer que le joueur tapera uniquement « tramway », quitte à ce qu’il se prenne une réponse incompréhensible : « >regarder le conducteur du tramway => je n’ai compris que : regarder le conducteur du tramway ».) ?
En utilisant une botte secrète ?

En anglais ce serait plus facile :

        pname '.x' 'tramway' 'driver'

et le tour est joué :slight_smile: (quoique, si quelqu’un tente « tramway’s driver »…)

lol

et mettre en name ‹ conducteur du tramway › ? !

Chez moi ca marche…

Sinon plus généralement pour ces pb d’ambiguité il y a une solution !

J’ai eu le même problème dans Ekphrasis : en effet, à un moment il faut tourner certaines faces d’une statue et donc quand on écrivait :

tourner face sud ouest

le parseur était paumé car il voyait face, sud, ouest…bref

Il fallait écrire :

Object faceso « face sud ouest »,
with parse_name [;
if (NextWord() ~= ‹ face › or ‹ ouest ›) return 0;
if (NextWord() == ‹ sud › && NextWord() == ‹ ouest ›)
return 3;
return 1;
],

A toi d’adapter, ca pourra te sortir d’affaire dans d’autres pbs.

JB, qui vient de marquer 300 points

Pas de points pour celle-là, chez moi ça ne marche pas.
« conducteur » est reconnu, mais pas « conducteur du tramway ». Est-ce que seul le premier mot est gardé ?

Allez, 100 points pour celle-là ! Cela me sortira en effet sûrement d’affaire ici et dans d’autres situations.
Mais je ne m’imaginais pas devoir jouer avec parse_name dès mon premier jour de codage… C’est tout de même dur pour un débutant en Inform.

J’ai trouvé dans le DM4 un exemple qui pourrait bien m’être utile pour le problème du nom du conducteur (question 3) :

Après, on pourrait encore améliorer le tout avec un truc qui concaténerait automatiquement « du » avec le mot suivant… mais ce n’est pas simple.

Voilà, considérez la question 3 comme également résolue. J’ai ajouté la notion de nom obligatoire et d’adjectif, ce qui résoud mon problème (et par la même occasion j’ai jeté l’extension pname.h qui ne me satisfaisait pas pleinement car pas assez restrictive sur les adjectifs… Ils pouvaient toujours être employés sans le nom). J’ai l’impression de chipoter pour mon conducteur, mais je pense que cela me servira par la suite de savoir distinguer adjectif et nom.

On peut encore dire « regarder le conducteur du », mais ce n’est pas bien grave. Au moins « du » tout seul ne sera pas reconnu, et « conducteur du tramway » le sera.

Voilà comment j’ai fait, si cela peut servir à quelqu’un (j’ai modifié l’exemple du DM4 pour que les « adjectifs » puissent être aussi bien devant que derrière le(s) nom(s) :

Property adjective;

...

[ ParseNoun obj n m;
while (WordInProperty(NextWord(),obj,adjective) == 1) n++; wn--;
while (WordInProperty(NextWord(),obj,name) == 1) m++; wn--;
while (WordInProperty(NextWord(),obj,adjective) == 1) n++; 
if (m == 0) return 0; return n+m;
];

et dans les objets [EDIT : la ligne « parse_name » est inutile car ParseNoun est appelée automatiquement par le parser, je l’ai donc commentée]:

        name 'conducteur' 'chauffeur' 'homme' 'bonhomme' 'mec' 'type',
        adjective 'de' 'du' 'tramway' 'tram',
!        parse_name [;return ParseNoun(self);],

On peut l’appeler l’homme du tram, le mec du tramway, le type… comme ça nous chante (voire l’homme tramway…)., mais pas le « tram » ni le « du » ni le « du tram » ni le « tram du »…
Par contre on peut dire « regarder le tramway du homme » mais si ça continue à force de capillotracter je n’aurais plus de cheveux. Bon, à moins que je n’ajoute un jour une contrainte sur l’ordre des mots…