M7b: tågfaser, räls, in-/utkörning, vind, ankomstindikator och melodier
All checks were successful
release / build-release (push) Successful in 1m42s
- level.Schedule.Phase: away/approaching/arriving/dwelling/closing/leaving ur tidtabellen med progress; Boardable (öppna dörrar) och Present; validering av minsta uppehåll/borta-tid; TrackTile för rälsen - sim.Run: ombordstigning bara med öppna dörrar, TrainVisible via Present, PlatformPhase och NearTrack (närmaste perrong inom två rutor) - game/trains.go: rälsrutor längs kantraden (roterade för vertikala spår), tre vagnar som bromsar in och accelererar ut längs rälsen, strålkastare under inrullningen, blinkande lampor vid kanten för den som står nära, dammpartiklar längs perrongen; kameran får en rutas marginal så att kanträlsen syns - game/audio.go: ebiten/v2/audio med avgångsmelodi (approaching) och dörrsignal (closing), volym efter avstånd, -mute; tools/gensound syntetiserar placeholder-WAV:ar - HUD: fasberoende perrongtext och "tåg på väg in" nära rälsen; skriptkommandot waitphase; skärmdump av ankomsten - plan (Björn 2026-10-24): räls/väg-grafik och melodierna i M7b; folk/NPC:er, vänster-/högertrafik, bredare gångar, reklam- och ljudröra som nytt steg M9b – i spelbeskrivning, roadmap, testplan - docs/README/wiki uppdaterade Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
BIN
doc/img/approach.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
BIN
doc/img/menu.png
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
doc/img/ride.png
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 24 KiB |
BIN
doc/img/sign.png
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
@@ -116,6 +116,8 @@ att bygga på Linux som på Windows.
|
||||
| `internal/sim` | `TestDebuffsAffectRunAndAreEarned` | Skoskav/matförgiftning/hunger sänker fart, snabbar mätare och förlänger hjälptiden; många steg, lång tid och tom matmätare ger debuffar |
|
||||
| `internal/sim` | `TestIndividualCardsAtGateAndMachine`, `TestLevel003Flow` | Egna kort: spärren kräver allas saldo, automaten frågar vems kort, spärren drar från alla; **hela bana 003 headless** med biljetter åt alla, sittplatser, trängsel och resa |
|
||||
| `internal/minigame` | `TestTopUpPicksMemberWithIndividualCards`, `TestSeatSelectionPreferences` | Personval och 2×2-rutnät; seedade önskemål, upptagna platser, missnöje, fönster/gång/sida/bredvid, Esc avbryter köpet |
|
||||
| `internal/level` | `TestSchedulePhases`, `TestScheduleValidationForPhases`, `TestTrackTile` | **M7b:** faserna away→approaching→arriving→dwelling→closing→leaving ur tidtabellen, ombordstigning bara med öppna dörrar, Status och Phase konsekventa; för korta uppehåll/borta-tider avvisas; rälsrutan |
|
||||
| `internal/sim` | `TestNearTrackAndPhases` | Närmaste perrong inom två rutor, inte tre; under inrullningen syns tåget men man kan inte kliva på; med öppna dörrar kan man |
|
||||
| `internal/archtest` | `TestOnlyPresentationPackagesImportEbitengine` | Beroenderegeln ovan |
|
||||
|
||||
### Planerade tester per milstolpe
|
||||
@@ -129,7 +131,8 @@ att bygga på Linux som på Windows.
|
||||
| ~~M5 Minikarta~~ ✓ | Upptäckta rutor, nollställning per bana, avgångar från start – finns, se tabellen ovan |
|
||||
| ~~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 | `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 |
|
||||
| ~~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 |
|
||||
| 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 |
|
||||
| M9a Flera våningar | Trappa byter våning för Mover och följare; `Path` över våningar; lösbarhetstest med trappor; dimma/minikarta per våning; gamla banor = en våning |
|
||||
| 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 |
|
||||
|
||||
@@ -34,8 +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 (vind, indikator,
|
||||
animation) → M8 progression/sparfiler → M9a flera våningar → 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 → 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).
|
||||
|
||||
@@ -328,24 +328,32 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
`TestIndividualCardsAtGateAndMachine`, `TestLevel003Flow`,
|
||||
`TestSeatSelectionPreferences`); bana 003 använder dem. ✓
|
||||
|
||||
### M7b – Tåg som kommer och går (Björns tillägg 2026-10-24)
|
||||
### M7b – Tåg som kommer och går ✓ (klar 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.
|
||||
- **Mål:** tågen ska synas, höras och kännas – man ska förstå när de kommer
|
||||
och går, särskilt när missade tåg kostar (M7).
|
||||
- **Tågfaser** ur tidtabellen (`level.Schedule.Phase`): på väg in
|
||||
(approaching, 5 s före), kör in (arriving, 1,5 s), står inne (dwelling,
|
||||
dörrar öppna), strax avgång (closing, sista 3 s, dörrsignal), kör ut
|
||||
(leaving, 1,5 s), borta. Man kan bara kliva på när dörrarna är öppna.
|
||||
- **Räls** ritas längs perrongkanten (egen ruta i `tools/genart`); tågen
|
||||
rullar in längs rälsen i tre vagnar, står, och accelererar ut – inte
|
||||
"dyker upp/försvinner". Vägrutor för bussar kommer med bussarna (M10).
|
||||
- **Ankomstindikator nära rälsen:** står man inom två rutor från perrongen
|
||||
när tåget är på väg in blinkar lampor vid kanten, strålkastare syns från
|
||||
det håll tåget kommer och inforutan säger "tåg på väg in".
|
||||
- **Vind:** dammpartiklar längs perrongen när tåget kör in och ut.
|
||||
- **Ljud:** ljudsystemet (`ebiten/v2/audio`) införs här med två placeholder-
|
||||
jinglar genererade av `tools/gensound` (pentatonisk avgångsmelodi när
|
||||
tåget är på väg in, dörrsignal strax före avgång), med volym efter avstånd
|
||||
till perrongen och `-mute`. Riktiga inspelningar/kompositioner i M12.
|
||||
- **Teknik:** faser i `level` (ren Go, testade), `sim.Run.NearTrack`,
|
||||
partiklar/tweening/ljud i `internal/game`, skriptkommandot `waitphase`.
|
||||
- **Klar när:** faserna beräknas rätt ur tidtabellen (testat:
|
||||
`TestSchedulePhases`, `TestNearTrackAndPhases`), indikatorn syns bara
|
||||
nära rälsen, tåget rullar in/ut och melodierna spelas i rätt fas. ✓
|
||||
- **Konsekvens för banorna:** uppehållet måste vara minst 5,5 s och tiden
|
||||
borta minst 7,5 s (valideras), så att faserna får plats.
|
||||
|
||||
### M8 – Progression, items och sparfiler
|
||||
|
||||
@@ -377,6 +385,27 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
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)
|
||||
|
||||
- **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
|
||||
öppna, rör sig mellan kiosker, toaletter och utgångar, och in och ut från
|
||||
stationen. De tar plats i rutnätet: man måste runda dem, och att gå in i
|
||||
någon saktar ned (`crowd`-nivå per bana styr hur många).
|
||||
- **Vänster-/högertrafik:** gångar och trappor kan markeras med en sida
|
||||
(pilar i golvet); går man på fel sida möter man strömmen och bromsas.
|
||||
- **Bredare gångar:** generatorn kan göra gångar två rutor breda där det
|
||||
ska gå att passera folk; följarna går då i bredd när det får plats.
|
||||
- **Visuell röra** (`clutter`-nivå): dekorationslager med reklam, affischer
|
||||
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.
|
||||
- **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.
|
||||
|
||||
### M9 – Navigeringslägen: lista och skyltläge
|
||||
|
||||
- **Mål:** de två sätten att spela story.
|
||||
@@ -389,9 +418,9 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
### M10 – Story-innehåll och flerbytesbanor
|
||||
|
||||
- **Mål:** hela resan från flygplats till flygplats.
|
||||
- Alla huvudbanor och sidobanor; banor med flera stopp och byten; buss;
|
||||
stationer i flera våningar (M9a) och svårighetsinställningarna från M7
|
||||
i stigande kombinationer.
|
||||
- Alla huvudbanor och sidobanor; banor med flera stopp och byten; buss (med
|
||||
vägrutor och hållplatser); stationer i flera våningar (M9a), folk och röra
|
||||
(M9b) och svårighetsinställningarna från M7 i stigande kombinationer.
|
||||
- Slutanimation (karaktärerna flyger iväg, items och poäng visas) och
|
||||
eftertexter.
|
||||
- Överstimulerande UI/banor som extra svårighet.
|
||||
@@ -405,7 +434,8 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
|
||||
|
||||
### M12 – Ljud, polish och release
|
||||
|
||||
- Avgångsmelodier/ankomstjinglar, effekter, musik.
|
||||
- Riktiga avgångsmelodier/ankomstjinglar (ersätter placeholders från M7b),
|
||||
utrop, effekter, musik; mixning och volyminställningar.
|
||||
- Inställningar (ljudnivåer, språk sv/en, skala, tangenter).
|
||||
- Windows-test på riktig maskin, ikon i exe:n, eventuell Gitea-CI med
|
||||
releaser enligt playbooken.
|
||||
|
||||
@@ -77,6 +77,20 @@ otydligt står tolkningen i [§15](#15-tolkningar-av-originalet).
|
||||
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.
|
||||
- **Räls och väg har egen grafik** så att man ser var tågen och bussarna går.
|
||||
- **De ikoniska melodierna** (発車メロディー) hörs när ett tåg är på väg in
|
||||
och när det strax ska avgå, innan dörrarna stängs.
|
||||
|
||||
**Stationen lever** (tillägg 2026-10-24):
|
||||
|
||||
- **Folk** – NPC:er som går på och av tåg och bussar, rör sig mellan
|
||||
butiker och in och ut från stationen. De är i vägen: man måste undvika
|
||||
dem och de kan sakta ned en.
|
||||
- **Vänster- eller högertrafik**: på vissa ställen, i trappor och gångar,
|
||||
ska man gå på vänster eller höger sida. Går man fel sida krockar man med
|
||||
strömmen.
|
||||
- **Bredare gångar**: vissa gångar och vägar på banorna är breda nog att
|
||||
man kan gå mellan folk.
|
||||
|
||||
**Flera våningar** (tillägg 2026-10-24):
|
||||
|
||||
@@ -157,6 +171,12 @@ otydligt står tolkningen i [§15](#15-tolkningar-av-originalet).
|
||||
och banan misslyckas.
|
||||
- **Extra svårigheter:** överstimulerande UI och banor byggda för att förvirra
|
||||
spelaren räknas som egna, extra svårigheter.
|
||||
- **Visuell röra** (tillägg 2026-10-24): banor med mer visuellt brus –
|
||||
reklam, affischer, blinkande skyltar – gör det svårare att hitta vart man
|
||||
ska. En egen svårighetsvariabel.
|
||||
- **Ljudröra** (tillägg 2026-10-24): japanskt prat, utrop och reklam som
|
||||
ljudeffekter är också en svårighet; de konkurrerar med det man behöver
|
||||
höra (melodierna, utropen om spåret).
|
||||
- Variabler som styr svårighet: antal i sällskapet, andel engelska på
|
||||
skyltar, kort-/biljettkrav, tidsgräns, antal byten, UI-störningar, antal
|
||||
våningar, egna kort, sittplatsönskemål.
|
||||
@@ -212,7 +232,9 @@ från skills i skill tree, och från unika skills man får av sidouppdrag.
|
||||
|
||||
- Pixel art.
|
||||
- Ljud som påminner om japanska stationer: **avgångsmelodier** och
|
||||
**ankomstjinglar** som spelas när tåg kommer och går.
|
||||
**ankomstjinglar** som spelas när tåg kommer och går – melodin när tåget
|
||||
är på väg in, dörrsignalen strax före avgång.
|
||||
- Bakgrundsljud: japanskt prat, utrop och reklam (se §9, ljudröra).
|
||||
|
||||
## 14. Slump och sparande
|
||||
|
||||
|
||||