M8: progression, items, bankarta och sparfil
All checks were successful
release / build-release (push) Successful in 1m46s

- internal/progress: katalog (skills.json 12 noder, items.json 25 items)
  med validering; XP/nivåer (150·n(n+1)/2) och skillpoäng; skillträd med
  krav och kostnad; items per plats med buffar, genvägar (JR Pass, kartor,
  powerbank) och färgton; banresultat och upplåsning (huvudbanor i ordning,
  sidospår efter föräldern); 33 %-regeln som test
- internal/save: versionerad JSON med kunskap, plånbok, debuffar,
  progression och pågående bana + seed; atomisk skrivning; migrering;
  ~/.config/metro-puzzle-jp/save.json resp. %AppData%
- sim: RunOptions får Extra/FogRadius/Landmarks/FreeGates/RevealAll/
  InfiniteBattery; luck påverkar trängselzonen; Fog.RevealAll och extra
  landmärken
- game: bankarta i spelbrädesstil ersätter menyn (⟳ återupptar med sparad
  seed), skillträd (T), garderob (I), butik i kiosken (B), XP/nivå/items/
  upplåsningar på resultatet, spelaren tonas av skins; autospar vid banstart,
  efter banan och vid köp; flaggor -save/-nosave
- level: kind/order/parent/rewards/shop; ny sidobana 002b Kabukicho som
  belönar skinnet Kimono; 001 belönar Salaryman-skinnet; butikssortiment
  på 002/003
- tools/shots: demo-sparfil (build/, aldrig den riktiga), bilder av karta,
  skills, garderob och butik; alla körningar med -nosave
- docs/README/wiki uppdaterade

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 11:29:30 +02:00
parent d466333f01
commit 915c684dc2
46 changed files with 3058 additions and 316 deletions

View File

@@ -61,6 +61,8 @@ metro-puzzle-jp/
│ ├── sim/ rutbaserad rörelse, kollision, kamera, banomgång (Run), sällskap (Party), dimma (Fog) – ren Go
│ ├── lang/ ordbok, tokenisering, kunskap, delvis översättning, engelska-andel, hjälptid – ren Go
│ ├── minigame/ påfyllning, biljettköp, trängsel, tågresa – seedade, ren Go
│ ├── progress/ XP, skillträd, items, banresultat, upplåsning – ren Go
│ ├── save/ sparfil: versionerad JSON, migrering, atomisk skrivning
│ ├── game/ Ebitengine-loop, scener, input, rendering, skriptläge ← får använda Ebitengine
│ ├── archtest/ beroenderegler
│ └── … kommande: lang/, nav/, score/, save/, minigame/, ui/, audio/
@@ -71,7 +73,7 @@ metro-puzzle-jp/
│ ├── sprites/ bilder, tilesets, UI
│ ├── sound/ OGG/WAV
│ ├── text/ sv.json, en.json, jp-dictionary.json, fonts/PixelMplus*.ttf
│ └── data/ levels/, items, skills (JSON)
│ └── data/ levels/, items.json, skills.json
├── doc/ denna dokumentation (doc/img/ = skärmdumpar från tools/shots)
├── .gitea/workflows/ CI: test + release-zippar för linux/windows på brasse-linux01-runnern
├── .vscode/ tasks.json, launch.json
@@ -355,18 +357,40 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
- **Konsekvens för banorna:** uppehållet måste vara minst 5,5 s och tiden
borta minst 7,5 s (valideras), så att faserna får plats.
### M8 – Progression, items och sparfiler
### M8 – Progression, items och sparfiler ✓ (klar 2026-10-24)
- **Mål:** något att låsa upp och en anledning att fortsätta.
- XP/level-ups, skill tree, items (kläder, masker, hattar) med buffar.
- Bankarta i spelbrädesstil; sidobanor som ger skins/powers/items; items
som låser upp genvägar i huvudbanor.
- Sparfil med framsteg, items, skills, debuffar och seed. Autospar vid
banstart.
- **Teknik:** `internal/save` (JSON, versionsfält för migrering),
`resources/data/items.json`, `skills.json`.
- **Klar när:** sparfil round-trip-test grön; "< 33 % per omgång" går att
räkna ut från datan.
- **XP och nivåer:** en klarad bana ger `poäng/10 + 25 × stjärnor` XP;
nivå n+1 nås vid 150·n(n+1)/2 XP (150, 450, 900 …). Varje level-up ger
en **skillpoäng**.
- **Skillträd** (`resources/data/skills.json`, 12 noder i fyra grenar:
språk, kropp, resenär, utforskare): kana, fokus, hjälp, fart, törst, toa,
tur, sikt, landmärken. Krav och kostnad valideras; effekterna är
stats-multiplikatorer plus flaggor. Språkpoängen på ord (M3) finns kvar
som egen valuta.
- **Items** (`resources/data/items.json`, 25 st: hattar, masker, kläder,
skor, prylar, skins) med buffar, färgton på spelaren och genvägar:
JR Pass (gratis spärrar), kartor (hela minikartan på en bana), powerbank
(oändligt batteri). Ett item per plats (huvud, ansikte, kropp, fötter,
väska). Köps kontant i **kioskens butik** (B) – banans sortiment eller ett
seedat urval. Designregeln "knappt 33 % per omgång" är ett test:
billigaste tredjedelen kostar mer än startkassan.
- **Bankartan** i spelbrädesstil ersätter menyn: huvudbanorna på en linje,
sidospår ovanför, låsta grå, klarade med stjärnor; nästa huvudbana öppnas
när föregående är klarad, sidospår när föräldern är. Ny sidobana
**002b Kabukicho** belönar skinnet Kimono och en skillpoäng.
- **Sparfil** (`internal/save`): versionerad JSON med kunskap, plånbok,
debuffar, progression och pågående bana + seed, atomisk skrivning,
migrering av äldre filer. `~/.config/metro-puzzle-jp/save.json` på Linux,
`%AppData%` på Windows. Autospar vid banstart (seeden), efter banan och
vid köp/upplåsningar. `⟳` på kartan betyder att banan återupptas med samma
slump. Flaggor `-save PATH`, `-nosave`.
- **Teknik:** `internal/progress` (ren Go, 6 tester), `internal/save`
(3 tester), `sim.RunOptions` får Extra/FogRadius/Landmarks/FreeGates/
RevealAll/InfiniteBattery, luck påverkar trängselzonen, nya scener
karta/skills/garderob och butiken i `internal/game`.
- **Klar när:** sparfil round-trip-test grön; "< 33 %" kontrolleras mot
itemlistan; skillkrav, upplåsningar och belöningar testade. ✓
### M9a – Flera våningar (Björns tillägg 2026-10-24)