Outils pour utilisateurs

Outils du site


agi-game:leisuresuitlarry:reference-timer

Leisure Suit Larry - Timing and Timers

Larry utilise beaucoup de “timing” et de “timer”, ils sont tous gérer à partir de la logic_0

#define varTimeLastElapsedSeconds     v43
#define varTimingDelay                v67
#define varClearStatusSeconds         v68
#define varTimerSpraySeconds          v71
#define varTimerSprayMinutes          v72
#define varTimerBreathSpraySeconds    v80
#define varSecondsSinceKeystroke      v91
#define varGameTimeSecond             v115
#define varGameTimeMinute             v116
#define varGameTimeHour               v119

A cause de l'architecture “unsigned byte” de la Machine Virtuel AGI, un Timer ne peut jamais etre négatif (sa valeur bouclera automatiquement à 255). Pour éviter les Bugs, le programmeur a décider de déclencher ses actions quand le timer atteint 1 seconde restante (au lieu de 0).

In game Time

Les Timing sont incrémentaux, et quand ils atteignent 60 (ou plus), l'unité suppérieur (minute, heure) est incrémenté de 1, alors que la seconde est remise à 0.

#define varGameTimeSecond             v115
#define varGameTimeMinute             v116
#define varGameTimeHour               v119

L'Heure dans le jeu est gérer par 3 variables, et débutent à 10pm (10 00 00). Il y a un test pour définir si l'heure est suppérieur à 4h du matin; dans ce cas, le jeu lance la cinématique de BAD ending (Larry se suicide, toujours Vierge…).

Pour atteindre cet fin, le joueur doit laisser passer (en temps réel) plus de 6h de jeu; (il peut se déplacer dans la ville, mais les temps de chargement (non calculer) vont augmenter encore ce temps.

Il est intéressant de voir que ce Temps n'augmente pas pour certaines Room (title, BadEnding and Questionnaires).

Timers

Leisure suit larry utilise 4 grands “Timers” differents:

varTimingDelay [v67]

#define varTimingDelay                v67

Ce Timer est un timer générique, qui est décrementé à chaque seconde et que la Room Logic peut mettre en place pour déclencher des évènements après un certains temps) e.g. Le chien qui apparait si Larry ne bouge pas en étant en rue…

Quand le temps est écoulé (qu'il ne reste qu'une seconde), le Timer Set le flag boolTimingScriptDone [f75].

Toutes les Room Logic peuvent changer ce timer, il est même conseiller de le spécifier dans la section NewRoom du script, et d'ensuite attendre que le flag boolTimingScriptDone [f75] passe a vrai.

varClearStatusSeconds [v68]

Quand ce Timer est écoulé, il efface une partie de la ligne #24 de l'écran.

  if (varClearStatusSeconds == 1)                 //  clear lower part of the screen half line (line 24)
    {
    clear.text.rect(24, 0, 24, 15, BLACK);
    }

varTimerSprayMinutes [v72] & varTimerSpraySeconds [v71]

Ce Timer est initialisé à 10 minutes (10:00).

Haa le Breath Spray tout un programme; quand ce timer est épuisé, il affiche un message pris dans la liste des messages de 157 à 160.

Si la valeur de varTimerSprayMinutes [v72] est > 0; le Gestionnaire décrémente varTimerSprayMinutes [v72], et mets la varTimerSpraySeconds [v71] = 60.

Quand varTimerSpraySeconds [v71] == 1 et varTimerSprayMinutes [v72] == 0, le gestionnaire :

  • Set le flag boolMouthSmellBad [f107]
  • Reset le flag boolMouthOK [f66].
    if (varTimerSprayMinutes > 0 && 
        varTimerSpraySeconds <= 0)
      {
      --varTimerSprayMinutes;
      varTimerSpraySeconds = 60;  
      }
 
 
    if (varTimerSpraySeconds == 1 && 
        varTimerSprayMinutes <= 0)
      {
      reset(boolMouthOK);
      set(boolMouthSmellBad);
      print.v(varMouthMessage);
      ++varMouthMessage;
      if (varMouthMessage > 160)
        {
        varMouthMessage = 157;
        }
      }

varTimerBreathSpraySeconds [v80]

Le gestionnaire décrémente ce timer jusqu'à 1.

Sa valeur est définie quand Larry utilise son spray; quand le flag boolDisabledRoomJump (f48) est activ our que currentRoom == 0.

Quand ce timer est expiré (valeur == 1),

  • Le joueur récupère le controle de Larry.
  • Le flag boolKeepCycling [f34] est mis a off.
    if (varTimerBreathSpraySeconds == 1)
      {
      reset(boolDisabledRoomJump);
      reset(boolKeepCycling);
      set.view(ego, Larry_StandAndWalk);
      start.motion(ego);
      reset(boolDisablePlayer);
      accept.input();
      print("Ahhh.");
      }
agi-game/leisuresuitlarry/reference-timer.txt · Dernière modification: 2021/05/05 20:51 de frater