tools/voci.mjs (make voci) genera un mp3 per ogni battuta con la voce del personaggio scelta in tools/voci.json, solo per i testi nuovi o cambiati; tools/voci_xtts.py divide le frasi e toglie punti finali e caporali, che XTTS in italiano leggeva («Buongiorno, punto»). Nel gioco il fumetto dura quanto la voce, la musica si abbassa mentre si parla, il muto spegne anche le voci. Il leone ora parla e i personaggi parlano dalla posizione che la scena dichiara (speakers), che prima era ignorata. Tutte le voci verificate con Whisper; test: ogni battuta ha la sua voce, il fumetto non finisce prima della voce, la musica si abbassa (provati con errori iniettati). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
69 lines
2.8 KiB
Markdown
69 lines
2.8 KiB
Markdown
# La Leggenda del Regolo
|
||
|
||
Avventura grafica punta-e-clicca ambientata a San Piero a Sieve, nella settimana del Palio della Fortezza del 2007.
|
||
Il palio, il quadro dipinto dai ragazzi delle medie, è sparito: un ragazzo del paese deve ritrovarlo prima della festa.
|
||
|
||
*Al Lele, che mi ha fatto conoscere Monkey Island.*
|
||
|
||
Progetto in fase di ideazione: il documento di progetto è in [`docs/PROGETTO.md`](docs/PROGETTO.md).
|
||
Per ora c'è un prototipo del motore con due scene di prova e grafica provvisoria.
|
||
|
||
## Generare sfondi dalle fotografie
|
||
|
||
Il generatore Python è `tools/genera.py`; istruzioni e prompt delle due nuove vedute
|
||
sono descritti in [`docs/GENERAZIONE_SFONDI.md`](docs/GENERAZIONE_SFONDI.md).
|
||
Lavora sulle foto di **San Piero a Sieve**, conserva i master a 1536×864 e permette
|
||
di prepararne copie a 640×360 per il gioco.
|
||
|
||
```zsh
|
||
python3 tools/genera.py --dry-run # elenco delle foto, nessuna API e nessun file scritto
|
||
```
|
||
|
||
## Voci dei personaggi
|
||
|
||
Ogni battuta ha la sua voce, generata con XTTS-v2 sulla GPU (licenza solo non commerciale): un mp3 per battuta in
|
||
`assets/voices/`, la voce di ogni personaggio in `tools/voci.json` (castello e leone con altezza ed eco proprie).
|
||
|
||
```zsh
|
||
make voci # solo le battute nuove o cambiate; i file che non servono più si tolgono
|
||
make voci RIFAI='Ci sei?' # ritenta una battuta storpiata (XTTS è casuale: di solito il secondo tentativo va)
|
||
make voci-elenco # cosa manca, senza generare
|
||
```
|
||
|
||
Il test `tests/voices.test.mjs` fallisce se una battuta non ha la sua voce: dopo aver cambiato un testo, `make voci`.
|
||
|
||
## Giocare in locale
|
||
|
||
```zsh
|
||
python3 -m http.server 8000 # poi http://localhost:8000
|
||
```
|
||
|
||
Clic = azione più sensata (parla, guarda, vai); clic destro o pressione lunga = guarda; un verbo scelto vale per il
|
||
clic successivo. Spazio salta la battuta, i numeri scelgono nel dialogo, Esc annulla il verbo.
|
||
|
||
## In Docker
|
||
|
||
```zsh
|
||
make up # http://localhost:8080 (DOCKER_PORT=… per cambiarla)
|
||
make down
|
||
```
|
||
|
||
## Struttura
|
||
|
||
- `src/engine/`: motore senza storia (`game.js` logica e coda delle azioni, `geometry.js` area calpestabile e
|
||
percorsi, `command.js` verbi e clic, `render.js` disegno, `storage.js` salvataggio);
|
||
- `src/story/`: la storia come dati (`story.js`) e la sua soluzione completa (`solution.js`);
|
||
- `src/main.js`: collega tutto alla pagina;
|
||
- `assets/scenes/`: sfondi a 640×360, preparati con `tools/prepare_background.py` dagli originali in `assets/raw/`.
|
||
- `assets/characters/`: fogli dei personaggi, tagliati con `tools/slice_sprites.py` e allineati con
|
||
`tools/prepare_character.py` (istruzioni in testa al file).
|
||
|
||
## Test
|
||
|
||
```zsh
|
||
npm test # logica, storia coerente, soluzione percorsa dall'inizio alla fine
|
||
npm install && npx playwright install chromium-headless-shell
|
||
npm run browser # partita completa con clic veri in Chromium, salvataggio, telefono
|
||
```
|
||
|