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>
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
BIN
doc/img/menu.png
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
BIN
doc/img/ride.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
BIN
doc/img/sign.png
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
BIN
doc/img/ticket.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
doc/img/topup.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -107,6 +107,10 @@ att bygga på Linux som på Windows.
|
||||
| `internal/sim` | `TestUrgesSlowAndFacilitiesRestore`, `TestFollowersTrailLeader`, `TestPartySizeIsClamped` | Fartstraff, toalett/kiosk återställer och kostar, distraktion går över, följarna står på ledarens spår |
|
||||
| `internal/sim` | `TestToiletAndKioskInRun`, `TestPartySlowsLeader` | Enter på W startar ett besök som tar tid och avbryts om man går; K drar från kortet; sällskapet saktar ledaren |
|
||||
| `internal/sim` | `TestFogRevealsAlongCorridorsNotThroughWalls`, `TestLandmarksAlwaysVisible`, `TestFogGrowsWithMovementAndResetsPerRun` | **M5:** dimman lättar längs gångar men inte genom väggar; perronger/start/spärrar syns alltid; dimman växer när man går och nollställs per omgång |
|
||||
| `internal/minigame` | `TestTopUpFlowAndDeterminism`, `TestTicketBoardSeededAndAffordable`, `TestCrowdZoneAndAttempts`, `TestRideStopsAndGettingOff`, `TestRideWithoutFillersStillHasDestination` | **M6:** varje minispel är deterministiskt per seed; fel knapp straffar, sedlar rinner tillbaka; taxor och råd; zon och försök; kliva av rätt/fel/förbi; fel tåg saknar resmålet |
|
||||
| `internal/sim` | `TestWalletPayTopUpAndPhone` | Kort, kontanter, påfyllning, spenderat, batteri gör kortet i telefonen oanvändbart |
|
||||
| `internal/sim` | `TestTopUpFlowAtMachine`, `TestTicketLevelFlow`, `TestCrowdFailureMissesTrain` | Tomt kort → automaten → påfyllning → spärren släpper; **hela bana 002 headless** med fel/rätt biljett, trängsel och resa; två bom = missat tåg |
|
||||
| `internal/sim` | `TestPhoneSpeedRescanAndBattery`, `TestRideWrongOrMissedStopLoses` | Fartbuff, seedad omskanning som fryser spelaren, dött batteri stoppar spärren; fel station / åka förbi förlorar |
|
||||
| `internal/archtest` | `TestOnlyPresentationPackagesImportEbitengine` | Beroenderegeln ovan |
|
||||
|
||||
### Planerade tester per milstolpe
|
||||
@@ -118,8 +122,9 @@ att bygga på Linux som på Windows.
|
||||
| ~~M3 Japanska & skyltar~~ ✓ | Delvis översättning, engelska-andel, ordbokens fullständighet och täckning, hjälptid – finns, se tabellen ovan |
|
||||
| ~~M4 Lämmeltåget~~ ✓ | Mätare, händelsefrekvens efter gruppstorlek, seedade händelser – finns, se tabellen ovan |
|
||||
| ~~M5 Minikarta~~ ✓ | Upptäckta rutor, nollställning per bana, avgångar från start – finns, se tabellen ovan |
|
||||
| M6 Kort/biljetter/minispel | Saldo dras i spärr; tomt kort → automatkrav; biljettminispel: rätt/fel biljett; telefon-skanning misslyckas med given procent per seed; batteri tar bara slut över tröskeltid |
|
||||
| ~~M6 Kort/biljetter/minispel~~ ✓ | Saldo, automat, biljetter, omskanning, batteri – finns, se tabellen ovan |
|
||||
| M7 Svårighet/poäng/debuffs | Poängformeln (tid, pengar, mätare, läge); tidsgräns och maxantal missade tåg; varje debuff ändrar rätt stat; temporära debuffar räknar ned 1–4 banor |
|
||||
| M7b Tåg som kommer och går | `TrainPhase(t)` ger approaching/arriving/dwelling/departing/away med rätt fas ur tidtabellen; indikatorn aktiv bara inom N rutor från rälsen; vindzonen = rutor längs perrongkanten |
|
||||
| M8 Progression & sparfil | Sparfil round-trip (skriv → läs ger samma tillstånd inkl. seed); skill tree-krav; upplåsningar efter rätt bana; "< 33 %"-regeln kontrolleras mot itemlistan |
|
||||
| M9 Navigeringslägen | Listläge genererar rätt ordning av tåg; skyltläge: 1–4 giltiga vägar; fel-riktnings-förlust triggar vid rätt slutstation |
|
||||
| M10 Story-innehåll | Alla banor lösbara (redan automatiskt); flerbytesbanor har sammanhängande byten; sista banan slutar på flygplatsen |
|
||||
|
||||
@@ -33,8 +33,9 @@ brasse-linux01-runnern, inte Pi5:n.
|
||||
## Milstolpar
|
||||
|
||||
M0 skelett ✓ → M1 rörelse/kamera ✓ → M2 tåg/spärrar/vinst ✓ → M3 japanska/skyltar ✓
|
||||
→ M4 lämmeltåget ✓ → M5 minikarta ✓ → M6 kort/biljetter/minispel → M7
|
||||
svårighet/poäng/debuffar → M8 progression/sparfiler → M9 navigeringslägen →
|
||||
→ M4 lämmeltåget ✓ → M5 minikarta ✓ → M6 kort/biljetter/minispel ✓ → M7
|
||||
svårighet/poäng/debuffar → M7b tåg som kommer och går (vind, indikator,
|
||||
animation) → M8 progression/sparfiler → M9 navigeringslägen →
|
||||
M10 story-innehåll → M11 oändligt läge/NG+ → M12 ljud/polish/release.
|
||||
Innehåll per milstolpe: [roadmap.md › Milstolpar](roadmap.md#milstolpar).
|
||||
Vad som ska vara testat per milstolpe: [mal-och-tester.md](mal-och-tester.md).
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -67,6 +67,17 @@ otydligt står tolkningen i [§15](#15-tolkningar-av-originalet).
|
||||
- Tåg avgår enligt tidtabell. Missar du ett tåg får du vänta på nästa, och på
|
||||
svåra banor kostar det tid du inte har (se §9).
|
||||
|
||||
**Tåg som kommer och går** (tillägg 2026-10-24):
|
||||
|
||||
- När ett tåg kör in eller avgår **blåser det nära rälsen** – en synlig
|
||||
vind (damm, papper, kläder och hår som fladdrar) för den som står vid
|
||||
perrongkanten.
|
||||
- Står man nära rälsen ska det finnas en **visuell indikator på att ett tåg
|
||||
är på väg in** till stationen, innan det syns: vinden drar igång, lampor
|
||||
vid perrongkanten, strålkastare i tunneln.
|
||||
- **Tåg och bussar har animationer** när de kör in till och ut från sina
|
||||
stationer och hållplatser, i stället för att bara dyka upp och försvinna.
|
||||
|
||||
## 5. Sällskapet – lämmeltåget
|
||||
|
||||
- Dina polare följer efter dig i en rad – därav *lämmeltåget*.
|
||||
|
||||