M8: progression, items, bankarta och sparfil
All checks were successful
release / build-release (push) Successful in 1m46s

- internal/progress: katalog (skills.json 12 noder, items.json 25 items)
  med validering; XP/nivåer (150·n(n+1)/2) och skillpoäng; skillträd med
  krav och kostnad; items per plats med buffar, genvägar (JR Pass, kartor,
  powerbank) och färgton; banresultat och upplåsning (huvudbanor i ordning,
  sidospår efter föräldern); 33 %-regeln som test
- internal/save: versionerad JSON med kunskap, plånbok, debuffar,
  progression och pågående bana + seed; atomisk skrivning; migrering;
  ~/.config/metro-puzzle-jp/save.json resp. %AppData%
- sim: RunOptions får Extra/FogRadius/Landmarks/FreeGates/RevealAll/
  InfiniteBattery; luck påverkar trängselzonen; Fog.RevealAll och extra
  landmärken
- game: bankarta i spelbrädesstil ersätter menyn (⟳ återupptar med sparad
  seed), skillträd (T), garderob (I), butik i kiosken (B), XP/nivå/items/
  upplåsningar på resultatet, spelaren tonas av skins; autospar vid banstart,
  efter banan och vid köp; flaggor -save/-nosave
- level: kind/order/parent/rewards/shop; ny sidobana 002b Kabukicho som
  belönar skinnet Kimono; 001 belönar Salaryman-skinnet; butikssortiment
  på 002/003
- tools/shots: demo-sparfil (build/, aldrig den riktiga), bilder av karta,
  skills, garderob och butik; alla körningar med -nosave
- docs/README/wiki uppdaterade

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 11:29:30 +02:00
parent d466333f01
commit 915c684dc2
46 changed files with 3058 additions and 316 deletions

View File

@@ -20,7 +20,7 @@
"hud.steps": "Steps",
"hud.controls": "Esc: menu M: map",
"level.wrong_train": "Wrong train!",
"result.hint": "R: replay L: word list Enter/Esc: menu",
"result.hint": "R: replay L: word list Enter/Esc: map",
"hud.card": "Card",
"hud.track": "Track",
"hud.next_train_in": "Next train in",
@@ -132,5 +132,54 @@
"hud.arriving": "The train is pulling in…",
"hud.closing": "Doors closing - board now!",
"hud.leaving": "The train is leaving…",
"hud.train_near": "Train approaching!"
"hud.train_near": "Train approaching!",
"map.level": "Level",
"map.xp": "XP",
"map.skill_points": "Skill points",
"map.side": "Side trip",
"map.party": "Party",
"map.resume": "⟳ resume (saved seed)",
"map.locked": "Locked – clear the previous level first.",
"map.hint": "Arrows: level Enter: start L: words T: skills I: wardrobe P: phone Esc",
"skills.title": "Skills 技",
"skills.to_next": "XP to next",
"skills.already": "Already unlocked.",
"skills.unlocked": "Unlocked: %s",
"skills.need_points": "Costs %d skill points – level up by clearing levels.",
"skills.need_req": "Requires an earlier skill in the branch.",
"skills.hint": "Arrows: select Enter: unlock Esc/T: back",
"items.title": "Wardrobe 持ち物",
"items.owned": "items",
"items.owned_short": "owned",
"items.wearing": "worn",
"items.none": "Nothing yet – buy at kiosks (B) or clear side trips.",
"items.worn": "You wear %s.",
"items.removed": "You took off %s.",
"items.total": "Total",
"items.hint": "Arrows: select Enter: wear/remove Esc/I: back",
"shop.title": "Shop",
"shop.owned": "You already have that.",
"shop.bought": "Bought: %s",
"shop.too_expensive": "You cannot afford it.",
"shop.hint": "Arrows: select Enter: buy Esc/B: close",
"hud.shop_prompt": "B: shop",
"result.level_up": "Level up!",
"result.new_items": "New",
"result.unlocked": "Unlocked",
"stat.speed": "speed",
"stat.thirst": "thirst",
"stat.focus": "focus",
"stat.toilet": "toilet",
"stat.luck": "luck",
"slot.head": "head",
"slot.face": "face",
"slot.body": "body",
"slot.feet": "feet",
"slot.bag": "bag",
"effect.kana": "reads kana",
"effect.fog": "+%d sight",
"effect.landmarks": "landmarks on map",
"effect.free_gates": "free gates",
"effect.reveal": "map: %s",
"effect.battery": "infinite battery"
}

