Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
428fb4bbec | ||
|
|
14af51668f | ||
|
|
3bae622c2b | ||
|
|
a8b7d599c2 | ||
|
|
26da5030a6 | ||
|
|
a9f8f88010 | ||
|
|
f3d3fa1b00 | ||
|
|
f7aa92acc6 | ||
|
|
7045aa9fcc | ||
|
|
efff8623d8 | ||
|
|
6fdbef1dd7 | ||
|
|
a926ad6423 | ||
|
|
8319f58f1e | ||
|
|
21cfe8bb89 | ||
|
|
b5a38531c4 | ||
|
|
666e274140 | ||
|
|
4015beb4f2 | ||
|
|
4afac814ee | ||
|
|
37bfe4e15e | ||
|
|
c701edd977 | ||
|
|
a455e3f12f | ||
|
|
be099aa810 | ||
|
|
24e9b8c055 | ||
|
|
cfe7cb7fd6 | ||
|
|
9499c7792b | ||
|
|
3a9db6d109 | ||
|
|
797eb80980 | ||
|
|
00e9f7c4d7 | ||
|
|
77a8777dcd | ||
|
|
b660bbeb96 | ||
|
|
bbce40b014 | ||
|
|
0ec45c8745 | ||
|
|
dfa70a9620 | ||
|
|
3079c6ea8a | ||
|
|
4d4aa8aeea | ||
|
|
721b6de930 | ||
|
|
7d419be27a | ||
|
|
07b6a381c1 | ||
|
|
45b8c3d98e | ||
|
|
0a8b0310d3 | ||
|
|
a50847da2b | ||
|
|
1fc446d02a | ||
|
|
7076123fcf | ||
|
|
449c9511e1 | ||
|
|
0ec49c4fe7 | ||
|
|
b41cadd95b | ||
|
|
0bd3e2255f | ||
|
|
dc17a7f963 | ||
|
|
995ad09cca | ||
|
|
b9e9976d34 | ||
|
|
d37dafd58c | ||
|
|
4d1611c6eb | ||
|
|
7268585ed9 | ||
|
|
1b929f1333 | ||
|
|
3ba108cf88 | ||
|
|
70f4e641dc | ||
|
|
23aa9c4788 | ||
|
|
04f9a5cb12 | ||
|
|
6b833341c5 | ||
|
|
4fe6bf4649 | ||
|
|
b10f031133 | ||
|
|
4d2278a8f8 | ||
|
|
5a38e0eafe | ||
|
|
4f2ee45abf | ||
|
|
09b031dc2e | ||
|
|
616d514fc5 | ||
|
|
b07a1e4941 | ||
|
|
f57a91ca74 | ||
|
|
f7ca286066 | ||
|
|
5b64292ec9 | ||
|
|
b9bd50c8c3 | ||
|
|
c5953f04c0 | ||
|
|
1ea78161d1 | ||
|
|
5c0f4856bd | ||
|
|
d4b472119d | ||
|
|
aba2e7a0aa | ||
|
|
94902edc57 | ||
|
|
721df30937 | ||
|
|
40d5780255 | ||
|
|
9f2b045ab0 | ||
|
|
187b4c48cb | ||
|
|
c132e94ed8 | ||
|
|
9cd8027256 | ||
|
|
9f0f60d186 | ||
|
|
5135689293 | ||
|
|
8693bff0c7 | ||
|
|
c6812db291 | ||
|
|
670626afa5 | ||
|
|
9bf41d01af | ||
|
|
16252fb04a | ||
|
|
99d4dede80 | ||
|
|
36eda83fe4 | ||
|
|
58174e68d2 | ||
|
|
ff770af3b5 | ||
|
|
41e5fe2f6b | ||
|
|
9d823375aa | ||
|
|
00f9f15370 | ||
|
|
9fe6e8d0ff | ||
|
|
0f8081d8f0 | ||
|
|
500885ffe0 | ||
|
|
259be2c8b0 | ||
|
|
1706592b81 | ||
|
|
6758e6287e | ||
|
|
a699115a03 | ||
|
|
bb8e6a8885 | ||
|
|
81a1dd1bc3 | ||
|
|
0f1740a7ad | ||
|
|
3d61fc3954 | ||
|
|
6226de3795 | ||
|
|
17824963aa | ||
|
|
75cbe8250f | ||
|
|
6b17288962 | ||
|
|
262c774718 | ||
|
|
4a2c88f0e3 | ||
|
|
c395b4e890 | ||
|
|
818af5b36f | ||
|
|
a080c0ea56 | ||
|
|
fbeef76f01 | ||
|
|
45d310b9b4 | ||
|
|
481e4a9514 | ||
|
|
fde68603cb | ||
|
|
686fee043e | ||
|
|
4b709ffd80 | ||
|
|
733680301c | ||
|
|
0ba8cfc800 | ||
|
|
84ad19a47e | ||
|
|
058acd6325 | ||
|
|
497209fc9a | ||
|
|
2289480812 | ||
|
|
de418c0da8 | ||
|
|
713e328138 | ||
|
|
6a5a80d7af | ||
|
|
88f0439f79 | ||
|
|
c244424af9 | ||
|
|
c26d888263 | ||
|
|
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 | ||
|
|
fab64bb718 | ||
|
|
877b29a6e3 | ||
|
|
acc437a33c |
@@ -0,0 +1,68 @@
|
|||||||
|
# Le Gitea Actions del gioco: girano sul runner del PC di Andrea (make runner; label ubuntu-latest = node:22-bookworm).
|
||||||
|
# A ogni push su main e a ogni tag i test unitari; su un tag vX.Y.Z (o a mano, «Run workflow») anche le venti prove nel
|
||||||
|
# browser, una per job nell'immagine di Playwright, sulla scheda video del PC; se passa tutto, la release.
|
||||||
|
# Il controllo dei file pubblicabili non sta qui (a pipeline partita il push è già pubblico): è l'hook pre-push.
|
||||||
|
name: test
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
tags: ['v*']
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Test unitari
|
||||||
|
run: node --version && node --test tests/*.test.mjs
|
||||||
|
|
||||||
|
# Le prove nel browser, una per job: l'elenco è SUITES di scripts/verify.mjs (verify.test.mjs pretende che coincidano),
|
||||||
|
# l'immagine ha la stessa versione di Playwright di package-lock.json (idem).
|
||||||
|
browser:
|
||||||
|
needs: test
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: mcr.microsoft.com/playwright:v1.64.1-noble
|
||||||
|
# La scheda video del PC (runtime NVIDIA di Docker): Chromium disegna lì, tests/chromium.mjs la trova da solo.
|
||||||
|
options: --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
prova: [principale, minigiochi, telefoni, ambient, veicoli, ingorgo, smarronata, briscola, tressette, scopa, biliardo, flipper, micro, cerbottana, condor, campana, bruciate, gara, telefono, risveglio, peso]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Playwright
|
||||||
|
run: npm ci --no-audit --no-fund
|
||||||
|
- name: Prova ${{ matrix.prova }}
|
||||||
|
run: node scripts/verify.mjs ${{ matrix.prova }}
|
||||||
|
|
||||||
|
release:
|
||||||
|
needs: [test, browser]
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Release del tag
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
TAG: ${{ github.ref_name }}
|
||||||
|
API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }}
|
||||||
|
run: |
|
||||||
|
prev=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || true)
|
||||||
|
{
|
||||||
|
echo "Si gioca su https://50037.manzolo.it; qui sotto lo zip di questa versione."
|
||||||
|
echo
|
||||||
|
echo "Cosa cambia${prev:+ da $prev}:"
|
||||||
|
echo
|
||||||
|
git log --no-merges --format='- %s' ${prev:+$prev..}"$TAG" | grep -v -e '^- Versione [0-9]' | cut -c1-400
|
||||||
|
} > note.md
|
||||||
|
node -e 'const fs=require("fs");process.stdout.write(JSON.stringify({tag_name:process.env.TAG,name:"Versione "+process.env.TAG.slice(1),body:fs.readFileSync("note.md","utf8")}))' > release.json
|
||||||
|
code=$(curl -s -o risposta.json -w '%{http_code}' -X POST -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' --data @release.json "$API/releases")
|
||||||
|
cat risposta.json | head -c 400; echo
|
||||||
|
[ "$code" = 201 ] || [ "$code" = 409 ]
|
||||||
@@ -7,3 +7,4 @@ assets/generated/
|
|||||||
.venv/
|
.venv/
|
||||||
.env
|
.env
|
||||||
deploy.local.mk
|
deploy.local.mk
|
||||||
|
.verify-ok.json
|
||||||
|
|||||||
@@ -16,9 +16,19 @@ i suoi ricordi: non inventare persone, luoghi o fatti del paese al posto suoi; p
|
|||||||
(`tools/slice_sprites.py`, `scripts/build-site.sh`, `scripts/bump.sh`, `scripts/check-public.sh`, action di Pages).
|
(`tools/slice_sprites.py`, `scripts/build-site.sh`, `scripts/bump.sh`, `scripts/check-public.sh`, action di Pages).
|
||||||
- Nessun build step: ES modules statici, server locale con `python3 -m http.server`.
|
- Nessun build step: ES modules statici, server locale con `python3 -m http.server`.
|
||||||
- Ogni funzionalità con il suo test; un test automatico percorre tutta la soluzione dell'avventura.
|
- Ogni funzionalità con il suo test; un test automatico percorre tutta la soluzione dell'avventura.
|
||||||
- Verifica visiva nel browser con Playwright e swiftshader prima di dichiarare finito qualcosa di grafico.
|
- Le prove nel browser sono a sezioni (`scripts/verify.mjs`, dal 2026-11-01): `make verify` rifà solo quelle i cui ingressi
|
||||||
|
sono cambiati dall'ultimo verde (la briscola se cambia la briscola, la partita intera se cambiano storia, motore, stile
|
||||||
|
o risorse). Un `chromium.launch` nuovo nelle prove usa `args: ARGS` di `tests/chromium.mjs`.
|
||||||
|
Gli effetti pesanti li scopre la prova `peso` (`tests/peso.browser.mjs`): sempre con swiftshader, misura arretrato grafico e
|
||||||
|
fotogrammi di ogni scena e primo piano; si rifà quando cambia un disegno (`*-render.js`, `render.js`, effetti). Una prova nuova in `tests/*.browser.mjs` va aggiunta a `SUITES` (il test `verify.test.mjs` lo pretende).
|
||||||
|
- Verifica visiva nel browser con Playwright prima di dichiarare finito qualcosa di grafico. Chromium disegna sulla scheda
|
||||||
|
video del PC se c'è, altrimenti con swiftshader (`tests/chromium.mjs`, dal 2026-11-01: giro intero ~4 min invece di ~16).
|
||||||
- Pubblicare (tag/bump/push) solo quando Andrea lo chiede.
|
- Pubblicare (tag/bump/push) solo quando Andrea lo chiede.
|
||||||
- Persone vere nel gioco solo con consenso; niente nomi, personaggi o musiche di giochi esistenti.
|
- Persone vere nel gioco solo con consenso; niente nomi, personaggi o musiche di giochi esistenti.
|
||||||
- Prompt delle immagini in `prompts/` e fogli grezzi in `assets/raw/`: esclusi da git.
|
- Prompt delle immagini in `prompts/` e fogli grezzi in `assets/raw/`: esclusi da git.
|
||||||
- Sfondi nuovi: li genera **Codex** con il suo strumento immagini integrato, gratis e senza chiave API
|
- Sfondi nuovi: li genera **Codex** con il suo strumento immagini integrato, gratis e senza chiave API
|
||||||
(`codex exec`, ricetta in `docs/GENERAZIONE_SFONDI.md`, «Generare con Codex»). Si lancia da qui, senza chiedere la chiave ad Andrea.
|
(`codex exec`, ricetta in `docs/GENERAZIONE_SFONDI.md`, «Generare con Codex»). Si lancia da qui, senza chiedere la chiave ad Andrea.
|
||||||
|
- **Pubblicare (dal 2026-11-01)**: origin è https://git.manzolo.it/manzolo/leggenda-del-regolo, pubblico: prima `make check-public`, poi `git push origin main --tags`, solo se Andrea lo chiede.
|
||||||
|
`make deploy` costruisce l'immagine dal tag della versione, la spinge su `git.manzolo.it/manzolo/leggenda-regolo:vX.Y.Z` (e `:latest`); sul VPS il compose fissa quel tag e fa `docker compose pull && up -d`.
|
||||||
|
Per tornare indietro: sul VPS (`Workspaces/docker/leggenda-regolo/docker-compose.yml`) si rimette il tag precedente e si rifà pull e up.
|
||||||
|
Hook pre-push (`make hooks`, una volta per clone) lancia check-public; le Gitea Actions (`.gitea/workflows/test.yml`: test unitari a ogni push; sui tag, o a mano, anche le venti prove nel browser, una per job, poi la release) girano sul runner del PC, che si crea o riavvia con `make runner`.
|
||||||
|
|||||||
@@ -12,11 +12,21 @@ COPY assets/fonts /usr/share/nginx/html/assets/fonts
|
|||||||
COPY assets/voices /usr/share/nginx/html/assets/voices
|
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/muro /usr/share/nginx/html/assets/muro
|
||||||
|
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.
|
||||||
|
# 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 \
|
RUN cd /usr/share/nginx/html \
|
||||||
&& V=$(sed -n "s/^export const VERSION = '\([0-9.]*\)';$/\1/p" src/version.js) \
|
&& V=$(sed -n "s/^export const VERSION = '\([0-9.]*\)';$/\1/p" src/version.js) \
|
||||||
&& test -n "$V" \
|
&& 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#url\((assets/[^)]*)\)#url(\1?v=$V)#g" style.css \
|
||||||
&& sed -i -E "s#src=\"(assets/[^\"]*)\"#src=\"\1?v=$V\"#g" index.html \
|
&& 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
|
&& 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 ?=
|
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 verify-browser verify-plan check-public hooks 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 runner clean distclean
|
||||||
|
|
||||||
## ------------------------------------------------------------ sviluppo
|
## ------------------------------------------------------------ sviluppo
|
||||||
|
|
||||||
@@ -47,10 +47,25 @@ test: ## Test della logica, della storia, della soluzione completa e del generat
|
|||||||
$(NODE) --test tests/*.test.mjs
|
$(NODE) --test tests/*.test.mjs
|
||||||
$(PYTHON) -m unittest discover -s tests -p "test_*.py" -q
|
$(PYTHON) -m unittest discover -s tests -p "test_*.py" -q
|
||||||
|
|
||||||
browser: ## Partita completa nel browser con Playwright
|
browser: ## Partita completa nel browser con Playwright (tre parti in processi paralleli, ~4,5 min)
|
||||||
$(NODE) tests/browser.mjs
|
$(NODE) tests/browser.mjs
|
||||||
|
|
||||||
verify: test browser ## Tutti i controlli
|
verify: test check-public verify-browser ## Tutti i controlli: test unitari, file pubblicabili, prove nel browser cambiate (ALL=1: tutte)
|
||||||
|
|
||||||
|
# Le prove nel browser a sezioni: si rifanno solo quelle i cui ingressi sono cambiati dall'ultimo verde (.verify-ok.json,
|
||||||
|
# fuori da git); make verify-browser ALL=1 le rifà tutte, make verify-plan dice solo cosa rifarebbe; JOBS=2 in parallelo (con 4 vanno in timeout).
|
||||||
|
verify-browser: ## Le prove nel browser da rifare (ALL=1 tutte; PROVE="briscola flipper" solo quelle)
|
||||||
|
$(NODE) scripts/verify.mjs $(if $(ALL),--all,) $(PROVE)
|
||||||
|
|
||||||
|
verify-plan: ## Dice quali prove nel browser rifarebbe make verify, e perché
|
||||||
|
$(NODE) scripts/verify.mjs --plan
|
||||||
|
|
||||||
|
check-public: ## Prima di pubblicare: niente prompt, fogli grezzi, segreti o nomi della rete di casa (tutta la storia)
|
||||||
|
bash scripts/check-public.sh
|
||||||
|
|
||||||
|
hooks: ## Attiva gli hook del repo (pre-push: check-public prima di ogni push)
|
||||||
|
git config core.hooksPath scripts/git-hooks
|
||||||
|
@echo "hook attivi da scripts/git-hooks: $$(ls scripts/git-hooks | tr '\n' ' ')"
|
||||||
|
|
||||||
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)
|
||||||
@@ -84,11 +99,11 @@ background: ## Porta uno sfondo a 640x360 nel gioco (SRC=..., DST=..., CROP=x,y,
|
|||||||
@test -n "$(SRC)" || { echo "uso: make background SRC=assets/generated/nome.png [CROP=x,y,w,h]"; exit 2; }
|
@test -n "$(SRC)" || { echo "uso: make background SRC=assets/generated/nome.png [CROP=x,y,w,h]"; exit 2; }
|
||||||
$(PYTHON) tools/prepare_background.py $(SRC) $(DST) $(if $(CROP),--crop $(CROP)) --colors $(COLORS)
|
$(PYTHON) tools/prepare_background.py $(SRC) $(DST) $(if $(CROP),--crop $(CROP)) --colors $(COLORS)
|
||||||
|
|
||||||
character: ## Ritaglia un foglio sprite 4x2 e prepara il personaggio (NAME=andrea, SHEET=..., HEIGHT=120, FRAMES=..., REF=stand)
|
character: ## Ritaglia un foglio sprite 4x2 e prepara il personaggio (NAME=andrea, SHEET=..., HEIGHT=120, FRAMES=..., REF=stand, FIX=wave=1.3)
|
||||||
$(PYTHON) tools/slice_sprites.py --sheet $(SHEET) --out /tmp/regolo-$(NAME) --cols 4 --rows 2 \
|
$(PYTHON) tools/slice_sprites.py --sheet $(SHEET) --out /tmp/regolo-$(NAME) --cols 4 --rows 2 \
|
||||||
--despill --names $(FRAMES) --prefix $(NAME)_
|
--despill --names $(FRAMES) --prefix $(NAME)_
|
||||||
$(PYTHON) tools/prepare_character.py /tmp/regolo-$(NAME) $(NAME) assets/characters --height $(HEIGHT) \
|
$(PYTHON) tools/prepare_character.py /tmp/regolo-$(NAME) $(NAME) assets/characters --height $(HEIGHT) \
|
||||||
--frames $(FRAMES) --ref $(REF)
|
--frames $(FRAMES) --ref $(REF) $(if $(FIX),--fix $(FIX))
|
||||||
|
|
||||||
## ------------------------------------------------------------ docker
|
## ------------------------------------------------------------ docker
|
||||||
|
|
||||||
@@ -118,32 +133,53 @@ image-size: ## Dimensione dell'immagine
|
|||||||
|
|
||||||
## ------------------------------------------------------------ deploy su un server proprio
|
## ------------------------------------------------------------ deploy su un server proprio
|
||||||
|
|
||||||
# Host e indirizzo stanno in deploy.local.mk, fuori da git, per esempio:
|
# Host e cartella stanno in deploy.local.mk, fuori da git, per esempio:
|
||||||
# DEPLOY_HOST = root@mio-server
|
# DEPLOY_HOST = root@mio-server
|
||||||
# DEPLOY_URL = https://gioco.esempio
|
# DEPLOY_URL = https://gioco.esempio
|
||||||
|
# DEPLOY_DIR = docker/leggenda-regolo (la cartella del compose sul server)
|
||||||
|
# DEPLOY_IMAGE = registry.esempio/utente/leggenda-regolo
|
||||||
-include deploy.local.mk
|
-include deploy.local.mk
|
||||||
DEPLOY_DIR ?= /root/leggenda-regolo
|
DEPLOY_DIR ?= /root/leggenda-regolo
|
||||||
DEPLOY_TMP := $(shell mktemp -d -u /tmp/regolo-deploy.XXXXXX)
|
DEPLOY_IMAGE ?= git.manzolo.it/manzolo/leggenda-regolo
|
||||||
|
DEPLOY_TMP := $(shell mktemp -d -u /tmp/regolo-deploy.XXXXXX)
|
||||||
|
# La versione dell'ultimo commit (non della cartella di lavoro): il tag git, dell'immagine e del compose.
|
||||||
|
DEPLOY_VER := v$(shell git show HEAD:src/version.js 2>/dev/null | sed -n "s/.*VERSION = '\([^']*\)'.*/\1/p")
|
||||||
|
|
||||||
# Si pubblica l'ultimo commit (git archive HEAD), mai la cartella di lavoro: un'altra sessione può avere modifiche a
|
# Si pubblica il tag della versione dichiarata dall'ultimo commit (git archive vX.Y.Z, quello di make bump), mai la
|
||||||
# metà. Test su quella copia, immagine costruita e provata qui, poi spedita già pronta (docker save | docker load):
|
# cartella di lavoro: un'altra sessione può avere modifiche a metà, e i commit dopo il tag aspettano la versione dopo.
|
||||||
# sul server non si compila niente.
|
# Test su quella copia, immagine costruita e provata qui, spinta sul registry di Gitea come :vX.Y.Z e :latest; il
|
||||||
|
# VPS la scarica con il tag scritto nel suo compose (preso da HEAD, docker-compose.deploy.yml).
|
||||||
SMOKE_PORT ?= 18737
|
SMOKE_PORT ?= 18737
|
||||||
deploy: ## Pubblica l'ultimo commit: test, immagine costruita e provata qui, spedita al server e riavviata
|
deploy: ## Pubblica la versione dell'ultimo commit: test, immagine provata qui, push sul registry, pull e riavvio sul server
|
||||||
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
||||||
mkdir -p $(DEPLOY_TMP) && git archive HEAD | tar -x -C $(DEPLOY_TMP)
|
@git rev-parse -q --verify 'refs/tags/$(DEPLOY_VER)' >/dev/null || { echo "manca il tag $(DEPLOY_VER): prima make bump"; exit 2; }
|
||||||
|
mkdir -p $(DEPLOY_TMP) && git archive $(DEPLOY_VER) | tar -x -C $(DEPLOY_TMP)
|
||||||
cd $(DEPLOY_TMP) && $(NODE) --test tests/*.test.mjs
|
cd $(DEPLOY_TMP) && $(NODE) --test tests/*.test.mjs
|
||||||
docker build -q -t $(IMAGE):latest -t $(IMAGE):$$(git rev-parse --short HEAD) $(DEPLOY_TMP)
|
docker build -q -t $(DEPLOY_IMAGE):$(DEPLOY_VER) -t $(DEPLOY_IMAGE):latest $(DEPLOY_TMP)
|
||||||
@docker rm -f $(IMAGE)-prova >/dev/null 2>&1 || true
|
@docker rm -f $(IMAGE)-prova >/dev/null 2>&1 || true
|
||||||
docker run -d --rm --name $(IMAGE)-prova -p 127.0.0.1:$(SMOKE_PORT):80 $(IMAGE):latest >/dev/null
|
docker run -d --rm --name $(IMAGE)-prova -p 127.0.0.1:$(SMOKE_PORT):80 $(DEPLOY_IMAGE):$(DEPLOY_VER) >/dev/null
|
||||||
@ok=1; sleep 1; for u in / /src/main.js /assets/voices/index.json /assets/audio/cartello.mp3; do \
|
@ok=1; sleep 1; for u in / /src/main.js /assets/voices/index.json /assets/audio/cartello.mp3; do \
|
||||||
c=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:$(SMOKE_PORT)$$u); echo " prova $$u → $$c"; [ "$$c" = 200 ] || ok=0; done; \
|
c=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:$(SMOKE_PORT)$$u); echo " prova $$u → $$c"; [ "$$c" = 200 ] || ok=0; done; \
|
||||||
docker rm -f $(IMAGE)-prova >/dev/null; [ $$ok = 1 ] || { echo "l'immagine non risponde come deve: non la spedisco"; exit 1; }
|
docker rm -f $(IMAGE)-prova >/dev/null; [ $$ok = 1 ] || { echo "l'immagine non risponde come deve: non la spedisco"; exit 1; }
|
||||||
ssh $(DEPLOY_HOST) 'mkdir -p $(DEPLOY_DIR)'
|
docker push -q $(DEPLOY_IMAGE):$(DEPLOY_VER)
|
||||||
scp -q $(DEPLOY_TMP)/docker-compose.homeserver.yml $(DEPLOY_HOST):$(DEPLOY_DIR)/docker-compose.yml
|
docker push -q $(DEPLOY_IMAGE):latest
|
||||||
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'
|
git show HEAD:docker-compose.deploy.yml | sed 's|$(DEPLOY_IMAGE):VERSIONE|$(DEPLOY_IMAGE):$(DEPLOY_VER)|' | \
|
||||||
|
ssh $(DEPLOY_HOST) 'mkdir -p $(DEPLOY_DIR) && cat > $(DEPLOY_DIR)/docker-compose.yml'
|
||||||
|
ssh $(DEPLOY_HOST) 'cd $(DEPLOY_DIR) && docker compose pull -q && docker compose up -d && \
|
||||||
|
docker image ls $(DEPLOY_IMAGE) --format "{{.Repository}}:{{.Tag}}" | grep -v -x -e $(DEPLOY_IMAGE):$(DEPLOY_VER) | xargs -r docker image rm >/dev/null; \
|
||||||
|
docker image prune -f >/dev/null'
|
||||||
rm -rf $(DEPLOY_TMP)
|
rm -rf $(DEPLOY_TMP)
|
||||||
@echo "→ $(DEPLOY_URL) ($$(git log -1 --format='%h %s'))"
|
@# Qui restano solo latest e la versione appena pubblicata.
|
||||||
|
@docker image ls $(DEPLOY_IMAGE) --format '{{.Tag}}' | grep -v -x -e latest -e $(DEPLOY_VER) | \
|
||||||
|
xargs -r -I{} docker image rm -f $(DEPLOY_IMAGE):{} >/dev/null
|
||||||
|
@# L'indirizzo pubblico deve servire la versione appena spedita.
|
||||||
|
@v=$$(git show $(DEPLOY_VER):src/version.js | grep -o "VERSION = '[^']*'"); \
|
||||||
|
for i in 1 2 3 4 5; do curl -s $(DEPLOY_URL)/src/version.js | grep -qF "$$v" && break; sleep 2; done; \
|
||||||
|
curl -s $(DEPLOY_URL)/src/version.js | grep -qF "$$v" || { echo "$(DEPLOY_URL) non serve $$v"; exit 1; }
|
||||||
|
@echo "→ $(DEPLOY_URL) ($(DEPLOY_IMAGE):$(DEPLOY_VER), $$(git log -1 --format='%h %s' $(DEPLOY_VER)))"
|
||||||
|
|
||||||
|
runner: ## Crea (se manca) e avvia sul PC il runner delle Gitea Actions (tools/gitea-runner, scripts/runner.sh)
|
||||||
|
bash scripts/runner.sh
|
||||||
|
|
||||||
deploy-logs: ## Log del container sul server di deploy
|
deploy-logs: ## Log del container sul server di deploy
|
||||||
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
||||||
|
|||||||
@@ -1,68 +1,68 @@
|
|||||||
# 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
|
Il gioco si scarica da **https://git.manzolo.it/manzolo/leggenda-del-regolo**: nella pagina dei
|
||||||
python3 -m http.server 8000 # poi http://localhost:8000
|
[tag](https://git.manzolo.it/manzolo/leggenda-del-regolo/tags) c'è lo zip di ogni versione (l'ultima è quella online).
|
||||||
```
|
Niente da installare e niente da compilare: HTML, CSS e moduli JavaScript ES. Dentro la cartella scompattata:
|
||||||
|
|
||||||
Clic = azione più sensata (parla, guarda, vai); clic destro o pressione lunga = guarda; un verbo scelto vale per il
|
|
||||||
clic successivo. Spazio salta la battuta, i numeri scelgono nel dialogo, Esc annulla il verbo.
|
|
||||||
|
|
||||||
## In Docker
|
|
||||||
|
|
||||||
```zsh
|
```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, in tre processi paralleli; `--parte=` per una sola);
|
||||||
|
`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 # test, file pubblicabili e le prove nel browser cambiate dall'ultimo verde (ALL=1: tutte)
|
||||||
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
|
||||||
|
make deploy # pubblica la versione: immagine sul registry di Gitea, il server la scarica
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 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,70 @@
|
|||||||
|
{
|
||||||
|
"image": "alpino_vino.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 69,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.2,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 71,
|
||||||
|
"y": 0,
|
||||||
|
"w": 69,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.0,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 142,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 29.4,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 216,
|
||||||
|
"y": 0,
|
||||||
|
"w": 71,
|
||||||
|
"h": 116,
|
||||||
|
"ax": 29.3,
|
||||||
|
"ay": 116
|
||||||
|
},
|
||||||
|
"pour": {
|
||||||
|
"x": 289,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 122,
|
||||||
|
"ax": 30.5,
|
||||||
|
"ay": 122
|
||||||
|
},
|
||||||
|
"pour2": {
|
||||||
|
"x": 363,
|
||||||
|
"y": 0,
|
||||||
|
"w": 73,
|
||||||
|
"h": 122,
|
||||||
|
"ax": 30.3,
|
||||||
|
"ay": 122
|
||||||
|
},
|
||||||
|
"give": {
|
||||||
|
"x": 438,
|
||||||
|
"y": 0,
|
||||||
|
"w": 66,
|
||||||
|
"h": 118,
|
||||||
|
"ax": 24.5,
|
||||||
|
"ay": 118
|
||||||
|
},
|
||||||
|
"cheers": {
|
||||||
|
"x": 506,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 33.4,
|
||||||
|
"ay": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 125 KiB |
@@ -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,70 @@
|
|||||||
|
{
|
||||||
|
"image": "andrea-birra.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"walk_1": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 68,
|
||||||
|
"h": 114,
|
||||||
|
"ax": 40.2,
|
||||||
|
"ay": 114
|
||||||
|
},
|
||||||
|
"walk_2": {
|
||||||
|
"x": 70,
|
||||||
|
"y": 0,
|
||||||
|
"w": 41,
|
||||||
|
"h": 114,
|
||||||
|
"ax": 20.7,
|
||||||
|
"ay": 114
|
||||||
|
},
|
||||||
|
"walk_3": {
|
||||||
|
"x": 113,
|
||||||
|
"y": 0,
|
||||||
|
"w": 67,
|
||||||
|
"h": 114,
|
||||||
|
"ax": 38.4,
|
||||||
|
"ay": 114
|
||||||
|
},
|
||||||
|
"walk_4": {
|
||||||
|
"x": 182,
|
||||||
|
"y": 0,
|
||||||
|
"w": 46,
|
||||||
|
"h": 114,
|
||||||
|
"ax": 25.3,
|
||||||
|
"ay": 114
|
||||||
|
},
|
||||||
|
"cheer_1": {
|
||||||
|
"x": 230,
|
||||||
|
"y": 0,
|
||||||
|
"w": 51,
|
||||||
|
"h": 133,
|
||||||
|
"ax": 21.1,
|
||||||
|
"ay": 133
|
||||||
|
},
|
||||||
|
"cheer_2": {
|
||||||
|
"x": 283,
|
||||||
|
"y": 0,
|
||||||
|
"w": 55,
|
||||||
|
"h": 130,
|
||||||
|
"ax": 24.5,
|
||||||
|
"ay": 130
|
||||||
|
},
|
||||||
|
"cheer_3": {
|
||||||
|
"x": 340,
|
||||||
|
"y": 0,
|
||||||
|
"w": 62,
|
||||||
|
"h": 130,
|
||||||
|
"ax": 23.8,
|
||||||
|
"ay": 130
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 404,
|
||||||
|
"y": 0,
|
||||||
|
"w": 58,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 21.7,
|
||||||
|
"ay": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 93 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": "baldoria.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 59,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 61,
|
||||||
|
"y": 0,
|
||||||
|
"w": 59,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.4,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 122,
|
||||||
|
"y": 0,
|
||||||
|
"w": 59,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 183,
|
||||||
|
"y": 0,
|
||||||
|
"w": 67,
|
||||||
|
"h": 122,
|
||||||
|
"ax": 29.4,
|
||||||
|
"ay": 122
|
||||||
|
},
|
||||||
|
"wave": {
|
||||||
|
"x": 252,
|
||||||
|
"y": 0,
|
||||||
|
"w": 101,
|
||||||
|
"h": 156,
|
||||||
|
"ax": 48.9,
|
||||||
|
"ay": 156
|
||||||
|
},
|
||||||
|
"wave2": {
|
||||||
|
"x": 355,
|
||||||
|
"y": 0,
|
||||||
|
"w": 127,
|
||||||
|
"h": 156,
|
||||||
|
"ax": 81.8,
|
||||||
|
"ay": 156
|
||||||
|
},
|
||||||
|
"cheer": {
|
||||||
|
"x": 484,
|
||||||
|
"y": 0,
|
||||||
|
"w": 70,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 33.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 556,
|
||||||
|
"y": 0,
|
||||||
|
"w": 78,
|
||||||
|
"h": 113,
|
||||||
|
"ax": 31.1,
|
||||||
|
"ay": 113
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 142 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": "cuochi.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 95,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 41.9,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 97,
|
||||||
|
"y": 0,
|
||||||
|
"w": 95,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 42.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 194,
|
||||||
|
"y": 0,
|
||||||
|
"w": 96,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 44.4,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 292,
|
||||||
|
"y": 0,
|
||||||
|
"w": 95,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 44.5,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"work": {
|
||||||
|
"x": 389,
|
||||||
|
"y": 0,
|
||||||
|
"w": 101,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 46.7,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"work2": {
|
||||||
|
"x": 492,
|
||||||
|
"y": 0,
|
||||||
|
"w": 101,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 45.9,
|
||||||
|
"ay": 119
|
||||||
|
},
|
||||||
|
"give": {
|
||||||
|
"x": 595,
|
||||||
|
"y": 0,
|
||||||
|
"w": 104,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 43.1,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 701,
|
||||||
|
"y": 0,
|
||||||
|
"w": 92,
|
||||||
|
"h": 117,
|
||||||
|
"ax": 43.7,
|
||||||
|
"ay": 117
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 191 KiB |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "fanfara.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 107,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 47.1,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 109,
|
||||||
|
"y": 0,
|
||||||
|
"w": 106,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 47.1,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 217,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 50.3,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 329,
|
||||||
|
"y": 0,
|
||||||
|
"w": 107,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 47.0,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"play": {
|
||||||
|
"x": 438,
|
||||||
|
"y": 0,
|
||||||
|
"w": 112,
|
||||||
|
"h": 113,
|
||||||
|
"ax": 50.3,
|
||||||
|
"ay": 113
|
||||||
|
},
|
||||||
|
"play2": {
|
||||||
|
"x": 552,
|
||||||
|
"y": 0,
|
||||||
|
"w": 114,
|
||||||
|
"h": 118,
|
||||||
|
"ax": 51.8,
|
||||||
|
"ay": 118
|
||||||
|
},
|
||||||
|
"play3": {
|
||||||
|
"x": 668,
|
||||||
|
"y": 0,
|
||||||
|
"w": 111,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 51.6,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"bow": {
|
||||||
|
"x": 781,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 104,
|
||||||
|
"ax": 51.2,
|
||||||
|
"ay": 104
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 222 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,70 @@
|
|||||||
|
{
|
||||||
|
"image": "gente.png",
|
||||||
|
"height": 115,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 126,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 62.9,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 128,
|
||||||
|
"y": 0,
|
||||||
|
"w": 125,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 62.8,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 255,
|
||||||
|
"y": 0,
|
||||||
|
"w": 126,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 62.9,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"talk2": {
|
||||||
|
"x": 383,
|
||||||
|
"y": 0,
|
||||||
|
"w": 126,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 63.9,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"eat": {
|
||||||
|
"x": 511,
|
||||||
|
"y": 0,
|
||||||
|
"w": 128,
|
||||||
|
"h": 117,
|
||||||
|
"ax": 62.9,
|
||||||
|
"ay": 117
|
||||||
|
},
|
||||||
|
"eat2": {
|
||||||
|
"x": 641,
|
||||||
|
"y": 0,
|
||||||
|
"w": 128,
|
||||||
|
"h": 117,
|
||||||
|
"ax": 63.0,
|
||||||
|
"ay": 117
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 771,
|
||||||
|
"y": 0,
|
||||||
|
"w": 127,
|
||||||
|
"h": 117,
|
||||||
|
"ax": 62.0,
|
||||||
|
"ay": 117
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"x": 900,
|
||||||
|
"y": 0,
|
||||||
|
"w": 127,
|
||||||
|
"h": 116,
|
||||||
|
"ax": 62.5,
|
||||||
|
"ay": 116
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 271 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,70 @@
|
|||||||
|
{
|
||||||
|
"image": "liscio.png",
|
||||||
|
"height": 115,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 108,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 54.5,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 110,
|
||||||
|
"y": 0,
|
||||||
|
"w": 108,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 54.3,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 220,
|
||||||
|
"y": 0,
|
||||||
|
"w": 111,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 57.2,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 333,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 115,
|
||||||
|
"ax": 55.6,
|
||||||
|
"ay": 115
|
||||||
|
},
|
||||||
|
"dance1": {
|
||||||
|
"x": 445,
|
||||||
|
"y": 0,
|
||||||
|
"w": 117,
|
||||||
|
"h": 112,
|
||||||
|
"ax": 57.2,
|
||||||
|
"ay": 112
|
||||||
|
},
|
||||||
|
"dance2": {
|
||||||
|
"x": 564,
|
||||||
|
"y": 0,
|
||||||
|
"w": 115,
|
||||||
|
"h": 111,
|
||||||
|
"ax": 57.0,
|
||||||
|
"ay": 111
|
||||||
|
},
|
||||||
|
"dance3": {
|
||||||
|
"x": 681,
|
||||||
|
"y": 0,
|
||||||
|
"w": 115,
|
||||||
|
"h": 112,
|
||||||
|
"ax": 56.5,
|
||||||
|
"ay": 112
|
||||||
|
},
|
||||||
|
"dance4": {
|
||||||
|
"x": 798,
|
||||||
|
"y": 0,
|
||||||
|
"w": 113,
|
||||||
|
"h": 113,
|
||||||
|
"ax": 54.4,
|
||||||
|
"ay": 113
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 230 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": "pierino_parigi.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"explain": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 61,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 29.3,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 63,
|
||||||
|
"y": 0,
|
||||||
|
"w": 69,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 26.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 134,
|
||||||
|
"y": 0,
|
||||||
|
"w": 44,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 25.0,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"stand": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 0,
|
||||||
|
"w": 44,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 24.9,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"cheer": {
|
||||||
|
"x": 226,
|
||||||
|
"y": 0,
|
||||||
|
"w": 66,
|
||||||
|
"h": 128,
|
||||||
|
"ax": 34.6,
|
||||||
|
"ay": 128
|
||||||
|
},
|
||||||
|
"shrug": {
|
||||||
|
"x": 294,
|
||||||
|
"y": 0,
|
||||||
|
"w": 89,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 43.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"x": 385,
|
||||||
|
"y": 0,
|
||||||
|
"w": 50,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 26.2,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 437,
|
||||||
|
"y": 0,
|
||||||
|
"w": 54,
|
||||||
|
"h": 123,
|
||||||
|
"ax": 24.4,
|
||||||
|
"ay": 123
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 105 KiB |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "taglia.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 54,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 27.7,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 56,
|
||||||
|
"y": 0,
|
||||||
|
"w": 54,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 27.7,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 75,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 32.2,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 189,
|
||||||
|
"y": 0,
|
||||||
|
"w": 64,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 33.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 255,
|
||||||
|
"y": 0,
|
||||||
|
"w": 59,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 25.2,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"aim": {
|
||||||
|
"x": 316,
|
||||||
|
"y": 0,
|
||||||
|
"w": 97,
|
||||||
|
"h": 114,
|
||||||
|
"ax": 55.6,
|
||||||
|
"ay": 114
|
||||||
|
},
|
||||||
|
"shrug": {
|
||||||
|
"x": 415,
|
||||||
|
"y": 0,
|
||||||
|
"w": 91,
|
||||||
|
"h": 117,
|
||||||
|
"ax": 44.2,
|
||||||
|
"ay": 117
|
||||||
|
},
|
||||||
|
"throw": {
|
||||||
|
"x": 508,
|
||||||
|
"y": 0,
|
||||||
|
"w": 71,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 30.3,
|
||||||
|
"ay": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 102 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 |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "vannino.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"explain": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 56,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 58,
|
||||||
|
"y": 0,
|
||||||
|
"w": 64,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 25.6,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 124,
|
||||||
|
"y": 0,
|
||||||
|
"w": 45,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 25.0,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"stand": {
|
||||||
|
"x": 171,
|
||||||
|
"y": 0,
|
||||||
|
"w": 46,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 25.3,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"cheer": {
|
||||||
|
"x": 219,
|
||||||
|
"y": 0,
|
||||||
|
"w": 52,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 26.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"shrug": {
|
||||||
|
"x": 273,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 40.7,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"x": 355,
|
||||||
|
"y": 0,
|
||||||
|
"w": 45,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 22.7,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 402,
|
||||||
|
"y": 0,
|
||||||
|
"w": 46,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 22.7,
|
||||||
|
"ay": 121
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 76 KiB |
@@ -5,65 +5,65 @@
|
|||||||
"sit": {
|
"sit": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 76,
|
"w": 77,
|
||||||
"h": 96,
|
"h": 96,
|
||||||
"ax": 31.4,
|
"ax": 32.9,
|
||||||
"ay": 96
|
"ay": 96
|
||||||
},
|
},
|
||||||
"doze": {
|
"doze": {
|
||||||
"x": 78,
|
"x": 79,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 76,
|
"w": 77,
|
||||||
"h": 96,
|
"h": 96,
|
||||||
"ax": 31.5,
|
"ax": 33.0,
|
||||||
"ay": 96
|
"ay": 96
|
||||||
},
|
},
|
||||||
"talk": {
|
"talk": {
|
||||||
"x": 156,
|
"x": 158,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 67,
|
"w": 68,
|
||||||
"h": 96,
|
"h": 96,
|
||||||
"ax": 25.1,
|
"ax": 26.3,
|
||||||
"ay": 96
|
"ay": 96
|
||||||
},
|
},
|
||||||
"explain": {
|
"explain": {
|
||||||
"x": 225,
|
"x": 228,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 62,
|
"w": 68,
|
||||||
"h": 96,
|
"h": 96,
|
||||||
"ax": 27.4,
|
"ax": 29.9,
|
||||||
"ay": 96
|
"ay": 96
|
||||||
},
|
},
|
||||||
"point": {
|
"point": {
|
||||||
"x": 289,
|
"x": 298,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 74,
|
"w": 78,
|
||||||
"h": 97,
|
"h": 97,
|
||||||
"ax": 31.5,
|
"ax": 33.3,
|
||||||
"ay": 97
|
"ay": 97
|
||||||
},
|
},
|
||||||
"laugh": {
|
"laugh": {
|
||||||
"x": 365,
|
"x": 378,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 70,
|
"w": 71,
|
||||||
"h": 97,
|
"h": 97,
|
||||||
"ax": 23.2,
|
"ax": 22.8,
|
||||||
"ay": 97
|
"ay": 97
|
||||||
},
|
},
|
||||||
"cat": {
|
"cat": {
|
||||||
"x": 437,
|
"x": 451,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 67,
|
"w": 68,
|
||||||
"h": 95,
|
"h": 96,
|
||||||
"ax": 24.1,
|
"ax": 26.1,
|
||||||
"ay": 95
|
"ay": 96
|
||||||
},
|
},
|
||||||
"shrug": {
|
"shrug": {
|
||||||
"x": 506,
|
"x": 521,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 81,
|
"w": 83,
|
||||||
"h": 97,
|
"h": 97,
|
||||||
"ax": 38.9,
|
"ax": 40.2,
|
||||||
"ay": 97
|
"ay": 97
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "volontari.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"stand": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 102,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 48.3,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 104,
|
||||||
|
"y": 0,
|
||||||
|
"w": 102,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 48.3,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 208,
|
||||||
|
"y": 0,
|
||||||
|
"w": 101,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 47.4,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"explain": {
|
||||||
|
"x": 311,
|
||||||
|
"y": 0,
|
||||||
|
"w": 100,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 47.4,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"work": {
|
||||||
|
"x": 413,
|
||||||
|
"y": 0,
|
||||||
|
"w": 107,
|
||||||
|
"h": 112,
|
||||||
|
"ax": 49.0,
|
||||||
|
"ay": 112
|
||||||
|
},
|
||||||
|
"work2": {
|
||||||
|
"x": 522,
|
||||||
|
"y": 0,
|
||||||
|
"w": 104,
|
||||||
|
"h": 111,
|
||||||
|
"ax": 47.4,
|
||||||
|
"ay": 111
|
||||||
|
},
|
||||||
|
"give": {
|
||||||
|
"x": 628,
|
||||||
|
"y": 0,
|
||||||
|
"w": 100,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 47.8,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 730,
|
||||||
|
"y": 0,
|
||||||
|
"w": 100,
|
||||||
|
"h": 119,
|
||||||
|
"ax": 48.2,
|
||||||
|
"ay": 119
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 195 KiB |
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"image": "zio_mario.png",
|
||||||
|
"height": 120,
|
||||||
|
"frames": {
|
||||||
|
"explain": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 67,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 33.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"talk": {
|
||||||
|
"x": 69,
|
||||||
|
"y": 0,
|
||||||
|
"w": 79,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 44.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"blink": {
|
||||||
|
"x": 150,
|
||||||
|
"y": 0,
|
||||||
|
"w": 57,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 28.1,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"stand": {
|
||||||
|
"x": 209,
|
||||||
|
"y": 0,
|
||||||
|
"w": 57,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 27.8,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"shrug": {
|
||||||
|
"x": 268,
|
||||||
|
"y": 0,
|
||||||
|
"w": 94,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 48.1,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"point": {
|
||||||
|
"x": 364,
|
||||||
|
"y": 0,
|
||||||
|
"w": 87,
|
||||||
|
"h": 120,
|
||||||
|
"ax": 51.0,
|
||||||
|
"ay": 120
|
||||||
|
},
|
||||||
|
"think": {
|
||||||
|
"x": 453,
|
||||||
|
"y": 0,
|
||||||
|
"w": 58,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 29.2,
|
||||||
|
"ay": 121
|
||||||
|
},
|
||||||
|
"laugh": {
|
||||||
|
"x": 513,
|
||||||
|
"y": 0,
|
||||||
|
"w": 59,
|
||||||
|
"h": 121,
|
||||||
|
"ax": 30.1,
|
||||||
|
"ay": 121
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 276 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 324 KiB |
|
After Width: | Height: | Size: 537 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 526 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 12 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: 26 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 26 KiB |