[I6] Nouvelle extension: OneWordParsing

Espace libre pour faire connaître vos dernières réalisations ou les événements concernant la communauté (concours, jeux individuels, etc.)

Modérateurs: Stormi, Otto Grimwald

[I6] Nouvelle extension: OneWordParsing

Messagepar Mule hollandaise le Jeu Aoû 06, 2015 5:25 am

Je viens de finir une extension qui permet de reconnaître les commandes formées simplement du nom d'un objet. Il y a une extension I7 qui permet déjà de faire ça, et vous avez sans doute déjà vu cette interface dans des jeux I7 comme Blue Lacuna et Walker & Silhouette, ou dans Pirates des Charaïbes de Mnemocyon ; c'est la même chose, mais pour I6 :)

Concrètement, vous avez deux modes :
  • "accepter les verbes" (définir la constante ALLOW_VERBS) : le joueur peut toujours taper tous ses verbes préférés, mais il peut aussi taper les noms des objets pour les examiner;
  • "refuser les verbes" (constante DONT_ALLOW_VERBS) : aucun verbe, on peut juste taper le nom des objets.

C'est pas forcément un effet qui est souvent utilisé, quoique j'aime bien la possibilité de juste taper le nom de l'objet pour l'examiner ; en tout cas, vous avez maintenant l'extension pour ça en I6 :)
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar auraes le Jeu Aoû 06, 2015 8:45 am

