M10: byten, hemresan och levelcheck
All checks were successful
release / build-release (push) Successful in 1m37s
Resor med byten: en bana kan ha next som pekar på en delbana (kind leg, syns inte på bankartan). När man klivit av rätt tåg fortsätter samma omgång på nästa station med klocka, plånbok, sällskap och räknare; par-tiden adderas, dimma och folk är nya, en Byte!-banner visas och HUD:en visar resmålet via bytesstationen. Tidsgräns och missade tåg gäller hela resan. level.ValidateChains kräver sammanhängande kedjor. Nya resor: 007 Akihabara -> Ueno -> Asakusa och finalen 008 Tokyo (två våningar) -> Nippori -> Narita flygplats. Slutscen när sista huvudbanan klaras första gången: planet lyfter, resan summeras, eftertexter; Progress.StoryCleared sparas; flaggan -ending. tools/levelcheck ritar banorna och rapporterar problem. HUD-nivån kortas när mätarna tar plats; poängraden radbryts. Skärmdumpar och docs uppdaterade. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
BIN
doc/img/credits.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/img/ending-summary.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
doc/img/ending.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
BIN
doc/img/map.png
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
doc/img/transfer.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -34,7 +34,7 @@ att bygga på Linux som på Windows.
|
||||
| Inkrementellt debug-bygge | < 10 s | 4,7 s |
|
||||
| Release-binär | < 20 MB | 10,2 MB (Linux), 10,8 MB (Windows) |
|
||||
| Testsviten | `go test ./...` grön på < 30 s | ~0,1 s |
|
||||
| Banor | 100 % passerar det automatiska lösbarhetstestet | 7 av 7 |
|
||||
| Banor | 100 % passerar det automatiska lösbarhetstestet | 11 av 11 (inkl. 4 delbanor) |
|
||||
| Windows-korsbygge från Linux | fungerar utan extra verktyg | ✓ (CGO_ENABLED=0) |
|
||||
| Linux-binärens länkade bibliotek | bara libc | ✓ (GL/X11 laddas dynamiskt vid körning) |
|
||||
| Bildfrekvens | 60 fps vid 4× skala på integrerad grafik | ej mätt |
|
||||
@@ -131,6 +131,8 @@ att bygga på Linux som på Windows.
|
||||
| `internal/level` | `TestAnnotateWithNetwork`, `TestPlatformTilesAndShippedVerdicts` | **M9:** `correct` räknas ut från nätet, felaktiga kopplingar ger fel, okopplade banor orörda; perrongtecknen `P p Q q R r`; 005/006 får väntade bedömningar |
|
||||
| `internal/sim` | `TestNetworkRideUsesRealStops`, `TestWrongDirectionLoses`, `TestTooFarLoses`, `TestSignsModeBonus`, `TestTerminalLines` | **M9:** resan visar linjens riktiga stationer med resmålet på rätt plats; fel håll och för långt bort förlorar med rätt orsak; skyltläget ger +50 %; terminalen listar linjer med grannstationer |
|
||||
| `internal/lang` | `TestNetworkNamesInDictionary` | **M9:** alla stations- och linjenamn i nätet finns i ordboken |
|
||||
| `internal/level` | `TestStoryChains` | **M10:** `next`-kedjor validerade (saknad/fel sort/dubbel/cykel/osammanhängande byte ger fel), `ChainOf`/`FinalOf`, storyn börjar och slutar på flygplatsen |
|
||||
| `internal/sim` | `TestJourneyWithTransfer`, `TestJourneyWrongTrainOnSecondLeg`, `TestChainLevelsLoad` | **M10:** bytet fortsätter omgången på nästa station med klocka, plånbok, sällskap och par-summa; vinst först på sista delbanan; fel håll på bytesstationen förlorar; delbanor laddas enskilt |
|
||||
| `internal/minigame` | `TestCarPickAlightingAndChoice`, `TestCrowdLevelNarrowsZone`, `TestRideCrowdLetPass` | Folk av först (för tidigt räknas), seedad trängsel med minst en lugn vagn, val; trängsel smalnar zonen; resan: kortare tid per station, passagerare som vill förbi, blockerade räknas |
|
||||
| `internal/sim` | `TestNPCsWanderStayOnFloorAndBlockPlayer`, `TestAlightingNPCsSpawnAndLeave` | Folk rör sig på golv, seedat, blockerar spelaren; avstigande spawnar när dörrarna öppnas och lämnar via utgången |
|
||||
| `internal/sim` | `TestLanesSlowWrongSide`, `TestCarsWomenOnlyEarlyAndCrowd` | Fel sida i filen bromsar; kvinnovagn med man ger grova minus, för tidigt ombord räknas, resan ärver vagnens trängsel, lugn vagn ger bonus |
|
||||
@@ -152,7 +154,8 @@ att bygga på Linux som på Windows.
|
||||
| ~~M8 Progression & sparfil~~ ✓ | Round-trip, skillkrav, upplåsningar, 33 %-regeln – finns, se tabellen ovan |
|
||||
| ~~M9a Flera våningar~~ ✓ | Trappor, vägar över våningar, dimma per våning, gamla banor oförändrade – finns, se tabellen ovan |
|
||||
| ~~M9 Navigeringslägen~~ ✓ | Nätets bedömningar (rätt/fel håll/för långt/ingen trafik), 1–4 rätta tåg, riktiga stationer på resan, fel-håll- och för-långt-förlust, skyltbonus, terminal – finns, se tabellen ovan |
|
||||
| M10 Story-innehåll | Alla banor lösbara (redan automatiskt); flerbytesbanor har sammanhängande byten; sista banan slutar på flygplatsen |
|
||||
| ~~M10 Story-innehåll~~ ✓ | Kedjorna valideras, byten hänger ihop, storyn börjar och slutar på flygplatsen, bytet för med sig tid/plånbok/sällskap – finns, se tabellen ovan; `tools/levelcheck` som manuell kontroll |
|
||||
| M10b Bussar och vägar | Bussar följer tidtabell och vägrutor; hållplatser bedöms som perronger; överstimulerande UI-reglaget påverkar bara presentationen |
|
||||
| M11 Oändligt läge & NG+ | Målsekvens deterministisk per seed; NG+ behåller skills men nollställer items |
|
||||
| M12 Ljud & polish | Alla ljudfiler som refereras finns och går att avkoda; Windows-binär startar (manuellt) |
|
||||
|
||||
|
||||
@@ -521,7 +521,7 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
- **Kvar till senare:** flera tåg i rad (byten) kommer med M10; bussar;
|
||||
"terminaler" som egna rutor i stället för biljettautomaten.
|
||||
|
||||
### M10 – Story-innehåll och flerbytesbanor
|
||||
### M10 – Story-innehåll och flerbytesbanor ✓ (klar 2026-10-24)
|
||||
|
||||
- **Mål:** hela resan från flygplats till flygplats.
|
||||
- Alla huvudbanor och sidobanor; banor med flera stopp och byten; buss (med
|
||||
@@ -532,6 +532,46 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
- Överstimulerande UI/banor som extra svårighet.
|
||||
- **Teknik:** baneditor-stöd behövs troligen här: ett `tools/levelcheck`
|
||||
som ritar banan som bild och rapporterar onåbara rutor.
|
||||
- **Så blev det:** **Byten** är kedjor av banfiler: en huvudbana har `next`
|
||||
som pekar på en delbana (`kind: "leg"`, syns inte på bankartan), som i sin
|
||||
tur kan ha `next`. När man klivit av rätt tåg fortsätter *samma omgång*
|
||||
på nästa station: klockan, plånboken, sällskapets mätare och räknarna
|
||||
följer med, par-tiden adderas, dimma och folk är nya, och en "Byte!"-
|
||||
banner visas. HUD:en visar resans slutmål "via" delbanans mål och
|
||||
"1/2". Tidsgräns och missade tåg gäller hela resan (första banans
|
||||
värden). `level.ValidateChains` kräver att delbanor används exakt en gång,
|
||||
att inga cykler finns och att nästa delbana börjar där den förra slutade
|
||||
(nätets stationer). **Två nya resor:** 007 Akihabara → Ueno (Hibiya eller
|
||||
Yamanote) → Asakusa (Ginza), med fel-håll- och fel-varv-fällor, egna kort
|
||||
och folk; 008 Tokyo (två våningar) → Nippori (Yamanote eller
|
||||
Keihin-Tohoku) → Narita flygplats (Keisei, biljetter med sittplatsval) –
|
||||
storyns final. **Slutet:** när sista huvudbanan klaras första gången
|
||||
visas hemresan (`EndingScene`): planet lyfter över skymningshimlen medan
|
||||
sällskapet vinkar, resan summeras (banor, stjärnor, poäng, ord,
|
||||
souvenirer) och eftertexterna rullar; `Progress.StoryCleared` sparas (M11
|
||||
låser upp oändligt läge/NG+ på den). `-ending` öppnar scenen direkt.
|
||||
**`tools/levelcheck`** ritar varje våning som PNG (onåbara rutor röda,
|
||||
rätt perrong grönkantad, kortaste vägen prickad) och rapporterar
|
||||
lösbarhet, onåbara rutor, perronger utanför spärrar, tågens bedömning och
|
||||
resornas kedjor; `go run ./tools/levelcheck [ord…]` → `build/levelcheck/`.
|
||||
Generatorn fick `platforms` (fler perronger) utöver `floors`/`wide`.
|
||||
- **Klar när:** kedjorna valideras och storyn börjar/slutar på flygplatsen
|
||||
(`level.TestStoryChains`), bytet för med sig tid/plånbok/sällskap och
|
||||
vinner först på sista delbanan (`sim.TestJourneyWithTransfer`), fel tåg på
|
||||
bytesstationen förlorar (`TestJourneyWrongTrainOnSecondLeg`), delbanor
|
||||
laddas (`TestChainLevelsLoad`), alla banor passerar levelcheck. ✓
|
||||
- **Kvar till M10b:** bussar och vägrutor, fler sidobanor, överstimulerande
|
||||
UI som eget svårighetsreglage.
|
||||
|
||||
### M10b – Bussar, vägar och fler sidospår
|
||||
|
||||
- **Mål:** resten av M10-listan som inte rymdes: buss med vägrutor och
|
||||
hållplatser (egen fordonssprite, hållplatsskylt, tidtabell som tågen),
|
||||
fler sidobanor längs storyn (minst en per stad), och ett
|
||||
"överstimulerande UI"-reglage (fler lockskyltar, blinkande reklam, falska
|
||||
avgångstavlor) som kan slås på per bana.
|
||||
- **Teknik:** vägrutor i banformatet, `Vehicle`-abstraktion i sim som tåg
|
||||
och buss delar, återanvänd `nav` för busslinjer.
|
||||
|
||||
### M11 – Oändligt läge och New Game+
|
||||
|
||||
|
||||
@@ -267,4 +267,7 @@ från skills i skill tree, och från unika skills man får av sidouppdrag.
|
||||
| "bilder och eventuella språk och tester" (resursmappen) | bilder, språk och *texter* | Se resurslayouten i roadmap |
|
||||
| "slutstation ligger i fel riktning … eller hamnar för långt bort" (skyltläge) | Linjenätet (`network.json`) bedömer varje tåg: *fel håll* om linjen går till resmålet men tåget åt andra hållet; *för långt bort* om resmålet nås först efter fler än 12 stationer (fel varv på Yamanote-ringen, omvägen via city). Båda förlorar banan – i båda lägena, eftersom fel tåg alltid har förlorat | Gränsen 12 är `nav.MaxStops` och kan ändras |
|
||||
| "skyltar och terminaler" | Terminalen är biljettautomaten: på nätkopplade banor visar den linjetavlan (linjer vid stationen med grannstationer åt båda hållen), läst genom ens japanska som en skylt | Egna terminalrutor kan komma senare |
|
||||
| "flera stopp och byten" | En resa är en kedja av banfiler (`next` → delbana med `kind: "leg"`). Samma omgång fortsätter på nästa station med klocka, plånbok och sällskap; resmålet i HUD:en visas "via" bytesstationen. Vilken bytesstation som gäller bestämmer banan – spelaren väljer tåg, inte rutt | Fri ruttplanering (välj själv var man byter) är en möjlig utbyggnad |
|
||||
| "slutar när man ska tillbaka till flygplatsen" | Sista huvudbanan (008) går Tokyo → Nippori → Narita flygplats med Keisei. När den klaras första gången visas hemresan: planet lyfter, resan summeras, eftertexter | Slutet går att se igen via `-ending` |
|
||||
| Buss | Uppskjuten till M10b (vägrutor, hållplatser, egen sprite) | |
|
||||
| Repo-namnet | Arbetsnamnet var "jp-subway-pussel"; Björn döpte Gitea-repot till **metro-puzzle-jp** (2026-10-23), så repo, modul, binär och titel heter så | Spelets visningsnamn "Metro Puzzle JP" kan ändras fritt i `resources/text/*.json` |
|
||||
|
||||