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:
+20
-4
@@ -1,6 +1,6 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { readSave, writeSave, clearSave, readAudio, writeAudio } from '../src/engine/storage.js';
|
||||
import { readSave, writeSave, clearSave, readAudio, writeAudio, saveFile, saveFileName, readSaveFile } from '../src/engine/storage.js';
|
||||
import { memoryStorage } from './helpers.mjs';
|
||||
|
||||
test('scrive, rilegge e cancella il salvataggio', () => {
|
||||
@@ -22,11 +22,27 @@ test('un archivio rotto o bloccato non fa cadere il gioco', () => {
|
||||
assert.equal(readSave(garbage), null);
|
||||
});
|
||||
|
||||
test('volume e muto della musica si ricordano', () => {
|
||||
test('volume della musica, volume delle voci e muto si ricordano', () => {
|
||||
const s = memoryStorage();
|
||||
assert.equal(readAudio(s), null);
|
||||
assert.ok(writeAudio(s, { volume: 0.3, muted: true }));
|
||||
assert.deepEqual(readAudio(s), { volume: 0.3, muted: true });
|
||||
assert.ok(writeAudio(s, { volume: 0.3, muted: true, voices: 0.4 }));
|
||||
assert.deepEqual(readAudio(s), { volume: 0.3, muted: true, voices: 0.4 });
|
||||
writeAudio(s, { volume: 0.3, muted: false });
|
||||
assert.deepEqual(readAudio(s), { volume: 0.3, muted: false }, 'un salvataggio di prima delle voci resta valido');
|
||||
s.setItem('leggenda-regolo-audio', '{rotto');
|
||||
assert.equal(readAudio(s), null);
|
||||
});
|
||||
|
||||
test('la partita va in un file e torna indietro uguale; un file qualsiasi non si carica', () => {
|
||||
const state = { scene: 'piazza', x: 300, y: 340, facing: -1, inventory: ['chiave'], flags: { 'visto:piazza': true }, used: {}, ended: false };
|
||||
const date = new Date(2007, 4, 27, 9, 5);
|
||||
assert.deepEqual(readSaveFile(saveFile(state, date)), { state });
|
||||
assert.equal(saveFileName(date), 'regolo-2007-05-27-0905.json');
|
||||
const not = { error: 'not-save' }, env = extra => JSON.stringify({ game: 'la-leggenda-del-regolo', version: 1, state, ...extra });
|
||||
assert.deepEqual(readSaveFile('{non è json'), not);
|
||||
assert.deepEqual(readSaveFile(JSON.stringify(state)), not, 'senza la busta del gioco no');
|
||||
assert.deepEqual(readSaveFile(JSON.stringify({ game: 'altro-gioco', version: 1, state })), not);
|
||||
assert.deepEqual(readSaveFile(env({ state: [] })), not);
|
||||
assert.deepEqual(readSaveFile(env({ version: undefined })), not, 'senza versione no');
|
||||
assert.deepEqual(readSaveFile(env({ version: 2 })), { error: 'newer' }, 'da una versione più nuova no');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user