Si sceglie il rione all'inizio: Piazza, Pieve, Cardetole o Campomigliaio
Dopo «Nuova partita» la domanda «Per chi corri quest'anno?» con i quattro rioni nei loro colori; la scelta resta nella partita (rione:<id>) e cambia la riga dell'introduzione e le battute sul rione di Andrea. Voci nuove. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
+18
-1
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
|
||||
import { backgroundOrder } from '../src/engine/render.js';
|
||||
import { story } from '../src/story/story.js';
|
||||
import { solution } from '../src/story/solution.js';
|
||||
import { Game, VERBS, checkSave } from '../src/engine/game.js';
|
||||
import { Game, VERBS, checkSave, introText } from '../src/engine/game.js';
|
||||
import { inside } from '../src/engine/geometry.js';
|
||||
import { existsSync, readFileSync } from 'node:fs';
|
||||
import { settle } from './helpers.mjs';
|
||||
@@ -391,3 +391,20 @@ test('ogni posto della mappa ha la sua miniatura (make miniature)', () => {
|
||||
assert.ok(existsSync(new URL('../' + p.mini, import.meta.url)), `manca ${p.mini}: make miniature`);
|
||||
}
|
||||
});
|
||||
|
||||
test('i quattro rioni: ognuno ha la sua riga nell\'introduzione, e le battute sul rione di Andrea lo seguono', () => {
|
||||
assert.deepEqual(Object.keys(story.rioni), ['piazza', 'pieve', 'cardetole', 'campomigliaio']);
|
||||
const line = story.intro.find(l => typeof l !== 'string');
|
||||
assert.deepEqual(Object.keys(line.rione).sort(), Object.keys(story.rioni).sort(), 'una riga per rione');
|
||||
for (const [id, r] of Object.entries(story.rioni)) assert.ok(introText(line, id).includes(r.colors.replace('i ', '')), `${id}: ${introText(line, id)}`);
|
||||
const look = (rione, scene, target) => {
|
||||
const flags = rione ? { ['rione:' + rione]: true } : {};
|
||||
const g = new Game(story, { state: { scene, x: 0, y: 0, facing: 1, inventory: [], flags, used: {}, ended: false } });
|
||||
g.act('look', target); return settle(g).map(s => s.text).join(' ');
|
||||
};
|
||||
assert.match(look('pieve', 'pieve', 'chiesa'), /Il mio rione/);
|
||||
assert.match(look('cardetole', 'pieve', 'chiesa'), /quelli in bianco/);
|
||||
assert.match(look('piazza', 'piazza', 'colonna'), /noi rossi/);
|
||||
assert.doesNotMatch(look('pieve', 'piazza', 'colonna'), /noi rossi/);
|
||||
assert.match(look(null, 'pieve', 'chiesa'), /quelli in bianco/, 'un salvataggio di prima dei rioni funziona');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user