
La version actualisée est ici : http://mulehollandaise.site.voila.fr/princesse_temp.z5
Je n'ai pas réglé la disambiguïsation pour le moment, mais je vais poser la question sur rec.arts.int-fiction
J'attends vos réponses, et désolé pour le retard !

> ChooseObjects can let you influence which object the parser guesses, but
> you can't force the parser to ask a disambiguation question using any of
> the existing hooks.
You can do this with a bit of a hack, but it's ugly: I've been working
on making something more general and hope to have it out (for I7)
sometime soon.
Find parserm.h and the routine ScoreMatchL. Then the lines you want to
get rid of are:
if (obj hasnt concealed) its_score = SCORE__UNCONCEALED;
if (its_owner==actor) its_score = its_score + a_s;
else
if (its_owner==actors_location) its_score = its_score + l_s;
else
if (its_owner~=compass) its_score = its_score +
SCORE__NOTCOMPASS;
its_score = its_score + SCORE__CHOOSEOBJ *
ChooseObjects(obj, 2);
as these jiggle the scores of objects so that certain ones take
precendence, which will make the parser guess. Now if you change this
to:
j = SCORE__CHOOSEOBJ * ChooseObjects(obj, 2);
if (j > -1)
{
its_score = its_score + j;
if (obj hasnt concealed) its_score = SCORE__UNCONCEALED;
if (its_owner==actor) its_score = its_score + a_s;
else
if (its_owner==actors_location) its_score = its_score + l_s;
else
if (its_owner~=compass) its_score = its_score +
SCORE__NOTCOMPASS;
}
This means that if your ChooseObject routine returns -1, it'll not do
any of the additional scoring, forcing the player to ask for
disambiguation.
One snag tho: you have to return -1 on *every single object* that the
parser goes through, otherwise your special objects will be the only
ones that don't get a score. You can find out what's under
consideration in ChooseObjects by looking through the match_list
array, but this isn't necessary easy to use.
IMHO, parser guesswork/disambiguation is a bit of a dinosaur in the
Inform project that could do with smartening up. More questions and
less guesses...
cheers
jon
La compilation du jeu avec les options de debogage activées (donnant accès à des commandes supplémentaires telles que PURLOIN pour inform par exemple) est considérée comme un défaut majeur.
Otto Grimwald a écrit:les clients qui ne sont pas dans la salle de l'ivrogne, et qui apparaissent là d'un coup comme s'ils étaient déjà attablés. Peut-être faire comme si un ou des clients venaient d'entrer par exemple.
Dans le lieu Place principale, quand on tape >x taverne, ça répond Une taverne, un peu animée ; à cette heure elle doit accueillir tous les habitués..., alors que la description du lieu Dans la taverne lui-même (que ce soit la description principale quand on fait >regarder, ou la description plus courte quand on fait >x taverne dans ce lieu) dit : En cette heure quelque peu tardive, peu de gens sont là. Et on ne peut pas dire que le temps a passé entre les deux, car on peut aller et venir entre la place principale et la taverne et obtenir toujours ces deux descriptions ! C'est donc bien une contradiction.
Aide > préciser la possibilité de l'emploi de l'impératif.
> pétrifier homme
& (sans lui avoir parlé)
"Devant les murs du château- ort."
> apprendre flute
"Grâce au sort, vous savez maintenant comment jouer de la flûte."
Il serait peut être intéressant de ne pas pouvoir apprendre à jouer de quelque chose que l'on ne possède pas ? Même remarque pour la mandoline du ménestrel. Encore que
ce soit vraiment secondaire et puisque c'est de la magie, alors...
> jouer de la mandoline
"Bravo, monsieur" vous dit-elle
J'aurais tendance à mettre une virgule après le "monsieur~", comme on le retrouve dans nombre de romans (je ne sais pas si c'est une convention, auquel cas ça rentrerait dans les clauses de mise en page du label Mimesis - typographes, si vous m'entendez...). Même remarque pour le reste du dialogue et bien d'autres.
Object mand2 "mandoline d'occasion" vendeur
with description [; if (mand2 in player) {"C'est la mandoline que vous avez acheté au marchand. Elle est en plutôt
bon état, mais elle semble avoir déjà vécu... Ce qui n'a que peu d'importance, car elle a un son plutôt bon, tout à fait
correct.";} else {"C'est une mandoline d'occasion ; le marchand la vend à 340 sols, ce qui est une plutôt bonne affaire, car
les mandolines sont assez rares. Celle-ci ne semble pas être en trop mauvais état non plus.";}
],
name 'mandoline' 'gratte' 'occasion' 'instrument' 'instruments',
before [; instru: if (mand2 in player) {
if (appmand==1) {
if (player in balconsoir) {
prinmand(); rtrue;
}
else {"Vous jouez un petit air de mandoline.";}
}
else {"Vous ne savez pas en jouer !";}
}
learn: if (niv1==1) {
if (appmand==1) {"Mais vous savez déjà jouer de la mandoline !";}
else {if (self in player) {appmand=1; score=score+2; print_ret "Grâce au sort, vous savez
maintenant comment jouer de la mandoline.";} else {"Trouvez-vous d'abord une mandoline.";} }
}
else {"Vous n'avez pas encore appris ce sort.";}
Take, Buy: if (mand2 hasnt bought) {if (argent<340) {"Vous n'avez pas assez d'argent pour acheter une
mandoline.";} else {give mand2 bought; argent=argent-340; score=score+4; move mand2 to player; print_ret "~Voilà votre
mandoline. Merci à vous, monsieur.~ Vous achetez la mandoline pour 340 sols.";}}
Search: "Ça ne s'ouvre pas et rien n'est caché à l'intérieur.";
],
has female concealed ;
Object flute "flûte" vendeur
with description "C'est une flûte en bois, assez petite, percée de six trous ; elle a un son aigu, qui est parfait
pour jouer des ritournelles et des morceaux légers et entraînants.",
name 'flute' 'fluteau' 'flutine' 'pipeau' 'petite' 'instrument' 'instruments',
before [; instru: if (flute in player) {
if (appflu==1) {
if (player in balconsoir) {
prinflut(); rtrue;
}
else {"Vous jouez un petit air sur la flûte.";}
}
else {"Vous ne savez pas en jouer !";}
}
learn: if (niv1==1) {
if (appflu==1) {"Mais vous savez déjà jouer de la flûte !";}
else { if (self in player) {appflu=1; score=score+2; print_ret "Grâce au sort, vous savez
maintenant comment jouer de la flûte.";} else {"Trouvez-vous d'abord une flûte.";} }
}
else {"Vous n'avez pas encore appris ce sort.";}
Take, Buy: if (flute hasnt bought) {if (argent<120) {"Vous n'avez pas assez d'argent pour acheter une
flûte.";} else {give flute bought; argent=argent-120; score=score+2; move flute to player; print_ret "~Voilà votre flûte,
monsieur.~ Vous achetez la flûte pour 120 sols.";}}
],
has female concealed ;
Mule hollandaise a écrit:fait mention de l'impératif
Mule hollandaise a écrit:Akien, comment as-tu réussi à avoir 41 points ? (la seule explication c'est que tu aies acheté la corde, mais en théorie j'ai calculé de sorte que si tu achètes la mandoline tu ne peux pas acheter de corde ! hum...) (d'ailleurs, serait-ce mieux pour la flexibilité du jeu si on pouvait acheter les deux, ou ça ira comme ça et puis de toute façon on ne peut pas tout avoir et c'est la loi du marché ?)
Retourner vers Bêta-tests et créations communes
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités