M10c: vem betalar i kiosken och spärrar utan återvändo
All checks were successful
release / build-release (push) Successful in 2m7s

Björns tillägg 2026-10-24. Med egna kort och fler i sällskapet frågar
kiosken vem som betalar (minigame.Payer: kontant, spelarens kort eller en
följares kort; den som inte har råd nekas, Esc avbryter). Avgiften dras
nu när man passerar spärren in i det betalda området (level.InsideGates),
inte på spärrrutan. Banflaggan oneWayGates: incheckad släpps inte ut igen
förrän man åkt; Enter vid spärren kallar på personal (10 s) som låser upp
korten; ny inpassering kostar igen. På i 005, 007/007b och 008/008b.
Skriptkommandon urge och push. Docs, wiki och skärmdumpar uppdaterade.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 22:12:13 +02:00
parent 4ae6a1d24c
commit f04d6a88f9
26 changed files with 674 additions and 64 deletions

BIN
doc/img/no-exit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
doc/img/payer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
doc/img/staff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -132,6 +132,9 @@ att bygga på Linux som på Windows.
| `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/minigame` | `TestPayerPicksSourceAndRefusesPoor` | **M10c:** markören på första som har råd, nekande utan avslut, avbrott utan köp |
| `internal/sim` | `TestKioskAsksWhoPays`, `TestOneWayGatesNeedStaff` | **M10c:** kiosken frågar vem som betalar med egna kort, vald följares kort dras, kontant fungerar, avbrott drar inget; avgift vid inpassering i betalt område, spärren släpper inte ut incheckad, personal låser upp efter 10 s, ny inpassering kostar igen |
| `internal/level` | `TestOneWayGatesAndInside` | **M10c:** `oneWayGates` läses, `InsideGates` = rutorna innanför spärrarna |
| `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 |
@@ -155,6 +158,7 @@ att bygga på Linux som på Windows.
| ~~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~~ ✓ | 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 |
| ~~M10c Vem betalar, spärrar utan återvändo~~ ✓ | Väljaren betalar från rätt källa och nekar den utan pengar; spärren håller kvar, personalen låser upp, ny inpassering kostar – finns, se tabellen ovan |
| 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) |

View File

@@ -573,6 +573,45 @@ på **brasse-linux01-runnern** (label `linux-amd64`), aldrig på Pi5:n.
- **Teknik:** vägrutor i banformatet, `Vehicle`-abstraktion i sim som tåg
och buss delar, återanvänd `nav` för busslinjer.
### M10c – Vem betalar, och spärrar utan återvändo ✓ (klar 2026-10-24)
- **Mål:** två av Björns tillägg (2026-10-24) som gör kort- och
spärrhanteringen mer strategisk.
- **Vem betalar:** med fler än en i följet och egna kort väljer man vid
kiosken/automaten vem som betalar – kontant, spelarens kort eller någon
följares kort – så att alla har kvar pengar till spärrarna. Ett litet
väljarminispel (`minigame.Payer`) framför köpet; de som inte har råd
markeras.
- **Spärrar utan återvändo:** banflaggan `oneWayGates`. När man har
checkat in i spärren släpper den inte ut en igen förrän man åkt. Måste
man ut (toalett, kiosk, automat utanför) kallar man på personal med
Enter vid spärren (knappen sitter vid spärren – ett kontor kan komma
senare); det tar tid, sedan är korten upplåsta och man kan gå ut.
Går man in igen dras avgiften igen.
- **Teknik:** `level.InsideGates` (rutorna innanför spärrarna, BFS från
perrongerna), `Run.checkedIn`/`StaffUnlocked`/`Staff`-tillstånd i sim,
prompt och förlopp i inforutan, skriptkommandot `urge` för skärmdumpar.
- **Så blev det:** `minigame.Payer` (kontant / spelarens kort / varje
följares kort med saldo; de som inte har råd i rött och nekas; Esc
avbryter köpet) öppnas av kiosken när banan har egna kort och fler i
sällskapet. Spärrregeln ändrades samtidigt: **avgiften dras när man
passerar spärren in i det betalda området** (`level.InsideGates`, rutorna
som nås från perrongerna utan att korsa en spärr), inte när man står på
spärrrutan – så spärrar som ligger i en gång kostar inget att passera
utifrån. Med `oneWayGates` blir man incheckad vid betalningen; en spärr
man nått inifrån släpper inte ut en (meddelande i inforutan), Enter på
spärren kallar på personal (10 s, förloppsstapel, avbryts om man går),
sedan är korten upplåsta tills man gått ut; ny inpassering kostar igen.
Flaggan är på i 005 Ueno, 007/007b och 008/008b. Skriptkommandona `urge
NAMN` och `push RIKTNING N` för skärmdumparna.
- **Klar när:** väljaren betalar från rätt källa och nekar den som inte
har råd (`minigame.TestPayerPicksSourceAndRefusesPoor`,
`sim.TestKioskAsksWhoPays`); spärren släpper inte ut en, personalen låser
upp efter väntetiden och ny inpassering kostar igen
(`sim.TestOneWayGatesNeedStaff`, `level.TestOneWayGatesAndInside`). ✓
- **Kvar till senare:** ett kontor (egen ruta) som alternativ till knappen
vid spärren; personal som också kan hjälpa med tomt kort.
### M11 – Oändligt läge och New Game+
- Slumpade mål från seed, poäng per mål, egen poänglista. NG+ behåller skills.

View File

@@ -178,6 +178,15 @@ otydligt står tolkningen i [§15](#15-tolkningar-av-originalet).
viss person**, någon vill sitta vid **gången eller fönstret**, någon på
**höger eller vänster sida** av tåget. Du måste placera alla så att det
stämmer.
- **Vem betalar** (tillägg 2026-10-24): har man fler än en person i
följet ska man kunna **välja vem som köper** drickan i automaten, så att
man kan vara strategisk och se till att **alla har pengar kvar på sina
kort** till spärrarna.
- **Spärrar utan återvändo** (tillägg 2026-10-24): på vissa stationer kan
man **inte gå tillbaka ut** genom spärren efter att man kommit in utan att
åka någonstans. Måste man ut ändå får man **kalla på personal** – det
finns oftast en **knapp vid spärren eller vid ett kontor** – så att de
kan **låsa upp korten** åt en.
## 9. Svårighet och tid