M7: svårighet, tid, poäng, debuffar, egna kort och sittplatsval
All checks were successful
release / build-release (push) Successful in 1m37s

- sim/stats.go: Stats (fart, törst, fokus, toalett, tur), debuffar som
  multiplikatorer, Profile som följer med mellan banor och räknar ned
- sim.Run: tidsgräns och maxantal missade tåg förlorar banan; poängformel
  (tid mot par, pengar, sällskapets mätare, utforskat, avdrag); debuffar
  tjänas av många steg, lång tid, tom matmätare och seedad otur vid
  kiosken; stats påverkar fart, mätartakter, läsning och hjälptid
- egna kort (individualCards): Member.Card, spärren kräver allas saldo och
  drar från alla, automaten frågar vems kort, biljetter köps åt alla
- sittplatsval (seatSelection): Ticket får ett sittplatssteg med seedade
  önskemål (fönster/gång/sida/bredvid); missnöjda ger mätar- och poängavdrag
- level: maxMissedTrains, individualCards, seatSelection; bana 003 Shibuya
  (svårighet 3, fyra i sällskapet) och 002 med tidsgräns och sittplatser;
  ordboken utökad; generatorn är spec-driven
- game: tid kvar/missade i HUD, debuffar i meny/HUD/resultat, poäng och
  förlustorsaker på resultatet, vyer för personval och vagn, skript-pick,
  flaggan -debuffs; HUD och resultat komprimerade för fyra i sällskapet
- plan (Björn 2026-10-24): flera våningar med trappor som M9a, egna kort
  och sittplatsval som svårighetsinställningar i M7 – i spelbeskrivning,
  roadmap, testplan
- docs/README/wiki med sittplatsbilden

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 10:18:17 +02:00
parent 9fc7e94074
commit b2995d4ca9
44 changed files with 1567 additions and 177 deletions

View File

@@ -287,15 +287,46 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
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
### M7 – Svårighet, tid, poäng och debuffar ✓ (klar 2026-10-24)
- **Mål:** banor som kan misslyckas och poäng att jaga.
- Tidsgräns och maxantal missade tåg på svåra banor; lätta banor obegränsade.
- Poängformel: tid, pengar/påfyllningar, mätarnas status, navigeringsläge.
- Stats (speed, törst, fokus, toalett, tur) och debuffar (onda fötter,
trötthet, hunger/irritation, matförgiftning); temporära debuffar 1–4 banor.
- Svårighetsprofil per bana i JSON.
- **Teknik:** `internal/score`, `internal/sim/stats`.
- Tidsgräns och maxantal missade tåg på svåra banor; lätta banor
obegränsade.
- Poängformel: tid mot par, pengar spenderade, sällskapets mätare vid
målgång, utforskat, avdrag för missade tåg och omskanningar;
navigeringsläge ger multiplikator i M9.
- Stats (speed, törst, fokus, toalett, tur) som multiplikatorer och
**debuffar** som påverkar dem: onda fötter (många steg), trötthet (lång
bana), hunger/irritation (tom matmätare), matförgiftning (seedad chans
vid kioskköp, snabbare toamätare). De temporära debuffarna från
sidouppdrag (träningsvärk, skoskav, tungt köp, proppmätt, svettig) finns
i systemet med varaktighet 1–4 banor; sidouppdragen som ger dem kommer i
M10.
- **Svårighetsinställningar per bana** (Björns tillägg 2026-10-24):
- **Egna kort** (`individualCards`): varje person i sällskapet har sitt
eget tågkort; spärren kräver att alla har pengar, biljettbanor att alla
har biljett. Påfyllningsautomaten frågar vems kort.
- **Sittplatsval** (`seatSelection`, kräver biljettbana): efter resmålet
väljer man platser i vagnen (fönster/gång, vänster/höger, bredvid
någon) efter sällskapets seedade önskemål. Missnöjda i sällskapet blir
sura: mätaravdrag och poängavdrag.
- Våningar (`floors`) är också en svårighetsvariabel men byggs i M9a.
- **Teknik:** `sim/stats.go` (Stats, Debuff, Profile – ren Go),
`Run.Score()`, `level` får `maxMissedTrains`, `individualCards`,
`seatSelection`; `minigame.TopUp` får personval, `minigame.Ticket` får
sittplatssteg.
- **Poängformeln som byggdes:** tid 500 × min(1, par/tid) + pengar
(300 − spenderat/10) + mätare (200 × sällskapets medel) + utforskat
(100 × andel) − avdrag (50/missat tåg, 10/omskanning, 30/missnöjd).
- **Bana 003 Shibuya** (svårighet 3, fyra i sällskapet): biljettbana med
egna kort, sittplatsval, fullt tåg, fem stopp, 6 min tidsgräns, max ett
missat tåg. Bana 002 fick tidsgräns, maxantal missade tåg och
sittplatsval. Generatorn är nu spec-driven (JSON) så fler banor går fort.
- **Klar när:** poängformeln, tidsgränsen, debuffarna och de två
inställningarna är testade (`TestScoreBreakdown`,
`TestTimeLimitAndMissedTrainsLose`, `TestDebuffsAffectRunAndAreEarned`,
`TestIndividualCardsAtGateAndMachine`, `TestLevel003Flow`,
`TestSeatSelectionPreferences`); bana 003 använder dem. ✓
### M7b – Tåg som kommer och går (Björns tillägg 2026-10-24)
@@ -329,6 +360,23 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
- **Klar när:** sparfil round-trip-test grön; "< 33 % per omgång" går att
räkna ut från datan.
### M9a – Flera våningar (Björns tillägg 2026-10-24)
- **Mål:** stationer i flera plan – ännu en svårighetsvariabel.
- Banformatet får **flera rutnät** (`floors`), ett per våning, med
**trappor** (och rulltrappor/hissar) som kopplar en ruta på en våning
till en ruta på en annan. Start kan ligga på en trappa upp eller ner:
under mark, ovan mark eller marknivå.
- Kamera, dimma, minikarta (en flik per våning eller stapel) och BFS-vägar
(`level.Path`, lösbarhetstestet, botarna) blir våningsmedvetna; skyltar
kan peka "↑ 2F / ↓ B1".
- **Teknik:** `level.Level.Floors []Grid` med `Stairs []Link`, `Point`
får `Z`; `sim.Mover` byter våning vid trappa; `tools/genart` får
trappruta; generatorn placerar trappor som flaskhalsar.
- **Klar när:** en bana med två våningar går att klara av boten headless,
minikartan visar rätt våning, och alla gamla banor fungerar oförändrat
(en våning).
### M9 – Navigeringslägen: lista och skyltläge
- **Mål:** de två sätten att spela story.
@@ -341,7 +389,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.
- 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.
- Slutanimation (karaktärerna flyger iväg, items och poäng visas) och
eftertexter.
- Överstimulerande UI/banor som extra svårighet.