M6: plånbok, biljetter, kortet i telefonen och seedade minispel
All checks were successful
release / build-release (push) Successful in 1m41s

- sim.Wallet: IC-kort, kontanter, pappersbiljett, telefon med batteri,
  spenderat; följer med mellan banor (Game.Wallet)
- internal/minigame: gemensamt Game-gränssnitt (Update/Done/Success), all
  slump från del-seeds: TopUp (hitta チャージ, belopp, mata sedlar),
  Ticket (taxetavla med resmål på japanska), Crowd (tidsfönster, två
  försök), Ride (stationerna passerar, kliv av vid resmålet)
- sim.Run: spärren kräver biljett på biljettbanor annars användbart kort;
  telefonen ger ×1,1 fart men 15 % seedad omskanning (frysning 1,5 s),
  dött batteri gör kortet oanvändbart; automaten startar påfyllning eller
  biljettköp; tåget kontrollerar biljetten; fulla tåg kräver trängsel;
  resan avgör vinst/förlust (fel station, åkte förbi, fel tåg); StepMini
  låter klockan och sällskapet ticka medan rörelsen pausar
- level: ticketRequired, rideStops, Train.Crowded; 002 är biljettbana med
  fullt tåg och fyra stopp; ordboken har stationer (kind) + sju nya namn
- game: vyer för minispelen, plånbok i HUD, P i menyn = kort i telefonen,
  förlustorsaker och spenderat på resultatet, flaggor -phone/-card,
  skriptkommandon hold/waitstop; inforuta/minikarta döljs under minispel
- plan: M7b (Björn) – tågvind, ankomstindikator nära rälsen,
  in-/utkörningsanimation för tåg och bussar – i spelbeskrivning, roadmap,
  testplan
- docs/README/wiki med tre nya bilder (automat, biljettavla, tågresa)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 09:50:12 +02:00
parent 3f56020777
commit 9fc7e94074
45 changed files with 1779 additions and 166 deletions

View File

