====== Programmer une routine (après un délai) ====== Une [[reference:routines:simple|routine simple]] peut être déclenchée automatiquement après un délai en **temps réel** (pas en tours de jeu). Cela permet de poser une bombe à retardement, déclencher l’apparition d’un PNJ après quelques secondes, faire « bip » toutes les minutes, etc. ===== Syntaxe ===== exécuter la routine X dans N s. Les unités acceptées sont ''seconde'', ''minute'' et ''heure'' (au singulier ou au pluriel). Le moteur convertit la durée en millisecondes et active un chronomètre interne. ===== Exemple minimal : bombe qui explose après 10 secondes ===== Le lieu de test est un lieu. routine boom: dire "La bombe a explosé !". terminer le jeu. fin routine règle après commencer le jeu: dire "Attendez 10 secondes…". exécuter la routine boom dans 10 secondes. fin règle [[djnc>wiki_temps_boom_simple|tester cet exemple]] ===== Annuler l’exécution programmée ===== Le lieu de test est un lieu. La bombe est un objet vu ici. routine boom: dire "La bombe a explosé !". terminer le jeu. fin routine action désamorcer ceci: si ceci est la bombe: annuler la routine boom. dire "Bravo ! La bombe a été désamorcée.". terminer le jeu. fin si fin action règle après commencer le jeu: exécuter la routine boom dans 30 secondes. fin règle règle avant commencer le jeu: dire "Essayez : {/désamorcer la bombe/} en moins de 30 secondes.". fin règle [[djnc>wiki_temps_annuler_routine|tester cet exemple]] L’annulation retire la programmation de la file d’attente du moteur. Si la routine a déjà été exécutée, l’annulation est sans effet. ===== Pause ===== Le joueur peut entrer la commande ''pause'' pour suspendre temporairement la partie. Tant que la partie est en pause, **les routines programmées ne se déclenchent pas** ; le décompte reprend là où il en était à la sortie de la pause. ===== Sauvegarde et reprise ===== À la **sauvegarde** d’une partie en cours, Donjon FI enregistre : * les routines qui se sont **déjà déclenchées** (leur effet sera rejoué à la reprise) ; * **mais pas** les routines programmées **en attente** (le chrono en cours n’est pas reporté). Conséquence : si une routine a été programmée mais n’a pas encore eu le temps de se déclencher au moment de la sauvegarde, elle **sera perdue à la reprise**. Pour des scénarios qui exigent un comptage déterministe, préférez : * la commande ''pause'' pour suspendre la partie sans la sauvegarder ; * le [[reference:debogage:magneto|magnétoscope]] (fichiers ''.rec'') pour rejouer une partie pas-à-pas en figeant le temps. ===== Exemple plus consistant : bombe à retardement ===== Un mini-jeu d’illustration : [[djnc>wiki_temps_bombe_a_retardement|bombe à retardement]] — 60 secondes pour désamorcer la bombe, ou taper ''pause'' pour suspendre le décompte. ===== Voir aussi ===== * [[reference:routines:simple|Routine simple]] — la routine programmée doit être une routine simple. * [[reference:temps:horloge|Horloge]] — lire l’heure système (pour des effets jour/nuit). * [[reference:temps:calendrier|Calendrier]] — lire la date système. * [[reference:debogage:magneto|Magnétoscope]] — rejeu déterministe d’une partie. * [[reference:instructions:terminer|terminer le jeu]] — terminer la partie depuis une routine (échec/réussite).