J'ai regardé
ToutPoserSub. Il y'a un petit problème quand il n'y a rien à poser :
>tout poser
(poser tout)
>
Pourquoi ne pas passer le
tout derrière le verbe à la saisie comme un pronom ?
Tu utilises abondamment les attributs dans la grammaire, mais un simple
worn à la place d'un
held dans la grammaire 6/11 & 6/12 (take 'off' worn) posait problème !
http://www.intfiction.org/forum/viewtopic.php?f=7&t=15730&start=100#p79784L'usage d'
Extend pour
Verb peut aussi poser problème. L'ordre des lignes de grammaire pour un verbe n'est pas anodin; cela peut changer le comportement et la réaction du programme surtout pour les phrases incomplètes :
- Code: Tout sélectionner
Verb 'ask'
* creature 'about' topic -> Ask
* creature 'for' noun -> AskFor
* creature 'to' topic -> AskTo
* 'that' creature topic -> AskTo;
>ask george
What do you want to ask george for?
>
- Code: Tout sélectionner
>Verb 'ask'
* creature 'about' topic -> Ask
* creature 'to' topic -> AskTo
* creature 'for' noun -> AskFor
* 'that' creature topic -> AskTo;
>ask george
There is no reply.
>
Je n'ai fait qu'intervertir la deuxième et la troisième ligne. Toucher à la grammaire semble très délicat !
Il me semble qu'il y a une erreur, tu étends l'usage d'un
meta verbe :
- Code: Tout sélectionner
[ isMeta; meta = true; return GPR_PREPOSITION; ];
Extend 'quitter' first
* isMeta -> Quit
* held -> Disrobe;
Extend only 'quitter' replace !? Cela retire 'quitter' du meta verbe Quit, et crée un nouveau verbe ? (Pas testé, je ne suis pas familier de ces usages.)
Dans
Extend 'vider' first, puisqu’il y a poche au singulier, il manque peut-être : 'ma'/'sa'
Utiliser ou Actionner !? Pas évident... mais ouvrir ou vider relèvent peut-être plus de l'action que de l'utilisation...
(J'avais passé un peu de temps, pour un parser minimaliste, à « étudier » le comportement de certains jeux Sierra, LucasArts et Delphine Software.)
- Code: Tout sélectionner
Verb 'désactiver'
* noun -> SwitchOff;
Tu as mis un accent à 'désactiver'.
Tu as tendance à surcharger un peu en accolades,
else et
return true/false souvent inutiles (je suis souvent obligé de ré-indenté pour essayer de comprendre le code) :
- Code: Tout sélectionner
[ ApprocherSub ;
if (noun == nothing) {"Précisez de quoi vous voulez vous approcher.";}
else {"Vous n'avez pas vraiment besoin d'être plus près.";}
];
[ ApprocherSub;
if (noun == nothing)
"Précisez de quoi vous voulez vous approcher.";
"Vous n'avez pas vraiment besoin d'être plus près.";
];
[ ToutPrendreDansSub i j;
if (noun==0) {return false;}
else {
print "(prendre tout dans ", (the) noun, ")^";
i = child(noun);
while (i ~= nothing) {
j = sibling(i);
print (name) i; print " : "; <Take i>;
i = j;
}
}
];
Est-ce que le paramètre de retour à un sens ?
[ ToutPrendreDansSub i j;
if (noun==0) return;
print "(prendre tout dans ", (the) noun, ")^";
i = child(noun);
while (i ~= nothing) {
j = sibling(i);
print (name) i, " : ";
<Take i>;
i = j;
}
];
- Code: Tout sélectionner
[ ToutPrendreSub i j;
[..]
if (i hasnt concealed && i ~= selfobj) {
Frotz in 6/12 :
TAKE ALL has been modified such that scenery or animate objects will not be taken.
In parserm.h :
- Code: Tout sélectionner
if (action_to_be == ##Take or ##Remove && (j has animate or scenery or static || parent(j) == actor))
flag = 0;
Tu testes l'attribut
concealed dans
ToutPrendreSub mais pas dans
ToutPrendreDansSub. Idem pour
ToutPoserSub etc. (DROP ALL ne pose pas les objets avec l'attribut concealed; ce qui est étrange puisque l'objet et bien visible dans l'inventaire !)
- Code: Tout sélectionner
Verb 'approcher' 'rapprocher'
* -> Approcher
* 'vous' -> Approcher
* 'vous' noun -> Approcher;
* 'vous' 'de'/'d^'/'du'/'des' noun -> Approcher;
Conclusion approximative et éphémère :
La «
Stormisation » de la grammaire et du code en général[e], ne me semble vraiment pas une bonne idée; il y a bien assez de problèmes avec les bibliothèques standards pour en rajouter...