Gestion des coéquipiers

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

Gestion des coéquipiers

Messagepar ThesmallgamerS le Sam Oct 13, 2007 8:19 am

Tout d'abord, j'aimerais annoncer que je suis a 30% du codage d'un nouveau jeu. Ça devrait s'appeller "Le Néant Distordu" et contenir violence, passion et mort :wink: (oui, je sais, osef).

Bref. J'avais aussi l'idée d'adapter Carrion Comfort de Dans Simmons en fiction interactive. Pour ceux qui n'aurait pas lu (Echiquier du Mal en langue française), c'est l'histoire de "vampire psychique", en fait de simples humains génétiquement capable de contrôler les actions d'autre humains. Sur cette trame apparament assez peu novatrice, Dan Simmon tisse un ruban vicieux, pervers, dérangeant, glauque à l'absurde. L'histoire est un peu poussif sur certain bord, mais toujours très sombre.

Or donc, j'ai un problème pour traiter des phrases du genre "forcer quelqu'un a faire quelquechose". Je pensais d'abord a intercepter FrenchG.h et rajouter comme :
Code: Tout sélectionner
Verb 'forcer'
* noun -> user
etc...

Seulement, ça bloque dès que la phrase est un peu complexe, comme par exemple sur "forcer quelqu'un a frapper quelqu'un d'autre" "forcer quelqu'un a me donner tel objet". Je ne connais pas assez la syntaxe pour même savoir si c'est possible.

Mon problème peut aussi s'apparenter comme un problème de gestion des coéquipiers et j'imagine que la solution pourra aussi résoudre ce cas, mais dans ce cas ce serait plutôt "demander quelqu'un d'attaquer quelqu'un d'autre", etc.
Leger regel, elle née doute, fleur. Cruel fétu ! Ôde en elle, leger regel.
ThesmallgamerS
Sorcier du culte
 
Messages: 19
Inscription: Dim Avr 08, 2007 2:17 pm
Localisation: Paris

Messagepar Otto Grimwald le Sam Oct 13, 2007 9:02 am

c'est le verbe "AskTo" qui gère cela, mais je n'ai jamais utilisé.

normalement cela permet de dire :

"Otto, prend l'épée" (je ne sais même pas si cela fonctionne avec inform 6 en français), ou bien : "ordonner a Otto de prendre l'épée"

Pour la syntaxe, voir DM4 ou éventuellement ici

je te conseille de ne pas trop sortir des sentiers battus, sinon tu vas bcp t'embêter pour rien.

Je serais toi je modifierais ainsi :
Code: Tout sélectionner
Verb 'ordonner' 'forcer'
      * creature 'de' topic         -> AskTo ! "ordonne-lui"
      * 'à'/'a'/'au'/'aux' creature 'de' topic   -> AskTo;

Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Messagepar ThesmallgamerS le Sam Oct 13, 2007 9:33 am

Merci :D

J'aurais dû effectivement d'abord me réferer au DM4. Tout une section est consacrée aux ordres qu'on peut donner aux PNJ. Les possibilités sont vastes.
Mon code ressemblerait donc a ça, par exemple, si je veux traiter "Forcer qqun a me donner qqchose :

Code: Tout sélectionner
machin "machin" truc
with orders [; switch (noun)
    { 'donner' : move second to player;
    }
],
has animate;

Verb 'ordonner' 'forcer'
      * creature 'de' topic         -> AskTo ! "ordonne-lui"
      * 'à'/'a'/'au'/'aux' creature 'de' topic   -> AskTo;


Deux problèmes :

Il ne faut pas utiliser AskTo mais orders. Or, je ne sais pas trop comment modifier la grammaire pour faire correspondre une orders property. Apparemment, c'est un peu plus compliqué que pour un simple Ask.

Si on fait attention, il y a trois informations dans donner quelquechose a quelqu'un. Comment on fait pour les gerer ?

EDIT : En fait, après lecture approfondie, je ne comprend pas vraiment la différence entre AskTo et orders. Quelqu'un a des infos ? :wink:
Leger regel, elle née doute, fleur. Cruel fétu ! Ôde en elle, leger regel.
ThesmallgamerS
Sorcier du culte
 
Messages: 19
Inscription: Dim Avr 08, 2007 2:17 pm
Localisation: Paris

Messagepar ThesmallgamerS le Sam Oct 13, 2007 11:23 am

Voici un bout de code qui fonctionne, compilé sans problème :
Code: Tout sélectionner
object piece "piece"
   with description "une piece",
   name 'piece'
has light;

object machin "machin vivant" piece
with orders [; Give : move noun to player; print_ret "essai reussis";],
   name 'machin',
has animate;

object objet "objet" machin
with description "un objet",
   name 'objet',
has ;


C'est en fait tout simple. AskTo est une redirection vers orders. Toute grammaire d'AskTo est considéré comme orders. A partir de la 6/11, "Machin, donne objet" ou "Demander a machin de donner objet" marche pareillement (grace a AskTo dans FrenchG.h).

Quand a la grammaire donné, pour qu'elle fonctionne, il faut que ce soit du genre :
Code: Tout sélectionner
Extend 'forcer' replace
      * creature 'a'/'à' topic         -> AskTo ;
!     * 'à'/'a'/'au'/'aux' creature 'de' topic   -> AskTo;

Extend 'ordonner' replace
      * creature 'de' topic         -> AskTo ! "ordonne-lui"
      * 'à'/'a'/'au'/'aux' creature 'de' topic   -> AskTo;
Leger regel, elle née doute, fleur. Cruel fétu ! Ôde en elle, leger regel.
ThesmallgamerS
Sorcier du culte
 
Messages: 19
Inscription: Dim Avr 08, 2007 2:17 pm
Localisation: Paris

Messagepar Otto Grimwald le Sam Oct 13, 2007 4:01 pm

merci de ces précieuses informations, je pense les copier sur notre site dans la section des articles.

Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Messagepar ThesmallgamerS le Sam Oct 13, 2007 4:38 pm

:shock: Je ne sais vraiment pas comment le prendre, c'est vraiment du code de base. Dans le doute, je remercie :)

Je suis en train de me farcir toute la docu sur les PNJs, et c'est pas facile. L'un de mes problème est le suivant :

Code: Tout sélectionner
object toto "toto" piece
   with description "C'est toto.",
   orders [;
   Give :    switch (noun) {
   'montre' : print_ret "Il vous tend sa montre";};
   ],
   name 'toto' 'toto',
        has animate;

object montre "montre" toto
       with description "la montre de toto"
       name "montre"
       has ;


Le noun contient bien l'objet montre, mais ce code me pête entre les mains au passage du switch et je ne comprend vraiment pas pourquoi.

EDIT : Ah non, j'ai trouvé. noun contient l'objet montre, mais pas le nom. Les ' ' de 'montre' était donc superfétatoire.
Leger regel, elle née doute, fleur. Cruel fétu ! Ôde en elle, leger regel.
ThesmallgamerS
Sorcier du culte
 
Messages: 19
Inscription: Dim Avr 08, 2007 2:17 pm
Localisation: Paris


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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

cron