@@ -1,11 +1,21 @@
{
"id": "002-shinjuku",
"name": {
"en": "Shinjuku Station",
"ja": "新宿駅",
"sv": "Shinjuku station"
},
"difficulty": 2,
"party": 3,
"ticketRequired": true,
"rideStops": 4,
"destination": {
"en": "Shibuya",
"ja": "渋谷",
"romaji": "Shibuya",
"sv": "Shibuya"
},
"difficulty": 2,
"timeLimitSec": 0,
"fareYen": 200,
"grid": [
"#################################",
@@ -30,13 +40,49 @@
"#pG.#...#.....................#P#",
"#################################"
],
"id": "002-shinjuku",
"name": {
"en": "Shinjuku Station",
"ja": "新宿駅",
"sv": "Shinjuku station"
},
"party": 3,
"trains": [
{
"correct": true,
"destination": {
"en": "Shibuya",
"ja": "渋谷",
"romaji": "Shibuya"
},
"line": {
"en": "Yamanote Line",
"ja": "山手線",
"romaji": "Yamanote-sen"
},
"platform": "P",
"schedule": {
"dwellSec": 8,
"intervalSec": 20,
"offsetSec": 3
},
"track": "14",
"crowded": true
},
{
"correct": false,
"destination": {
"en": "Tokyo",
"ja": "東京",
"romaji": "Tokyo"
},
"line": {
"en": "Chuo Line",
"ja": "中央線",
"romaji": "Chuo-sen"
},
"platform": "p",
"schedule": {
"dwellSec": 8,
"intervalSec": 25,
"offsetSec": 10
},
"track": "8"
}
],
"signs": [
{
"text": {
@@ -65,48 +111,5 @@
"x": 15,
"y": 17
}
],
"timeLimitSec": 0,
"trains": [
{
"correct": true,
"destination": {
"en": "Shibuya",
"ja": "渋谷",
"romaji": "Shibuya"
},
"line": {
"en": "Yamanote Line",
"ja": "山手線",
"romaji": "Yamanote-sen"
},
"platform": "P",
"schedule": {
"dwellSec": 8,
"intervalSec": 20,
"offsetSec": 3
},
"track": "14"
},
{
"correct": false,
"destination": {
"en": "Tokyo",
"ja": "東京",
"romaji": "Tokyo"
},
"line": {
"en": "Chuo Line",
"ja": "中央線",
"romaji": "Chuo-sen"
},
"platform": "p",
"schedule": {
"dwellSec": 8,
"intervalSec": 25,
"offsetSec": 10
},
"track": "8"
}
]
}

View File

@@ -49,7 +49,7 @@
"words.hint": "Arrows: select Enter: learn the word for points Esc/L: back",
"words.already": "You already know that word.",
"words.bought": "New word: %s = %s",
"words.too_expensive": "Costs %d points – clear levels with good times for more.",
"words.too_expensive": "Costs %d points - clear levels with good times for more.",
"urge.toilet": "needs the toilet (W)",
"urge.thirsty": "is thirsty (K)",
"urge.hungry": "is hungry (K)",
@@ -60,5 +60,36 @@
"hud.kiosk_prompt": "Enter: buy food/drink for %d person(s), %d¥",
"hud.kiosk_none": "Nobody is hungry or thirsty right now.",
"result.explored": "Explored",
"result.served": "served"
"result.served": "served",
"hud.cash": "Cash",
"hud.phone": "Phone",
"hud.ticket": "Ticket",
"hud.machine_topup": "Enter: top up the card (card %d¥, cash %d¥)",
"hud.machine_ticket": "Enter: buy a ticket (cash %d¥)",
"hud.wrong_ticket": "This ticket is not valid for this train!",
"hud.need_ticket": "Gate: you need a ticket - buy one at the machine (T).",
"hud.phone_dead": "Gate: your phone is dead - buy a ticket instead.",
"hud.rescan": "Beep… scan again.",
"hud.missed_train": "You could not get on - the train left.",
"level.lost": "Level failed",
"result.lost_wrong_train": "Wrong train.",
"result.lost_wrong_stop": "You got off at the wrong station.",
"result.lost_missed_stop": "You rode past your destination.",
"result.spent": "Spent",
"result.missed": "Missed trains",
"menu.phone": "P: card in phone %s",
"menu.on": "on",
"menu.off": "off",
"mini.cancel": "Esc: cancel",
"mini.topup.title": "Top up the card",
"mini.topup.pick": "Pick the right button on the machine:",
"mini.topup.amount": "Choose an amount:",
"mini.topup.feed": "Hold Enter to feed %d¥ in bills",
"mini.topup.wrong": "Wrong button…",
"mini.ticket.title": "Tickets",
"mini.ticket.hint": "Buy a ticket to %s. Cash: %d¥",
"mini.crowd.title": "Crowded train - squeeze in",
"mini.crowd.hint": "Press Enter when the marker is in the green zone (%d tries left)",
"mini.ride.title": "On the train - next stop",
"mini.ride.hint": "Enter: get off here (you are going to %s)"
}

View File

