M9a: stationer i flera våningar med trappor
All checks were successful
release / build-release (push) Successful in 1m34s

- level: Point har Z; banor kan ha floors (lika stora rutnät med namn),
  gamla grid-banor läses som en våning; trappor U/D på samma x,y en våning
  upp/ner valideras parvis; Neighbors ger grannar över våningar så att
  Path, lösbarhet, spärregel och Unreachable fungerar; skyltar har z
- sim: att kliva på en trappa flyttar spelaren till andra änden
  (FloorChanges); dimman är per våning och avslöjar trappans andra ände;
  tåg hörs/syns bara på egen våning
- game: bara spelarens våning ritas (följare på andra våningar döljs),
  HUD och minikarta visar våningens namn, trappgrafik i genart och färg på
  minikartan
- bana 004 Tokyo (svårighet 3, tre i sällskapet): start under mark på B1,
  trappa upp till 1F med perronger; generatorn gör våningar med trappor
  som flaskhalsar; ordboken utökad
- testbotar och tools/shots förstår trappor; två våningsbilder
- docs/README/wiki uppdaterade

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 11:54:07 +02:00
parent ef6cfaccc8
commit 8fca14e42d
23 changed files with 704 additions and 152 deletions

View File

@@ -0,0 +1,159 @@
{
"destination": {
"en": "Ueno",
"ja": "上野",
"romaji": "Ueno",
"sv": "Ueno"
},
"difficulty": 3,
"fareYen": 200,
"floors": [
{
"grid": [
"#################################",
"#S..#.......#.............#.....#",
"#.#.#.#####.###.#########.#####.#",
"#.#.#.#...#...#.#.....#...#...#.#",
"#.#.#.#.#.###.#.#.###.#.###.#.#.#",
"#.#...#.#...#.#.....#.#.....#...#",
"#.#####.#####.#######.#.#########",
"#.......#...#.#.....#.#.#.......#",
"#.#.#####.#.#.#.###.#.#.#.#####.#",
"#.#.#...#.#.#.#.#...#.#...#...#.#",
"#.#.#.#.#.#.#.#.#.###.###.#.#.#.#",
"#...#.#...#.#...#...#...#.#.#.#.#",
"###.#.#####.#######.###.#.#.#.#.#",
"#...#.....#.......#...#...#.#...#",
"#.#.#####.#.#########.#####.###.#",
"#.#.#...#.#.........#...#...#.#.#",
"#.###.#.#.#######.#.###.#.###.#.#",
"#.#...#...#.....#.#.......#...#.#",
"#.#.#########.#.#.#########.###.#",
"#.....U.......#.#...............#",
"#################################"
],
"name": "B1"
},
{
"grid": [
"#################################",
"#.......#.............#...#.....#",
"#.#####.#.#########.#.#.#.#.#.#.#",
"#..i..#.#.....#...#.#.#.#.#.#.#.#",
"###.#.#.#######.#.#.#.#.#.###.###",
"#...#.#.......#.#...#.#.#...#...#",
"#.###.#######.#.#####.#.#.#.###.#",
"#.........#T#.#.#K..#...#.#...#.#",
"#.#######.#.#.#.###.#####.###.#.#",
"#...#...#...#.#...#.........#..i#",
"#.#.#.#.###.#.###.#.###########.#",
"#W#...#...#.#.#...#.......#...#.#",
"#########.#.#.#.###.#####.#.#.#.#",
"#........i#.#...#.#.#...#...#...#",
"#.#######.#######.#.#.#.#########",
"#...#.....#.........#.#...#.....#",
"###.#.#.###.###########.#.#.###.#",
"#...#.#...#.....#.......#.#...#.#",
"#G###.###.#####.#.#.#####.###.#G#",
"#pG...D.#...........#.........#P#",
"#################################"
],
"name": "1F"
}
],
"id": "004-tokyo",
"kind": "main",
"maxMissedTrains": 2,
"name": {
"en": "Tokyo Station",
"ja": "東京駅",
"sv": "Tokyo station"
},
"order": 4,
"party": 3,
"rideStops": 4,
"shop": [
"beanie",
"mask_fox",
"hiking_boots",
"omamori",
"conductor_cap"
],
"signs": [
{
"text": {
"en": "Tokyo Station, floor 1F. You arrived on the Marunouchi Line underground (B1). Track 4 Yamanote Line for Ueno: south-east. Track 7 Tokaido Line for Shinagawa: south-west.",
"ja": "東京駅 1階 地下 丸ノ内線 ↓ 4番線 山手線 上野方面 → 南東 7番線 東海道線 品川方面 → 南西",
"sv": "Tokyo station, våning 1F. Du kom med Marunouchi-linjen under mark (B1). Spår 4 Yamanote-linjen mot Ueno: sydost. Spår 7 Tokaido-linjen mot Shinagawa: sydväst."
},
"x": 9,
"y": 13,
"z": 1
},
{
"text": {
"en": "\u003c- Track 7 Tokaido Line (Shinagawa) Track 4 Yamanote Line (Ueno) -\u003e",
"ja": "← 7番線 東海道線 品川方面 4番線 山手線 上野方面 →",
"sv": "\u003c- Spår 7 Tokaido-linjen (Shinagawa) Spår 4 Yamanote-linjen (Ueno) -\u003e"
},
"x": 3,
"y": 3,
"z": 1
},
{
"text": {
"en": "Track 4 Yamanote Line for Ueno: the gate in the south-east corner. The stairs down lead back to B1.",
"ja": "4番線 山手線 上野方面 → 南東口 改札 ↓ 地下",
"sv": "Spår 4 Yamanote-linjen mot Ueno: spärren i sydöstra hörnet. Trappan ner leder tillbaka till B1."
},
"x": 31,
"y": 9,
"z": 1
}
],
"ticketRequired": false,
"timeLimitSec": 420,
"trains": [
{
"correct": true,
"crowded": true,
"destination": {
"en": "Ueno",
"ja": "上野",
"romaji": "Ueno"
},
"line": {
"en": "Yamanote Line",
"ja": "山手線",
"romaji": "Yamanote-sen"
},
"platform": "P",
"schedule": {
"dwellSec": 8,
"intervalSec": 24,
"offsetSec": 5
},
"track": "4"
},
{
"correct": false,
"destination": {
"en": "Shinagawa",
"ja": "品川",
"romaji": "Shinagawa"
},
"line": {
"en": "Tokaido Line",
"ja": "東海道線",
"romaji": "Tokaido-sen"
},
"platform": "p",
"schedule": {
"dwellSec": 8,
"intervalSec": 28,
"offsetSec": 11
},
"track": "7"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 950 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -539,5 +539,54 @@
"sv": "Kabukicho",
"tier": 3,
"kind": "station"
},
"東京駅": {
"kana": "とうきょうえき",
"romaji": "Tōkyō-eki",
"en": "Tokyo Station",
"sv": "Tokyo station",
"tier": 3
},
"東海道線": {
"kana": "とうかいどうせん",
"romaji": "Tōkaidō-sen",
"en": "Tokaido Line",
"sv": "Tokaido-linjen",
"tier": 3
},
"丸ノ内線": {
"kana": "まるのうちせん",
"romaji": "Marunouchi-sen",
"en": "Marunouchi Line",
"sv": "Marunouchi-linjen",
"tier": 3
},
"階": {
"kana": "かい",
"romaji": "kai",
"en": "floor",
"sv": "våning",
"tier": 2
},
"地下": {
"kana": "ちか",
"romaji": "chika",
"en": "underground",
"sv": "under mark",
"tier": 2
},
"上": {
"kana": "うえ",
"romaji": "ue",
"en": "up",
"sv": "upp",
"tier": 1
},
"下": {
"kana": "した",
"romaji": "shita",
"en": "down",
"sv": "ner",
"tier": 1
}
}