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:
2026-10-24 15:04:15 +02:00
co-authored by Claude Opus 5.5
parent ee6c03a04d
commit 94a5479645
20 changed files with 149 additions and 18 deletions
+3
View File
@@ -35,6 +35,9 @@ const SMALL_AREA = 24 * 24;
// La miniatura di uno sfondo per la mappa (tools/miniature.py): assets/scenes/x.png -> assets/scenes/mini/x.png.
export const miniature = src => src?.replace(/([^/]+)$/, 'mini/$1') ?? null;
// Una riga dell'introduzione: un testo, oppure { rione: { id: testo } } con la riga del rione scelto.
export const introText = (line, rione) => typeof line === 'string' ? line : line.rione[rione] ?? Object.values(line.rione)[0];
export const sayTime = text => Math.max(1.6, 0.9 + text.length * 0.055);
export function newState(story) {
+1 -1
View File
@@ -14,7 +14,7 @@ export function voiceLines(story) {
if (typeof value.say === 'string') add(value.who ?? 'andrea', value.say);
Object.values(value).forEach(visit);
};
for (const line of story.intro ?? []) add('andrea', line);
for (const line of story.intro ?? []) for (const text of typeof line === 'string' ? [line] : Object.values(line.rione)) add('andrea', text);
visit(story.scenes);
visit(story.items);
visit(story.dialogues);