Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1640f1f12 | ||
|
|
0e7a50493c | ||
|
|
c2cb9b0194 | ||
|
|
5392f042b3 | ||
|
|
ca3035e33f | ||
|
|
22be1c306e | ||
|
|
add5a5fe77 | ||
|
|
3019a6e32f | ||
|
|
111b892916 | ||
|
|
f1781afea8 | ||
|
|
b44eeffd2a | ||
|
|
89ebdd40bb | ||
|
|
538bf6cedb | ||
|
|
7e1e6f6144 | ||
|
|
30e324d7e2 | ||
|
|
e8152563d8 | ||
|
|
fef236dc54 | ||
|
|
c82bef70b2 | ||
|
|
e9907e3e66 | ||
|
|
92e7a289be | ||
|
|
2362fc7741 | ||
|
|
2dd4257fd4 | ||
|
|
d51f5e56ea | ||
|
|
7b7e0031d1 | ||
|
|
94e9da4009 | ||
|
|
bd66ea45ad | ||
|
|
9eabd5c6e1 | ||
|
|
ddc877a2d1 | ||
|
|
14a1e6e5b8 |
@@ -13,6 +13,8 @@ COPY assets/voices /usr/share/nginx/html/assets/voices
|
|||||||
COPY assets/credits /usr/share/nginx/html/assets/credits
|
COPY assets/credits /usr/share/nginx/html/assets/credits
|
||||||
COPY assets/effects /usr/share/nginx/html/assets/effects
|
COPY assets/effects /usr/share/nginx/html/assets/effects
|
||||||
COPY assets/closeups /usr/share/nginx/html/assets/closeups
|
COPY assets/closeups /usr/share/nginx/html/assets/closeups
|
||||||
|
COPY assets/favicon /usr/share/nginx/html/assets/favicon
|
||||||
|
COPY assets/video /usr/share/nginx/html/assets/video
|
||||||
|
|
||||||
# Le immagini e i font citati da index.html e style.css prendono ?v=<versione>, come quelli caricati dal codice.
|
# Le immagini e i font citati da index.html e style.css prendono ?v=<versione>, come quelli caricati dal codice.
|
||||||
RUN cd /usr/share/nginx/html \
|
RUN cd /usr/share/nginx/html \
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
Licenze de «La Leggenda del Regolo»
|
||||||
|
|
||||||
|
Il progetto è un gioco gratuito e non commerciale. Ha due parti con licenze diverse: il codice, e tutto il resto.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
1. IL CODICE: licenza MIT
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Vale per tutto ciò che sta fuori dalle cartelle assets/, docs/ e video/: i sorgenti in src/, i test, gli strumenti
|
||||||
|
in tools/, gli script, index.html, style.css, i file di configurazione.
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Andrea Manzi
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
||||||
|
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
|
||||||
|
the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||||
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
|
||||||
|
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
2. LA STORIA, LA GRAFICA, LA MUSICA: Creative Commons BY-NC-SA 4.0
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Vale per la storia e i dialoghi (src/story/), i documenti in docs/, gli sfondi, i primi piani, le icone e gli sprite
|
||||||
|
dei personaggi inventati (assets/scenes, assets/closeups, assets/icons, assets/effects, assets/favicon, e in
|
||||||
|
assets/characters quelli che non ritraggono persone vere), le musiche composte e sintetizzate dagli script in tools/
|
||||||
|
(assets/audio/biliardo.mp3, carte.mp3, bocce.mp3, pieve.mp3, cartello.mp3) e i video «Come si gioca» (assets/video).
|
||||||
|
|
||||||
|
© 2026 Andrea Manzi. Si possono copiare, ridistribuire e rielaborare citando l'autore, per scopi non commerciali,
|
||||||
|
e distribuendo le opere derivate con la stessa licenza. Testo completo: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
|
||||||
|
Gli sfondi sono stati disegnati con strumenti di generazione di immagini (OpenAI) a partire da fotografie di San
|
||||||
|
Piero a Sieve, quasi tutte di Andrea Manzi; la provenienza di ognuno è registrata in docs/IMMAGINI.md (la foto
|
||||||
|
dell'interno della Pieve è di Mariano Mirannalti, citato nei Ringraziamenti).
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
3. ECCEZIONI: cose che NON si possono riusare, o che hanno una licenza propria
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
a) Le persone vere. I ritratti in pixel nei Ringraziamenti (assets/credits/) e gli sprite dei personaggi ispirati a
|
||||||
|
persone vere (vecchietti, Mariano, l'Ing. Tozzi, il Tozzino, il BaronDeDuke, l'Arcu, Fra Peppino e gli altri
|
||||||
|
indicati nei commenti di src/story/story.js) sono pubblicati con il consenso delle persone ritratte, SOLO per
|
||||||
|
questo gioco: tutti i diritti riservati, non si possono riusare altrove. Lo stesso vale per i nomi e i ricordi
|
||||||
|
delle persone del paese che compaiono nella storia.
|
||||||
|
|
||||||
|
b) La fotografia del palio del 2007 (assets/closeups/palio-2007.jpg) ritrae il quadro dipinto dai ragazzi delle
|
||||||
|
scuole medie di San Piero a Sieve: tutti i diritti riservati agli autori, pubblicata qui per il gioco.
|
||||||
|
|
||||||
|
c) Le musiche di Andrea Manzi generate con Suno (assets/audio/titolo.mp3, paese.mp3, sera.mp3, fortezza.mp3,
|
||||||
|
ricordi.mp3) si usano alle condizioni d'uso di Suno e non sono coperte dalla licenza Creative Commons.
|
||||||
|
|
||||||
|
d) Le voci dei personaggi (assets/voices/) e la voce narrante dei video (assets/video/) sono sintetizzate con
|
||||||
|
XTTS-v2 di Coqui, distribuito con la Coqui Public Model License (https://coqui.ai/cpml, testo in
|
||||||
|
docs/LICENZA-CPML.txt): i file audio che ne derivano si possono usare SOLO per scopi non commerciali.
|
||||||
|
|
||||||
|
e) Il carattere Press Start 2P di CodeMan38 (assets/fonts/) è distribuito con la SIL Open Font License 1.1: il testo
|
||||||
|
della licenza è in assets/fonts/OFL-press-start-2p.txt.
|
||||||
|
|
||||||
|
f) L'aneddoto della Torre dello Scoronconcolo riprende, riformulati, i fatti della voce «Michele del Tavolaccino»
|
||||||
|
di Wikipedia in italiano (CC BY-SA 4.0): https://it.wikipedia.org/wiki/Michele_del_Tavolaccino
|
||||||
|
|
||||||
|
Monkey Island e La storia infinita sono citati come ricordi: i marchi e le opere restano dei rispettivi titolari.
|
||||||
@@ -23,7 +23,7 @@ DST ?= assets/scenes/$(notdir $(SRC))
|
|||||||
CROP ?=
|
CROP ?=
|
||||||
COLORS ?= 64
|
COLORS ?= 64
|
||||||
|
|
||||||
.PHONY: help serve open test browser verify bump voci voci-elenco sfondi sfondi-genera sfondi-confronto background character \
|
.PHONY: help serve open test browser verify check-public bump voci voci-elenco sfondi sfondi-genera sfondi-confronto background character \
|
||||||
build up down restart logs ps shell image-size deploy deploy-logs clean distclean
|
build up down restart logs ps shell image-size deploy deploy-logs clean distclean
|
||||||
|
|
||||||
## ------------------------------------------------------------ sviluppo
|
## ------------------------------------------------------------ sviluppo
|
||||||
@@ -50,7 +50,10 @@ test: ## Test della logica, della storia, della soluzione completa e del generat
|
|||||||
browser: ## Partita completa nel browser con Playwright
|
browser: ## Partita completa nel browser con Playwright
|
||||||
$(NODE) tests/browser.mjs
|
$(NODE) tests/browser.mjs
|
||||||
|
|
||||||
verify: test browser ## Tutti i controlli
|
verify: test browser check-public ## Tutti i controlli
|
||||||
|
|
||||||
|
check-public: ## Prima di pubblicare: niente prompt, fogli grezzi, segreti o nomi della rete di casa (tutta la storia)
|
||||||
|
bash scripts/check-public.sh
|
||||||
|
|
||||||
bump: ## Nuova versione (PARTE=patch|minor|major): verifica, commit e tag v<versione>; poi make deploy
|
bump: ## Nuova versione (PARTE=patch|minor|major): verifica, commit e tag v<versione>; poi make deploy
|
||||||
scripts/bump.sh $(or $(PARTE),patch)
|
scripts/bump.sh $(or $(PARTE),patch)
|
||||||
|
|||||||
@@ -1,75 +1,66 @@
|
|||||||
# La Leggenda del Regolo
|
# La Leggenda del Regolo
|
||||||
|
|
||||||
Avventura grafica punta-e-clicca ambientata a San Piero a Sieve, nella settimana del Palio della Fortezza del 2007.
|
Un'avventura grafica punta-e-clicca, nello spirito delle avventure anni '90, ambientata a **San Piero a Sieve**
|
||||||
Il palio, il quadro dipinto dai ragazzi delle medie, è sparito: un ragazzo del paese deve ritrovarlo prima della festa.
|
(Mugello) nella settimana del **Palio della Fortezza del 2007**. Il palio, il quadro dipinto dai ragazzi delle
|
||||||
|
medie, è sparito: Andrea, un ragazzo del paese, deve ritrovarlo prima della festa, fra vecchietti che litigano
|
||||||
|
sulle due leggende del Regolo, il serpente della Fortezza, e un paese disegnato dalle fotografie vere.
|
||||||
|
|
||||||
*Al Lele, che mi ha fatto conoscere Monkey Island.*
|
*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).
|
Si gioca online su **https://50037.manzolo.it** (50037 è il CAP di San Piero), nel browser, anche dal telefono.
|
||||||
Per ora c'è un prototipo del motore con due scene di prova e grafica provvisoria.
|
È gratuito e non commerciale.
|
||||||
|
|
||||||
## Generare sfondi dalle fotografie
|
## Cosa c'è
|
||||||
|
|
||||||
Il generatore Python è `tools/genera.py`; istruzioni e prompt delle due nuove vedute
|
- **Il primo capitolo**, dal pomeriggio alla sera: 38 scene, i dialoghi a scelte, l'inventario, la mappa del
|
||||||
sono descritti in [`docs/GENERAZIONE_SFONDI.md`](docs/GENERAZIONE_SFONDI.md).
|
paese, il taccuino, il salvataggio automatico (e su file, per portarlo su un altro dispositivo).
|
||||||
Lavora sulle foto di **San Piero a Sieve**, conserva i master a 1536×864 e permette
|
- **Le voci** di tutti i personaggi, in toscano, e le **musiche**.
|
||||||
di prepararne copie a 640×360 per il gioco.
|
- **I giochi del paese**: la briscola, il tressette ai 21 e la scopa all'oratorio (con le carte toscane o le
|
||||||
|
napoletane), le bocce al pallaio e il biliardo a cinque birilli al circolo, ognuno con tre livelli e un video
|
||||||
```zsh
|
«Come si gioca».
|
||||||
python3 tools/genera.py --dry-run # elenco delle foto, nessuna API e nessun file scritto
|
- **Il paese vero**: gli sfondi sono disegnati dalle fotografie di San Piero; i personaggi, con il loro
|
||||||
```
|
consenso, da persone vere.
|
||||||
|
|
||||||
## 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
|
## Giocare in locale
|
||||||
|
|
||||||
```zsh
|
Niente da installare e niente da compilare: HTML, CSS e moduli JavaScript ES.
|
||||||
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**.
|
|
||||||
|
|
||||||
## In Docker
|
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
make up # http://localhost:8080 (DOCKER_PORT=… per cambiarla)
|
python3 -m http.server 8000 # poi http://localhost:8000
|
||||||
make down
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Struttura
|
Oppure `make up` (Docker, su http://localhost:8080). Non aprire `index.html` con `file://`: i moduli vogliono HTTP.
|
||||||
|
|
||||||
- `src/engine/`: motore senza storia (`game.js` logica e coda delle azioni, `geometry.js` area calpestabile e
|
## Come è fatto
|
||||||
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
|
- `src/engine/`: il motore (camminata con i percorsi, verbi e clic intelligente, dialoghi, inventario,
|
||||||
|
salvataggi, musica, voci, suoni d'ambiente sintetizzati, effetti animati) e i minigiochi
|
||||||
|
(`bocce.js`, `biliardo.js`, `briscola.js`, `tressette.js`, `scopa.js`, ognuno col suo `*-render.js`).
|
||||||
|
- `src/story/`: la storia è dati, non codice: scene, oggetti, personaggi, dialoghi, soluzione (`solution.js`).
|
||||||
|
- `assets/`: sfondi, sprite, musiche, voci, carattere, video.
|
||||||
|
- `tools/`: gli strumenti (sprite dai fogli, voci con XTTS, musiche sintetizzate, favicon, taratura dei minigiochi).
|
||||||
|
- `tests/`: `npm test` (unità: regole, storia coerente, voci, salvataggi) e `npm run browser` (Playwright: percorre
|
||||||
|
tutta la soluzione dell'avventura, su desktop e telefono); `npm run browser:briscola`, `:tressette`, `:scopa`,
|
||||||
|
`:biliardo`, `:effects` per le parti singole.
|
||||||
|
- `video/`: i copioni dei video «Come si gioca» e della demo, girati in una macchina virtuale.
|
||||||
|
- `docs/`: `PROGETTO.md` (l'idea, i personaggi, la mappa) e `STATO.md` (dove siamo, cosa manca).
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
npm test # logica, storia coerente, soluzione percorsa dall'inizio alla fine
|
make verify # sintassi, test, prova nel browser: quello che gira prima di ogni versione
|
||||||
npm install && npx playwright install chromium-headless-shell
|
make voci # le voci delle battute nuove (XTTS-v2 su GPU)
|
||||||
npm run browser # partita completa con clic veri in Chromium, salvataggio, telefono
|
make bump # nuova versione: verifica, commit e tag
|
||||||
npm run browser -- --media-only # libro, torcia e audio: controllo mirato desktop/telefono
|
make deploy # pubblica l'ultimo commit (immagine Docker spedita al server)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Chi ha fatto cosa
|
||||||
|
|
||||||
|
Un gioco di Andrea Manzi (Manzolo). Idee, ricordi, foto e volti: gli amici di San Piero, nei Ringraziamenti del
|
||||||
|
gioco. Programmazione con Claude e Codex; sfondi dalle fotografie di Andrea con gli strumenti di generazione di
|
||||||
|
immagini; musiche di Andrea con Suno e, per i giochi, sintetizzate da script; voci con XTTS-v2; carattere Press
|
||||||
|
Start 2P.
|
||||||
|
|
||||||
|
## Licenze
|
||||||
|
|
||||||
|
Il codice è MIT; storia, grafica e musiche sintetizzate sono Creative Commons BY-NC-SA 4.0; le persone vere
|
||||||
|
ritratte, la foto del palio, le musiche di Suno e le voci XTTS (solo uso non commerciale) hanno le loro
|
||||||
|
condizioni. Tutto in [`LICENSE`](LICENSE).
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"image": "betino.png",
|
||||||
|
"height": 104,
|
||||||
|
"frames": {
|
||||||
|
"idle": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 161,
|
||||||
|
"h": 104,
|
||||||
|
"ax": 80.5,
|
||||||
|
"ay": 104
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"image": "ghiacciomobile.png",
|
||||||
|
"height": 144,
|
||||||
|
"frames": {
|
||||||
|
"idle": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 324,
|
||||||
|
"h": 144,
|
||||||
|
"ax": 162,
|
||||||
|
"ay": 144
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 59 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"image": "giocatore-carte.png",
|
||||||
|
"height": 100,
|
||||||
|
"frames": {
|
||||||
|
"sit": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 67,
|
||||||
|
"h": 100,
|
||||||
|
"ax": 25.7,
|
||||||
|
"ay": 100
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 69,
|
||||||
|
"y": 0,
|
||||||
|
"w": 68,
|
||||||
|
"h": 100,
|
||||||
|
"ax": 27.6,
|
||||||
|
"ay": 100
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 139,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 99,
|
||||||
|
"ax": 19.3,
|
||||||
|
"ay": 99
|
||||||
|
},
|
||||||
|
"shuffle": {
|
||||||
|
"x": 213,
|
||||||
|
"y": 0,
|
||||||
|
"w": 67,
|
||||||
|
"h": 97,
|
||||||
|
"ax": 25.2,
|
||||||
|
"ay": 97
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 45 KiB |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "ing-tozzi.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 53,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 27.9,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 55,
|
||||||
|
"y": 0,
|
||||||
|
"w": 54,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 27.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 111,
|
||||||
|
"y": 0,
|
||||||
|
"w": 77,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 29.9,
|
||||||
|
"ay": 119
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 190,
|
||||||
|
"y": 0,
|
||||||
|
"w": 58,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 30.8,
|
||||||
|
"ay": 119
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 250,
|
||||||
|
"y": 0,
|
||||||
|
"w": 53,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 28.2,
|
||||||
|
"ay": 119
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"x": 305,
|
||||||
|
"y": 0,
|
||||||
|
"w": 52,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 24.1,
|
||||||
|
"ay": 119
|
||||||
|
},
|
||||||
|
"shrug": {
|
||||||
|
"x": 359,
|
||||||
|
"y": 0,
|
||||||
|
"w": 87,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 43.9,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"cheer": {
|
||||||
|
"x": 448,
|
||||||
|
"y": 0,
|
||||||
|
"w": 56,
|
||||||
|
"h": 123,
|
||||||
|
"ax": 30.9,
|
||||||
|
"ay": 123
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 772 B |
|
After Width: | Height: | Size: 341 B |
|
After Width: | Height: | Size: 364 B |
|
After Width: | Height: | Size: 407 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 835 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 82 KiB |
@@ -47,6 +47,26 @@
|
|||||||
"file": "andrea-dacb32e5c6.mp3",
|
"file": "andrea-dacb32e5c6.mp3",
|
||||||
"sec": 4.01
|
"sec": 4.01
|
||||||
},
|
},
|
||||||
|
"andrea|La Torre dello Scoronconcolo. Era una vecchia torre di guardia, già in disuso nel Cinquecento.": {
|
||||||
|
"file": "andrea-536c525f5c.mp3",
|
||||||
|
"sec": 6.64
|
||||||
|
},
|
||||||
|
"andrea|Ci si rifugiò Michele del Tavolaccino, detto Scoronconcolo, sanpierino: nel 1537 aiutò Lorenzino de' Medici ad ammazzare il duca Alessandro.": {
|
||||||
|
"file": "andrea-37eaf3e803.mp3",
|
||||||
|
"sec": 11.82
|
||||||
|
},
|
||||||
|
"andrea|Nel 1539 finì sulle galere dell'ordine gerosolimitano, in guerra contro i Turchi. Altro che Palio.": {
|
||||||
|
"file": "andrea-5f4c4fca29.mp3",
|
||||||
|
"sec": 8.04
|
||||||
|
},
|
||||||
|
"andrea|Da quassù non ci arrivo. E poi, di nascondigli in quella torre, ce n'è già stato uno di troppo.": {
|
||||||
|
"file": "andrea-f60ba3ee31.mp3",
|
||||||
|
"sec": 7.38
|
||||||
|
},
|
||||||
|
"andrea|Una torre in tasca? Nemmeno lo Scoronconcolo ci è riuscito.": {
|
||||||
|
"file": "andrea-938fbd1326.mp3",
|
||||||
|
"sec": 4.59
|
||||||
|
},
|
||||||
"andrea|Il bar della piazza. Chi c'era dietro il bancone nel 2007? Questo lo sa solo Andrea.": {
|
"andrea|Il bar della piazza. Chi c'era dietro il bancone nel 2007? Questo lo sa solo Andrea.": {
|
||||||
"file": "andrea-4b733def4f.mp3",
|
"file": "andrea-4b733def4f.mp3",
|
||||||
"sec": 7.27
|
"sec": 7.27
|
||||||
@@ -287,26 +307,6 @@
|
|||||||
"file": "andrea-68a845881b.mp3",
|
"file": "andrea-68a845881b.mp3",
|
||||||
"sec": 1.94
|
"sec": 1.94
|
||||||
},
|
},
|
||||||
"andrea|Fra Peppino da Gricignano, col saio e i sandali. Sul sagrato sembra nato lì.": {
|
|
||||||
"file": "andrea-97d75e2a9d.mp3",
|
|
||||||
"sec": 5.38
|
|
||||||
},
|
|
||||||
"andrea|Buongiorno, Fra Peppino!": {
|
|
||||||
"file": "andrea-94988dc8c6.mp3",
|
|
||||||
"sec": 1.74
|
|
||||||
},
|
|
||||||
"fra_peppino|Pace e bene, figliolo. Cerchi qualcosa?": {
|
|
||||||
"file": "fra_peppino-651c4d95ab.mp3",
|
|
||||||
"sec": 3.72
|
|
||||||
},
|
|
||||||
"andrea|Il palio. È sparito.": {
|
|
||||||
"file": "andrea-c9c068f507.mp3",
|
|
||||||
"sec": 2.39
|
|
||||||
},
|
|
||||||
"fra_peppino|Le cose sparite, prima o poi, tornano. Come le pecorelle.": {
|
|
||||||
"file": "fra_peppino-8b3d0a5b8f.mp3",
|
|
||||||
"sec": 4.47
|
|
||||||
},
|
|
||||||
"andrea|La Pieve di San Pietro. Il mio rione: noi bianchi.": {
|
"andrea|La Pieve di San Pietro. Il mio rione: noi bianchi.": {
|
||||||
"file": "andrea-43fd5c2b27.mp3",
|
"file": "andrea-43fd5c2b27.mp3",
|
||||||
"sec": 4.46
|
"sec": 4.46
|
||||||
@@ -467,6 +467,10 @@
|
|||||||
"file": "andrea-f798fa755d.mp3",
|
"file": "andrea-f798fa755d.mp3",
|
||||||
"sec": 4.9
|
"sec": 4.9
|
||||||
},
|
},
|
||||||
|
"andrea|Ha già mescolato. Mi sa che aspettava proprio un pollo di passaggio.": {
|
||||||
|
"file": "andrea-71f3bff8a0.mp3",
|
||||||
|
"sec": 5.09
|
||||||
|
},
|
||||||
"andrea|Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l'appetito.": {
|
"andrea|Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l'appetito.": {
|
||||||
"file": "andrea-f2ea95922d.mp3",
|
"file": "andrea-f2ea95922d.mp3",
|
||||||
"sec": 6.54
|
"sec": 6.54
|
||||||
@@ -519,6 +523,26 @@
|
|||||||
"file": "andrea-43d3435d61.mp3",
|
"file": "andrea-43d3435d61.mp3",
|
||||||
"sec": 2.99
|
"sec": 2.99
|
||||||
},
|
},
|
||||||
|
"andrea|Fra Peppino da Gricignano, col saio e i sandali. Qui al Bosco ai Frati è a casa sua: è un convento di francescani.": {
|
||||||
|
"file": "andrea-6797d70153.mp3",
|
||||||
|
"sec": 8.45
|
||||||
|
},
|
||||||
|
"andrea|Buongiorno, Fra Peppino!": {
|
||||||
|
"file": "andrea-94988dc8c6.mp3",
|
||||||
|
"sec": 1.74
|
||||||
|
},
|
||||||
|
"fra_peppino|Pace e bene, figliolo. Cerchi qualcosa?": {
|
||||||
|
"file": "fra_peppino-651c4d95ab.mp3",
|
||||||
|
"sec": 3.72
|
||||||
|
},
|
||||||
|
"andrea|Il palio. È sparito.": {
|
||||||
|
"file": "andrea-c9c068f507.mp3",
|
||||||
|
"sec": 2.39
|
||||||
|
},
|
||||||
|
"fra_peppino|Le cose sparite, prima o poi, tornano. Come le pecorelle.": {
|
||||||
|
"file": "fra_peppino-8b3d0a5b8f.mp3",
|
||||||
|
"sec": 4.47
|
||||||
|
},
|
||||||
"andrea|Il convento del Bosco ai Frati, in mezzo al bosco. Qui si viene a cercare il fresco e il silenzio.": {
|
"andrea|Il convento del Bosco ai Frati, in mezzo al bosco. Qui si viene a cercare il fresco e il silenzio.": {
|
||||||
"file": "andrea-486c980f52.mp3",
|
"file": "andrea-486c980f52.mp3",
|
||||||
"sec": 7.48
|
"sec": 7.48
|
||||||
@@ -655,13 +679,9 @@
|
|||||||
"file": "andrea-2d04be65fb.mp3",
|
"file": "andrea-2d04be65fb.mp3",
|
||||||
"sec": 5.97
|
"sec": 5.97
|
||||||
},
|
},
|
||||||
"ing_tozzi|Una partita ai birilli? Si va a venti.": {
|
"andrea|Il tavolo è dell'Ingegnere: prima gli chiedo una partita.": {
|
||||||
"file": "ing_tozzi-7aef4a5420.mp3",
|
"file": "andrea-c43b158842.mp3",
|
||||||
"sec": 3.3
|
"sec": 3.27
|
||||||
},
|
|
||||||
"andrea|Gnamo.": {
|
|
||||||
"file": "andrea-a496b0aca9.mp3",
|
|
||||||
"sec": 0.58
|
|
||||||
},
|
},
|
||||||
"ing_tozzi|Si parla col panno, qui. Prendi la stecca.": {
|
"ing_tozzi|Si parla col panno, qui. Prendi la stecca.": {
|
||||||
"file": "ing_tozzi-4814e97759.mp3",
|
"file": "ing_tozzi-4814e97759.mp3",
|
||||||
@@ -671,6 +691,10 @@
|
|||||||
"file": "andrea-98b3e4a969.mp3",
|
"file": "andrea-98b3e4a969.mp3",
|
||||||
"sec": 3.49
|
"sec": 3.49
|
||||||
},
|
},
|
||||||
|
"andrea|L'Ing. Tozzi, il campione del circolo. Occhiali scuri anche al chiuso: dice che così non vede le biglie degli altri.": {
|
||||||
|
"file": "andrea-127a90af53.mp3",
|
||||||
|
"sec": 9.37
|
||||||
|
},
|
||||||
"andrea|Le stecche del circolo, in fila. Ognuna ha il suo proprietario, e guai a sbagliare.": {
|
"andrea|Le stecche del circolo, in fila. Ognuna ha il suo proprietario, e guai a sbagliare.": {
|
||||||
"file": "andrea-1eae1a8577.mp3",
|
"file": "andrea-1eae1a8577.mp3",
|
||||||
"sec": 6.1
|
"sec": 6.1
|
||||||
@@ -919,6 +943,22 @@
|
|||||||
"file": "andrea-00f2e70a4d.mp3",
|
"file": "andrea-00f2e70a4d.mp3",
|
||||||
"sec": 2.95
|
"sec": 2.95
|
||||||
},
|
},
|
||||||
|
"andrea|Nessuno ha mai capito davvero il tuo immenso valore.": {
|
||||||
|
"file": "andrea-3e85200509.mp3",
|
||||||
|
"sec": 2.93
|
||||||
|
},
|
||||||
|
"andrea|O via, lascialo riposare. A pedalare oggi ci penso io.": {
|
||||||
|
"file": "andrea-34aad1ffe3.mp3",
|
||||||
|
"sec": 4.81
|
||||||
|
},
|
||||||
|
"andrea|La Ghiacciomobile nera. Hai visto cose che noi poveri umani non potremmo neppur lontanamente immaginare.": {
|
||||||
|
"file": "andrea-7be29434e0.mp3",
|
||||||
|
"sec": 7.25
|
||||||
|
},
|
||||||
|
"andrea|Con questo sole, di ghiaccio c'è rimasto giusto il nome. Vo a piedi.": {
|
||||||
|
"file": "andrea-def44809bc.mp3",
|
||||||
|
"sec": 5.08
|
||||||
|
},
|
||||||
"andrea|Il circolino: il Circolo SMS di Campomigliaio. Un'istituzione, qui i volontari hanno sempre fatto miracoli.": {
|
"andrea|Il circolino: il Circolo SMS di Campomigliaio. Un'istituzione, qui i volontari hanno sempre fatto miracoli.": {
|
||||||
"file": "andrea-90bbad0de0.mp3",
|
"file": "andrea-90bbad0de0.mp3",
|
||||||
"sec": 9.59
|
"sec": 9.59
|
||||||
@@ -1499,6 +1539,98 @@
|
|||||||
"file": "andrea-60cdae2e35.mp3",
|
"file": "andrea-60cdae2e35.mp3",
|
||||||
"sec": 5.1
|
"sec": 5.1
|
||||||
},
|
},
|
||||||
|
"andrea|Mi ricordi come avete fatto quella volta a tornare illesi dopo aver lasciato una fiancata a Campolungo?": {
|
||||||
|
"file": "andrea-2acf574bfa.mp3",
|
||||||
|
"sec": 5.36
|
||||||
|
},
|
||||||
|
"andrea|Riposa, Ghiacciomobile.": {
|
||||||
|
"file": "andrea-c79d2d1c81.mp3",
|
||||||
|
"sec": 2.19
|
||||||
|
},
|
||||||
|
"andrea|Ho sentito dire dal Trappola che pensavi di poter attraversare i muri. Ti stimo tanto.": {
|
||||||
|
"file": "andrea-6c6e2fd461.mp3",
|
||||||
|
"sec": 5.69
|
||||||
|
},
|
||||||
|
"andrea|Una briscola?": {
|
||||||
|
"file": "andrea-d2f285f610.mp3",
|
||||||
|
"sec": 1.04
|
||||||
|
},
|
||||||
|
"andrea|Rivincita a briscola?": {
|
||||||
|
"file": "andrea-6807209a9e.mp3",
|
||||||
|
"sec": 1.37
|
||||||
|
},
|
||||||
|
"andrea|Una scopa?": {
|
||||||
|
"file": "andrea-d8dfb86266.mp3",
|
||||||
|
"sec": 0.65
|
||||||
|
},
|
||||||
|
"andrea|Un tressette ai 21?": {
|
||||||
|
"file": "andrea-4fbe84fada.mp3",
|
||||||
|
"sec": 1.66
|
||||||
|
},
|
||||||
|
"andrea|Ora cerco il palio. A dopo.": {
|
||||||
|
"file": "andrea-6e63dafda1.mp3",
|
||||||
|
"sec": 2.61
|
||||||
|
},
|
||||||
|
"giocatore_carte|Gnamo. In due, senza soci e senza scuse.": {
|
||||||
|
"file": "giocatore_carte-1523994a6c.mp3",
|
||||||
|
"sec": 3.78
|
||||||
|
},
|
||||||
|
"giocatore_carte|Il tavolo è qui. Il coraggio ce lo metti te.": {
|
||||||
|
"file": "giocatore_carte-8dfadb4acc.mp3",
|
||||||
|
"sec": 3.4
|
||||||
|
},
|
||||||
|
"giocatore_carte|Ai undici. E occhio al settebello: quello è sempre mio.": {
|
||||||
|
"file": "giocatore_carte-af54c11857.mp3",
|
||||||
|
"sec": 4.27
|
||||||
|
},
|
||||||
|
"giocatore_carte|Ci vuole quattro: chiamo quei due che giocano qui dietro. Uno ti fa da socio.": {
|
||||||
|
"file": "giocatore_carte-3e2671e35e.mp3",
|
||||||
|
"sec": 4.88
|
||||||
|
},
|
||||||
|
"andrea|Con le toscane.": {
|
||||||
|
"file": "andrea-e8599cc8b6.mp3",
|
||||||
|
"sec": 1.03
|
||||||
|
},
|
||||||
|
"andrea|Con le napoletane.": {
|
||||||
|
"file": "andrea-be276497e3.mp3",
|
||||||
|
"sec": 1.09
|
||||||
|
},
|
||||||
|
"andrea|Ci ripenso.": {
|
||||||
|
"file": "andrea-b851b9ed26.mp3",
|
||||||
|
"sec": 0.8
|
||||||
|
},
|
||||||
|
"giocatore_carte|Brao. Gobbo, donna e regio, come Dio comanda. Come la vuoi?": {
|
||||||
|
"file": "giocatore_carte-89686f55a0.mp3",
|
||||||
|
"sec": 6.14
|
||||||
|
},
|
||||||
|
"giocatore_carte|Le napoletane? Le tengo per i villeggianti. Come la vuoi?": {
|
||||||
|
"file": "giocatore_carte-4f39bc172d.mp3",
|
||||||
|
"sec": 5.13
|
||||||
|
},
|
||||||
|
"andrea|Alla bona.": {
|
||||||
|
"file": "andrea-67afa54e05.mp3",
|
||||||
|
"sec": 0.69
|
||||||
|
},
|
||||||
|
"andrea|Seria.": {
|
||||||
|
"file": "andrea-f6ef96032e.mp3",
|
||||||
|
"sec": 0.58
|
||||||
|
},
|
||||||
|
"andrea|A fassi male.": {
|
||||||
|
"file": "andrea-f52137b691.mp3",
|
||||||
|
"sec": 0.78
|
||||||
|
},
|
||||||
|
"giocatore_carte|Alla bona. I carichi li regalo, oggi.": {
|
||||||
|
"file": "giocatore_carte-43e76cf11b.mp3",
|
||||||
|
"sec": 3.43
|
||||||
|
},
|
||||||
|
"giocatore_carte|Allora posa il gomito e guarda le carte.": {
|
||||||
|
"file": "giocatore_carte-f1f219bd1c.mp3",
|
||||||
|
"sec": 2.51
|
||||||
|
},
|
||||||
|
"giocatore_carte|Io le conto tutte. Anche quelle che butti via per sbaglio.": {
|
||||||
|
"file": "giocatore_carte-12f97003ec.mp3",
|
||||||
|
"sec": 4.19
|
||||||
|
},
|
||||||
"andrea|Una Fanta.": {
|
"andrea|Una Fanta.": {
|
||||||
"file": "andrea-8927b87738.mp3",
|
"file": "andrea-8927b87738.mp3",
|
||||||
"sec": 0.65
|
"sec": 0.65
|
||||||
@@ -1815,14 +1947,62 @@
|
|||||||
"file": "mariano-0eeb942ca2.mp3",
|
"file": "mariano-0eeb942ca2.mp3",
|
||||||
"sec": 3.52
|
"sec": 3.52
|
||||||
},
|
},
|
||||||
"mariano|Il campione non scappa. Tira!": {
|
"mariano|Come la vuoi?": {
|
||||||
"file": "mariano-bdf58ba1be.mp3",
|
"file": "mariano-0288ec460b.mp3",
|
||||||
"sec": 3.26
|
"sec": 0.7
|
||||||
|
},
|
||||||
|
"mariano|Il campione non scappa. Come la vuoi?": {
|
||||||
|
"file": "mariano-1d8388d631.mp3",
|
||||||
|
"sec": 3.55
|
||||||
},
|
},
|
||||||
"mariano|Promesso: ti ci porto. Ma prima ritrova il palio, che senza festa non si parte.": {
|
"mariano|Promesso: ti ci porto. Ma prima ritrova il palio, che senza festa non si parte.": {
|
||||||
"file": "mariano-1c9cd0c325.mp3",
|
"file": "mariano-1c9cd0c325.mp3",
|
||||||
"sec": 5.96
|
"sec": 5.96
|
||||||
},
|
},
|
||||||
|
"mariano|Alla bona: tiro con gli occhi chiusi.": {
|
||||||
|
"file": "mariano-b1b1ca273b.mp3",
|
||||||
|
"sec": 2.2
|
||||||
|
},
|
||||||
|
"mariano|Seria. Così mi piace.": {
|
||||||
|
"file": "mariano-accff65835.mp3",
|
||||||
|
"sec": 2.27
|
||||||
|
},
|
||||||
|
"mariano|A fassi male? Poi non piangere, eh.": {
|
||||||
|
"file": "mariano-d65fb6e871.mp3",
|
||||||
|
"sec": 3.42
|
||||||
|
},
|
||||||
|
"andrea|Ingegnere, una partita ai birilli?": {
|
||||||
|
"file": "andrea-dbcf4d1083.mp3",
|
||||||
|
"sec": 2.49
|
||||||
|
},
|
||||||
|
"andrea|Arrivederci, Ingegnere.": {
|
||||||
|
"file": "andrea-8f63435d69.mp3",
|
||||||
|
"sec": 1.38
|
||||||
|
},
|
||||||
|
"ing_tozzi|Una partita ai birilli? Si va a venti. Come la vuoi?": {
|
||||||
|
"file": "ing_tozzi-82e7cc88aa.mp3",
|
||||||
|
"sec": 4.58
|
||||||
|
},
|
||||||
|
"ing_tozzi|Ci mancherebbe. Stavolta guardo bene. Come la vuoi?": {
|
||||||
|
"file": "ing_tozzi-344ac1021f.mp3",
|
||||||
|
"sec": 4.67
|
||||||
|
},
|
||||||
|
"ing_tozzi|Alla bona: tiro senza occhiali.": {
|
||||||
|
"file": "ing_tozzi-17e489814e.mp3",
|
||||||
|
"sec": 2.19
|
||||||
|
},
|
||||||
|
"andrea|Gnamo.": {
|
||||||
|
"file": "andrea-a496b0aca9.mp3",
|
||||||
|
"sec": 0.58
|
||||||
|
},
|
||||||
|
"ing_tozzi|Seria. Dammi il gesso.": {
|
||||||
|
"file": "ing_tozzi-4b3adfa04a.mp3",
|
||||||
|
"sec": 2.28
|
||||||
|
},
|
||||||
|
"ing_tozzi|A fassi male? Allora mi tolgo la giacca. Ah no, non ce l'ho.": {
|
||||||
|
"file": "ing_tozzi-c365e9f760.mp3",
|
||||||
|
"sec": 6.05
|
||||||
|
},
|
||||||
"andrea|Sono bloccato. Mi dai un consiglio?": {
|
"andrea|Sono bloccato. Mi dai un consiglio?": {
|
||||||
"file": "andrea-42b02eb9ea.mp3",
|
"file": "andrea-42b02eb9ea.mp3",
|
||||||
"sec": 3.9
|
"sec": 3.9
|
||||||
@@ -1935,6 +2115,38 @@
|
|||||||
"file": "castello-dc8a873d86.mp3",
|
"file": "castello-dc8a873d86.mp3",
|
||||||
"sec": 4.36
|
"sec": 4.36
|
||||||
},
|
},
|
||||||
|
"giocatore_carte|Oh, bravo! Ora però rimescolo io.": {
|
||||||
|
"file": "giocatore_carte-a8846bfa7b.mp3",
|
||||||
|
"sec": 2.9
|
||||||
|
},
|
||||||
|
"giocatore_carte|I carichi portali qui, mica alla stazione! Rivincita quando vuoi.": {
|
||||||
|
"file": "giocatore_carte-6ce98bce81.mp3",
|
||||||
|
"sec": 4.72
|
||||||
|
},
|
||||||
|
"giocatore_carte|Sessanta pari. Un si litiga nemmeno sul conto!": {
|
||||||
|
"file": "giocatore_carte-13af2e2331.mp3",
|
||||||
|
"sec": 3.86
|
||||||
|
},
|
||||||
|
"giocatore_carte|Vai, ti tengo il posto. Le carte mica scappano.": {
|
||||||
|
"file": "giocatore_carte-729b3344da.mp3",
|
||||||
|
"sec": 3.3
|
||||||
|
},
|
||||||
|
"giocatore_carte|Ventuno per primi. Bella coppia, voi due!": {
|
||||||
|
"file": "giocatore_carte-3215efd9dd.mp3",
|
||||||
|
"sec": 3.51
|
||||||
|
},
|
||||||
|
"giocatore_carte|Ventuno! Il tressette è un'arte: si studia da piccini.": {
|
||||||
|
"file": "giocatore_carte-5dbd39a25f.mp3",
|
||||||
|
"sec": 4.44
|
||||||
|
},
|
||||||
|
"giocatore_carte|Settebello, primiera e pure le scope. Oggi l'hai vista bene.": {
|
||||||
|
"file": "giocatore_carte-9a43eb8b2c.mp3",
|
||||||
|
"sec": 5.54
|
||||||
|
},
|
||||||
|
"giocatore_carte|Undici! Il settebello lo sento arrivare da lontano.": {
|
||||||
|
"file": "giocatore_carte-445e962a1b.mp3",
|
||||||
|
"sec": 4.1
|
||||||
|
},
|
||||||
"mariano|Aspetta, ci vuole il metro...": {
|
"mariano|Aspetta, ci vuole il metro...": {
|
||||||
"file": "mariano-e8b4ebf3d9.mp3",
|
"file": "mariano-e8b4ebf3d9.mp3",
|
||||||
"sec": 1.62
|
"sec": 1.62
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Primo piano del biliardo
|
||||||
|
|
||||||
|
Il tavolo in `assets/closeups/biliardo-tavolo.png` è generato con lo strumento immagini integrato
|
||||||
|
di Codex, senza API. Prompt completo in `prompts/closeups/biliardo-tavolo.integrated.txt`
|
||||||
|
(cartella esclusa da git). Specifica: vista ortogonale dall'alto, pixel art da avventura anni '90,
|
||||||
|
mogano scuro a fasce chiare e scure, diamanti d'ottone, panno verde, sala in penombra;
|
||||||
|
senza buche, biglie, birilli, persone, stecche o testi. Riferimento di stile: `circolo-4-maggio.png`.
|
||||||
|
L'Ingegnere usa il foglio esistente `ing-tozzi.json`, coerente con la fotografia di riferimento.
|
||||||
|
|
||||||
|
Il master misura 1672×941. `tablePatches()` in `biliardo-render.js` mappa il panno sorgente
|
||||||
|
(190, 214)–(1484, 722) su `(VIEW.x, VIEW.y, LEN * VIEW.k, WID * VIEW.k)`; i ritagli
|
||||||
|
esterni mantengono una cornice larga 16 pixel. La geometria della simulazione resta invariata.
|
||||||
|
Il caricamento passa da `story.closeups.biliardo.picture`, con la stessa cache delle bocce.
|
||||||
|
|
||||||
|
La luce calda è disegnata sul panno con una piccola tela memorizzata, ingrandita senza smoothing.
|
||||||
|
Biglie e birilli usano blocchi di pixel; le ombre delle biglie si allontanano dalla lampada centrale.
|
||||||
|
I segnapunti sono cifre rosse a sette segmenti. Le quattro pose di Tozzi rimangono nel margine sinistro.
|
||||||
|
|
||||||
|
`biliardo.js` aggiunge soltanto stato visivo: orologio, posizione iniziale della steccata,
|
||||||
|
breve cronologia delle posizioni e istante della caduta dei birilli. La presentazione del moto
|
||||||
|
è ritardata di 180 ms, per mostrare arretramento e scatto della stecca; la fisica parte subito.
|
||||||
|
La caduta dei birilli dura 240 ms sul medesimo orologio visivo. Previsione e CPU non scrivono
|
||||||
|
questa cronologia. Un confronto con la versione precedente ha verificato 6626 aggiornamenti
|
||||||
|
identici, escludendo i soli campi visivi.
|
||||||
|
|
||||||
|
Controlli: `tests/biliardo-render.test.mjs` verifica allineamento, presentazione, cadute,
|
||||||
|
pose e immutabilità del disegno. `npm run browser:biliardo` conserva i controlli dei comandi
|
||||||
|
su desktop, touch e telefono verticale e aggiunge controlli dei pixel e catture delle animazioni
|
||||||
|
in `/tmp/regolo-biliardo`.
|
||||||
|
|
||||||
|
Verifica di questa modifica: test JavaScript e Python superati; anteprima locale del renderer
|
||||||
|
ispezionata. Restano da completare `make -s verify` e `npm run browser:biliardo` in un ambiente
|
||||||
|
che permetta server locale e Chromium: nella sandbox della sessione entrambi sono bloccati
|
||||||
|
da `Operation not permitted`. Le vecchie schermate browser non validano questa modifica.
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
# Briscola all’oratorio
|
||||||
|
|
||||||
|
Implementazione del 26 ottobre 2026. ES modules statici, nessun build step.
|
||||||
|
|
||||||
|
## Partita e comandi
|
||||||
|
|
||||||
|
Il giocatore di carte è un personaggio inventato e provvisorio, seduto a destra alle tavolate
|
||||||
|
dell’oratorio: **[DA ANDREA: chi è]**. Il dialogo offre «Alla bona», «Seria», «A fassi male»;
|
||||||
|
dopo una partita conclusa offre la rivincita. `briscola_vinta` ricorda una vittoria e
|
||||||
|
`briscola_giocata` abilita la rivincita anche dopo sconfitta o patta. Nessuno dei due flag
|
||||||
|
serve alla soluzione dell’avventura.
|
||||||
|
|
||||||
|
Un clic o tocco su una carta la gioca al rilascio sullo stesso bersaglio. Nessuna carica.
|
||||||
|
Le frecce e 1–2–3 scelgono, Invio gioca, Esc esce. I tre pulsanti con nome e seme
|
||||||
|
offrono bersagli aggiuntivi e accesso tramite Tab. I comandi di tiro degli altri minigiochi
|
||||||
|
rimangono separati; in `MINIGAMES` pressione, rilascio, annullamento e mira sono opzionali.
|
||||||
|
|
||||||
|
Mazzo da 40 carte, 120 punti, distribuzione alternata e mazziere deterministico dal seed.
|
||||||
|
La briscola è in fondo al mazzo e compresa nel contatore. Chi prende pesca prima e riapre;
|
||||||
|
non esiste obbligo di seme. La presa resta visibile 1,25 secondi. Solo dopo la ventesima
|
||||||
|
presa si contano tutte le carte, una ogni 0,35 secondi, mostrando carta ingrandita,
|
||||||
|
incremento e totale. A 60–60 il risultato è patta. Il risultato resta fino all’uscita.
|
||||||
|
|
||||||
|
## Avversari e taratura
|
||||||
|
|
||||||
|
`observation` espone soltanto la propria mano, le carte pubbliche, i conteggi e l’eventuale
|
||||||
|
briscola pescata dall’altro. Non passa la mano avversaria, l’ordine del mazzo o il seed della
|
||||||
|
distribuzione. «Alla bona» sceglie casualmente; «Seria» scarta lisci, conserva briscole e
|
||||||
|
prende carichi con quelle piccole. «A fassi male» ricostruisce le carte non viste, confronta
|
||||||
|
le mosse su 40 distribuzioni possibili e simula seguiti giocati con buon senso. Sono ipotesi,
|
||||||
|
non la distribuzione effettiva. A mazzo finito il complemento delle carte pubbliche e della
|
||||||
|
propria mano identifica l’altra mano: da quel momento usa minimax esatto fino alla fine.
|
||||||
|
|
||||||
|
Comando riproducibile: `node tools/calibrate_briscola.mjs 1000`.
|
||||||
|
Semi `Math.imul(i, 2654435761) >>> 0`, i da 1 a 1000, stessi mazzi per ogni livello.
|
||||||
|
Andrea usa sempre `attentive`, l’euristica di riferimento; dà le carte 496 volte su 1000.
|
||||||
|
|
||||||
|
| Livello | Vittorie Andrea | Vittorie avversario | Patte | Punti medi Andrea |
|
||||||
|
| --- | ---: | ---: | ---: | ---: |
|
||||||
|
| Alla bona | 847 (84,7%) | 144 (14,4%) | 9 (0,9%) | 79,159 |
|
||||||
|
| Seria | 481 (48,1%) | 494 (49,4%) | 25 (2,5%) | 59,952 |
|
||||||
|
| A fassi male | 359 (35,9%) | 621 (62,1%) | 20 (2,0%) | 55,628 |
|
||||||
|
|
||||||
|
Queste percentuali misurano il confronto con quell’automatismo, non con giocatori umani.
|
||||||
|
|
||||||
|
## Revisione di Codex (26 ottobre, i tre giochi insieme)
|
||||||
|
|
||||||
|
Regole promosse. Corretti: uscendo durante il conteggio si perdeva una vittoria già fatta (ora il risultato è
|
||||||
|
deciso all'ultima presa e il conteggio lo mostra soltanto) e, per tutti e tre i giochi, l'esito che non finiva
|
||||||
|
nel salvataggio se dal risultato si tornava al titolo; Spazio sui pulsanti come negli altri giochi; la briscola e
|
||||||
|
la carta in tavola dette anche a parole; l'aiuto coi nomi di tutti e due i mazzi; «Rivincita a briscola?».
|
||||||
|
Proposta non fatta: i seguiti campionati di «A fassi male» col finale esatto, e l'obiettivo vittoria invece dei punti.
|
||||||
|
|
||||||
|
## Grafica e audio
|
||||||
|
|
||||||
|
Due mazzi, scelti nel dialogo («Con le toscane» / «Con le napoletane»): stesse regole e stessi id, cambiano
|
||||||
|
nomi e disegni (`DECKS` e `DECK_CARDS` in `briscola.js`; la scelta è il flag `carte_napoletane`).
|
||||||
|
|
||||||
|
- **Toscane** (predefinite): semi francesi cuori, mattoni, fiori, picche; figure gobbo, donna e regio (il regio
|
||||||
|
sempre con la corona). Numerali senza numeri, semi disposti come nel mazzo vero e capovolti nella metà bassa;
|
||||||
|
figure intere col seme e la lettera (G, D, R) in alto a sinistra. Riferimento: `assets/raw/carte/toscane-riferimento.png`.
|
||||||
|
- **Napoletane**: monete, coppe, lame ricurve incrociate, bastoni nodosi; fante, cavallo e re. Valore nell’angolo
|
||||||
|
e seme scritto per non affidarsi solo al colore.
|
||||||
|
|
||||||
|
Tutto disegnato via canvas, in pixel art originale.
|
||||||
|
I bersagli della mano sono 84×120 pixel a 640×360. Dorso con serpentello coronato e cornice
|
||||||
|
simmetrica; tavolino di legno e panno, mano avversaria coperta, mazzo e mucchietti delle prese.
|
||||||
|
|
||||||
|
Sprite generato con lo **strumento immagini integrato**, poi preparato con
|
||||||
|
`slice_sprites.py --alpha --fixed-grid --cols 2 --rows 2` e `prepare_character.py`.
|
||||||
|
Pose: `sit`, `talk`, `laugh`, `shuffle`. Foglio originale in
|
||||||
|
`assets/raw/giocatore-carte-sheet.png`; prompt completo in
|
||||||
|
`prompts/personaggi/giocatore-carte-sheet.txt` (entrambi esclusi da git).
|
||||||
|
|
||||||
|
Effetti Web Audio `card-slide`, `card-tap`, `card-shuffle`, collegati allo stesso volume,
|
||||||
|
muto e pausa degli altri effetti. Il colpo accompagna l’arrivo della carta dopo lo scorrimento.
|
||||||
|
13 nuove battute XTTS (4 Andrea, 9 giocatore), con indice e durate aggiornati.
|
||||||
|
Per generarle senza GPU/rete, `tools/voci_xtts.py` accetta `XTTS_DEVICE=cpu` e
|
||||||
|
`XTTS_MODEL_DIR` con la cartella del modello già scaricato; le impostazioni predefinite
|
||||||
|
rimangono quelle del progetto. Non è stata verificata all’ascolto la pronuncia delle nuove voci.
|
||||||
|
|
||||||
|
## Verifica e limiti della sessione
|
||||||
|
|
||||||
|
**`npm test`: passato.** Regole, determinismo, conservazione delle 40 carte e dei 120 punti,
|
||||||
|
pescata, ultima briscola, fine mazzo, patta, livelli, accesso negato ai dati nascosti,
|
||||||
|
minimax confrontato con un oracolo esaustivo, renderer puro, input geometrico,
|
||||||
|
dialoghi/flag/rivincita e audio. Passano anche i test precedenti e la soluzione completa.
|
||||||
|
|
||||||
|
`npm run browser` e `npm run browser:briscola` sono stati lanciati ma **bloccati dall’ambiente**:
|
||||||
|
`PermissionError: [Errno 1] Operation not permitted` alla creazione del socket del server.
|
||||||
|
Anche l’avvio isolato di Chromium fallisce con `sandbox_host_linux.cc:41`,
|
||||||
|
`shutdown: Operation not permitted`. Non è stato possibile verificare l’interfaccia reale
|
||||||
|
con Playwright né produrre schermate desktop/telefono.
|
||||||
|
|
||||||
|
Il test `tests/briscola.browser.mjs` è pronto: partite complete con mouse, touch e tastiera
|
||||||
|
su desktop e telefono verticale, più touch orizzontale; pausa, muto, gesto annullato,
|
||||||
|
conteggio, risultato e rivincita. Accelera solo le attese tramite `game.update`, senza
|
||||||
|
giocare carte di Andrea direttamente nel motore. Salva in `/tmp/regolo-shots/briscola-*.png`.
|
||||||
|
Le misure Web Audio dei tre nuovi suoni sono comprese nel collaudo browser multimedia.
|
||||||
|
|
||||||
|
Anteprime **offline, non schermate browser**, prodotte e ispezionate nella sessione:
|
||||||
|
|
||||||
|
- `/tmp/regolo-shots/briscola-offline-carte.png`
|
||||||
|
- `/tmp/regolo-shots/briscola-offline-tavolo.png`
|
||||||
|
- `/tmp/regolo-shots/briscola-offline-risultato.png`
|
||||||
|
|
||||||
|
## File
|
||||||
|
|
||||||
|
Nuovi: `src/engine/briscola.js`, `src/engine/briscola-render.js`,
|
||||||
|
`assets/characters/giocatore-carte.png`, `assets/characters/giocatore-carte.json`,
|
||||||
|
`tests/briscola.test.mjs`, `tests/briscola-render.test.mjs`, `tests/briscola.browser.mjs`,
|
||||||
|
`tools/calibrate_briscola.mjs`, questo documento e 13 MP3 elencati qui sotto.
|
||||||
|
|
||||||
|
Modificati: `src/engine/game.js`, `src/engine/render.js`, `src/engine/soundscape.js`,
|
||||||
|
`src/main.js`, `src/story/story.js`, `index.html`, `style.css`, `package.json`,
|
||||||
|
`tests/story.test.mjs`, `tests/multimedia.test.mjs`, `tests/multimedia.browser.mjs`,
|
||||||
|
`tools/voci.json`, `tools/voci_xtts.py`, `assets/voices/index.json`.
|
||||||
|
|
||||||
|
Nuovi file in `assets/voices/`:
|
||||||
|
|
||||||
|
```text
|
||||||
|
andrea-6e63dafda1.mp3
|
||||||
|
andrea-71f3bff8a0.mp3
|
||||||
|
andrea-b851b9ed26.mp3
|
||||||
|
andrea-d2f285f610.mp3
|
||||||
|
giocatore_carte-12f97003ec.mp3
|
||||||
|
giocatore_carte-13af2e2331.mp3
|
||||||
|
giocatore_carte-43e76cf11b.mp3
|
||||||
|
giocatore_carte-6ce98bce81.mp3
|
||||||
|
giocatore_carte-729b3344da.mp3
|
||||||
|
giocatore_carte-8dfadb4acc.mp3
|
||||||
|
giocatore_carte-9c07caaab4.mp3
|
||||||
|
giocatore_carte-a8846bfa7b.mp3
|
||||||
|
giocatore_carte-f1f219bd1c.mp3
|
||||||
|
```
|
||||||
|
|
||||||
|
`docs/STATO.md` invariato. Nessun commit, tag o push.
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
# Coqui Public Model License 1.0.0
|
||||||
|
https://coqui.ai/cpml.txt
|
||||||
|
|
||||||
|
|
||||||
|
This license allows only non-commercial use of a machine learning model and its outputs.
|
||||||
|
|
||||||
|
|
||||||
|
## Acceptance
|
||||||
|
|
||||||
|
|
||||||
|
In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
|
||||||
|
|
||||||
|
|
||||||
|
## Licenses
|
||||||
|
|
||||||
|
|
||||||
|
The licensor grants you a copyright license to do everything you might do with the model that would otherwise infringe the licensor's copyright in it, for any non-commercial purpose. The licensor grants you a patent license that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the model in the form provided by
|
||||||
|
the licensor, for any non-commercial purpose.
|
||||||
|
|
||||||
|
|
||||||
|
## Non-commercial Purpose
|
||||||
|
|
||||||
|
|
||||||
|
Non-commercial purposes include any of the following uses of the model or its output, but only so far as you do not receive any direct or indirect payment arising from the use of the model or its output.
|
||||||
|
|
||||||
|
|
||||||
|
### Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious
|
||||||
|
observance.
|
||||||
|
|
||||||
|
|
||||||
|
### Use by commercial or for-profit entities for testing, evaluation, or non-commercial research and development. Use of the model to train other models for commercial use is not a non-commercial purpose.
|
||||||
|
|
||||||
|
|
||||||
|
### Use by any charitable organization for charitable purposes, or for testing or evaluation. Use for revenue-generating activity, including projects directly funded by government grants, is not a non-commercial purpose.
|
||||||
|
|
||||||
|
|
||||||
|
## Notices
|
||||||
|
|
||||||
|
|
||||||
|
You must ensure that anyone who gets a copy of any part of the model, or any modification of the model, or their output, from you also gets a copy of these terms or the URL for them above.
|
||||||
|
|
||||||
|
|
||||||
|
## No Other Rights
|
||||||
|
|
||||||
|
|
||||||
|
These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply
|
||||||
|
any other licenses.
|
||||||
|
|
||||||
|
|
||||||
|
## Patent Defense
|
||||||
|
|
||||||
|
|
||||||
|
If you make any written claim that the model infringes or contributes to infringement of any patent, your licenses for the model granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
||||||
|
|
||||||
|
|
||||||
|
## Violations
|
||||||
|
|
||||||
|
|
||||||
|
The first time you are notified in writing that you have violated any of these terms, or done anything with the model or its output that is not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 30 days of receiving notice. Otherwise, all your licenses
|
||||||
|
end immediately.
|
||||||
|
|
||||||
|
|
||||||
|
## No Liability
|
||||||
|
|
||||||
|
|
||||||
|
***As far as the law allows, the model and its output come as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the model or its output, under any kind of legal claim. If this provision is not enforceable in your jurisdiction, your licenses are void.***
|
||||||
|
|
||||||
|
|
||||||
|
## Definitions
|
||||||
|
|
||||||
|
|
||||||
|
The **licensor** is the individual or entity offering these terms, and the **model** is the model the licensor makes available under these terms, including any documentation or similar information about the model.
|
||||||
|
|
||||||
|
|
||||||
|
**You** refers to the individual or entity agreeing to these terms.
|
||||||
|
|
||||||
|
|
||||||
|
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
||||||
|
|
||||||
|
|
||||||
|
**Your licenses** are all the licenses granted to you under these terms.
|
||||||
|
|
||||||
|
|
||||||
|
**Use** means anything you do with the model or its output requiring one of your licenses.
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# Scopa agli 11
|
||||||
|
|
||||||
|
All'oratorio, dal giocatore di carte: «Una scopa?». In due, Andrea contro il giocatore di carte, con le toscane o
|
||||||
|
le napoletane (stessa scelta della briscola). Motore `src/engine/scopa.js` (Claude), tavolo `src/engine/scopa-render.js`.
|
||||||
|
|
||||||
|
## Regole
|
||||||
|
|
||||||
|
- Valori: Asso 1, poi i numeri, gobbo (fante) 8, donna (cavallo) 9, regio (re) 10.
|
||||||
|
- Quattro carte in tavola (con tre o quattro re si rimescola), tre a testa; finite le tre, se ne danno altre tre.
|
||||||
|
Gioca per primo chi non fa le carte; il mazziere cambia a ogni smazzata.
|
||||||
|
- Una carta prende quella dello stesso valore (se ce n'è più d'una si sceglie quale); se non c'è, un gruppo di carte
|
||||||
|
che somma il suo valore (più gruppi: si sceglie). Se la presa c'è, è obbligatoria. Se no, la carta resta in tavola.
|
||||||
|
- **Scopa**: chi pulisce la tavola fa un punto; non vale con l'ultima carta della smazzata.
|
||||||
|
- A fine smazzata le carte in tavola vanno all'ultimo che ha preso. Un punto per: **carte** (più di 20), **mattoni**
|
||||||
|
(con le napoletane i denari, più di 5), **settebello** (il 7 di mattoni o di denari), **primiera** (la carta
|
||||||
|
migliore di ogni seme: 7 = 21, 6 = 18, Asso = 16, 5 = 15, 4 = 14, 3 = 13, 2 = 12, figure 10; senza un seme non
|
||||||
|
si fa), e uno per scopa. A pari, il punto non va a nessuno.
|
||||||
|
- Si va **agli 11**, contati a fine smazzata: vince chi ne ha di più; pari (o nessuno agli 11), un'altra smazzata.
|
||||||
|
|
||||||
|
## Avversari
|
||||||
|
|
||||||
|
- «Alla bona»: una mossa a caso fra quelle possibili.
|
||||||
|
- «Seria»: sceglie la mossa che vale di più (settebello, mattoni, carte, scope, e la primiera per quanto migliora la
|
||||||
|
propria: un 6 di un seme dove si ha solo una figura vale più di uno dove si ha già il 7) e teme a occhio di
|
||||||
|
lasciare una scopa.
|
||||||
|
- «A fassi male»: come «Seria», ma conta le carte non viste per stimare se l'altro può fare scopa, non lascia 7 in
|
||||||
|
tavola e, a mazzo finito (le carte dell'altro sono proprio quelle non viste), calcola il finale esatto fino al
|
||||||
|
conteggio.
|
||||||
|
|
||||||
|
Taratura (`node tools/calibrate_scopa.mjs 300`, Andrea che gioca come «A fassi male»): Andrea vince 96% contro
|
||||||
|
«Alla bona», 76% contro «Seria», 50% contro «A fassi male»; circa quattro smazzate a partita.
|
||||||
|
|
||||||
|
## Revisione di Codex (26 ottobre, i tre giochi insieme)
|
||||||
|
|
||||||
|
Regole promosse (valori, presa obbligatoria, precedenza della carta uguale, scopa non all'ultima, residui
|
||||||
|
all'ultimo, maggioranze e pari, primiera, re in tavola, agli 11). Corretti: frecce e Invio che potevano prendere la
|
||||||
|
presa sbagliata (ora il fuoco segue la scelta); il tocco sulla tavola che agiva alla pressione e non bastava con
|
||||||
|
prese sovrapposte (ora al rilascio: il primo tocco sceglie, il secondo conferma); primiera valutata a occhio;
|
||||||
|
finali sbagliati a mazzo finito; la tavola descritta a parole; aiuto con i valori della primiera e i pari.
|
||||||
|
|
||||||
|
## Prove
|
||||||
|
|
||||||
|
`npm test` (`tests/scopa.test.mjs`) e `npm run browser:scopa`: partita intera col mouse, una smazzata col tocco
|
||||||
|
(telefono e orizzontale) e con la tastiera; in ogni caso una presa da scegliere fra due (toccando la tavola, con
|
||||||
|
un pulsante o con frecce e Invio). Schermate in `/tmp/regolo-shots/scopa-*.png`.
|
||||||
@@ -18,6 +18,17 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto,
|
|||||||
|
|
||||||
## Dove siamo arrivati
|
## Dove siamo arrivati
|
||||||
|
|
||||||
|
- **Briscola all'oratorio (26 ottobre)**: alle tavolate siede «Il giocatore di carte» (segnaposto, [DA ANDREA: chi è],
|
||||||
|
sprite e battute provvisorie di Codex). Parlandoci si sceglie il mazzo (toscane o napoletane) e il livello
|
||||||
|
(«Alla bona», «Seria», «A fassi male»), poi briscola a due fedele alle regole, conteggio delle prese a fine
|
||||||
|
partita e rivincita. Facoltativa: nessun flag serve alla soluzione. Motore `src/engine/briscola.js` (Claude),
|
||||||
|
disegno `briscola-render.js` (Codex), dettagli e taratura in `docs/BRISCOLA.md`. Prova: `npm run browser:briscola`.
|
||||||
|
**Tressette ai 21** (stesso giocatore, «Un tressette ai 21?»): in quattro a coppie, busso/striscio/volo e accuse,
|
||||||
|
motore e tavolo di Claude, regole e taratura in `docs/TRESSETTE.md`, prova `npm run browser:tressette`.
|
||||||
|
**Scopa agli 11** («Una scopa?»): carte, mattoni (o denari), settebello, primiera e scope, presa a scelta fra
|
||||||
|
più possibili; `docs/SCOPA.md`, prova `npm run browser:scopa`. Con la scopa i giochi di carte sono finiti
|
||||||
|
(decisione di Andrea, 26 ottobre). Tressette rivisto dopo la revisione critica di Codex (in `docs/TRESSETTE.md`).
|
||||||
|
|
||||||
- **Multimedia (25 ottobre, modifiche locali)**: il libro sfogliabile già presente conserva immagini, battute e
|
- **Multimedia (25 ottobre, modifiche locali)**: il libro sfogliabile già presente conserva immagini, battute e
|
||||||
riapertura dall'inventario; il fruscio ora segue il volume degli effetti, non quello delle voci.
|
riapertura dall'inventario; il fruscio ora segue il volume degli effetti, non quello delle voci.
|
||||||
Nuovi paesaggi sonori sintetizzati con Web Audio (`src/engine/soundscape.js`, profili in
|
Nuovi paesaggi sonori sintetizzati con Web Audio (`src/engine/soundscape.js`, profili in
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# Tressette ai 21
|
||||||
|
|
||||||
|
All'oratorio, dal giocatore di carte: «Un tressette ai 21?». Quattro al tavolo, a coppie: Andrea e il socio
|
||||||
|
(di fronte) contro il giocatore di carte e l'altro. [DA ANDREA: chi sono il socio e l'altro.]
|
||||||
|
Motore `src/engine/tressette.js` (Claude), disegno `src/engine/tressette-render.js` con le carte della briscola.
|
||||||
|
|
||||||
|
## Regole
|
||||||
|
|
||||||
|
- Mazzo da 40, toscane o napoletane (stessa scelta e stesso flag `carte_napoletane` della briscola). Dieci carte a testa.
|
||||||
|
- Si gira verso destra (antiorario); esce chi sta a destra del mazziere, e il mazzo passa a destra a ogni smazzata.
|
||||||
|
- Obbligo di rispondere al seme. Prende la più alta del seme di uscita: 3, 2, Asso, regio, donna, gobbo, 7, 6, 5, 4.
|
||||||
|
- Punti in terzi: Asso 3 terzi, 3, 2 e figure 1 terzo; l'ultima presa 1 punto. 35 terzi per smazzata, i terzi
|
||||||
|
avanzati si perdono: le due coppie fanno sempre 11 punti in tutto.
|
||||||
|
- **Accuse**, dette da ognuno al proprio turno giocando la prima carta della smazzata: napoletana (Asso, 2 e 3
|
||||||
|
dello stesso seme) 3 punti; tre Assi, tre 2 o tre 3 fanno 3 punti (dicendo il seme che manca), quattro fanno 4.
|
||||||
|
Restano scritte in alto per tutta la smazzata: Andrea sa quel che sanno gli avversari.
|
||||||
|
- **Segni**, solo di chi esce: busso (prendi con la migliore e ritornamelo; si può sempre), striscio (ne ho
|
||||||
|
altre), volo (era l'ultima). Volo e striscio sono onesti: il gioco rifiuta quelli falsi. Si sentono: due nocche
|
||||||
|
sul tavolo, la carta strusciata, la carta lasciata cadere.
|
||||||
|
- Si va **ai 21**, presa per presa: il punteggio in alto conta accuse e punti interi già presi, e la coppia che
|
||||||
|
arriva a 21 per prima è fuori e ha vinto, anche a metà smazzata (le accuse contano alla fine della presa in cui
|
||||||
|
si dicono). Il risultato è subito definitivo: uscire dal riepilogo non lo cancella. Il riepilogo di fine
|
||||||
|
smazzata resta finché Andrea non va avanti.
|
||||||
|
|
||||||
|
Scelte da confermare con Andrea: «fuori» automatico ai 21 (al tavolo vero bisogna chiamarsi fuori, e se si
|
||||||
|
sbaglia si perde); nessun «cappotto»; nessuna napoletana lunga; segni ammessi anche alla prima presa.
|
||||||
|
|
||||||
|
## Avversari
|
||||||
|
|
||||||
|
- «Alla bona»: una carta a caso fra quelle buone, nessun segno.
|
||||||
|
- «Seria»: gioca a regola (carico al socio quando prende di sicuro, presa sicura con la carta più bassa, scarta
|
||||||
|
quel che costa meno, segni onesti) ma non conta: un 3 uscito per lui può essere ancora in giro.
|
||||||
|
- «A fassi male»: conta le carte uscite, capisce chi ha finito un seme (anche da chi vola), ricorda le accuse,
|
||||||
|
risponde al busso del socio prendendo con la migliore e poi gli ritorna il seme. Il socio di Andrea gioca sempre così.
|
||||||
|
- Tutti: il carico al socio che prende di sicuro, ma senza buttarci il 3 o il 2; a parità di lunghezza si esce dal
|
||||||
|
seme con meno punti da esporre (niente Asso scoperto).
|
||||||
|
|
||||||
|
Taratura (`node tools/calibrate_tressette.mjs 300`, Andrea che gioca come il socio): Andrea e il socio vincono
|
||||||
|
87% contro «Alla bona», 61% contro «Seria», 48% contro «A fassi male»; circa tre smazzate a partita.
|
||||||
|
|
||||||
|
## Revisione di Codex (26 ottobre)
|
||||||
|
|
||||||
|
Revisione critica sul primo giro. Corretti: vittoria persa uscendo dal riepilogo; accuse tutte pubbliche prima
|
||||||
|
della prima carta; il seme mancante del tris noto all'IA ma non ad Andrea; striscio troppo stretto e busso con
|
||||||
|
un requisito inventato; il socio che non rispondeva al busso, sprecava il 3 su una presa già sua o usciva
|
||||||
|
d'Asso scoperto; il volo non letto da «A fassi male»; tastiera che poteva giocare la carta sbagliata; il
|
||||||
|
riepilogo che ripartiva da solo dopo sette secondi; la tavola descritta a parole per chi non vede il disegno.
|
||||||
|
Restano proposte (non fatte): una tabella di tavolo accessibile completa e la taratura contro una versione
|
||||||
|
precedente dell'IA.
|
||||||
|
|
||||||
|
Seconda revisione (i tre giochi insieme). Corretti: con le accuse tutte e due le coppie potevano arrivare ai 21 e
|
||||||
|
vinceva sempre Andrea (ora esce chi arriva per primo, anche con un'accusa, nel momento in cui la dice); il socio
|
||||||
|
che teneva il 2 anche quando caricarlo voleva dire vincere subito (l'IA vede ora punteggio e terzi del tabellone);
|
||||||
|
Invio su un pulsante che giocava la carta col fuoco invece di quella scelta; il pannello delle accuse che usciva
|
||||||
|
dal tavolo; le convenzioni del tavolo scritte anche nel «Come si gioca». Per tutti e tre i giochi l'esito vale e
|
||||||
|
si salva appena deciso (anche tornando al titolo dalla schermata del risultato).
|
||||||
|
|
||||||
|
## Prove
|
||||||
|
|
||||||
|
`npm test` (`tests/tressette.test.mjs`) e `npm run browser:tressette`: partita intera ai 21 col mouse, una smazzata
|
||||||
|
col tocco (telefono e orizzontale) e con la tastiera, segni con pulsanti e tasti B, S, V, carta che non risponde
|
||||||
|
al seme rifiutata. Schermate in `/tmp/regolo-shots/tressette-*.png`.
|
||||||
@@ -4,6 +4,11 @@
|
|||||||
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||||
<meta name="theme-color" content="#1b1420"><meta name="description" content="La Leggenda del Regolo: un'avventura punta-e-clicca a San Piero a Sieve, durante il Palio della Fortezza del 2007.">
|
<meta name="theme-color" content="#1b1420"><meta name="description" content="La Leggenda del Regolo: un'avventura punta-e-clicca a San Piero a Sieve, durante il Palio della Fortezza del 2007.">
|
||||||
<title>La Leggenda del Regolo</title>
|
<title>La Leggenda del Regolo</title>
|
||||||
|
<!-- Il Regolino (tools/favicon.py, disegnato da Codex pixel per pixel) -->
|
||||||
|
<link rel="icon" href="assets/favicon/favicon.ico" sizes="16x16 32x32 48x48">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon/favicon-32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href="assets/favicon/icon-192.png">
|
||||||
|
<link rel="apple-touch-icon" href="assets/favicon/apple-touch-icon.png">
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -28,6 +33,7 @@
|
|||||||
<p class="splash-name">Manzolo</p>
|
<p class="splash-name">Manzolo</p>
|
||||||
<p class="splash-art"><span>(Poca)</span> Art</p>
|
<p class="splash-art"><span>(Poca)</span> Art</p>
|
||||||
<p class="splash-present">Presents</p>
|
<p class="splash-present">Presents</p>
|
||||||
|
<p class="splash-hint">Tocca per cominciare</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="title" class="overlay" hidden>
|
<section id="title" class="overlay" hidden>
|
||||||
<h1>La Leggenda<br>del <span>Regolo</span></h1>
|
<h1>La Leggenda<br>del <span>Regolo</span></h1>
|
||||||
@@ -86,6 +92,11 @@
|
|||||||
<p class="hint">La partita è salvata: dal titolo si riprende con «Continua». Con «Salva su file» la porti su un altro dispositivo e la apri con «Carica».</p>
|
<p class="hint">La partita è salvata: dal titolo si riprende con «Continua». Con «Salva su file» la porti su un altro dispositivo e la apri con «Carica».</p>
|
||||||
<p class="version"></p>
|
<p class="version"></p>
|
||||||
</section>
|
</section>
|
||||||
|
<section id="tutorial" class="overlay" hidden aria-labelledby="tutorial-title">
|
||||||
|
<h2 id="tutorial-title">Come si gioca</h2>
|
||||||
|
<video id="tutorial-video" controls playsinline preload="metadata"></video>
|
||||||
|
<div class="buttons"><button id="tutorial-close">Torna al gioco</button></div>
|
||||||
|
</section>
|
||||||
<section id="credits" class="overlay" hidden aria-label="Ringraziamenti">
|
<section id="credits" class="overlay" hidden aria-label="Ringraziamenti">
|
||||||
<h2>Ringraziamenti</h2>
|
<h2>Ringraziamenti</h2>
|
||||||
<p class="dedication credits-dedication">Al Lele, che mi ha fatto conoscere Monkey Island.</p>
|
<p class="dedication credits-dedication">Al Lele, che mi ha fatto conoscere Monkey Island.</p>
|
||||||
@@ -103,6 +114,82 @@
|
|||||||
<div id="inventory" aria-label="Inventario"></div>
|
<div id="inventory" aria-label="Inventario"></div>
|
||||||
</div>
|
</div>
|
||||||
<ol id="choices" hidden></ol>
|
<ol id="choices" hidden></ol>
|
||||||
|
<section id="scopa-controls" hidden aria-label="Comandi della scopa">
|
||||||
|
<p id="scopa-status" role="status"></p>
|
||||||
|
<div class="card-hand" aria-label="La mano di Andrea">
|
||||||
|
<button id="scopa-card-0" type="button"></button>
|
||||||
|
<button id="scopa-card-1" type="button"></button>
|
||||||
|
<button id="scopa-card-2" type="button"></button>
|
||||||
|
</div>
|
||||||
|
<div id="scopa-options" class="card-buttons" hidden aria-label="Quale presa"></div>
|
||||||
|
<button id="scopa-next" type="button" hidden>Prossima smazzata</button>
|
||||||
|
<details><summary>Come si gioca</summary>
|
||||||
|
<button class="tutorial-open" type="button" data-tutorial="scopa" hidden>Guarda il video</button>
|
||||||
|
<p>Si gioca una carta: se in tavola ce n’è una dello stesso valore la prendi; se no prendi le carte che sommano
|
||||||
|
il suo valore. Se la presa c’è, è obbligatoria; se sono più d’una, scegli tu. Asso 1, gobbo 8, donna 9, regio 10.
|
||||||
|
Chi pulisce la tavola fa scopa (non con l’ultima carta). Quel che resta alla fine va all’ultimo che ha preso.</p>
|
||||||
|
<p>A fine smazzata un punto per: più carte, più mattoni (con le napoletane i denari), il settebello (il 7 di
|
||||||
|
mattoni o di denari), la primiera, e uno per ogni scopa. A pari, il punto non va a nessuno.</p>
|
||||||
|
<p>Primiera: si somma la carta migliore di ogni seme (7 = 21, 6 = 18, Asso = 16, 5 = 15, 4 = 14, 3 = 13, 2 = 12,
|
||||||
|
figure 10); chi non ha almeno una carta per seme non la fa. Si va agli 11, contati a fine smazzata: vince chi ne
|
||||||
|
ha di più; pari, se ne fa un’altra.</p>
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
|
<section id="tressette-controls" hidden aria-label="Comandi del tressette">
|
||||||
|
<p id="tressette-status" role="status"></p>
|
||||||
|
<div class="card-buttons" aria-label="Segni per il socio, solo quando esci">
|
||||||
|
<button id="tressette-busso" type="button">Busso</button>
|
||||||
|
<button id="tressette-striscio" type="button">Striscio</button>
|
||||||
|
<button id="tressette-volo" type="button">Volo</button>
|
||||||
|
<button id="tressette-next" type="button" hidden>Prossima smazzata</button>
|
||||||
|
</div>
|
||||||
|
<div class="card-hand-many" aria-label="La mano di Andrea">
|
||||||
|
<button id="tressette-card-0" type="button"></button>
|
||||||
|
<button id="tressette-card-1" type="button"></button>
|
||||||
|
<button id="tressette-card-2" type="button"></button>
|
||||||
|
<button id="tressette-card-3" type="button"></button>
|
||||||
|
<button id="tressette-card-4" type="button"></button>
|
||||||
|
<button id="tressette-card-5" type="button"></button>
|
||||||
|
<button id="tressette-card-6" type="button"></button>
|
||||||
|
<button id="tressette-card-7" type="button"></button>
|
||||||
|
<button id="tressette-card-8" type="button"></button>
|
||||||
|
<button id="tressette-card-9" type="button"></button>
|
||||||
|
</div>
|
||||||
|
<details><summary>Come si gioca</summary>
|
||||||
|
<button class="tutorial-open" type="button" data-tutorial="tressette" hidden>Guarda il video</button>
|
||||||
|
<p>In quattro, a coppie: Andrea e il socio di fronte contro gli altri due. Si gira verso destra.
|
||||||
|
Chi esce gioca quel che vuole, gli altri devono rispondere al seme se ce l’hanno. Prende la carta più alta
|
||||||
|
del seme di uscita: 3, 2, Asso, regio, donna, gobbo, 7, 6, 5, 4. Chi prende esce.</p>
|
||||||
|
<p>L’Asso vale un punto; 3, 2 e figure un terzo di punto; l’ultima presa un punto. Si va ai 21: la coppia che
|
||||||
|
ci arriva per prima è fuori e ha vinto, anche a metà smazzata.</p>
|
||||||
|
<p>Accuse, dette da ognuno giocando la sua prima carta: napoletana (Asso, 2 e 3 dello stesso seme) 3 punti;
|
||||||
|
tre Assi, tre 2 o tre 3 fanno 3 punti (si dice il seme che manca), quattro fanno 4.</p>
|
||||||
|
<p>Convenzioni di questo tavolo: il «fuori» ai 21 è automatico (un’accusa o una presa che ci porta fa vincere
|
||||||
|
subito); niente cappotto; i segni valgono anche alla prima presa.</p>
|
||||||
|
<p>Segni, solo di chi esce: <b>busso</b> (prendi con la migliore e ritornami il seme),
|
||||||
|
<b>striscio</b> (di questo seme ne ho altre), <b>volo</b> (era l’ultima). Prima scegli il segno, poi la carta.
|
||||||
|
Tastiera: B, S, V; frecce e 1–0 scelgono, Invio gioca, Esc lascia il tavolo.</p>
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
|
<section id="briscola-controls" hidden aria-label="Comandi della briscola">
|
||||||
|
<p id="briscola-status" role="status"></p>
|
||||||
|
<div class="card-hand" aria-label="La mano di Andrea">
|
||||||
|
<button id="briscola-card-0" type="button"></button>
|
||||||
|
<button id="briscola-card-1" type="button"></button>
|
||||||
|
<button id="briscola-card-2" type="button"></button>
|
||||||
|
</div>
|
||||||
|
<details><summary>Come si gioca</summary>
|
||||||
|
<button class="tutorial-open" type="button" data-tutorial="briscola" hidden>Guarda il video</button>
|
||||||
|
<p>Tocca una carta sul tavolo o il suo nome qui sotto per giocarla. Frecce o 1–2–3 scelgono; Invio gioca.
|
||||||
|
Esc lascia il tavolo. Vince chi fa almeno 61 punti; 60 a 60 è patta.</p>
|
||||||
|
<p>Non sei obbligato a rispondere al seme. Prende la briscola più alta, oppure la carta più alta del seme
|
||||||
|
di uscita. Ordine: Asso, 3, regio (re), donna (cavallo), gobbo (fante), 7, 6, 5, 4, 2.
|
||||||
|
Asso 11 punti, 3 dieci, regio 4, donna 3, gobbo 2; le altre zero. Fra parentesi i nomi delle napoletane.</p>
|
||||||
|
<p>Chi prende pesca per primo e poi esce. La briscola scoperta è l’ultima carta del mazzo;
|
||||||
|
il contatore la comprende. Finito il mazzo, si giocano le carte rimaste e si contano le prese.
|
||||||
|
Durante la partita i punti non si dicono!</p>
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
<section id="bocce-controls" hidden aria-label="Comandi delle bocce">
|
<section id="bocce-controls" hidden aria-label="Comandi delle bocce">
|
||||||
<p id="bocce-status" role="status"></p>
|
<p id="bocce-status" role="status"></p>
|
||||||
<div class="bocce-adjust">
|
<div class="bocce-adjust">
|
||||||
@@ -114,6 +201,7 @@
|
|||||||
<button id="bocce-throw" type="button">Lancia</button>
|
<button id="bocce-throw" type="button">Lancia</button>
|
||||||
</div>
|
</div>
|
||||||
<details id="bocce-help"><summary>Come si gioca</summary>
|
<details id="bocce-help"><summary>Come si gioca</summary>
|
||||||
|
<button class="tutorial-open" type="button" data-tutorial="bocce" hidden>Guarda il video</button>
|
||||||
<p>Tocca il campo o il dettaglio del pallino per mirare. Regola la forza, poi premi Lancia.
|
<p>Tocca il campo o il dettaglio del pallino per mirare. Regola la forza, poi premi Lancia.
|
||||||
Il cerchio azzurro indica dove si fermerebbe la boccia senza urti.</p>
|
Il cerchio azzurro indica dove si fermerebbe la boccia senza urti.</p>
|
||||||
<p>Puoi anche tenere premuto sul campo o Spazio e rilasciare per tirare.
|
<p>Puoi anche tenere premuto sul campo o Spazio e rilasciare per tirare.
|
||||||
@@ -122,9 +210,15 @@
|
|||||||
Vince chi fa più punti nella mano.</p>
|
Vince chi fa più punti nella mano.</p>
|
||||||
</details>
|
</details>
|
||||||
<details id="biliardo-help" hidden><summary>Come si gioca</summary>
|
<details id="biliardo-help" hidden><summary>Come si gioca</summary>
|
||||||
<p>Tocca il tavolo per mirare: la linea mostra dove va la tua biglia e la freccia dove parte quella colpita.
|
<button class="tutorial-open" type="button" data-tutorial="biliardo" hidden>Guarda il video</button>
|
||||||
Regola la forza, poi premi Tira. Oppure tieni premuto sul tavolo o Spazio e rilascia per tirare.
|
<p>Clic o tocco sul tavolo fissa la mira: puoi spostarti sui comandi senza cambiarla.
|
||||||
Frecce ← →: mira fine; ↑ ↓: forza. Esc esce dalla partita.</p>
|
La linea tratteggiata segue la tua biglia fino al primo urto, comprese le sponde; il cerchio vuoto indica
|
||||||
|
il punto di contatto. Dopo l’urto, la freccia azzurra mostra la direzione dell’avversaria, quella gialla
|
||||||
|
la tua. Le frecce mostrano solo il primo tratto, fino al prossimo ostacolo o al massimo 50 cm.
|
||||||
|
Senza urti, il cerchietto indica dove ti fermi. La guida arancione segnala un primo contatto falloso.</p>
|
||||||
|
<p>Regola la forza, poi premi Tira. Oppure tieni premuto sul tavolo o Spazio e rilascia per tirare:
|
||||||
|
durante la carica la mira resta ferma. Frecce ← →: mira fine; Maiusc + ← →: regolazione ancora più precisa;
|
||||||
|
↑ ↓: forza. Esc esce dalla partita. I colpi sono centrali, senza effetti di rotazione.</p>
|
||||||
<p>Cinque birilli: devi colpire la biglia avversaria e mandarla sui birilli o sul pallino. Birillo bianco 2 punti,
|
<p>Cinque birilli: devi colpire la biglia avversaria e mandarla sui birilli o sul pallino. Birillo bianco 2 punti,
|
||||||
rosso 4, rosso da solo 10; pallino toccato dalla biglia avversaria 3. Se manchi la biglia avversaria, tocchi prima
|
rosso 4, rosso da solo 10; pallino toccato dalla biglia avversaria 3. Se manchi la biglia avversaria, tocchi prima
|
||||||
il pallino o abbatti birilli con la tua, i punti (almeno 2) vanno all'avversario. Un colpo a testa; vince chi arriva prima a 20.</p>
|
il pallino o abbatti birilli con la tua, i punti (almeno 2) vanno all'avversario. Un colpo a testa; vince chi arriva prima a 20.</p>
|
||||||
|
|||||||