Si comincia svegliandosi sulla panchina dei vecchietti dopo una notte brava: gli occhi che si aprono a fatica, la piazza sfocata e doppia; e dal Barone il telefonino col sito di San Piero, che si apre a tutto schermo, e il Muro del Sanpierino vero coi messaggi del 2007, «Aggiorna» compreso (Andrea)
- Il risveglio (src/engine/risveglio.js): primo piano sopra la scena, con le battute mentre le palpebre si aprono e i vecchietti che danno la notizia del palio; «Salta» lo salta. - Il telefonino del Barone (src/engine/telefono.js): sale dal basso come il libro, la home di sanpiero50037.it dalla Wayback Machine nello schermo, il mattone del muro apre il muro. - Il muro (assets/muro, tools/muro.py): la pagina vera rifatta statica dal muro riesumato, coi 24 messaggi del dump (senza email né IP) e quelli del gioco, che arrivano con la storia; «Scrivi» spento. - Il gioco sgancia i service worker di altre app rimasti sul suo indirizzo (la Bussola su localhost:8080). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GiECd9RWGMKV7n3K1mdy8T
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { openness, haze, END } from '../src/engine/risveglio.js';
|
||||
import { Game } from '../src/engine/game.js';
|
||||
import { story } from '../src/story/story.js';
|
||||
import { settle } from './helpers.mjs';
|
||||
|
||||
test('il risveglio: gli occhi chiusi, due tentativi che ricascano, poi aperti; la nebbia si dirada', () => {
|
||||
assert.equal(openness(0), 0);
|
||||
assert.ok(openness(2.1) > 0.15 && openness(2.7) < 0.1, 'il primo tentativo ricasca');
|
||||
assert.ok(openness(3.8) > openness(4.15), 'il secondo pure');
|
||||
assert.equal(openness(END), 1);
|
||||
assert.equal(haze(0), 1);
|
||||
assert.equal(haze(END), 0);
|
||||
});
|
||||
|
||||
test('la partita comincia sulla panchina: le battute a occhi semichiusi, poi i vecchietti col palio sparito', () => {
|
||||
const g = new Game(story);
|
||||
g.go(story.start.scene, story.start.at, story.start.face);
|
||||
g.update(0);
|
||||
assert.equal(g.closeup?.id, 'risveglio');
|
||||
const said = [];
|
||||
for (let i = 0; i < 2000 && (g.closeup || g.speech || g.queue.length); i++) {
|
||||
if (g.speech) { said.push([g.speech.who, g.closeup ? openness(g.closeup.t) : 1]); g.skip(); }
|
||||
g.update(0.05);
|
||||
}
|
||||
assert.deepEqual(said.slice(0, 3).map(s => s[0]), ['andrea', 'andrea', 'andrea']);
|
||||
assert.ok(said[0][1] < 0.05, 'la prima battuta a occhi chiusi');
|
||||
assert.ok(said.some(([who]) => who === 'vecchietto'), 'il vecchietto dà la notizia');
|
||||
assert.ok(g.state.flags.intro && !g.closeup);
|
||||
// Rientrando in piazza non si risveglia più.
|
||||
g.go('via_cipriani'); settle(g); g.go('piazza'); g.update(0);
|
||||
assert.equal(g.closeup, null);
|
||||
});
|
||||
|
||||
test('saltando il risveglio (Esc) le battute arrivano lo stesso', () => {
|
||||
const g = new Game(story);
|
||||
g.go(story.start.scene, story.start.at);
|
||||
g.update(0);
|
||||
assert.ok(g.closeupClose());
|
||||
const said = settle(g).map(s => s.text);
|
||||
assert.ok(said.includes('Mmmh... che botta.') && said.some(t => t.includes('Il palio è sparito')));
|
||||
});
|
||||
Reference in New Issue
Block a user