Revisione di Codex: salvataggi a punti fermi, salva e carica da file, volume delle voci
- si salva solo a sequenza finita: uscire a metà di una risposta o della casetta riporta a prima; la squama presa resta salvata anche senza cambiare scena; test di interruzione su soluzione e catena del ghiacciolo - «Salva su file» nella pausa e «Carica» nel titolo, con controllo di versione e contenuto prima di sostituire il salvataggio del browser - cursore del volume delle voci («bla»), 50% di partenza; il muto zittisce subito la voce, la pausa la riprende - col dito un oggetto mancato di poco si prende, e i piccoli vincono sui grandi che li contengono (la squama); verbi su due colonne nel telefono in orizzontale - sfondi caricati per vicinanza alla scena di partenza, con tentativi limitati se falliscono; a gioco fermo non si ridisegna - modalità ?debug per scrivere le scene: area calpestabile, hotspot, punti, coordinate copiabili - corretto: i crediti dal titolo restavano dietro il titolo Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
+28
-2
@@ -28,13 +28,39 @@ export function clearSave(storage) {
|
||||
}
|
||||
}
|
||||
|
||||
// Volume e muto della musica: si ricordano anche senza una partita salvata.
|
||||
// File di salvataggio da portare su un altro dispositivo: la partita dentro una busta che dice di che gioco è.
|
||||
const FILE_GAME = 'la-leggenda-del-regolo';
|
||||
|
||||
export function saveFile(data, date = new Date()) {
|
||||
return JSON.stringify({ game: FILE_GAME, version: FILE_VERSION, saved: date.toISOString(), state: data }, null, 1);
|
||||
}
|
||||
|
||||
export function saveFileName(date = new Date()) {
|
||||
const p = n => String(n).padStart(2, '0');
|
||||
return `regolo-${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}-${p(date.getHours())}${p(date.getMinutes())}.json`;
|
||||
}
|
||||
|
||||
const FILE_VERSION = 1;
|
||||
|
||||
// La partita contenuta nel file: { state } se è un salvataggio di questo gioco in una versione che si sa leggere,
|
||||
// altrimenti { error: 'not-save' | 'newer' }. Che la partita torni con la storia lo controlla checkSave (game.js).
|
||||
export function readSaveFile(text) {
|
||||
let f;
|
||||
try { f = JSON.parse(text); } catch { return { error: 'not-save' }; }
|
||||
if (!f || f.game !== FILE_GAME || !f.state || typeof f.state !== 'object' || Array.isArray(f.state)) return { error: 'not-save' };
|
||||
if (!Number.isInteger(f.version) || f.version < 1) return { error: 'not-save' };
|
||||
if (f.version > FILE_VERSION) return { error: 'newer' };
|
||||
return { state: f.state };
|
||||
}
|
||||
|
||||
// Volume della musica, volume delle voci e muto: si ricordano anche senza una partita salvata.
|
||||
const AUDIO_KEY = 'leggenda-regolo-audio';
|
||||
|
||||
export function readAudio(storage) {
|
||||
try {
|
||||
const a = JSON.parse(storage.getItem(AUDIO_KEY));
|
||||
return a && typeof a.volume === 'number' ? { volume: a.volume, muted: !!a.muted } : null;
|
||||
if (!a || typeof a.volume !== 'number') return null;
|
||||
return { volume: a.volume, muted: !!a.muted, ...(typeof a.voices === 'number' && { voices: a.voices }) };
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user