[I7] O Mort, où est ta victoire ?

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

Modérateurs: Stormi, Otto Grimwald

[I7] O Mort, où est ta victoire ?

Messagepar tvisarl le Jeu Sep 27, 2018 3:23 pm

Bonjour à tous,

Pour décrire un duel, j'ai une phrase nommée du genre :

Code: Tout sélectionner
To Duel01:
        << bla-bla >>
   if PlayerHP < 1:
      say "[line break]Cette fois, il vous a eu !";
      now the command prompt is ">";
      end the story  saying "[note style]C'est fini pour vous. Désolé !";
   if HitPoints of Machin01 < 1:
      say "[line break]Ça y est, vous lui avez réglé son compte !";


La ligne "end the story" ne fonctionne pas. Elle est complètement ignorée et le jeu continue gaillardement. Pourtant le message précédent s'affiche bien et le command prompt est ré-initialisé...
Pouvez-vous me dire pourquoi ?

Merci d'avance.
Dernière édition par tvisarl le Sam Nov 17, 2018 6:17 pm, édité 3 fois.
tvisarl
Celui qui attend à l'affût
 
Messages: 139
Inscription: Sam Juin 18, 2016 9:20 am

Re: [I7] O Mort, où est ta victoire ?

Messagepar Natrium le Ven Sep 28, 2018 8:20 pm

En testant rapidement chez moi (et en ajoutant le machin, les variables mentionnées et autres), ça fonctionne.

Il nous faudrait peut-être un peu plus de contexte (plus de code, où tu déclenche la fin du jeu, etc.).
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1078
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [I7] O Mort, où est ta victoire ?

Messagepar tvisarl le Sam Sep 29, 2018 1:48 pm

Bonjour, Natrium.

C'est une étrange chose. La phrase "Duel01" est déclenchée par une règle every turn, comme ça :

Code: Tout sélectionner
Every turn when the trigger of the location is not 0:
   try performing the trigger of the location;


Dans mon cas "the trigger of the location" vaut 6.
L'action "perform", que je trouve bien pratique, est comme ça :

Code: Tout sélectionner
Performing is an action applying to one number.
Understand "Perform [a number]" as performing.
Carry out performing:
   if the number understood is:
      -- 1: now the player is in P001;
      -- 2: GotoE2fromE1;
      -- 3: DoConversation01;


Et pour ça, je tape souvent un simple retour chariot paramétré comme ça:

Code: Tout sélectionner
Understand the command "suite"  as something new.
Loafing is an action applying to nothing.
Understand "suite" as loafing.

Carry out loafing:
   if the Proc of Episode is 0:
      if the WaitCode of location is 0:
         say "Quelques instants passent.";
      if the WaitCode of location > 0:
         try performing the WaitCode of location;
      
For printing a parser error when the latest parser error is the I beg your pardon error:
   try loafing;
   follow the every turn rules;
   follow the advance time rule;


Alors. Quand j'utilise le retour chariot ça ne marche pas : j'obtiens "Quelques instants passent". Mais quand j'utilise n'importe quelle commande "normale" y compris "suite", ça marche !
On dirait que le problème est dans le traitement du retour chariot ?

Merci de ton aide.
tvisarl
Celui qui attend à l'affût
 
Messages: 139
Inscription: Sam Juin 18, 2016 9:20 am

Re: [I7] O Mort, où est ta victoire ?

Messagepar tvisarl le Mer Oct 17, 2018 10:33 am

Bon. J'ai trouvé une manière de contourner le problème, bien qu'il ne soit pas résolu.
tvisarl
Celui qui attend à l'affût
 
Messages: 139
Inscription: Sam Juin 18, 2016 9:20 am

Re: [I7] O Mort, où est ta victoire ?

Messagepar Natrium le Mer Oct 17, 2018 11:20 pm

Tout d'abord, désolé pour le retard ! J'ai eu d'autres choses à faire, puis j'ai oublié. (N'hésite pas à relancer le sujet au bout d'un certain temps, c'est correct tant que tu ne spammes pas ! :wink:)


Je comprends le problème : tu aimerais qu'une commande vide fasse attendre (ou en tout cas, quelque chose dans le monde du jeu). C'est une mauvaise idée de lancer la machinerie pour un tour dans l'activité printing a parser error parce que cette activité est faite, comme son nom l'indique, à afficher des choses, pas à changer le monde du jeu.

Cependant, quelqu'un a écrit une extension qui fait ça correctement, en modifiant directement les rouages internes d'Inform. Avec elle, on peut écrire :

Code: Tout sélectionner
Rule for repairing an empty command:
    change the text of the player's command to "suite".

En revanche, comme ça modifie le code du parser, il se peut que ça ne marche pas comme prévu en fonction de la version d'Inform (et je ne sais pas pour laquelle l'extension a été écrite), mais je pense que ça devrait être OK.

Sinon, une petite remarque : je trouve un peu étrange que tu utilises des actions pour ce genre de choses, plutôt que des règles. À moins qu'en fait il s'agit d'actions qui peuvent êtres déclenchées avec des liens ? (Ou que le joueur puisse légitiment taper directement les commandes, mais ça me semble bizarre.)

Encore désolé pour le retard ! :oops:
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1078
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [I7] O Mort, où est ta victoire ?

Messagepar tvisarl le Sam Oct 27, 2018 6:22 pm

Bonjour, Natrium.

Merci pour ta réponse. D'abord avant tout et pour commencer, tu n'as évidemment pas à t'excuser pour quoi que ce soit ! Ensuite, ce que tu dis pour mon problème, c'est ça et c'est pas ça.

1 - Il semble que "End the story" marche mal ou pas du tout quand on émet la commande à l'intérieur d'une phrase nommée ( j'aurais dû être plus explicite ). C'est ça que j'ai contourné et je suis très content du contournement, ma foi. Donc problème réglé, au moins pour moi.
2 - Tu as très bien vu que je veux que la touche "Entrée" soit équivalente à la commande "suite". Ce que je fais marche très bien, mais je suis tout à fait prêt à m'entendre dire qu'il faut faire autrement, et l'extension que tu signales est très intéressante. Je vais essayer, bien sûr.
3 - Pourquoi ça ? Le mieux est que je donne ici un extrait de mon "Aide" standard :
"Certains jeux, tels que celui-ci, font partie d'une histoire. Ils comportent donc des passages essentiellement narratifs ( combats, conversations, passage d'un environnement à un autre, etc. ) que nous appellerons des transitions puisqu'ils correspondent à des changements d'état du monde virtuel dans lequel vous évoluez. Pour vous avertir du fait que vous êtes dans une transition, l'invite de commande change : de ">", elle devient ">>".
Pendant une transition certaines commandes, telles que les déplacements d'une salle à une autre, peuvent être bloquées. Bien que les autres commandes puissent toujours fonctionner, vous pouvez alors vous limiter à la commande "suite" ou à une simple pression sur la touche "Entrée". L'invite de commande redevient ">" quand la transition est terminée."
4 - Dans quelques jours, je vais proposer ici une petite aventure D&D, tout à fait minimaliste. Si tu es intéressé, tu verras mieux ce que j'essaie de faire.

Enfin, je vais essayer de mettre quelque part dans ce forum ( où exactement, au fait ? ) un petit post décrivant mon travail "sérieux" : parler d''Histoire ( oh, modestement, mais tu remarqueras le "H") par le truchement de la fiction interactive. Je serai très intéressé par votre opinion à tous.

Ouf ! Pas trop long ?
tvisarl
Celui qui attend à l'affût
 
Messages: 139
Inscription: Sam Juin 18, 2016 9:20 am


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron