====== 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).