M9b: folk, filer, reklam, sorl och vagnval
All checks were successful
release / build-release (push) Successful in 1m33s

Folk på stationen (NPC:er som vandrar, kliver av tåg och går mot
utgången, blockerar spelaren men inte varandra), vänster-/högerfiler
som bromsar på fel sida, bredare gångar, reklamaffischer (clutter),
japanskt sorl i loop (noise), vagnval med kvinnovagn (stort avdrag med
man i sällskapet, tidsstyrd), kömarkeringar på perrongen, trängsel per
vagn (bonus för tom vagn, svettig-debuff och svårare resa i full vagn,
släpp förbi passagerare) och att folk kliver av innan man får gå på.
Ny bana 005 Ueno. Skärmdumpsverktyget kan filtrera på bana/skript.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 12:33:44 +02:00
parent 8fca14e42d
commit de61568e44
49 changed files with 1568 additions and 136 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/img/cars-alight.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/img/cars.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/img/crowd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -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 | 5 av 5 |
| Banor | 100 % passerar det automatiska lösbarhetstestet | 6 av 6 |
| 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 |
@@ -126,6 +126,10 @@ att bygga på Linux som på Windows.
| `internal/minigame` | `TestCrowdLuckWidensZone` | Tur gör zonen bredare, otur smalare, klampat |
| `internal/level` | `TestFloorsStairsAndPaths`, `TestFloorsValidation` | **M9a:** flera våningar läses, trappor länkar, BFS-vägen byter våning bara via trappa, spärregeln och skyltar per våning; trappa utan motpart, olika storlekar, grid+floors och fel våning avvisas |
| `internal/sim` | `TestStairsMoveBetweenFloors` | Att kliva på trappan flyttar spelaren en våning, dimman lättar runt andra änden, perrongen hörs bara på egen våning, boten går hela vägen över våningar |
| `internal/level` | `TestCarsWomenOnlyAndCrowdFields` | **M9b:** vagnar, kvinnovagnens tidsfönster, crowd/clutter/noise 0–3, filrutor |
| `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 |
| `internal/archtest` | `TestOnlyPresentationPackagesImportEbitengine` | Beroenderegeln ovan |
### Planerade tester per milstolpe
@@ -140,7 +144,7 @@ att bygga på Linux som på Windows.
| ~~M6 Kort/biljetter/minispel~~ ✓ | Saldo, automat, biljetter, omskanning, batteri – finns, se tabellen ovan |
| ~~M7 Svårighet/poäng/debuffs~~ ✓ | Poäng, tidsgräns, debuffar, egna kort, sittplatsval – finns, se tabellen ovan |
| ~~M7b Tåg som kommer och går~~ ✓ | Faser, ombordstigning, indikatoravstånd – finns, se tabellen ovan; ljud och animation verifieras manuellt/med skärmdumpar |
| M9b Folk, reklam, ljudröra | NPC:er följer seedade mål utan att fastna; krock saktar ned; fel sida i gång bromsar; bot klarar bana med folk; fler NPC:er = längre tid; clutter/noise läses per bana |
| ~~M9b Folk, reklam, ljudröra, vagnar~~ ✓ | NPC:er, filer, röra, vagnval – finns, se tabellen ovan (bot med folk: testerna tömmer folket där det skulle störa, "fler NPC:er = längre tid" mäts manuellt) |
| ~~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 | 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 |

View File

@@ -34,7 +34,7 @@ brasse-linux01-runnern, inte Pi5:n.
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 ✓ → M7b tåg som kommer och går ✓ → M8 progression/sparfiler ✓ → M9a flera våningar ✓ → M9b folk/reklam/ljudröra → M9 navigeringslägen →
svårighet/poäng/debuffar ✓ → M7b tåg som kommer och går ✓ → M8 progression/sparfiler ✓ → M9a flera våningar ✓ → M9b folk/reklam/ljudröra/vagnar ✓ → 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).

View File

@@ -100,7 +100,7 @@ skriptläge så att de alltid är pixelexakta och går att återskapa:
```bash
go run ./tools/genart # bara om placeholder-grafiken ska genereras om
go run ./tools/shots # bygger debug, kör spelet med -script, skriver doc/img/*.png
go run ./tools/shots [ord…] # bygger debug, kör spelet med -script, skriver doc/img/*.png (ord filtrerar på bana/skript)
```
**Regel:** när sprites, tileset eller UI ändras – kör `tools/shots` och
@@ -428,7 +428,7 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
(`TestStairsMoveBetweenFloors`, `TestFloorsStairsAndPaths`), minikartan
visar rätt våning, och alla gamla banor fungerar oförändrat (en våning). ✓
### M9b – Folk, reklam och ljudröra (Björns tillägg 2026-10-24)
### M9b – Folk, reklam och ljudröra ✓ (klar 2026-10-24)
- **Mål:** stationen lever och överstimulerar – tre nya svårighetsvariabler.
- **Folk (NPC:er):** passagerare som går på och av tågen när dörrarna är
@@ -443,11 +443,44 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
och blinkande skyltar på väggarna, lockskyltar som liknar riktiga.
- **Ljudröra** (`noise`-nivå): japanskt prat, utrop och reklam i bakgrunden
som konkurrerar med melodierna; på de svåraste nivåerna överlappar de.
- **Vagnar** (Björns tillägg 2026-10-24): tåg har `cars` vagnar; när tåget
står inne väljer man vagn på perrongen (kömarkeringar visar var man
ställer sig). **Folk kliver av först** – trycker man för tidigt blir det
avdrag. Varje vagn har en seedad **trängselnivå** (lite/mellan/mycket):
lite folk ger poängbonus, mycket folk gör trängselminispelet och resan
svårare (kortare tid per station, passagerare som måste **släppas förbi**
vid stationer där man inte ska av) och kan ge debuffen *svettig*.
**Kvinnovagn** (`womenOnlyCar`, ev. bara mellan vissa klockslag som står
på skyltarna) markeras rosa; har sällskapet en man och går på den blir det
**grova minus**. Sällskapets medlemmar får därför kön.
- **Teknik:** `sim.NPC` med enkla mål och BFS-vägar (ren Go, seedade),
dekorationslager i banformatet, `tools/genart` för folk/reklam,
`tools/gensound` för brusplaceholders; generatorn får bredd och sidor.
- **Klar när:** en bana med folk spelas av boten headless utan att fastna,
fler NPC:er ger mätbart längre tid, och röra/ljud styrs per bana.
`minigame.CarPick`, trängsel i `Crowd`/`Ride`, dekorationslager
(seedade affischer) och `clutter`/`noise`/`crowd` i banformatet,
`tools/genart` för folk/affischer/vagnmarkeringar, `tools/gensound` för
bakgrundsprat; generatorn får breda gångar med filer.
- **Så blev det:** `sim.NPC` (vandrare mellan kiosker/toaletter/skyltar/
perronger med BFS-vägar och seedade pauser; avstigande som kliver av när
dörrarna öppnas och går till utgången) tar plats i rutnätet – spelaren
stoppas ("Ursäkta…"), folket går igenom varandra så inget låser sig.
Filer `<`/`>` i breda gångar: fel sida ger ×0,7 fart. `clutter` ger
seedade affischer på väggar intill gångar (tre varianter, en liknar en
skylt); `noise` ger loopat bakgrundsprat (`chatter.wav`) som dämpar
melodierna. **Vagnval** (`minigame.CarPick`): folk kliver av i 1,5 s
(Enter för tidigt = avdrag), vagnarna visas med trängselfigurer och
kömarkeringar, kvinnovagn rosa med 女性専用; lugn vagn +50, full vagn ger
trängselminispel med smalare zon, kortare tid per station och
passagerare som ska släppas förbi (← ), samt 60 % risk för *svettig*.
Man i sällskapet på kvinnovagnen: −200. Sällskapet har kön (Anna/Sara
kvinnor, Ville/Omar män, spelaren okänd). **Bana 005 Ueno** (svårighet
4): breda gångar med filer, folk 2, röra 2, ljud 2, fyra vagnar där vagn
1 är kvinnovagn de första 2,5 minuterna.
- **Klar när:** NPC:er rör sig på golv, är seedade och blockerar spelaren
(`TestNPCsWanderStayOnFloorAndBlockPlayer`), avstigande kommer och går
(`TestAlightingNPCsSpawnAndLeave`), filer bromsar (`TestLanesSlowWrongSide`),
vagnval/kvinnovagn/trängsel/avdrag (`TestCarsWomenOnlyEarlyAndCrowd`,
`TestCarPickAlightingAndChoice`, `TestRideCrowdLetPass`). ✓
- **Kvar till senare:** NPC:er som väntar på och kliver på tåget, folk som
bildar riktiga köer vid markeringarna, utrop/reklam som ljud (M12).
### M9 – Navigeringslägen: lista och skyltläge

View File

@@ -92,6 +92,21 @@ otydligt står tolkningen i [§15](#15-tolkningar-av-originalet).
- **Bredare gångar**: vissa gångar och vägar på banorna är breda nog att
man kan gå mellan folk.
**Vagnar** (tillägg 2026-10-24):
- Vissa tåg har **flera vagnar**, och man väljer vilken man kliver på.
- Det kan finnas **kvinnovagnar** (女性専用車). Har man en man i sällskapet
och går på en sådan får man **grova minus**. Vagnen kan vara kvinnovagn
**bara under vissa tider**, som står på skyltarna, och den markeras **rosa**.
- Perrongen har **kömarkeringar** som visar var man ställer sig för att komma
på en vagn.
- Vagnarna har **olika mycket folk**. Tar man en vagn med **mindre folk** får
man **mer poäng**. Tar man en med **mycket folk** kan man få **debuffar** av
att bli svettig, och **minispelet blir svårare**: det blir svårare att kliva
av på rätt station, och man måste **släppa förbi andra passagerare** som ska
av på stationer där man själv inte ska av.
- Man **släpper av folk från tåget först** innan man får gå på.
**Flera våningar** (tillägg 2026-10-24):
- Banor och stationer kan ha **flera våningar**. Trappor (och rulltrappor/