Mule hollandaise a écrit:"refuser les verbes" (constante DONT_ALLOW_VERBS) : aucun verbe, on peut juste taper le nom des objets.
C'est peut être l’occasion de faire sans les bibliothèques.
Sinon :
Code: Tout sélectionner
#Ifdef DONT_ALLOW_VERBS;
[ BeforeParsing pos;
#Ifdef TARGET_ZCODE;
   pos = parse->5;
#Ifnot; ! TARGET_GLULX
   pos = parse->3;
#Endif; ! TARGET_
   LTI_Insert(pos, 'x');
   LTI_Insert(pos+1, ' ');
   Tokenise__(buffer,parse);
];
#Endif;#Ifdef DONT_ALLOW_VERBS;
doit être équivalent à ça, non ? :
Spoiler ! :
#IfNDef MyParserError;
[ MyParserError ;
L__M(##Miscellany, 27); ! I didn't understand that sentence : customise this to tell the player to not use any verbs!
return true;
];
#Endif;

[ AnythingToken ;
while (NextWordStopped() ~= -1) ; return GPR_PREPOSITION;
];

[ OneWordSub;
<<Examine noun>>;
];

[ OneWordFailSub;
#Ifdef DONT_ALLOW_VERBS;
MyParserError();
#Endif;
#Ifdef ALLOW_VERBS;
L__M(##Miscellany, 38); ! I don't recognise that verb
#Endif;
return true;
];

#Ifdef DONT_ALLOW_VERBS;
! We don't allow the use of verbs
! This is done by prefacing all the commands by 'verb'
[ BeforeParsing pos ;
#Ifdef TARGET_ZCODE;
pos = parse->5;
#Ifnot; ! TARGET_GLULX
pos = parse->3;
#Endif; ! TARGET_
LTI_Insert(pos, 'v');
LTI_Insert(pos+1, 'e');
LTI_Insert(pos+2, 'r');
LTI_Insert(pos+3, 'b');
LTI_Insert(pos+4, 'l');
LTI_Insert(pos+5, 'e');
LTI_Insert(pos+6, 's');
LTI_Insert(pos+7, 's');
LTI_Insert(pos+8, ' ');
Tokenise__(buffer,parse);

];

Verb 'verbless'
* noun ->OneWord
* AnythingToken ->OneWordFail;

#Endif;
Mule hollandaise a écrit:"accepter les verbes" (définir la constante ALLOW_VERBS) : le joueur peut toujours taper tous ses verbes préférés, mais il peut aussi taper les noms des objets pour les examiner;
Difficile sans casser toute la mécanique d'Inform et pas sûr que cela soit d'un grand intérêt ; saisir : > x objet ou : > objet...
Avatar de l’utilisateur
auraes
Grand Ancien
 
Messages: 348
Inscription: Ven Avr 11, 2008 9:15 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar Mule hollandaise le Jeu Aoû 06, 2015 9:34 pm

Bien vu ! Je sais pas pourquoi mais je m'étais dit que ça serait bien de laisser la possibilité à l'auteur de déterminer quelle action correspond à "objet", mais c'est sans doute inutile ; et si quelqu'un veut changer l'action, c'est facile à faire. Du coup j'ai simplifié un peu mon code - merci !
Par contre je voudrais donner la possibilité à l'auteur de définir son propre message d'erreur sans avoir à modifier L__M(##Miscellany), parce qu'il faut sans doute dire quelque chose de plus que "je ne comprends pas" si l'interface est non-standard ; du coup j'ai gardé le Anything et MyParserError.
Et vu que je veux faire ça, il faut définir une grammaire "un nom ou n'importe quoi", et je peux pas mapper ça à "x" à cause des bibliothèques : si j'inclus la bibli après Grammar, ça me dit que je définis BeforeParsing deux fois, alors il faut l'inclure avant, mais du coup si je dis "Extend 'x'" il me dit 'c'est pas encore défini', et si je dis "Verb 'x'" il me dit "tu le définis deux fois". :/ Si tu as une idée...

En ce qui concerne les biblis, c'est vrai que si on fait un truc avec une interface de 1 mot on pourrait se passer de pas mal de code des bibliothèques Inform (genre, tout Grammar et tous les messages de French/English, et pas mal de parserm.h) et gagner de la place. Cela étant on peut aussi décider de rester sur I6 parce qu'on connaît le langage et parce que le résultat sera jouable sur toutes les plateformes (enfin moi c'est ça qui me fait peur dans le fait de recoder un système). Ou alors il faudrait faire une grosse extension qui condense tout le code de la bibliothèque dans ce cas précis, et on n'aurait même plus besoin d'inclure Parser, Verblib et tout - c'est peut-être ça que tu voulais dire ? Ca me paraît plus compliqué.

Pour l'interface, j'ai lu dans quelques reviews (de Blue Lacuna notamment) que c'était apprécié de certains joueurs : genre tu vois un objet, tu tapes le nom pour en savoir plus, et ensuite seulement tu essaies de faire des actions dessus - apparemment y'en a qui aiment bien. Je sais pas trop ce que tu veux dire par 'casser toute la mécanique d'Inform' (c'est juste un truc rattrapé dans UnknownVerb, comme "parlons" et "marchez"), mais bon voilà, si y'en a qui veulent essayer, y'a le code.

Merci pour tes retours en tout cas!
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar auraes le Jeu Aoû 06, 2015 10:37 pm

Mule hollandaise a écrit:Si tu as une idée...
Euh... non ; j'ai pas trop la tête dans Inform.
Mule hollandaise a écrit:Ou alors il faudrait faire une grosse extension qui condense tout le code de la bibliothèque dans ce cas précis
Non, justement. Il y a énormément de fictions interactives faites notamment en Basic avec des contraintes d'un autre temps. Le compilateur Inform — sans les bibliothèques (toutes les bibliothèques), reste un très bon logiciel pour créer des fictions interactives. Il n'y a pas de raison que ce qui était possible en Basic ne le soit pas avec I6.
Mule hollandaise a écrit:Je sais pas trop ce que tu veux dire par 'casser toute la mécanique d'Inform'
Je pensais que tu utilisais BeforeParsing() aussi avec ALLOW_VERBS, mais ce n'est pas le cas.
Ceci dit, dans le cas de DONT_ALLOW_VERBS, cela peut poser des problèmes si tu veux utiliser quand même le verbe 'inv' pour avoir accès à un inventaire, ce qui peut être intéressant avec ce type de jeu.

Sinon, plutôt que UnknownVerb(), tu peux utiliser LanguageIsVerb() — voir dans parserm.h :
Code: Tout sélectionner
#Ifdef LanguageIsVerb;
    if (verb_word == 0) {
        i = wn; verb_word = LanguageIsVerb(buffer, parse, verb_wordnum);
        wn = i;
    }
#Endif; ! LanguageIsVerb

Tu jetteras un œil dans parserm.h, juste après LanguageIsVerb() : ce que tu veux faire avec avec ALLOW_VERBS, rediriger un noun vers un ##Examine, la bibliothèque le fait déjà avec les directions nseoud, qui sont elles aussi des nouns redirigés vers un ##Go ; c'est le même cas.
Avatar de l’utilisateur
auraes
Grand Ancien
 
Messages: 348
Inscription: Ven Avr 11, 2008 9:15 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar Mule hollandaise le Ven Aoû 07, 2015 6:30 am

auraes a écrit:Ceci dit, dans le cas de DONT_ALLOW_VERBS, cela peut poser des problèmes si tu veux utiliser quand même le verbe 'inv' pour avoir accès à un inventaire, ce qui peut être intéressant avec ce type de jeu.

!!! J'avais complètement oublié, non seulement l'inventaire, mais aussi les verbes meta genre sauver / charger / recommencer !! Heureusement que tu m'y as fait penser - hop, ajouté à l'extension !
(J'ai dû faire une 'general parsing routine' qui fait tous les verbes meta en français et en anglais, pour ceux que ça intéresse ; c'est pas tout fini, il manque quelques verbes de debug, mais bon.)

Je vais regarder LanguageIsVerb, je connaissais pas du tout - merci!
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar auraes le Sam Aoû 08, 2015 8:26 am

J'ai essayé Glulx et les accents et à part avec 'œ', je n'ai pas eu de problèmes : http://auraes.free.fr/tmp/accents.inf
À quoi servent les IsAnA(),IsAnE(), etc. ?
(Si tu veux supporter 'æ' et 'œ' à la saisie, il faut les transformer en 'ae' 'oe'.)
***update***
Pour « 'æ' et 'œ' à la saisie » inutile de chercher à les dissocier, car la saisie n'est pas en UTF-8. Et de toute façon qui irait saisir '> nœud' au lieu de '> noeud' !?
Dernière édition par auraes le Lun Aoû 10, 2015 3:10 pm, édité 1 fois.
Avatar de l’utilisateur
auraes
Grand Ancien
 
Messages: 348
Inscription: Ven Avr 11, 2008 9:15 pm

Re: [I6] Nouvelle extension: OneWordParsing

Messagepar Mule hollandaise le Lun Aoû 10, 2015 5:09 am

Ah oui exact pour æ et œ, merci. Je changerai ça quand j'aurai le temps.

IsAnA et tout ont la même fonction que les trucs dans ton switch, mais je les ai aussi utilisées dans LanguageContraction, qui détermine si il faut mettre "le" ou "l'" (et m', s', etc). C'est juste pour réutiliser du code et le rendre plus maintenable. (Et du coup il faut que œ soit reconnu comme un o, pour la contraction, et c'est donc à transforme_lettre ou enleve_accents de rajoute un e en plus... mmh...)
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm


Retourner vers Annonces

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron