un verbe « utiliser » qui essaie l’action la plus logique au regard des propriétés de l’objet
des formulations « tout prendre », « tout poser », etc. pour « prendre tout », « poser tout », etc.
quelques nouvelles formulations et variantes, la plupart inspirées de ExpertGrammar.h de Emily Short, mais certaines autres nouvelles (« quitter un vêtement »)
quelques distinctions pour des verbes qui peuvent avoir plusieurs sens
Je compte m’en servir dans mes jeux par la suite, alors si vous avez des remarques ou des idées, n’hésitez pas
L’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 :Verb 'ask'
* creature 'about' topic -> Ask
* creature 'for' noun -> AskFor
* creature 'to' topic -> AskTo
* 'that' creature topic -> AskTo;
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][ isMeta; meta = true; return GPR_PREPOSITION; ];
Extend ‹ quitter › first
isMeta → Quit
held → Disrobe;[/code]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]Verb ‹ désactiver ›
noun → SwitchOff;[/code]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][ 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 " : "; ;
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, " : ";
;
i = j;
}
];[/code]
[ ToutPrendreSub i j;
[..]
if (i hasnt concealed && i ~= selfobj) {Frotz in 6/12 :
In parserm.h :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]Verb ‹ approcher › ‹ rapprocher ›
-> Approcher
‹ vous › → Approcher
‹ vous › noun → Approcher;[/code]* ‹ 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…
Bonne idée ! C’est plus bien simple comme ça. Merci !
Tu remarqueras que j’ai bien mis « held » dans la grammaire de "quitter’. Du coup je vois pas où est le problème dans ce que j’ai écrit.
C’est pour ça que j’utilise « replace » pour la plupart des trucs, à part « vider poche ». Dans ce cas le ‹ first › est sans doute pas approprié : si jamais y’a un objet « les poches de la personne qu’on est en train de pickpocketer », ou si on a un sac plastique avec synonyme « poche » (pour les gens du Sud), ça risque de créer des problèmes ; supprimé, donc.
Cette extension est aussi faite pour aider les joueurs qui ne connaissent pas forcément la syntaxe. C’est peut-être pas toujours correct mais mieux vaut rattraper des formulations bancales et en profiter pour leur faire voir les bonnes formulations plutôt que dire « je ne comprends pas ».
Corrigé, merci.
Chacun son style… c’est plus clair pour moi comme ça.
Je suis pas super à l’aise avec « return; » tout seul, je préfère quand on dit si « ça a marché ou non ». Ca change rien, fondamentalement, à part dire « tout est OK dans ce cas » au programmeur. Mais dans ce cas-là, le test noun==0 est inutile parce que le parser va essayer de compléter, du coup je l’ai changé (dans ViderPoches).
Ah oui, merci !
Absolument pas d’accord, et je vois pas pourquoi tu dis ça ? (et surtout le rapport avec mon code ?)
Si par ‹ stormisation › tu veux dire « rajouter des verbes et des formulations équivalentes et des distinctions de cas », alors on a des philosophies complètement différentes : ça fait peut-être un code plus chargé, mais ça ajoute un peu plus de cohérence dans le système et ça aide un joueur novice à faire ses premiers pas. Vu le nombre de joueurs qui jouent à des fictions interactives, ça me paraît essentiel de travailler à créer des systèmes et des jeux qui prennent des joueurs potentiels par la main et qui minimisent les choix de conception qui peuvent paraître comme arbitraires ou incohérents, parce que ça fait fuir les gens qui veulent juste jouer à un jeu marrant ou lire une histoire sympa.
C’était un exemple, je ne sais pas si le problème est spécifique à worn.
Non. Roger Firth n’étend pas un meta verbe, il crée un verbe (nom meta) dont l’une des acceptions peut être transformée en meta; le contraire de ce que tu fais et dis.
Tu continues avec ViderPochesSub et ViderPochesDansSub à poser et à insérer en multi des objets qui peuvent avoir l’attribut concealed, ce que ne font pas les bibliothèques.
Pour « vider poches », j’ai réécrit la routine pour que ça soit un synonyme de « poser tout », comme ça on fait ce que la bibliothèque décide de faire. Et je vois pas vraiment d’autres synonymes à rajouter, donc je crois que j’en ai fini