@@ -145,35 +145,40 @@
"romaji": "Shinjuku",
"en": "Shinjuku",
"sv": "Shinjuku",
"tier": 2
"tier": 2,
"kind": "station"
},
"渋谷": {
"kana": "しぶや",
"romaji": "Shibuya",
"en": "Shibuya",
"sv": "Shibuya",
"tier": 2
"tier": 2,
"kind": "station"
},
"東京": {
"kana": "とうきょう",
"romaji": "Tōkyō",
"en": "Tokyo",
"sv": "Tokyo",
"tier": 1
"tier": 1,
"kind": "station"
},
"上野": {
"kana": "うえの",
"romaji": "Ueno",
"en": "Ueno",
"sv": "Ueno",
"tier": 2
"tier": 2,
"kind": "station"
},
"京成上野": {
"kana": "けいせいうえの",
"romaji": "Keisei-Ueno",
"en": "Keisei-Ueno",
"sv": "Keisei-Ueno",
"tier": 3
"tier": 3,
"kind": "station"
},
"京成線": {
"kana": "けいせいせん",
@@ -208,7 +213,8 @@
"romaji": "Narita",
"en": "Narita",
"sv": "Narita",
"tier": 3
"tier": 3,
"kind": "station"
},
"駅": {
"kana": "えき",
@@ -419,5 +425,61 @@
"en": "Keisei Main Line",
"sv": "Keisei huvudlinje",
"tier": 3
},
"池袋": {
"kana": "いけぶくろ",
"romaji": "Ikebukuro",
"en": "Ikebukuro",
"sv": "Ikebukuro",
"tier": 3,
"kind": "station"
},
"品川": {
"kana": "しながわ",
"romaji": "Shinagawa",
"en": "Shinagawa",
"sv": "Shinagawa",
"tier": 3,
"kind": "station"
},
"秋葉原": {
"kana": "あきはばら",
"romaji": "Akihabara",
"en": "Akihabara",
"sv": "Akihabara",
"tier": 3,
"kind": "station"
},
"浅草": {
"kana": "あさくさ",
"romaji": "Asakusa",
"en": "Asakusa",
"sv": "Asakusa",
"tier": 3,
"kind": "station"
},
"銀座": {
"kana": "ぎんざ",
"romaji": "Ginza",
"en": "Ginza",
"sv": "Ginza",
"tier": 3,
"kind": "station"
},
"原宿": {
"kana": "はらじゅく",
"romaji": "Harajuku",
"en": "Harajuku",
"sv": "Harajuku",
"tier": 3,
"kind": "station"
},
"日暮里": {
"kana": "にっぽり",
"romaji": "Nippori",
"en": "Nippori",
"sv": "Nippori",
"tier": 3,
"kind": "station"
}
}

View File

@@ -49,7 +49,7 @@
"words.hint": "Pilar: välj Enter: lär dig ordet för poäng Esc/L: tillbaka",
"words.already": "Det ordet kan du redan.",
"words.bought": "Nytt ord: %s = %s",
"words.too_expensive": "Kostar %d poäng – klara banor med bra tid för fler.",
"words.too_expensive": "Kostar %d poäng - klara banor med bra tid för fler.",
"urge.toilet": "måste på toa (W)",
"urge.thirsty": "är törstig (K)",
"urge.hungry": "är hungrig (K)",
@@ -60,5 +60,36 @@
"hud.kiosk_prompt": "Enter: köp mat/dryck åt %d person(er), %d¥",
"hud.kiosk_none": "Ingen är hungrig eller törstig just nu.",
"result.explored": "Utforskat",
"result.served": "försörjda"
"result.served": "försörjda",
"hud.cash": "Kontant",
"hud.phone": "Tel",
"hud.ticket": "Biljett",
"hud.machine_topup": "Enter: fyll på kortet (kort %d¥, kontant %d¥)",
"hud.machine_ticket": "Enter: köp biljett (kontant %d¥)",
"hud.wrong_ticket": "Biljetten gäller inte för det här tåget!",
"hud.need_ticket": "Spärren: du behöver en biljett - köp i automaten (T).",
"hud.phone_dead": "Spärren: telefonen är död - köp en biljett i stället.",
"hud.rescan": "Pip… skanna igen.",
"hud.missed_train": "Ni fick inte plats - tåget gick.",
"level.lost": "Banan misslyckades",
"result.lost_wrong_train": "Fel tåg.",
"result.lost_wrong_stop": "Du klev av på fel station.",
"result.lost_missed_stop": "Du åkte förbi ditt resmål.",
"result.spent": "Spenderat",
"result.missed": "Missade tåg",
"menu.phone": "P: kort i telefonen %s",
"menu.on": "på",
"menu.off": "av",
"mini.cancel": "Esc: avbryt",
"mini.topup.title": "Fyll på kortet",
"mini.topup.pick": "Välj rätt knapp på automaten:",
"mini.topup.amount": "Välj belopp:",
"mini.topup.feed": "Håll Enter för att mata in %d¥ i sedlar",
"mini.topup.wrong": "Fel knapp…",
"mini.ticket.title": "Biljetter",
"mini.ticket.hint": "Köp biljett till %s. Kontant: %d¥",
"mini.crowd.title": "Fullt tåg - tränga sig på",
"mini.crowd.hint": "Tryck Enter när markören är i det gröna fältet (%d försök kvar)",
"mini.ride.title": "På tåget - nästa station",
"mini.ride.hint": "Enter: kliv av här (du ska till %s)"
}