[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.
tvisarl
Celui qui attend à l'affût
 
Messages: 137
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: 1071
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: 137
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: 137
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: 1071
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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

cron