View File

@@ -531,5 +531,13 @@
"en": "west",
"sv": "väster",
"tier": 2
},
"歌舞伎町": {
"kana": "かぶきちょう",
"romaji": "Kabukichō",
"en": "Kabukicho",
"sv": "Kabukicho",
"tier": 3,
"kind": "station"
}
}

View File

@@ -20,7 +20,7 @@
"hud.steps": "Steg",
"hud.controls": "Esc: meny M: karta",
"level.wrong_train": "Fel tåg!",
"result.hint": "R: spela om L: ordlista Enter/Esc: meny",
"result.hint": "R: spela om L: ordlista Enter/Esc: karta",
"hud.card": "Kort",
"hud.track": "Spår",
"hud.next_train_in": "Nästa tåg om",
@@ -132,5 +132,54 @@
"hud.arriving": "Tåget rullar in…",
"hud.closing": "Dörrarna stängs - kliv på nu!",
"hud.leaving": "Tåget går…",
"hud.train_near": "Tåg på väg in!"
"hud.train_near": "Tåg på väg in!",
"map.level": "Nivå",
"map.xp": "XP",
"map.skill_points": "Skillpoäng",
"map.side": "Sidospår",
"map.party": "Sällskap",
"map.resume": "⟳ fortsätt (sparad seed)",
"map.locked": "Låst – klara föregående bana först.",
"map.hint": "Pilar: bana Enter: start L: ord T: skills I: garderob P: tel Esc",
"skills.title": "Skills 技",
"skills.to_next": "XP till nästa",
"skills.already": "Redan upplåst.",
"skills.unlocked": "Upplåst: %s",
"skills.need_points": "Kostar %d skillpoäng – gå upp i nivå genom att klara banor.",
"skills.need_req": "Kräver en tidigare skill i grenen.",
"skills.hint": "Pilar: välj Enter: lås upp Esc/T: tillbaka",
"items.title": "Garderob 持ち物",
"items.owned": "items",
"items.owned_short": "ägs",
"items.wearing": "bärs",
"items.none": "Inget än – köp i kioskerna (B) eller klara sidospår.",
"items.worn": "Du bär %s.",
"items.removed": "Du tog av %s.",
"items.total": "Totalt",
"items.hint": "Pilar: välj Enter: bär/ta av Esc/I: tillbaka",
"shop.title": "Butik",
"shop.owned": "Det har du redan.",
"shop.bought": "Köpt: %s",
"shop.too_expensive": "Du har inte råd.",
"shop.hint": "Pilar: välj Enter: köp Esc/B: stäng",
"hud.shop_prompt": "B: butik",
"result.level_up": "Nivå upp!",
"result.new_items": "Nytt",
"result.unlocked": "Upplåst",
"stat.speed": "fart",
"stat.thirst": "törst",
"stat.focus": "fokus",
"stat.toilet": "toa",
"stat.luck": "tur",
"slot.head": "huvud",
"slot.face": "ansikte",
"slot.body": "kropp",
"slot.feet": "fötter",
"slot.bag": "väska",
"effect.kana": "kan läsa kana",
"effect.fog": "+%d sikt",
"effect.landmarks": "landmärken på kartan",
"effect.free_gates": "gratis spärrar",
"effect.reveal": "karta: %s",
"effect.battery": "oändligt batteri"
}