M6: plånbok, biljetter, kortet i telefonen och seedade minispel
All checks were successful
release / build-release (push) Successful in 1m41s

- sim.Wallet: IC-kort, kontanter, pappersbiljett, telefon med batteri,
  spenderat; följer med mellan banor (Game.Wallet)
- internal/minigame: gemensamt Game-gränssnitt (Update/Done/Success), all
  slump från del-seeds: TopUp (hitta チャージ, belopp, mata sedlar),
  Ticket (taxetavla med resmål på japanska), Crowd (tidsfönster, två
  försök), Ride (stationerna passerar, kliv av vid resmålet)
- sim.Run: spärren kräver biljett på biljettbanor annars användbart kort;
  telefonen ger ×1,1 fart men 15 % seedad omskanning (frysning 1,5 s),
  dött batteri gör kortet oanvändbart; automaten startar påfyllning eller
  biljettköp; tåget kontrollerar biljetten; fulla tåg kräver trängsel;
  resan avgör vinst/förlust (fel station, åkte förbi, fel tåg); StepMini
  låter klockan och sällskapet ticka medan rörelsen pausar
- level: ticketRequired, rideStops, Train.Crowded; 002 är biljettbana med
  fullt tåg och fyra stopp; ordboken har stationer (kind) + sju nya namn
- game: vyer för minispelen, plånbok i HUD, P i menyn = kort i telefonen,
  förlustorsaker och spenderat på resultatet, flaggor -phone/-card,
  skriptkommandon hold/waitstop; inforuta/minikarta döljs under minispel
- plan: M7b (Björn) – tågvind, ankomstindikator nära rälsen,
  in-/utkörningsanimation för tåg och bussar – i spelbeskrivning, roadmap,
  testplan
- docs/README/wiki med tre nya bilder (automat, biljettavla, tågresa)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 09:50:12 +02:00
parent 3f56020777
commit 9fc7e94074
45 changed files with 1779 additions and 166 deletions

View File

@@ -60,6 +60,7 @@ metro-puzzle-jp/
│ ├── level/ banformat, validering, BFS (ren Go)
│ ├── 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
│ ├── game/ Ebitengine-loop, scener, input, rendering, skriptläge ← får använda Ebitengine
│ ├── archtest/ beroenderegler
│ └── … kommande: lang/, nav/, score/, save/, minigame/, ui/, audio/
@@ -254,18 +255,37 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
syns från start – `TestFogRevealsAlongCorridorsNotThroughWalls`,
`TestLandmarksAlwaysVisible`, `TestFogGrowsWithMovementAndResetsPerRun`. ✓
### M6 – Kort, biljetter, telefon och minispel
### M6 – Kort, biljetter, telefon och minispel ✓ (klar 2026-10-24)
- **Mål:** resurshantering och de seedade minispelen.
- Kortsaldo som dras i spärren; tomt kort → hitta automat → påfyllningsminispel.
- Separata biljetter på svårare banor → biljettköpsminispel (rätt biljett).
- Kort i telefonen: speed-buff + procentchans för omskanning. Batteri som
tar slut på långa banor → tvingar till biljett.
- Minispel på tåget: få plats, komma av, gå av på rätt station.
- **Teknik:** `internal/minigame/*` med gemensamt gränssnitt
(`Start(seed) / Update / Result`), all slump via del-seeds.
- **Plånbok** (`sim.Wallet`, följer med mellan banor): IC-kort (2000 ¥),
kontanter (5000 ¥), ev. pappersbiljett, kortet i telefonen + batteri,
totalt spenderat (poäng i M7). Spärren drar från kortet; kiosken också.
- **Påfyllning** (automaten T): minispel – hitta チャージ bland japanska
knappar i seedad ordning (fel knapp = straffsekund), välj belopp, håll
Enter för att mata in sedlar. Kontanter → kort.
- **Biljettbanor** (`ticketRequired`, bana 002): spärren kräver
pappersbiljett i stället för kort. Automaten visar en taxetavla med
resmål på japanska i seedad ordning – köp rätt resmål kontant. Tåget
släpper bara på den vars biljett gäller dit; biljetten förbrukas.
- **Kortet i telefonen** (P i menyn, `-phone`): fart ×1,1, men 15 %
seedad chans per spärr att behöva skanna igen (1,5 s stillastående).
Batteriet laddar ur på 15 min; dött = kortet oanvändbart → köp biljett.
- **Fullt tåg** (`crowded`, 002:s rätta tåg): tidsminispel – tryck Enter
när markören är i den gröna zonen, två försök, annars går tåget
(räknas som missat tåg, M7).
- **Tågresan** (alla banor): stationerna passerar med 次は-utrop; kliv av
med Enter vid resmålet. Fel station eller att åka förbi förlorar banan;
på fel tåg finns resmålet inte på linjen. Namnen renderas genom
kunskapen, med romaji efter svårighetens engelska-andel. `rideStops`
styr längden (3 standard, 002 har 4).
- **Teknik:** `internal/minigame` (ren Go, gemensamt `Game`-gränssnitt,
all slump från del-seeds, 5 tester), `sim.Run.StepMini` (klockan och
sällskapet tickar, rörelsen pausar), vyer i `internal/game/minigame_view.go`,
skriptkommandon `hold N` och `waitstop`.
- **Klar när:** varje minispel är deterministiskt för en seed (test) och
spelbart.
spelbart; `TestTicketLevelFlow` spelar hela 002 headless: fel biljett
stoppas, rätt biljett, spärr, trängsel, resa, vinst. ✓
### M7 – Svårighet, tid, poäng och debuffar
@@ -277,6 +297,25 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
- Svårighetsprofil per bana i JSON.
- **Teknik:** `internal/score`, `internal/sim/stats`.
### M7b – Tåg som kommer och går (Björns tillägg 2026-10-24)
- **Mål:** tågen ska kännas – man ska se och förstå när de kommer och går,
särskilt när missade tåg kostar (M7).
- **Ankomstindikator nära rälsen:** några sekunder före ankomst (från
tidtabellen) tänds lampor vid perrongkanten och strålkastare syns i
tunneln/vid kartkanten, bara för den som står nära rälsen.
- **Vind:** när tåget kör in eller avgår blåser det längs perrongen –
partiklar (damm, papper) och fladdrande kläder/hår på alla som står vid
kanten. Kan senare påverka items (hattar som blåser av, M8).
- **In- och utkörningsanimation:** tågvagnarna rullar in från kartkanten,
bromsar, står (dörrar öppna) och accelererar ut – samma för bussar. Ersätter
dagens "dyker upp/försvinner".
- **Teknik:** ren logik i `sim` (`TrainPhase(t)`: approaching/arriving/
dwelling/departing/away med fas 0–1 ur `level.Schedule`), partiklar och
tweening i `internal/game`. Ljudet (M12) hakar på samma faser.
- **Klar när:** faserna beräknas rätt ur tidtabellen (testat), indikatorn
syns bara nära rälsen, tåget rullar in/ut i stället för att blinka till.
### M8 – Progression, items och sparfiler
- **Mål:** något att låsa upp och en anledning att fortsätta.