Table des matières
Format des fichiers sauvegarde (.sol)
Donjon FI utilise un fichier .sol pour sauvegarder une partie en cours et la rejouer plus tard à l'identique. C'est aussi le format utilisé par le mode triche pour reproduire automatiquement une séquence de commandes.
Structure générale
{
"type": "sauvegarde",
"version": 31102,
"declenchementsFuturs": [
{ "routine": "activationPiege", "tempsMs": 345 }
],
"etapesSauvegarde": [
"g:0.25796434437940996",
"c:prendre clé",
"r:2",
"c:i",
"c:x porte",
"c:ouvrir la porte avec la clé",
"c:entrer",
"c:x trou",
"d:porteRougeSeReferme",
"c:manger baie",
"g:0.7474848097328197",
"c:x baie",
"c:p baie",
"c:*orthographe: il manque un accent à « clé »"
],
"horlogesSauvegarde": [null, null, null, [1758566400000]],
"horlogeIntro": [],
"scenario": "Le joueur se trouve dans le salon.\r\n\r\nSa description est \"Vos vêtements sont sales. …\"."
}
Types d'étapes
Chaque entrée du tableau etapesSauvegarde commence par un préfixe à une lettre, suivi de deux-points puis de la valeur. Seuls les premiers deux-points servent de séparateur : la valeur peut elle-même en contenir (cas d'un commentaire du joueur).
| Préfixe | Sens | Exemple |
|---|---|---|
c | Commande du joueur | c:prendre clé |
r | Réponse à une question du jeu (1, 2, oui…) | r:2 |
g | Graine aléatoire courante (PRNG) | g:0.25796… |
d | Déclenchement d'une routine forcée (chrono) | d:porteRougeSeReferme |
d (avec arguments) | Routine programmée avec arguments — résolus au déclenchement | d:afficherScore avec 3 |
Une commande qui commence par * ou @ est un commentaire du joueur à l'auteur : elle est stockée comme une commande ordinaire (c:* la porte est introuvable) mais n'est pas interprétée par le jeu.
À la reprise (mode triche / replay), le moteur ré-applique chaque étape dans l'ordre : il pose la graine g, envoie la commande c au commandeur, ou injecte la réponse r attendue, ou force le déclenchement d de la routine.
Autres champs
| Champ | Sens |
|---|---|
type / version | Type de fichier et version de Donjon FI qui l'a produit. |
declenchementsFuturs | Routines programmées pas encore déclenchées au moment de la sauvegarde (nom + temps restant en millisecondes). |
horlogesSauvegarde | Lectures d'horloge (epoch ms) faites par chaque étape, alignées par index sur etapesSauvegarde (null = l'étape n'a pas lu l'heure). Rejouées au lieu de l'heure réelle pour que le replay soit déterministe. Le champ est absent si aucune étape de la partie n'a lu l'heure. |
horlogeIntro | Idem pour la phase d'introduction (avant la première commande). Absent si vide. |
scenario | Le code source du jeu. Présent dans une sauvegarde de partie (.sav), absent d'un fichier solution généré par générer solution. |
Routines programmées et sauvegardes
Quand une routine programmée arrive à échéance, son déclenchement est enregistré comme une étape d:nomRoutine. À la reprise, la routine est rejouée à la même place dans la chronologie, sans relancer le chronomètre temps réel.
Si la routine a été programmée avec des arguments, l’étape encode les arguments résolus au moment du déclenchement, sous forme canonique : un nombre est écrit tel quel (d:afficherScore avec 3), un texte entre guillemets (d:annoncer avec "bravo"), un élément du jeu par son intitulé.
Cas limite : une routine programmée mais pas encore déclenchée au moment de la sauvegarde n'est pas restaurée — le chrono en cours n'est pas reporté. Pour des scénarios qui exigent un comptage déterministe, utilisez plutôt le magnétoscope .rec.
.sol vs .rec
.sol(sauvegarde) — contient les étapes de la partie. Permet de reprendre le jeu. Ne stocke pas la sortie attendue..rec(enregistrement) — contient les étapes et la sortie attendue à chaque étape. Permet de vérifier qu'une modification du scénario n'a pas cassé un parcours. Voir magnétoscope.
Voir aussi
- Mode triche — rejouer un
.solautomatiquement. - Magnétoscope — rejeu pas-à-pas avec vérification de sortie (
.rec). - Programmer une routine — interaction des chronos avec la sauvegarde.
- Commentaires du joueur à l'auteur — recueillir les retours d'un bêta-testeur via le
.sol.
