M8: bankarta, skillträd, items, butik och sparfil

2026-10-24 11:24:15 +02:00
parent 51dab4c5f2
commit ecbf79b80a

51
Home.md

@@ -16,12 +16,16 @@ till rätt resmål.
| [`doc/roadmap.md`](../src/branch/master/doc/roadmap.md) | Teknikval, katalogstruktur, milstolpar M0–M12 |
| [`doc/mal-och-tester.md`](../src/branch/master/doc/mal-och-tester.md) | Projektmål, teststrategi, checklistor |
## Så fungerar spelet (läget efter M7b)
## Så fungerar spelet (läget efter M8)
**Menyn** listar banorna i `resources/data/levels/` med resmål. Pilar/WASD
väljer, Enter startar, Esc avslutar. Gamepad fungerar också.
**Bankartan** är ett spelbräde: huvudbanorna på en linje från flygplatsen,
sidospåren som avstickare ovanför. Låsta banor är grå, klarade visar sina
stjärnor. Nästa huvudbana öppnas när föregående är klarad, sidospår när
föräldern är det. `⟳` betyder att banan återupptas med samma seed som när du
slutade. Pilar väljer, Enter startar; L ordlistan, T skillträdet, I
garderoben, P telefonen.
![Meny](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/menu.png)
![Bankartan](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/map.png)
**I banan** startar du på den gröna dörrmattan. Stationen är en labyrint:
mörka väggar, ljust golv, skyltar (blå tavla på stolpe), biljettautomat
@@ -148,9 +152,32 @@ av en tom matmätare och matförgiftning med liten otur vid kiosken. De
sänker farten, snabbar på mätarna eller gör skyltarna svårare att lära sig,
och räknas ned en bana i taget.
Resultatet visar tid mot par, stjärnor, utforskat, spenderat, missade tåg och
sällskapets försörjning. R spelar om, L öppnar ordlistan, Enter/Esc går till
menyn.
Resultatet visar tid mot par, stjärnor, poäng, spenderat och missade tåg –
och vad banan gav: **XP**, nivå upp, nya items och vilka banor som öppnades.
R spelar om, L öppnar ordlistan, Enter/Esc går till kartan.
**Progression.** En klarad bana ger `poäng/10 + 25 × stjärnor` XP. Nivå n+1
nås vid 150·n(n+1)/2 XP och varje nivå ger en **skillpoäng** till
skillträdet (T): fyra grenar – språk (kana, fokus, hjälp), kropp (fart,
törst, toa), resenär (tur) och utforskare (sikt, landmärken på minikartan).
![Skillträdet](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/skills.png)
**Items** köps kontant i kioskernas **butik** (B): hattar, masker, kläder,
skor och prylar med buffar, några med genvägar – JR Pass öppnar alla spärrar,
kartor avslöjar en bana, powerbanken håller telefonen vid liv. Ett item per
plats bärs (huvud, ansikte, kropp, fötter, väska); skins ändrar din färg.
Sidospår belönar unika skins. Det finns fler items än man har råd med på en
omgång – det är meningen.
![Butiken](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/shop.png)
![Garderoben](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/items.png)
**Sparfilen** ligger i `~/.config/metro-puzzle-jp/save.json` (Linux) eller
`%AppData%\metro-puzzle-jp\` (Windows) och sparas automatiskt vid banstart
(med seeden), efter varje bana och vid köp. Den har ett versionsfält så att
äldre filer kan migreras.
![Resultat](/brasse/metro-puzzle-jp/raw/branch/master/doc/img/result.png)
@@ -177,6 +204,8 @@ cmd/metro-puzzle-jp programstart, flaggor
internal/game Ebitengine: scener (meny → bana → resultat), rendering, input
internal/sim ren spellogik: rörelse, kollision, kamera, banomgång (tåg, spärrar, plånbok, hjälp, stjärnor, minispel), sällskap, dimma/minikarta
internal/minigame påfyllning, biljettköp, trängsel, tågresa – seedade tillståndsmaskiner
internal/progress XP, skillträd, items, banresultat, upplåsning av bankartan
internal/save sparfil: versionerad JSON, migrering, atomisk skrivning
internal/lang japanska: ordbok, tokenisering, kunskap, delvis översättning, engelska-andel
internal/level banformat (JSON), validering, BFS-lösbarhet
internal/res hittar resources/ (env → bredvid binären → uppåt från cwd)
@@ -218,6 +247,14 @@ resources/ sprites/ sound/ text/ data/ – skeppas bredvid binäre
gemensamt gränssnitt (Update/Done/Success) och all slump från del-seeds.
Därför kan hela bana 002 – fel biljett, rätt biljett, spärr, trängsel,
resa – spelas igenom i ett vanligt `go test`.
- **Progressionen är data.** Skills och items är JSON-rader med en
`effect` som antingen multiplicerar en stat eller sätter en flagga; samma
tabell gäller debuffar åt andra hållet. Nya items/skills = nya rader, inga
kodändringar. Designregeln "knappt 33 % per omgång" är ett test mot
itemlistan.
- **Sparfilen skrivs atomiskt** (tempfil + byte av namn) och har version +
migrering från dag ett, så att vi kan ändra formatet utan att förstöra
någons spel.
- **Tågets liv är sex faser ur tidtabellen** (away, approaching, arriving,
dwelling, closing, leaving), beräknade i `level` utan tillstånd. Animation,
ljud, vind och indikator i spelet läser bara av fasen – och boten i