Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
82 lines
3.9 KiB
Markdown
82 lines
3.9 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.
|
||
|
||
Il libro dell'oratorio si apre e si sfoglia con clic o tocco; Esc lo chiude. Nella fessura della Fortezza,
|
||
la torcia segue mouse o dito (anche trascinando): si cercano i dettagli tenendo brevemente la luce su di essi.
|
||
Si possono usare anche le frecce, oppure Invio per cercare il prossimo dettaglio. «Torna fuori» permette di
|
||
riprovare; dopo il ritrovamento, «Continua» conclude il capitolo.
|
||
Il volume dei suoni ambientali e del fruscio delle pagine si regola in **Pausa → Ambiente ed effetti**.
|
||
|
||
Al biliardo del Circolo 4 Maggio, clic o tocco fissa la mira; regola la forza e premi **Tira**.
|
||
Le frecce ← → affinano la direzione, con Maiusc per passi ancora più piccoli. La guida usa la stessa fisica
|
||
del tiro: mostra sponde, primo contatto e direzioni iniziali dopo l'urto (azzurro per l'avversaria, giallo
|
||
per la propria biglia). Tenendo premuto sul tavolo o Spazio si carica il colpo, con la mira bloccata.
|
||
|
||
## 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
|
||
npm run browser -- --media-only # libro, torcia e audio: controllo mirato desktop/telefono
|
||
npm run browser:biliardo # mira e tiro con mouse/touch, desktop e telefono; schermate in /tmp/regolo-biliardo
|
||
```
|
||
|