Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8dbd01358 | ||
|
|
e3d5d8b0d3 | ||
|
|
1b7511f6ca | ||
|
|
9d2cc2fcb3 | ||
|
|
44480221db | ||
|
|
4d13a4ef25 | ||
|
|
22f408cc60 | ||
|
|
927459344b | ||
|
|
08ab9ba069 | ||
|
|
1918c8d9c7 | ||
|
|
381254ed4d | ||
|
|
a11a6ef59f | ||
|
|
086e4682d4 | ||
|
|
bf22dc2511 | ||
|
|
6585c9ffcb | ||
|
|
13585491a4 | ||
|
|
72a629e88b | ||
|
|
f57bec560a | ||
|
|
1f49486870 | ||
|
|
06f7cfbfad | ||
|
|
e1b92278a5 | ||
|
|
b3c50f4694 | ||
|
|
7dd05ac92f | ||
|
|
800a82045d | ||
|
|
c96dec4692 | ||
|
|
417c126777 | ||
|
|
1205192e8a | ||
|
|
aa2f547856 | ||
|
|
57e72de021 | ||
|
|
15ae2b8221 | ||
|
|
f895b7979d | ||
|
|
bec7f067bc | ||
|
|
e50a3e80e9 | ||
|
|
afb0b931c5 | ||
|
|
fb1568259b | ||
|
|
c1049bf69d | ||
|
|
b05fe5b302 | ||
|
|
505eda01a3 | ||
|
|
d329cbd6ef | ||
|
|
1e4dcaaf3b | ||
|
|
4c5ec099d0 | ||
|
|
b2ec499590 | ||
|
|
75b532cda0 | ||
|
|
68686efe03 | ||
|
|
208e1d9535 | ||
|
|
f2a0f22f4a | ||
|
|
dea124933e | ||
|
|
51a46fe5a0 | ||
|
|
f6fb8922af | ||
|
|
bd7fbc3003 | ||
|
|
8b957c7cf7 | ||
|
|
f1de62f01e | ||
|
|
64dc8e18e7 | ||
|
|
b262977117 | ||
|
|
3762f2b465 | ||
|
|
9f7a9812ed | ||
|
|
151017d2e2 | ||
|
|
f193c6020f | ||
|
|
8a2e49036d | ||
|
|
1e5f66c2b6 | ||
|
|
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 | ||
|
|
49bdfb313a | ||
|
|
416b9d46ef | ||
|
|
7476c84b76 | ||
|
|
053728a086 | ||
|
|
394e8bdde3 | ||
|
|
ca56a9df17 | ||
|
|
b0b2fc0ed3 | ||
|
|
f56c9b5358 | ||
|
|
70f328c56d | ||
|
|
0a0bb7eea4 | ||
|
|
16759006b1 | ||
|
|
7c49c3e260 | ||
|
|
817cfbd7fd | ||
|
|
44485cff52 | ||
|
|
a0201fea18 | ||
|
|
c4bac08c02 | ||
|
|
7f0584f0fc | ||
|
|
447c150974 | ||
|
|
95e7777dbc | ||
|
|
26697cd9c2 | ||
|
|
de303c5825 | ||
|
|
1fabb6e543 | ||
|
|
32a3d8a7c5 | ||
|
|
4bda52d9ac | ||
|
|
ec008b5ea1 | ||
|
|
73f3418bab | ||
|
|
ce4e47a2ed | ||
|
|
f6fd2fdfdc | ||
|
|
9d9dc81bcb | ||
|
|
bc19d6be53 | ||
|
|
c54023083a | ||
|
|
af6861350d | ||
|
|
53da1e48f8 | ||
|
|
019c3110f9 | ||
|
|
17a4a01f6d |
@@ -12,11 +12,20 @@ COPY assets/fonts /usr/share/nginx/html/assets/fonts
|
||||
COPY assets/voices /usr/share/nginx/html/assets/voices
|
||||
COPY assets/credits /usr/share/nginx/html/assets/credits
|
||||
COPY assets/effects /usr/share/nginx/html/assets/effects
|
||||
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.
|
||||
# Alla versione si aggiunge l'impronta del contenuto di assets/: uno sfondo rifatto senza cambiare versione (in
|
||||
# locale, fra un bump e l'altro) ha un indirizzo nuovo, e il browser non tiene quello vecchio dalla cache lunga.
|
||||
RUN cd /usr/share/nginx/html \
|
||||
&& V=$(sed -n "s/^export const VERSION = '\([0-9.]*\)';$/\1/p" src/version.js) \
|
||||
&& test -n "$V" \
|
||||
&& H=$(find assets -type f -exec md5sum {} + | sort -k2 | md5sum | cut -c1-8) \
|
||||
&& sed -i -E 's#v=\$\{VERSION\}#v=${VERSION}-'"$H"'#' src/version.js \
|
||||
&& grep -q "VERSION}-$H" src/version.js \
|
||||
&& V="$V-$H" \
|
||||
&& sed -i -E "s#url\((assets/[^)]*)\)#url(\1?v=$V)#g" style.css \
|
||||
&& sed -i -E "s#src=\"(assets/[^\"]*)\"#src=\"\1?v=$V\"#g" index.html \
|
||||
&& grep -q "?v=$V" style.css && grep -q "?v=$V" index.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,8 +23,8 @@ DST ?= assets/scenes/$(notdir $(SRC))
|
||||
CROP ?=
|
||||
COLORS ?= 64
|
||||
|
||||
.PHONY: help serve open test browser verify 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
|
||||
.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-vps deploy-logs clean distclean
|
||||
|
||||
## ------------------------------------------------------------ sviluppo
|
||||
|
||||
@@ -50,7 +50,10 @@ test: ## Test della logica, della storia, della soluzione completa e del generat
|
||||
browser: ## Partita completa nel browser con Playwright
|
||||
$(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
|
||||
scripts/bump.sh $(or $(PARTE),patch)
|
||||
@@ -121,6 +124,8 @@ image-size: ## Dimensione dell'immagine
|
||||
# Host e indirizzo stanno in deploy.local.mk, fuori da git, per esempio:
|
||||
# DEPLOY_HOST = root@mio-server
|
||||
# DEPLOY_URL = https://gioco.esempio
|
||||
# VPS_HOST = mio-vps (facoltativo: una seconda copia, con make deploy-vps)
|
||||
# VPS_DIR = docker/leggenda-regolo
|
||||
-include deploy.local.mk
|
||||
DEPLOY_DIR ?= /root/leggenda-regolo
|
||||
DEPLOY_TMP := $(shell mktemp -d -u /tmp/regolo-deploy.XXXXXX)
|
||||
@@ -143,8 +148,21 @@ deploy: ## Pubblica l'ultimo commit: test, immagine costruita e provata qui, spe
|
||||
scp -q $(DEPLOY_TMP)/docker-compose.homeserver.yml $(DEPLOY_HOST):$(DEPLOY_DIR)/docker-compose.yml
|
||||
docker save $(IMAGE):latest | gzip | ssh $(DEPLOY_HOST) 'gunzip | docker load -q && cd $(DEPLOY_DIR) && docker compose up -d && docker image prune -f >/dev/null'
|
||||
rm -rf $(DEPLOY_TMP)
|
||||
@# Sul server il prune toglie l'immagine vecchia; qui restano solo latest e quella appena pubblicata.
|
||||
@docker image ls $(IMAGE) --format '{{.Tag}}' | grep -v -x -e latest -e $$(git rev-parse --short HEAD) | \
|
||||
xargs -r -I{} docker image rm -f $(IMAGE):{} >/dev/null
|
||||
@echo "→ $(DEPLOY_URL) ($$(git log -1 --format='%h %s'))"
|
||||
|
||||
deploy-vps: ## Spedisce al VPS (VPS_HOST, VPS_DIR in deploy.local.mk) l'immagine dell'ultimo commit già provata da make deploy
|
||||
@test -n "$(VPS_HOST)" -a -n "$(VPS_DIR)" || { echo "mancano VPS_HOST e VPS_DIR: scrivili in deploy.local.mk"; exit 2; }
|
||||
@docker image inspect $(IMAGE):$$(git rev-parse --short HEAD) >/dev/null 2>&1 || \
|
||||
{ echo "manca l'immagine dell'ultimo commit ($$(git rev-parse --short HEAD)): prima make deploy"; exit 1; }
|
||||
ssh $(VPS_HOST) 'mkdir -p $(VPS_DIR)'
|
||||
git show HEAD:docker-compose.homeserver.yml | ssh $(VPS_HOST) 'cat > $(VPS_DIR)/docker-compose.yml'
|
||||
docker save $(IMAGE):$$(git rev-parse --short HEAD) $(IMAGE):latest | gzip | \
|
||||
ssh $(VPS_HOST) 'gunzip | docker load -q && cd $(VPS_DIR) && docker compose up -d && docker image prune -f >/dev/null'
|
||||
@ssh $(VPS_HOST) "docker exec $(IMAGE) grep -o \"VERSION = '[^']*'\" /usr/share/nginx/html/src/version.js" | sed 's/^/→ $(VPS_HOST): /'
|
||||
|
||||
deploy-logs: ## Log del container sul server di deploy
|
||||
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
||||
ssh $(DEPLOY_HOST) 'cd $(DEPLOY_DIR) && docker compose logs -f --tail 50'
|
||||
|
||||
@@ -1,68 +1,66 @@
|
||||
# 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.
|
||||
Un'avventura grafica punta-e-clicca, nello spirito delle avventure anni '90, ambientata a **San Piero a Sieve**
|
||||
(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.*
|
||||
|
||||
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.
|
||||
Si gioca online su **https://50037.manzolo.it** (50037 è il CAP di San Piero), nel browser, anche dal telefono.
|
||||
È gratuito e non commerciale.
|
||||
|
||||
## Generare sfondi dalle fotografie
|
||||
## Cosa c'è
|
||||
|
||||
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`.
|
||||
- **Il primo capitolo**, dal pomeriggio alla sera: 38 scene, i dialoghi a scelte, l'inventario, la mappa del
|
||||
paese, il taccuino, il salvataggio automatico (e su file, per portarlo su un altro dispositivo).
|
||||
- **Le voci** di tutti i personaggi, in toscano, e le **musiche**.
|
||||
- **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
|
||||
«Come si gioca».
|
||||
- **Il paese vero**: gli sfondi sono disegnati dalle fotografie di San Piero; i personaggi, con il loro
|
||||
consenso, da persone vere.
|
||||
|
||||
## 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
|
||||
Niente da installare e niente da compilare: HTML, CSS e moduli JavaScript ES.
|
||||
|
||||
```zsh
|
||||
make up # http://localhost:8080 (DOCKER_PORT=… per cambiarla)
|
||||
make down
|
||||
python3 -m http.server 8000 # poi http://localhost:8000
|
||||
```
|
||||
|
||||
## 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
|
||||
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).
|
||||
## Come è fatto
|
||||
|
||||
## 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
|
||||
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
|
||||
make verify # sintassi, test, prova nel browser: quello che gira prima di ogni versione
|
||||
make voci # le voci delle battute nuove (XTTS-v2 su GPU)
|
||||
make bump # nuova versione: verifica, commit e tag
|
||||
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,38 @@
|
||||
{
|
||||
"image": "andrea-basket.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"hold": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 51,
|
||||
"h": 120,
|
||||
"ax": 19.1,
|
||||
"ay": 120
|
||||
},
|
||||
"load": {
|
||||
"x": 53,
|
||||
"y": 0,
|
||||
"w": 62,
|
||||
"h": 106,
|
||||
"ax": 32.9,
|
||||
"ay": 106
|
||||
},
|
||||
"shoot": {
|
||||
"x": 117,
|
||||
"y": 0,
|
||||
"w": 69,
|
||||
"h": 124,
|
||||
"ax": 30.0,
|
||||
"ay": 124
|
||||
},
|
||||
"cheer": {
|
||||
"x": 188,
|
||||
"y": 0,
|
||||
"w": 59,
|
||||
"h": 118,
|
||||
"ax": 26.5,
|
||||
"ay": 118
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"image": "andrea-pesca.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"hold": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 101,
|
||||
"h": 120,
|
||||
"ax": 31.2,
|
||||
"ay": 120
|
||||
},
|
||||
"cast": {
|
||||
"x": 103,
|
||||
"y": 0,
|
||||
"w": 145,
|
||||
"h": 89,
|
||||
"ax": 56.1,
|
||||
"ay": 89
|
||||
},
|
||||
"reel": {
|
||||
"x": 250,
|
||||
"y": 0,
|
||||
"w": 102,
|
||||
"h": 107,
|
||||
"ax": 32.5,
|
||||
"ay": 107
|
||||
},
|
||||
"show": {
|
||||
"x": 354,
|
||||
"y": 0,
|
||||
"w": 129,
|
||||
"h": 113,
|
||||
"ax": 87.9,
|
||||
"ay": 113
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 46 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "arcu.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 120,
|
||||
"ax": 20.9,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 44,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 120,
|
||||
"ax": 20.3,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 88,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 120,
|
||||
"ax": 20.9,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 132,
|
||||
"y": 0,
|
||||
"w": 66,
|
||||
"h": 120,
|
||||
"ax": 24.3,
|
||||
"ay": 120
|
||||
},
|
||||
"laugh": {
|
||||
"x": 200,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 121,
|
||||
"ax": 17.8,
|
||||
"ay": 121
|
||||
},
|
||||
"point": {
|
||||
"x": 248,
|
||||
"y": 0,
|
||||
"w": 65,
|
||||
"h": 121,
|
||||
"ax": 24.9,
|
||||
"ay": 121
|
||||
},
|
||||
"shrug": {
|
||||
"x": 315,
|
||||
"y": 0,
|
||||
"w": 78,
|
||||
"h": 121,
|
||||
"ax": 36.9,
|
||||
"ay": 121
|
||||
},
|
||||
"arms_crossed": {
|
||||
"x": 395,
|
||||
"y": 0,
|
||||
"w": 43,
|
||||
"h": 121,
|
||||
"ax": 19.4,
|
||||
"ay": 121
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 90 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "barondeduke.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 47,
|
||||
"h": 120,
|
||||
"ax": 21.7,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 49,
|
||||
"y": 0,
|
||||
"w": 47,
|
||||
"h": 120,
|
||||
"ax": 21.5,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 98,
|
||||
"y": 0,
|
||||
"w": 48,
|
||||
"h": 120,
|
||||
"ax": 21.8,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 148,
|
||||
"y": 0,
|
||||
"w": 61,
|
||||
"h": 120,
|
||||
"ax": 23.9,
|
||||
"ay": 120
|
||||
},
|
||||
"laugh": {
|
||||
"x": 211,
|
||||
"y": 0,
|
||||
"w": 53,
|
||||
"h": 117,
|
||||
"ax": 26.6,
|
||||
"ay": 117
|
||||
},
|
||||
"cards": {
|
||||
"x": 266,
|
||||
"y": 0,
|
||||
"w": 56,
|
||||
"h": 118,
|
||||
"ax": 24.1,
|
||||
"ay": 118
|
||||
},
|
||||
"shrug": {
|
||||
"x": 324,
|
||||
"y": 0,
|
||||
"w": 73,
|
||||
"h": 117,
|
||||
"ax": 35.7,
|
||||
"ay": 117
|
||||
},
|
||||
"facepalm": {
|
||||
"x": 399,
|
||||
"y": 0,
|
||||
"w": 53,
|
||||
"h": 117,
|
||||
"ax": 27.3,
|
||||
"ay": 117
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "bertovo.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 53,
|
||||
"h": 120,
|
||||
"ax": 27.4,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 55,
|
||||
"y": 0,
|
||||
"w": 52,
|
||||
"h": 121,
|
||||
"ax": 26.1,
|
||||
"ay": 121
|
||||
},
|
||||
"talk": {
|
||||
"x": 109,
|
||||
"y": 0,
|
||||
"w": 79,
|
||||
"h": 121,
|
||||
"ax": 31.3,
|
||||
"ay": 121
|
||||
},
|
||||
"explain": {
|
||||
"x": 190,
|
||||
"y": 0,
|
||||
"w": 58,
|
||||
"h": 121,
|
||||
"ax": 30.2,
|
||||
"ay": 121
|
||||
},
|
||||
"laugh": {
|
||||
"x": 250,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 122,
|
||||
"ax": 28.6,
|
||||
"ay": 122
|
||||
},
|
||||
"chalk": {
|
||||
"x": 306,
|
||||
"y": 0,
|
||||
"w": 55,
|
||||
"h": 121,
|
||||
"ax": 25.0,
|
||||
"ay": 121
|
||||
},
|
||||
"shrug": {
|
||||
"x": 363,
|
||||
"y": 0,
|
||||
"w": 91,
|
||||
"h": 122,
|
||||
"ax": 45.4,
|
||||
"ay": 122
|
||||
},
|
||||
"cheer": {
|
||||
"x": 456,
|
||||
"y": 0,
|
||||
"w": 58,
|
||||
"h": 125,
|
||||
"ax": 31.0,
|
||||
"ay": 125
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 95 KiB |
@@ -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,70 @@
|
||||
{
|
||||
"image": "chiaru.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"explain": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 56,
|
||||
"h": 120,
|
||||
"ax": 31.5,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 58,
|
||||
"y": 0,
|
||||
"w": 64,
|
||||
"h": 119,
|
||||
"ax": 38.5,
|
||||
"ay": 119
|
||||
},
|
||||
"blink": {
|
||||
"x": 124,
|
||||
"y": 0,
|
||||
"w": 44,
|
||||
"h": 120,
|
||||
"ax": 24.2,
|
||||
"ay": 120
|
||||
},
|
||||
"stand": {
|
||||
"x": 170,
|
||||
"y": 0,
|
||||
"w": 44,
|
||||
"h": 120,
|
||||
"ax": 24.2,
|
||||
"ay": 120
|
||||
},
|
||||
"cheer": {
|
||||
"x": 216,
|
||||
"y": 0,
|
||||
"w": 66,
|
||||
"h": 118,
|
||||
"ax": 31.5,
|
||||
"ay": 118
|
||||
},
|
||||
"shrug": {
|
||||
"x": 284,
|
||||
"y": 0,
|
||||
"w": 79,
|
||||
"h": 119,
|
||||
"ax": 42.2,
|
||||
"ay": 119
|
||||
},
|
||||
"watch": {
|
||||
"x": 365,
|
||||
"y": 0,
|
||||
"w": 63,
|
||||
"h": 98,
|
||||
"ax": 30.3,
|
||||
"ay": 98
|
||||
},
|
||||
"laugh": {
|
||||
"x": 430,
|
||||
"y": 0,
|
||||
"w": 52,
|
||||
"h": 120,
|
||||
"ax": 30.3,
|
||||
"ay": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 100 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "fra-peppino.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 50,
|
||||
"h": 120,
|
||||
"ax": 24.0,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 52,
|
||||
"y": 0,
|
||||
"w": 50,
|
||||
"h": 120,
|
||||
"ax": 23.9,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 104,
|
||||
"y": 0,
|
||||
"w": 50,
|
||||
"h": 120,
|
||||
"ax": 23.7,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 156,
|
||||
"y": 0,
|
||||
"w": 61,
|
||||
"h": 121,
|
||||
"ax": 27.6,
|
||||
"ay": 121
|
||||
},
|
||||
"laugh": {
|
||||
"x": 219,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 119,
|
||||
"ax": 24.3,
|
||||
"ay": 119
|
||||
},
|
||||
"bless": {
|
||||
"x": 275,
|
||||
"y": 0,
|
||||
"w": 58,
|
||||
"h": 119,
|
||||
"ax": 27.6,
|
||||
"ay": 119
|
||||
},
|
||||
"shrug": {
|
||||
"x": 335,
|
||||
"y": 0,
|
||||
"w": 91,
|
||||
"h": 119,
|
||||
"ax": 43.3,
|
||||
"ay": 119
|
||||
},
|
||||
"point": {
|
||||
"x": 428,
|
||||
"y": 0,
|
||||
"w": 76,
|
||||
"h": 119,
|
||||
"ax": 31.2,
|
||||
"ay": 119
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 103 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 |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"image": "macchina-tempo.png",
|
||||
"height": 158,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 361,
|
||||
"h": 158,
|
||||
"ax": 180,
|
||||
"ay": 152
|
||||
},
|
||||
"talk": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 361,
|
||||
"h": 158,
|
||||
"ax": 180,
|
||||
"ay": 152
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 91 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "mariano.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 120,
|
||||
"ax": 17.8,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 42,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 120,
|
||||
"ax": 17.9,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 84,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 120,
|
||||
"ax": 17.9,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 126,
|
||||
"y": 0,
|
||||
"w": 60,
|
||||
"h": 120,
|
||||
"ax": 20.9,
|
||||
"ay": 120
|
||||
},
|
||||
"throw": {
|
||||
"x": 188,
|
||||
"y": 0,
|
||||
"w": 80,
|
||||
"h": 102,
|
||||
"ax": 51.5,
|
||||
"ay": 102
|
||||
},
|
||||
"laugh": {
|
||||
"x": 270,
|
||||
"y": 0,
|
||||
"w": 41,
|
||||
"h": 119,
|
||||
"ax": 16.9,
|
||||
"ay": 119
|
||||
},
|
||||
"measure": {
|
||||
"x": 313,
|
||||
"y": 0,
|
||||
"w": 72,
|
||||
"h": 91,
|
||||
"ax": 38.0,
|
||||
"ay": 91
|
||||
},
|
||||
"cheer": {
|
||||
"x": 387,
|
||||
"y": 0,
|
||||
"w": 63,
|
||||
"h": 118,
|
||||
"ax": 27.5,
|
||||
"ay": 118
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 96 KiB |
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"image": "pescatori.png",
|
||||
"height": 110,
|
||||
"frames": {
|
||||
"work": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 170,
|
||||
"h": 110,
|
||||
"ax": 84.0,
|
||||
"ay": 110
|
||||
},
|
||||
"talk": {
|
||||
"x": 172,
|
||||
"y": 0,
|
||||
"w": 166,
|
||||
"h": 112,
|
||||
"ax": 79.2,
|
||||
"ay": 112
|
||||
},
|
||||
"laugh": {
|
||||
"x": 340,
|
||||
"y": 0,
|
||||
"w": 164,
|
||||
"h": 113,
|
||||
"ax": 79.7,
|
||||
"ay": 113
|
||||
},
|
||||
"proud": {
|
||||
"x": 506,
|
||||
"y": 0,
|
||||
"w": 166,
|
||||
"h": 121,
|
||||
"ax": 80.7,
|
||||
"ay": 121
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 157 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "tozzino.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 120,
|
||||
"ax": 20.6,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 42,
|
||||
"y": 0,
|
||||
"w": 41,
|
||||
"h": 120,
|
||||
"ax": 20.5,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 85,
|
||||
"y": 0,
|
||||
"w": 41,
|
||||
"h": 120,
|
||||
"ax": 20.6,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 128,
|
||||
"y": 0,
|
||||
"w": 65,
|
||||
"h": 120,
|
||||
"ax": 24.4,
|
||||
"ay": 120
|
||||
},
|
||||
"laugh": {
|
||||
"x": 195,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 120,
|
||||
"ax": 20.1,
|
||||
"ay": 120
|
||||
},
|
||||
"watch": {
|
||||
"x": 237,
|
||||
"y": 0,
|
||||
"w": 51,
|
||||
"h": 119,
|
||||
"ax": 25.5,
|
||||
"ay": 119
|
||||
},
|
||||
"look_far": {
|
||||
"x": 290,
|
||||
"y": 0,
|
||||
"w": 56,
|
||||
"h": 120,
|
||||
"ax": 27.9,
|
||||
"ay": 120
|
||||
},
|
||||
"bounce": {
|
||||
"x": 348,
|
||||
"y": 0,
|
||||
"w": 67,
|
||||
"h": 117,
|
||||
"ax": 21.1,
|
||||
"ay": 117
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 90 KiB |
@@ -5,65 +5,65 @@
|
||||
"sit": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 76,
|
||||
"w": 77,
|
||||
"h": 96,
|
||||
"ax": 31.4,
|
||||
"ax": 32.9,
|
||||
"ay": 96
|
||||
},
|
||||
"doze": {
|
||||
"x": 78,
|
||||
"x": 79,
|
||||
"y": 0,
|
||||
"w": 76,
|
||||
"w": 77,
|
||||
"h": 96,
|
||||
"ax": 31.5,
|
||||
"ax": 33.0,
|
||||
"ay": 96
|
||||
},
|
||||
"talk": {
|
||||
"x": 156,
|
||||
"x": 158,
|
||||
"y": 0,
|
||||
"w": 67,
|
||||
"w": 68,
|
||||
"h": 96,
|
||||
"ax": 25.1,
|
||||
"ax": 26.3,
|
||||
"ay": 96
|
||||
},
|
||||
"explain": {
|
||||
"x": 225,
|
||||
"x": 228,
|
||||
"y": 0,
|
||||
"w": 62,
|
||||
"w": 68,
|
||||
"h": 96,
|
||||
"ax": 27.4,
|
||||
"ax": 29.9,
|
||||
"ay": 96
|
||||
},
|
||||
"point": {
|
||||
"x": 289,
|
||||
"x": 298,
|
||||
"y": 0,
|
||||
"w": 74,
|
||||
"w": 78,
|
||||
"h": 97,
|
||||
"ax": 31.5,
|
||||
"ax": 33.3,
|
||||
"ay": 97
|
||||
},
|
||||
"laugh": {
|
||||
"x": 365,
|
||||
"x": 378,
|
||||
"y": 0,
|
||||
"w": 70,
|
||||
"w": 71,
|
||||
"h": 97,
|
||||
"ax": 23.2,
|
||||
"ax": 22.8,
|
||||
"ay": 97
|
||||
},
|
||||
"cat": {
|
||||
"x": 437,
|
||||
"x": 451,
|
||||
"y": 0,
|
||||
"w": 67,
|
||||
"h": 95,
|
||||
"ax": 24.1,
|
||||
"ay": 95
|
||||
"w": 68,
|
||||
"h": 96,
|
||||
"ax": 26.1,
|
||||
"ay": 96
|
||||
},
|
||||
"shrug": {
|
||||
"x": 506,
|
||||
"x": 521,
|
||||
"y": 0,
|
||||
"w": 81,
|
||||
"w": 83,
|
||||
"h": 97,
|
||||
"ax": 38.9,
|
||||
"ax": 40.2,
|
||||
"ay": 97
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 276 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 526 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 388 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 1006 B |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 324 KiB |
|
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: 143 KiB |
|
After Width: | Height: | Size: 399 KiB |
|
After Width: | Height: | Size: 271 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 5.1 KiB |