@thijshakkenberg/valkyrie-mom-mcp 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/catalogs/data/tile-geometry.js +121 -121
  3. package/dist/catalogs/data/tile-geometry.js.map +1 -1
  4. package/dist/io/image.d.ts +9 -0
  5. package/dist/io/image.d.ts.map +1 -1
  6. package/dist/io/image.js +17 -0
  7. package/dist/io/image.js.map +1 -1
  8. package/dist/io/ini-writer.d.ts.map +1 -1
  9. package/dist/io/ini-writer.js +2 -1
  10. package/dist/io/ini-writer.js.map +1 -1
  11. package/dist/map/layout.d.ts +1 -1
  12. package/dist/map/layout.d.ts.map +1 -1
  13. package/dist/map/layout.js +4 -3
  14. package/dist/map/layout.js.map +1 -1
  15. package/dist/map/render.js +2 -2
  16. package/dist/map/render.js.map +1 -1
  17. package/dist/resources/format-docs.d.ts +2 -2
  18. package/dist/resources/format-docs.d.ts.map +1 -1
  19. package/dist/resources/format-docs.js +18 -3
  20. package/dist/resources/format-docs.js.map +1 -1
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +2 -4
  23. package/dist/server.js.map +1 -1
  24. package/dist/validation/rules/catalog-references.js +2 -2
  25. package/dist/validation/rules/catalog-references.js.map +1 -1
  26. package/dist/validation/rules/cross-references.d.ts.map +1 -1
  27. package/dist/validation/rules/cross-references.js +26 -2
  28. package/dist/validation/rules/cross-references.js.map +1 -1
  29. package/dist/validation/rules/custom-images.d.ts +0 -6
  30. package/dist/validation/rules/custom-images.d.ts.map +1 -1
  31. package/dist/validation/rules/custom-images.js +19 -5
  32. package/dist/validation/rules/custom-images.js.map +1 -1
  33. package/dist/validation/rules/event-chain-utils.d.ts.map +1 -1
  34. package/dist/validation/rules/event-chain-utils.js +5 -4
  35. package/dist/validation/rules/event-chain-utils.js.map +1 -1
  36. package/dist/validation/rules/event-graph.d.ts +5 -2
  37. package/dist/validation/rules/event-graph.d.ts.map +1 -1
  38. package/dist/validation/rules/event-graph.js +20 -37
  39. package/dist/validation/rules/event-graph.js.map +1 -1
  40. package/dist/validation/rules/event-semantics.d.ts.map +1 -1
  41. package/dist/validation/rules/event-semantics.js +18 -0
  42. package/dist/validation/rules/event-semantics.js.map +1 -1
  43. package/dist/validation/rules/explore-token-pattern.d.ts.map +1 -1
  44. package/dist/validation/rules/explore-token-pattern.js +6 -2
  45. package/dist/validation/rules/explore-token-pattern.js.map +1 -1
  46. package/dist/validation/rules/game-flow.d.ts.map +1 -1
  47. package/dist/validation/rules/game-flow.js +6 -2
  48. package/dist/validation/rules/game-flow.js.map +1 -1
  49. package/dist/validation/rules/localization-completeness.d.ts +3 -1
  50. package/dist/validation/rules/localization-completeness.d.ts.map +1 -1
  51. package/dist/validation/rules/localization-completeness.js +14 -12
  52. package/dist/validation/rules/localization-completeness.js.map +1 -1
  53. package/dist/version.d.ts +3 -0
  54. package/dist/version.d.ts.map +1 -0
  55. package/dist/version.js +6 -0
  56. package/dist/version.js.map +1 -0
  57. package/package.json +1 -1
  58. package/skills/custom-monsters/SKILL.md +27 -16
  59. package/skills/scenario/SKILL.md +6 -1
  60. package/src/catalogs/data/tile-geometry.ts +121 -121
  61. package/src/io/image.ts +18 -0
  62. package/src/io/ini-writer.ts +2 -1
  63. package/src/map/layout.ts +4 -3
  64. package/src/map/render.ts +2 -2
  65. package/src/resources/format-docs.ts +18 -3
  66. package/src/server.ts +2 -6
  67. package/src/validation/rules/catalog-references.ts +1 -1
  68. package/src/validation/rules/cross-references.ts +25 -2
  69. package/src/validation/rules/custom-images.ts +20 -4
  70. package/src/validation/rules/event-chain-utils.ts +5 -4
  71. package/src/validation/rules/event-graph.ts +18 -43
  72. package/src/validation/rules/event-semantics.ts +19 -0
  73. package/src/validation/rules/explore-token-pattern.ts +5 -2
  74. package/src/validation/rules/game-flow.ts +5 -2
  75. package/src/validation/rules/localization-completeness.ts +13 -12
  76. package/src/version.ts +8 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valkyrie-mom",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "AI-assisted Mansions of Madness scenario editor for Valkyrie",
5
5
  "author": {
6
6
  "name": "Thijs Hakkenberg"
@@ -3,89 +3,89 @@
3
3
  // Openings are measured along each edge: N and S from the west end, E and W from the north end.
4
4
  export const TILE_GEOMETRY = {
5
5
  // --- base ---
6
- TileSideAlley1: { width: 7, height: 3.5, image: "Tile_Alley_1_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Brick-walled alley with hanging lantern and barrels" },
7
- TileSideAlley2: { width: 7, height: 3.5, image: "Tile_Alley_2_MAD20", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 1.22, to: 2.26, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Dark brick alley with crates, barrels, and debris" },
8
- TileSideAlleyCorner1: { width: 7, height: 3.5, image: "Tile_Alley_Corner_1_MAD20", openings: { N: [{ from: 3.71, to: 6.79, kind: 'open' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Brick alley corner open east and turning south" },
9
- TileSideAlleyCorner2: { width: 7, height: 3.5, image: "Tile_Alley_Corner_2_MAD20", openings: { N: [{ from: 0.19, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Brick alley corner open west with barrels and streetlamp" },
6
+ TileSideAlley1: { width: 7, height: 3.5, image: "Tile_Alley_1_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Brick-walled alley with hanging lantern and barrels" },
7
+ TileSideAlley2: { width: 7, height: 3.5, image: "Tile_Alley_2_MAD20", openings: { N: [{ from: 1.22, to: 2.26, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Dark brick alley with crates, barrels, and debris" },
8
+ TileSideAlleyCorner1: { width: 7, height: 3.5, image: "Tile_Alley_Corner_1_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 3.71, to: 6.79, kind: 'open' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Brick alley corner open east and turning south" },
9
+ TileSideAlleyCorner2: { width: 7, height: 3.5, image: "Tile_Alley_Corner_2_MAD20", openings: { N: [], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 0.19, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Brick alley corner open west with barrels and streetlamp" },
10
10
  TileSideAlleyEnd: { width: 7, height: 3.5, image: "Tile_Alley_End_MAD20", bundled: true, openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Dead-end alley with fruit stand, barrels, and curved pipe" },
11
- TileSideAttic: { width: 7, height: 7, image: "Tile_Attic_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Dark wooden attic with stairs down and skylight overhead" },
12
- TileSideBallroom: { width: 7, height: 7, image: "Tile_Ballroom_MAD20", openings: { N: [], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Elegant ballroom with herringbone floor, piano, and chandelier" },
13
- TileSideBasement: { width: 7, height: 7, image: "Tile_Basement_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Grimy basement with furnace, stairs up, and stone pillars" },
14
- TileSideBathroom: { width: 7, height: 3.5, image: "Tile_Bathroom_MAD20", openings: { N: [{ from: 0.21, to: 3.28, kind: 'open' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Bathroom with bathtub and hallway with desk and chair" },
11
+ TileSideAttic: { width: 7, height: 7, image: "Tile_Attic_MAD20", openings: { N: [], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Dark wooden attic with stairs down and skylight overhead" },
12
+ TileSideBallroom: { width: 7, height: 7, image: "Tile_Ballroom_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Elegant ballroom with herringbone floor, piano, and chandelier" },
13
+ TileSideBasement: { width: 7, height: 7, image: "Tile_Basement_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Grimy basement with furnace, stairs up, and stone pillars" },
14
+ TileSideBathroom: { width: 7, height: 3.5, image: "Tile_Bathroom_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 0.21, to: 3.28, kind: 'open' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Bathroom with bathtub and hallway with desk and chair" },
15
15
  TileSideBeach: { width: 7, height: 3.5, image: "Tile_Beach_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Sandy beach with beached rowboat and wooden shack" },
16
- TileSideBedroom1: { width: 7, height: 3.5, image: "Tile_Bedroom_1_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Cozy bedroom with bed, chair, and diagonal wall division" },
17
- TileSideBedroom2: { width: 7, height: 3.5, image: "Tile_Bedroom_2_MAD20", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [], W: [] }, desc: "Cluttered bedroom with couch, rug, and stacked luggage" },
18
- TileSideBellTower: { width: 7, height: 3.5, image: "Tile_Bell_Tower_MAD20", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Bell tower interior with spiral staircase and large bell" },
16
+ TileSideBedroom1: { width: 7, height: 3.5, image: "Tile_Bedroom_1_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Cozy bedroom with bed, chair, and diagonal wall division" },
17
+ TileSideBedroom2: { width: 7, height: 3.5, image: "Tile_Bedroom_2_MAD20", openings: { N: [], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [] }, desc: "Cluttered bedroom with couch, rug, and stacked luggage" },
18
+ TileSideBellTower: { width: 7, height: 3.5, image: "Tile_Bell_Tower_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [] }, desc: "Bell tower interior with spiral staircase and large bell" },
19
19
  TileSideBilliardsRoom: { width: 7, height: 3.5, image: "Tile_Billiards_Room_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Billiards room with pool table, bar area, and leather chairs" },
20
- TileSideConservatory: { width: 7, height: 7, image: "Tile_Conservatory_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.81, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 0, to: 3.87, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Glass conservatory with stone path leading through garden to greenhouse" },
21
- TileSideDiningRoom: { width: 7, height: 7, image: "Tile_Dining_Room_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Dining room with long counter, hexagonal kitchen floor, and stove" },
20
+ TileSideConservatory: { width: 7, height: 7, image: "Tile_Conservatory_MAD20", openings: { N: [{ from: 0, to: 3.87, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.19, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Glass conservatory with stone path leading through garden to greenhouse" },
21
+ TileSideDiningRoom: { width: 7, height: 7, image: "Tile_Dining_Room_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dining room with long counter, hexagonal kitchen floor, and stove" },
22
22
  TileSideDock1: { width: 7, height: 3.5, image: "Tile_Dock_1_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Weathered wooden dock with crates and barrels by the water" },
23
23
  TileSideDock2: { width: 7, height: 3.5, image: "Tile_Dock_2_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Dark wet dock planks with rope, life preserver, and mooring posts" },
24
- TileSideEntryHall: { width: 7, height: 3.5, image: "Tile_Entry_Hall_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Checkered tile entry hall with armchair and stone columns" },
24
+ TileSideEntryHall: { width: 7, height: 3.5, image: "Tile_Entry_Hall_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Checkered tile entry hall with armchair and stone columns" },
25
25
  TileSideFleaMarket: { width: 7, height: 7, image: "Tile_Flea_Market_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Bustling outdoor flea market with striped awnings and scattered crates" },
26
- TileSideHall1: { width: 7, height: 3.5, image: "Tile_Hall_1_MAD20", openings: { N: [{ from: 1.22, to: 2.26, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Wooden hallway with large red rug and side doors" },
27
- TileSideHall2: { width: 7, height: 3.5, image: "Tile_Hall_2_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Wooden hallway with red chair, papers, and ceiling lights" },
28
- TileSideHallCorner1: { width: 7, height: 3.5, image: "Tile_Hall_Corner_1_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.71, to: 6.78, kind: 'open' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "L-shaped corner hallway with potted plant and small table" },
29
- TileSideHallCorner2: { width: 7, height: 3.5, image: "Tile_Hall_Corner_2_MAD20", openings: { N: [{ from: 0.21, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "L-shaped corner hallway with round rug and side table" },
30
- TileSideHallEnd: { width: 7, height: 3.5, image: "Tile_Hall_End_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0.22, to: 3.29, kind: 'open' }] }, desc: "Dead-end hallway with dark rug, red chair, and scattered papers" },
31
- TileSideHallStairs: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD20", openings: { N: [], E: [{ from: 0.22, to: 3.29, kind: 'open' }], S: [], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Red-carpeted staircase descending between walled landings" },
26
+ TileSideHall1: { width: 7, height: 3.5, image: "Tile_Hall_1_MAD20", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 1.22, to: 2.26, kind: 'door' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Wooden hallway with large red rug and side doors" },
27
+ TileSideHall2: { width: 7, height: 3.5, image: "Tile_Hall_2_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Wooden hallway with red chair, papers, and ceiling lights" },
28
+ TileSideHallCorner1: { width: 7, height: 3.5, image: "Tile_Hall_Corner_1_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.71, to: 6.78, kind: 'open' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "L-shaped corner hallway with potted plant and small table" },
29
+ TileSideHallCorner2: { width: 7, height: 3.5, image: "Tile_Hall_Corner_2_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [{ from: 0.21, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "L-shaped corner hallway with round rug and side table" },
30
+ TileSideHallEnd: { width: 7, height: 3.5, image: "Tile_Hall_End_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0.21, to: 3.28, kind: 'open' }] }, desc: "Dead-end hallway with dark rug, red chair, and scattered papers" },
31
+ TileSideHallStairs: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD20", openings: { N: [], E: [{ from: 0.21, to: 3.28, kind: 'open' }], S: [], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Red-carpeted staircase descending between walled landings" },
32
32
  TileSideHouseBoat: { width: 7, height: 3.5, image: "Tile_House_Boat_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Small wooden houseboat deck cluttered with rope and supplies" },
33
- TileSideInteriorHall: { width: 7, height: 7, image: "Tile_Interior_Hall_MAD20", openings: { N: [], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Interior hall with parquet floor, ornate clock, and bed alcove" },
34
- TileSideLibrary: { width: 7, height: 3.5, image: "Tile_Library_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [], W: [] }, desc: "Library with bookshelves, ornate rug, and reading furniture" },
35
- TileSideLobby: { width: 7, height: 7, image: "Tile_Lobby_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 2.99, to: 4.03, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Grand lobby with red walls, checkered floor, and chandelier" },
36
- TileSideLounge: { width: 7, height: 7, image: "Tile_Lounge_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [] }, desc: "Elegant lounge with sofas, armchairs, and herringbone parquet floors" },
37
- TileSideOffice: { width: 7, height: 3.5, image: "Tile_Office_MAD20", openings: { N: [], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Cluttered office with desk, chair, stairs, and filing cabinets" },
38
- TileSideParkPond: { width: 7, height: 7, image: "Tile_Park_Pond_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.36, kind: 'open' }, { from: 3.77, to: 7, kind: 'open' }] }, desc: "Dark park pond surrounded by grass, trees, and a gravel path" },
33
+ TileSideInteriorHall: { width: 7, height: 7, image: "Tile_Interior_Hall_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Interior hall with parquet floor, ornate clock, and bed alcove" },
34
+ TileSideLibrary: { width: 7, height: 3.5, image: "Tile_Library_MAD20", openings: { N: [], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Library with bookshelves, ornate rug, and reading furniture" },
35
+ TileSideLobby: { width: 7, height: 7, image: "Tile_Lobby_MAD20", openings: { N: [{ from: 2.99, to: 4.03, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Grand lobby with red walls, checkered floor, and chandelier" },
36
+ TileSideLounge: { width: 7, height: 7, image: "Tile_Lounge_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Elegant lounge with sofas, armchairs, and herringbone parquet floors" },
37
+ TileSideOffice: { width: 7, height: 3.5, image: "Tile_Office_MAD20", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Cluttered office with desk, chair, stairs, and filing cabinets" },
38
+ TileSideParkPond: { width: 7, height: 7, image: "Tile_Park_Pond_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.23, kind: 'open' }, { from: 3.64, to: 7, kind: 'open' }] }, desc: "Dark park pond surrounded by grass, trees, and a gravel path" },
39
39
  TileSidePier: { width: 7, height: 7, image: "Tile_Pier_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Wooden pier shed with green tiled dock area and water access" },
40
40
  TileSideRentalDock: { width: 7, height: 3.5, image: "Tile_Rental_Dock_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Boat rental dock with shack, rowboats, and rope pilings" },
41
- TileSideRootCellar: { width: 7, height: 7, image: "Tile_Root_Cellar_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Root cellar with barrels, shelves, and stairs leading to grassy yard" },
42
- TileSideStorefront: { width: 7, height: 7, image: "Tile_Storefront_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Cobblestone street frontage with interior shop shelves and wooden walls" },
43
- TileSideStreet1: { width: 7, height: 3.5, image: "Tile_Street_1_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Dark cobblestone street section with lamplight and drainpipe" },
44
- TileSideStreet2: { width: 7, height: 3.5, image: "Tile_Street_2_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Cobblestone street segment with one doorway along north wall" },
45
- TileSideStreetCorner1: { width: 7, height: 3.5, image: "Tile_Street_Corner_1_MAD20", openings: { N: [{ from: 0, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Street corner with cobblestones, building walls on north and west" },
46
- TileSideStreetCorner2: { width: 7, height: 3.5, image: "Tile_Street_Corner_2_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.71, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Dark cobblestone street corner with stairs descending east" },
47
- TileSideStreetCorner3: { width: 7, height: 3.5, image: "Tile_Street_Corner_3_MAD20", openings: { N: [{ from: 3.71, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Brick street corner with manhole cover and dim lighting" },
48
- TileSideStudy: { width: 7, height: 3.5, image: "Tile_Study_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Wood-floored study with armchair, rug, trunks, and globe" },
41
+ TileSideRootCellar: { width: 7, height: 7, image: "Tile_Root_Cellar_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 3.72, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 7, kind: 'open' }] }, desc: "Root cellar with barrels, shelves, and stairs leading to grassy yard" },
42
+ TileSideStorefront: { width: 7, height: 7, image: "Tile_Storefront_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 3.72, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 3.72, to: 7, kind: 'open' }] }, desc: "Cobblestone street frontage with interior shop shelves and wooden walls" },
43
+ TileSideStreet1: { width: 7, height: 3.5, image: "Tile_Street_1_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Dark cobblestone street section with lamplight and drainpipe" },
44
+ TileSideStreet2: { width: 7, height: 3.5, image: "Tile_Street_2_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Cobblestone street segment with one doorway along north wall" },
45
+ TileSideStreetCorner1: { width: 7, height: 3.5, image: "Tile_Street_Corner_1_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 0, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Street corner with cobblestones, building walls on north and west" },
46
+ TileSideStreetCorner2: { width: 7, height: 3.5, image: "Tile_Street_Corner_2_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.71, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Dark cobblestone street corner with stairs descending east" },
47
+ TileSideStreetCorner3: { width: 7, height: 3.5, image: "Tile_Street_Corner_3_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 3.71, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Brick street corner with manhole cover and dim lighting" },
48
+ TileSideStudy: { width: 7, height: 3.5, image: "Tile_Study_MAD20", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Wood-floored study with armchair, rug, trunks, and globe" },
49
49
  TileSideToolShed: { width: 7, height: 7, image: "Tile_Tool_Shed_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Small walled tool shed surrounded by open grassy yard with paths" },
50
50
  TileSideTownSquare: { width: 7, height: 7, image: "Tile_Town_Square_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Circular cobblestone town square with ornate central fountain" },
51
- TileSideWarehouse: { width: 7, height: 7, image: "Tile_Warehouse_MAD20", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Wooden warehouse interior cluttered with crates and barrels" },
52
- TileSideYard1: { width: 7, height: 3.5, image: "Tile_Yard_1_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Garden yard with wooden deck, bench, plant, and stone patio" },
53
- TileSideYard2: { width: 7, height: 3.5, image: "Tile_Yard_2_MAD20", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Grassy yard with stone path, well, and wooden bridge" },
51
+ TileSideWarehouse: { width: 7, height: 7, image: "Tile_Warehouse_MAD20", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Wooden warehouse interior cluttered with crates and barrels" },
52
+ TileSideYard1: { width: 7, height: 3.5, image: "Tile_Yard_1_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Garden yard with wooden deck, bench, plant, and stone patio" },
53
+ TileSideYard2: { width: 7, height: 3.5, image: "Tile_Yard_2_MAD20", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Grassy yard with stone path, well, and wooden bridge" },
54
54
  // --- btt ---
55
- TileSideAtticStorage: { width: 7, height: 3.5, image: "Tile_Attic_Storage_MAD23", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [] }, desc: "Cluttered attic storage room with crates and old equipment" },
56
- TileSideBalcony: { width: 7, height: 3.5, image: "Tile_Balcony_MAD23", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Outdoor balcony with ornate circular tile pattern and railing" },
55
+ TileSideAtticStorage: { width: 7, height: 3.5, image: "Tile_Attic_Storage_MAD23", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Cluttered attic storage room with crates and old equipment" },
56
+ TileSideBalcony: { width: 7, height: 3.5, image: "Tile_Balcony_MAD23", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Outdoor balcony with ornate circular tile pattern and railing" },
57
57
  TileSideBasementStorage: { width: 7, height: 3.5, image: "Tile_Basement_Storage_MAD23", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Dark basement filled with crates, barrels, and old junk" },
58
- TileSideBedroom: { width: 7, height: 3.5, image: "Tile_Bedroom_MAD23", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [] }, desc: "Small bedroom with bed, round rug, and frosted window" },
59
- TileSideDiningRoomMAD23: { width: 7, height: 3.5, image: "Tile_Dining_Room_MAD23", openings: { N: [{ from: 1.24, to: 2.28, kind: 'door' }], E: [], S: [{ from: 4.74, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Formal dining room with large round table and herringbone floor" },
60
- TileSideEntryHallMAD23: { width: 7, height: 3.5, image: "Tile_Entry_Hall_MAD23", openings: { N: [{ from: 2.97, to: 4.02, kind: 'door' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.79, kind: 'open' }], W: [{ from: 1.22, to: 2.26, kind: 'door' }] }, desc: "Entry hall with checkered floor, overturned furniture, and staircase" },
61
- TileSideHallCorner: { width: 7, height: 3.5, image: "Tile_Hall_Corner_MAD23", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 0.22, to: 3.29, kind: 'open' }], W: [] }, desc: "L-shaped hallway corner with wooden floor and round rug" },
62
- TileSideHallStairsMAD23: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD23", openings: { N: [{ from: 0.22, to: 3.29, kind: 'open' }], E: [{ from: 1.22, to: 2.26, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Hallway with dark descending staircase and tiled landing" },
63
- TileSideKitchen: { width: 7, height: 3.5, image: "Tile_Kitchen_MAD23", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [] }, desc: "Kitchen with checkered floor, stove, and adjacent pantry storage" },
64
- TileSideLibraryMAD23: { width: 7, height: 3.5, image: "Tile_Library_MAD23", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 1.22, to: 2.26, kind: 'door' }] }, desc: "Cozy library with wall-to-wall bookshelves and reading globe" },
65
- TileSidePorch: { width: 7, height: 3.5, image: "Tile_Porch_MAD23", openings: { N: [{ from: 1.49, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 7, kind: 'open' }], W: [] }, desc: "Covered porch with wooden walls opening onto yard and garden" },
66
- TileSideYard1MAD23: { width: 7, height: 3.5, image: "Tile_Yard_1_MAD23", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 0, to: 3.29, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Side yard with stone well, garden path, and wooden shed" },
58
+ TileSideBedroom: { width: 7, height: 3.5, image: "Tile_Bedroom_MAD23", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Small bedroom with bed, round rug, and frosted window" },
59
+ TileSideDiningRoomMAD23: { width: 7, height: 3.5, image: "Tile_Dining_Room_MAD23", openings: { N: [{ from: 4.74, to: 5.77, kind: 'door' }], E: [], S: [{ from: 1.24, to: 2.28, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Formal dining room with large round table and herringbone floor" },
60
+ TileSideEntryHallMAD23: { width: 7, height: 3.5, image: "Tile_Entry_Hall_MAD23", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.79, kind: 'open' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 2.97, to: 4.02, kind: 'door' }], W: [{ from: 1.24, to: 2.28, kind: 'door' }] }, desc: "Entry hall with checkered floor, overturned furniture, and staircase" },
61
+ TileSideHallCorner: { width: 7, height: 3.5, image: "Tile_Hall_Corner_MAD23", openings: { N: [{ from: 0.22, to: 3.29, kind: 'open' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "L-shaped hallway corner with wooden floor and round rug" },
62
+ TileSideHallStairsMAD23: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD23", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.24, to: 2.28, kind: 'door' }], S: [{ from: 0.22, to: 3.29, kind: 'open' }], W: [] }, desc: "Hallway with dark descending staircase and tiled landing" },
63
+ TileSideKitchen: { width: 7, height: 3.5, image: "Tile_Kitchen_MAD23", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Kitchen with checkered floor, stove, and adjacent pantry storage" },
64
+ TileSideLibraryMAD23: { width: 7, height: 3.5, image: "Tile_Library_MAD23", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.24, to: 2.28, kind: 'door' }] }, desc: "Cozy library with wall-to-wall bookshelves and reading globe" },
65
+ TileSidePorch: { width: 7, height: 3.5, image: "Tile_Porch_MAD23", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.49, to: 7, kind: 'open' }], W: [] }, desc: "Covered porch with wooden walls opening onto yard and garden" },
66
+ TileSideYard1MAD23: { width: 7, height: 3.5, image: "Tile_Yard_1_MAD23", openings: { N: [{ from: 0, to: 3.29, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Side yard with stone well, garden path, and wooden shed" },
67
67
  // --- hj ---
68
- TileSideBaggageCar: { width: 7, height: 3.5, image: "TILE_BAGGAGE_CAR_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.74, to: 5.78, kind: 'door' }], W: [{ from: 1.22, to: 2.27, kind: 'door' }] }, desc: "Train baggage car packed with crates and luggage" },
68
+ TileSideBaggageCar: { width: 7, height: 3.5, image: "TILE_BAGGAGE_CAR_MAD27", openings: { N: [{ from: 4.74, to: 5.78, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.28, kind: 'door' }] }, desc: "Train baggage car packed with crates and luggage" },
69
69
  TileSideBridge: { width: 7, height: 3.5, image: "TILE_BRIDGE_MAD27", openings: { N: [{ from: 3.88, to: 6.69, kind: 'open' }], E: [{ from: 0.41, to: 3.09, kind: 'open' }], S: [{ from: 3.88, to: 6.69, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Ship bridge with helm station and skylights on starboard side" },
70
- TileSideCabin1: { width: 7, height: 3.5, image: "TILE_CABIN_1_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [] }, desc: "Two small passenger cabins with herringbone parquet flooring" },
71
- TileSideCabin3: { width: 7, height: 3.5, image: "TILE_CABIN_3_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [] }, desc: "Two cabins with ornate rug and washtub on wooden floor" },
72
- TileSideCarboose: { width: 7, height: 3.5, image: "Tile_Caboose_MAD27", openings: { N: [{ from: 0, to: 2.68, kind: 'open' }], E: [{ from: 1.16, to: 2.28, kind: 'door' }], S: [{ from: 0, to: 2.57, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Train caboose with corrugated exterior section and stored equipment" },
73
- TileSideChartRoom: { width: 7, height: 3.5, image: "TILE_CHART_ROOM_MAD27", openings: { N: [{ from: 4.74, to: 5.78, kind: 'door' }], E: [], S: [{ from: 4.73, to: 5.78, kind: 'door' }], W: [] }, desc: "Navigation chart room with large map table and bookshelf" },
70
+ TileSideCabin1: { width: 7, height: 3.5, image: "TILE_CABIN_1_MAD27", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Two small passenger cabins with herringbone parquet flooring" },
71
+ TileSideCabin3: { width: 7, height: 3.5, image: "TILE_CABIN_3_MAD27", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Two cabins with ornate rug and washtub on wooden floor" },
72
+ TileSideCarboose: { width: 7, height: 3.5, image: "Tile_Caboose_MAD27", openings: { N: [{ from: 0, to: 2.57, kind: 'open' }], E: [{ from: 1.22, to: 2.34, kind: 'door' }], S: [{ from: 0, to: 2.68, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Train caboose with corrugated exterior section and stored equipment" },
73
+ TileSideChartRoom: { width: 7, height: 3.5, image: "TILE_CHART_ROOM_MAD27", openings: { N: [{ from: 4.73, to: 5.78, kind: 'door' }], E: [], S: [{ from: 4.74, to: 5.78, kind: 'door' }], W: [] }, desc: "Navigation chart room with large map table and bookshelf" },
74
74
  TileSideCrewBedroom: { width: 7, height: 3.5, image: "TILE_CREW_BEDROOM_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Crew sleeping quarters with three hammock bunks and pipes" },
75
- TileSideDiningCar1: { width: 7, height: 3.5, image: "Tile_Dining_Car_1_MAD27", openings: { N: [{ from: 0.9, to: 6.06, kind: 'open' }], E: [{ from: 0.21, to: 3.29, kind: 'open' }], S: [{ from: 0.9, to: 6.06, kind: 'open' }], W: [{ from: 1.22, to: 2.27, kind: 'door' }] }, desc: "Elegant dining car with six white-clothed tables and red seats" },
76
- TileSideDiningCar2: { width: 7, height: 3.5, image: "Tile_Dining_Car_2_MAD27", openings: { N: [], E: [{ from: 1.22, to: 2.27, kind: 'door' }], S: [{ from: 1.22, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Dining car kitchen with checkered tile floor and cooking station" },
77
- TileSideDiningRoomMAD27: { width: 7, height: 7, image: "TILE_DINING_ROOM_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Grand ship dining room with four round tables on herringbone floor" },
78
- TileSideEngine: { width: 7, height: 3.5, image: "Tile_Engine_MAD27", openings: { N: [{ from: 1.82, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.76, to: 7, kind: 'open' }], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Train engine with large boiler and open cab with controls" },
79
- TileSideEngineRoom: { width: 7, height: 7, image: "TILE_ENGINE_ROOM_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Dark ship engine room with heavy machinery and metal catwalks" },
80
- TileSideFreightCar1: { width: 7, height: 3.5, image: "TILE_FREIGHT_CAR_1_MAD27", openings: { N: [{ from: 1.57, to: 4.03, kind: 'open' }], E: [{ from: 1.24, to: 2.27, kind: 'door' }], S: [{ from: 1.57, to: 4.03, kind: 'open' }], W: [{ from: 1.24, to: 2.26, kind: 'door' }] }, desc: "Dark wooden freight car interior with crates and machinery" },
75
+ TileSideDiningCar1: { width: 7, height: 3.5, image: "Tile_Dining_Car_1_MAD27", openings: { N: [{ from: 0.9, to: 6.06, kind: 'open' }], E: [{ from: 0.21, to: 3.29, kind: 'open' }], S: [{ from: 0.9, to: 6.06, kind: 'open' }], W: [{ from: 1.23, to: 2.28, kind: 'door' }] }, desc: "Elegant dining car with six white-clothed tables and red seats" },
76
+ TileSideDiningCar2: { width: 7, height: 3.5, image: "Tile_Dining_Car_2_MAD27", openings: { N: [{ from: 1.22, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.28, kind: 'door' }], S: [], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Dining car kitchen with checkered tile floor and cooking station" },
77
+ TileSideDiningRoomMAD27: { width: 7, height: 7, image: "TILE_DINING_ROOM_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Grand ship dining room with four round tables on herringbone floor" },
78
+ TileSideEngine: { width: 7, height: 3.5, image: "Tile_Engine_MAD27", openings: { N: [{ from: 1.76, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 1.82, to: 7, kind: 'open' }], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Train engine with large boiler and open cab with controls" },
79
+ TileSideEngineRoom: { width: 7, height: 7, image: "TILE_ENGINE_ROOM_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [] }, desc: "Dark ship engine room with heavy machinery and metal catwalks" },
80
+ TileSideFreightCar1: { width: 7, height: 3.5, image: "TILE_FREIGHT_CAR_1_MAD27", openings: { N: [{ from: 1.57, to: 4.03, kind: 'open' }], E: [{ from: 1.23, to: 2.26, kind: 'door' }], S: [{ from: 1.57, to: 4.03, kind: 'open' }], W: [{ from: 1.24, to: 2.26, kind: 'door' }] }, desc: "Dark wooden freight car interior with crates and machinery" },
81
81
  TileSideFreightCar2: { width: 7, height: 3.5, image: "TILE_FREIGHT_CAR_2_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Open-top freight car loaded with crates and cargo containers" },
82
82
  TileSideLifeBoat: { width: 7, height: 3.5, image: "TILE_LIFE_BOAT_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Wooden lifeboat with ropes and nautical equipment on water" },
83
- TileSideLoungeCar: { width: 7, height: 3.5, image: "TILE_LOUNGE_CAR_MAD27", openings: { N: [], E: [{ from: 1.22, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.22, to: 2.27, kind: 'door' }] }, desc: "Ornate lounge car with cushioned seating and decorative carpet" },
84
- TileSideMedicalOffice: { width: 7, height: 3.5, image: "TILE_MEDICAL_OFFICE_MAD27", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Medical office with tiled floor, exam table, and cabinets" },
83
+ TileSideLoungeCar: { width: 7, height: 3.5, image: "TILE_LOUNGE_CAR_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.28, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.28, kind: 'door' }] }, desc: "Ornate lounge car with cushioned seating and decorative carpet" },
84
+ TileSideMedicalOffice: { width: 7, height: 3.5, image: "TILE_MEDICAL_OFFICE_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Medical office with tiled floor, exam table, and cabinets" },
85
85
  TileSideObservationCar: { width: 7, height: 3.5, image: "TILE_OBSERVATION_CAR_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Open observation car with wooden bench and railing at rear of train" },
86
- TileSidePassengerCar1: { width: 7, height: 3.5, image: "TILE_PASSENGER_CAR_1_MAD27", openings: { N: [{ from: 0.71, to: 2.76, kind: 'open' }], E: [{ from: 0.41, to: 3.1, kind: 'open' }], S: [{ from: 4.18, to: 6.23, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Luxurious dining car with long table and red oriental rug" },
87
- TileSidePassengerCar2: { width: 7, height: 3.5, image: "TILE_PASSENGER_CAR_2_MAD27", openings: { N: [], E: [{ from: 1.26, to: 2.23, kind: 'door' }], S: [{ from: 1.35, to: 2.34, kind: 'door' }], W: [{ from: 1.26, to: 2.24, kind: 'door' }] }, desc: "Passenger sleeper car with bunk compartments and red carpet aisle" },
88
- TileSidePool: { width: 7, height: 7, image: "TILE_POOL_MAD27", openings: { N: [], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Indoor swimming pool room with tiled walls and ladder" },
86
+ TileSidePassengerCar1: { width: 7, height: 3.5, image: "TILE_PASSENGER_CAR_1_MAD27", openings: { N: [{ from: 4.18, to: 6.23, kind: 'open' }], E: [{ from: 0.4, to: 3.09, kind: 'open' }], S: [{ from: 0.71, to: 2.76, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Luxurious dining car with long table and red oriental rug" },
87
+ TileSidePassengerCar2: { width: 7, height: 3.5, image: "TILE_PASSENGER_CAR_2_MAD27", openings: { N: [{ from: 1.35, to: 2.34, kind: 'door' }], E: [{ from: 1.27, to: 2.24, kind: 'door' }], S: [], W: [{ from: 1.26, to: 2.24, kind: 'door' }] }, desc: "Passenger sleeper car with bunk compartments and red carpet aisle" },
88
+ TileSidePool: { width: 7, height: 7, image: "TILE_POOL_MAD27", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Indoor swimming pool room with tiled walls and ladder" },
89
89
  TileSideProw: { width: 7, height: 7, image: "TILE_PROW_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Ship prow deck with raised platform and railing over water" },
90
90
  TileSideShipDeck1: { width: 7, height: 3.5, image: "TILE_SHIP_DECK_1_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Ship deck with tarp-covered cargo and curved railing over sea" },
91
91
  TileSideShipDeck2: { width: 7, height: 3.5, image: "TILE_SHIP_DECK_2_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Open ship deck with curved railing and scattered crates" },
@@ -93,24 +93,24 @@ export const TILE_GEOMETRY = {
93
93
  TileSideShipDeck4: { width: 7, height: 3.5, image: "TILE_SHIP_DECK_4_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Wooden ship deck with central buffet table and seating" },
94
94
  TileSideShipDeck5: { width: 7, height: 3.5, image: "TILE_SHIP_DECK_5_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Ship deck with lounge chairs and scattered reading materials" },
95
95
  TileSideShipDeck6: { width: 7, height: 3.5, image: "TILE_SHIP_DECK_6_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Ship deck with small dining tables, chairs, and potted plants" },
96
- TileSideSleeperCar: { width: 7, height: 3.5, image: "TILE_SLEEPER_CAR_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.26, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.26, kind: 'door' }] }, desc: "Train sleeper car with two private cabins and ornate carpet" },
96
+ TileSideSleeperCar: { width: 7, height: 3.5, image: "TILE_SLEEPER_CAR_MAD27", openings: { N: [], E: [{ from: 1.24, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.24, to: 2.27, kind: 'door' }] }, desc: "Train sleeper car with two private cabins and ornate carpet" },
97
97
  TileSideSpa: { width: 7, height: 3.5, image: "TILE_SPA_MAD27", openings: { N: [], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Tiled spa room with soaking pool and bath supplies" },
98
- TileSideStation: { width: 7, height: 7, image: "TILE_STATION_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.23, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Train station interior with ticket counter, benches, and cargo area" },
99
- TileSideStorageHold: { width: 7, height: 3.5, image: "TILE_STORAGE_HOLD_MAD27", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.22, to: 2.27, kind: 'door' }], W: [] }, desc: "Cluttered ship storage hold packed with crates and luggage" },
98
+ TileSideStation: { width: 7, height: 7, image: "TILE_STATION_MAD27", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 3.77, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 3.72, to: 7, kind: 'open' }] }, desc: "Train station interior with ticket counter, benches, and cargo area" },
99
+ TileSideStorageHold: { width: 7, height: 3.5, image: "TILE_STORAGE_HOLD_MAD27", openings: { N: [{ from: 1.22, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Cluttered ship storage hold packed with crates and luggage" },
100
100
  TileSideTracks: { width: 7, height: 3.5, image: "TILE_TRACKS_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Outdoor railroad tracks on gravel bed between platforms" },
101
- TileSideViewingRoom1: { width: 7, height: 3.5, image: "Tile_Viewing_Room_1_MAD27", openings: { N: [{ from: 0, to: 6.82, kind: 'open' }], E: [{ from: 0.83, to: 2.45, kind: 'open' }], S: [{ from: 0.22, to: 1.83, kind: 'open' }, { from: 2.43, to: 4.06, kind: 'open' }, { from: 4.72, to: 6.32, kind: 'open' }], W: [{ from: 0, to: 3.29, kind: 'open' }] }, desc: "Ship viewing room with cushioned seats and windows along walls" },
102
- TileSideViewingRoom2: { width: 7, height: 7, image: "Tile_Viewing_Room_2_MAD27", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 6.79, kind: 'open' }], S: [{ from: 0.22, to: 1.8, kind: 'open' }, { from: 2.73, to: 4.32, kind: 'open' }, { from: 5.2, to: 6.77, kind: 'open' }], W: [{ from: 0, to: 6.79, kind: 'open' }] }, desc: "Large ornate viewing room with velvet chairs and globe decorations" },
103
- TileSideViewingRoom3: { width: 7, height: 3.5, image: "Tile_Viewing_Room_3_MAD27", openings: { N: [{ from: 0.21, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 0.71, to: 2.3, kind: 'open' }, { from: 2.95, to: 4.55, kind: 'open' }, { from: 5.15, to: 6.77, kind: 'open' }], W: [{ from: 0.83, to: 2.45, kind: 'open' }] }, desc: "Sunlit ship viewing room with wooden crates and bench seating" },
101
+ TileSideViewingRoom1: { width: 7, height: 3.5, image: "Tile_Viewing_Room_1_MAD27", openings: { N: [{ from: 0.22, to: 1.83, kind: 'open' }, { from: 2.43, to: 4.06, kind: 'open' }, { from: 4.72, to: 6.32, kind: 'open' }], E: [{ from: 1.05, to: 2.67, kind: 'open' }], S: [{ from: 0, to: 6.82, kind: 'open' }], W: [{ from: 0.21, to: 3.5, kind: 'open' }] }, desc: "Ship viewing room with cushioned seats and windows along walls" },
102
+ TileSideViewingRoom2: { width: 7, height: 7, image: "Tile_Viewing_Room_2_MAD27", openings: { N: [{ from: 0.22, to: 1.8, kind: 'open' }, { from: 2.73, to: 4.32, kind: 'open' }, { from: 5.2, to: 6.77, kind: 'open' }], E: [{ from: 0.21, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0.21, to: 7, kind: 'open' }] }, desc: "Large ornate viewing room with velvet chairs and globe decorations" },
103
+ TileSideViewingRoom3: { width: 7, height: 3.5, image: "Tile_Viewing_Room_3_MAD27", openings: { N: [{ from: 0.71, to: 2.3, kind: 'open' }, { from: 2.95, to: 4.55, kind: 'open' }, { from: 5.15, to: 6.77, kind: 'open' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0.21, to: 7, kind: 'open' }], W: [{ from: 1.05, to: 2.67, kind: 'open' }] }, desc: "Sunlit ship viewing room with wooden crates and bench seating" },
104
104
  // --- pots ---
105
- TileSideStatueChamber: { width: 7, height: 7, image: "Tile_Statue_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Stone chamber with large serpent statues and carved floor" },
105
+ TileSideStatueChamber: { width: 7, height: 7, image: "Tile_Statue_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Stone chamber with large serpent statues and carved floor" },
106
106
  TileSideBurialChamber: { width: 7, height: 3.5, image: "Tile_Burial_Chamber_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Rectangular tomb room with cracked floor and burial urns" },
107
- TileSideBedChamber: { width: 7, height: 3.5, image: "Tile_Bed_Chamber_MAD28", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Temple sleeping quarters with ornate archway and stone bed" },
108
- TileSideVerdantChamber: { width: 7, height: 3.5, image: "Tile_Verdant_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Overgrown chamber with lush vegetation and mossy stone floor" },
109
- TileSidePit: { width: 7, height: 7, image: "Tile_Pit_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Half-collapsed chamber with deep rocky pit and carved walls" },
107
+ TileSideBedChamber: { width: 7, height: 3.5, image: "Tile_Bed_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Temple sleeping quarters with ornate archway and stone bed" },
108
+ TileSideVerdantChamber: { width: 7, height: 3.5, image: "Tile_Verdant_Chamber_MAD28", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Overgrown chamber with lush vegetation and mossy stone floor" },
109
+ TileSidePit: { width: 7, height: 7, image: "Tile_Pit_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Half-collapsed chamber with deep rocky pit and carved walls" },
110
110
  TileSideTunnel: { width: 7, height: 3.5, image: "Tile_Tunnel_MAD28", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Narrow rocky cave tunnel with rough uneven stone walls" },
111
- TileSideRopeBridge: { width: 7, height: 7, image: "Tile_Rope_Bridge_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 3.6, kind: 'open' }, { from: 4.07, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Wooden rope bridge spanning a rocky gorge between cliff edges" },
111
+ TileSideRopeBridge: { width: 7, height: 7, image: "Tile_Rope_Bridge_MAD28", openings: { N: [{ from: 0, to: 3.6, kind: 'open' }, { from: 4.07, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Wooden rope bridge spanning a rocky gorge between cliff edges" },
112
112
  TileSideHollowGrove: { width: 7, height: 3.5, image: "Tile_Hollow_Grove_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Forest clearing with three large hollow tree trunk pools" },
113
- TileSideCrumblingPlaza: { width: 7, height: 7, image: "Tile_Crumbling_Plaza_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 4.48, kind: 'open' }, { from: 4.89, to: 5.36, kind: 'door' }, { from: 5.76, to: 7, kind: 'door' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Overgrown circular stone plaza with crumbling mosaic pattern" },
113
+ TileSideCrumblingPlaza: { width: 7, height: 7, image: "Tile_Crumbling_Plaza_MAD28", openings: { N: [{ from: 0, to: 4.48, kind: 'open' }, { from: 4.89, to: 5.36, kind: 'door' }, { from: 5.76, to: 7, kind: 'door' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Overgrown circular stone plaza with crumbling mosaic pattern" },
114
114
  TileSideShrine: { width: 7, height: 3.5, image: "Tile_Shrine_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Jungle clearing with ancient carved stone shrine disc" },
115
115
  TileSideJungleRuins1: { width: 7, height: 3.5, image: "Tile_Jungle_Ruins_1_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Jungle path winding through crumbled stone building ruins" },
116
116
  TileSideJungleRuins2: { width: 7, height: 3.5, image: "Tile_Jungle_Ruins_2_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Dense jungle with scattered broken stone walls and carvings" },
@@ -121,66 +121,66 @@ export const TILE_GEOMETRY = {
121
121
  TileSideCampsite: { width: 7, height: 3.5, image: "Tile_Campsite_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Rocky campsite with boulders, mushrooms, and scattered supplies" },
122
122
  TileSideClearing1: { width: 7, height: 3.5, image: "Tile_Clearing_1_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Forest clearing with winding path and fallen autumn leaves" },
123
123
  TileSideClearing2: { width: 7, height: 7, image: "Tile_Abandoned_Hut_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Circular stone ruins in an overgrown forest clearing with debris" },
124
- TileSideTempleStairs: { width: 7, height: 7, image: "Tile_Temple_Stairs_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 0.45, kind: 'door' }, { from: 0.77, to: 1.78, kind: 'door' }, { from: 2.13, to: 7, kind: 'open' }] }, desc: "Broad stone staircase leading up to walled temple entrance" },
125
- TileSideThroneChamber: { width: 7, height: 7, image: "Tile_Throne_Chamber_MAD28", openings: { N: [], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Grand throne chamber with ornate floor patterns and two south doors" },
124
+ TileSideTempleStairs: { width: 7, height: 7, image: "Tile_Temple_Stairs_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 4.87, kind: 'open' }, { from: 5.22, to: 6.23, kind: 'door' }, { from: 6.55, to: 7, kind: 'door' }] }, desc: "Broad stone staircase leading up to walled temple entrance" },
125
+ TileSideThroneChamber: { width: 7, height: 7, image: "Tile_Throne_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Grand throne chamber with ornate floor patterns and two south doors" },
126
126
  TileSideOvergrownPath: { width: 7, height: 3.5, image: "Tile_Overgrown_Path_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Dirt path winding through dense overgrown autumn foliage" },
127
- TileSideAltarChamber: { width: 7, height: 3.5, image: "Tile_Altar_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [] }, desc: "Stone altar chamber with carved relief, rubble, and west door" },
128
- TileSideSunlitChamber: { width: 7, height: 3.5, image: "Tile_Sunlit_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Stone chamber with glowing orbs and arcane floor circles" },
129
- TileSideRuinedHut: { width: 7, height: 7, image: "Tile_Ruined_Hut_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.51, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 3.53, to: 7, kind: 'open' }], W: [{ from: 4.42, to: 6.08, kind: 'open' }] }, desc: "Overgrown ruined hut with muddy ground and vegetation" },
130
- TileSideHallChamber1: { width: 7, height: 3.5, image: "Tile_Hall_Chamber_1_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 0.86, kind: 'door' }, { from: 1.54, to: 1.86, kind: 'door' }, { from: 2.78, to: 3.28, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Temple hall with scattered rubble and green idol statue" },
131
- TileSideHallChamber2: { width: 7, height: 3.5, image: "Tile_Hall_Chamber_2_MAD28", openings: { N: [{ from: 0, to: 3.28, kind: 'open' }], E: [{ from: 1.07, to: 2.27, kind: 'door' }], S: [{ from: 0, to: 3.27, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Cracked stone chamber with bookshelf alcove on east side" },
132
- TileSideStorageChamber: { width: 7, height: 3.5, image: "Tile_Storage_Chamber_MAD28", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Temple storage room with shelves, crates, and cracked floor" },
133
- TileSidePoolChamber: { width: 7, height: 7, image: "Tile_Pool_Chamber_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Flooded cave chamber with large turquoise pool and island" },
134
- TileSideMosaicChamber: { width: 7, height: 7, image: "Tile_Mosaic_Chamber_MAD28", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Ornate chamber with vivid stained-glass mosaic floor pattern" },
127
+ TileSideAltarChamber: { width: 7, height: 3.5, image: "Tile_Altar_Chamber_MAD28", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Stone altar chamber with carved relief, rubble, and west door" },
128
+ TileSideSunlitChamber: { width: 7, height: 3.5, image: "Tile_Sunlit_Chamber_MAD28", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Stone chamber with glowing orbs and arcane floor circles" },
129
+ TileSideRuinedHut: { width: 7, height: 7, image: "Tile_Ruined_Hut_MAD28", openings: { N: [{ from: 3.53, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.51, to: 7, kind: 'open' }], W: [{ from: 0.92, to: 2.58, kind: 'open' }] }, desc: "Overgrown ruined hut with muddy ground and vegetation" },
130
+ TileSideHallChamber1: { width: 7, height: 3.5, image: "Tile_Hall_Chamber_1_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 0.22, to: 0.72, kind: 'door' }, { from: 1.64, to: 1.96, kind: 'door' }, { from: 2.64, to: 3.28, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Temple hall with scattered rubble and green idol statue" },
131
+ TileSideHallChamber2: { width: 7, height: 3.5, image: "Tile_Hall_Chamber_2_MAD28", openings: { N: [{ from: 0, to: 3.27, kind: 'open' }], E: [{ from: 1.23, to: 2.43, kind: 'door' }], S: [{ from: 0, to: 3.28, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Cracked stone chamber with bookshelf alcove on east side" },
132
+ TileSideStorageChamber: { width: 7, height: 3.5, image: "Tile_Storage_Chamber_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Temple storage room with shelves, crates, and cracked floor" },
133
+ TileSidePoolChamber: { width: 7, height: 7, image: "Tile_Pool_Chamber_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Flooded cave chamber with large turquoise pool and island" },
134
+ TileSideMosaicChamber: { width: 7, height: 7, image: "Tile_Mosaic_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Ornate chamber with vivid stained-glass mosaic floor pattern" },
135
135
  TileSideRavine: { width: 7, height: 3.5, image: "Tile_Ravine_MAD28", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Outdoor rocky ravine with fallen branches and mossy ground" },
136
- TileSideAntechamber: { width: 7, height: 3.5, image: "Tile_Antechamber_MAD28", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Stone antechamber with cracked floor and scattered red debris" },
137
- TileSideCrackedChamber: { width: 7, height: 7, image: "Tile_Cracked_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Large crumbling temple chamber with deep central crack and rubble" },
136
+ TileSideAntechamber: { width: 7, height: 3.5, image: "Tile_Antechamber_MAD28", openings: { N: [], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Stone antechamber with cracked floor and scattered red debris" },
137
+ TileSideCrackedChamber: { width: 7, height: 7, image: "Tile_Cracked_Chamber_MAD28", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Large crumbling temple chamber with deep central crack and rubble" },
138
138
  TileSideRuinedChamber: { width: 7, height: 3.5, image: "Tile_Ruined_Chamber_MAD28", openings: { N: [], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Collapsed temple room half-filled with boulder rubble" },
139
139
  // --- soa ---
140
- TileSideDiner: { width: 10.5, height: 7, image: "Tile_Diner_MAD25", openings: { N: [{ from: 8.22, to: 9.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 8.22, to: 9.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Checkered-floor diner with counter, kitchen area, and booth seating" },
141
- TileSideExhibitEntrance: { width: 10.5, height: 7, image: "Tile_Exhibit_Entrance_MAD25", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 0.21, to: 10.29, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Green-tiled museum entrance hall with large whale skeleton mural" },
140
+ TileSideDiner: { width: 10.5, height: 7, image: "Tile_Diner_MAD25", openings: { N: [{ from: 8.22, to: 9.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 8.22, to: 9.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Checkered-floor diner with counter, kitchen area, and booth seating" },
141
+ TileSideExhibitEntrance: { width: 10.5, height: 7, image: "Tile_Exhibit_Entrance_MAD25", openings: { N: [{ from: 0.21, to: 10.29, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Green-tiled museum entrance hall with large whale skeleton mural" },
142
142
  TileSideYard1MAD25: { width: 7, height: 7, image: "Tile_Yard_1_MAD25", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Grassy yard with stone paths, benches, and scattered hedges" },
143
- TileSideMainExhibit: { width: 7, height: 7, image: "Tile_Main_Exhibit_MAD25", openings: { N: [{ from: 0.21, to: 6.78, kind: 'open' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Museum exhibit room with central dinosaur skeleton display case" },
143
+ TileSideMainExhibit: { width: 7, height: 7, image: "Tile_Main_Exhibit_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 0.21, to: 6.78, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Museum exhibit room with central dinosaur skeleton display case" },
144
144
  TileSideLab: { width: 7, height: 7, image: "Tile_Lab_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Dark tiled laboratory with shelves, equipment, and overhead lighting" },
145
145
  TileSideBandstand: { width: 7, height: 7, image: "Tile_Bandstand_MAD25", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 7, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Outdoor octagonal wooden bandstand surrounded by grass and bushes" },
146
- TileSideLobbyMAD25: { width: 7, height: 7, image: "Tile_Lobby_MAD25", openings: { N: [{ from: 2.98, to: 4.02, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Herringbone-floored lobby with fireplace, paintings, and ornate rug" },
147
- TileSideExhibit3: { width: 7, height: 7, image: "Tile_Exhibit_3_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Cluttered museum storage room with diamond-pattern floor and artifacts" },
148
- TileSideClassroom1: { width: 7, height: 7, image: "Tile_Classroom_1_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Wooden lecture hall with tiered bench seating and podium" },
149
- TileSideLibraryMAD25: { width: 7, height: 7, image: "Tile_Library_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Warm library with central reading area, bookshelves, and herringbone floor" },
150
- TileSideGeneralShop: { width: 7, height: 7, image: "Tile_General_Shop_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Cluttered general store with shelves, merchandise, and dark wood floors" },
151
- TileSideStudio: { width: 7, height: 7, image: "Tile_Studio_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark artist studio with ghostly canvas, paint supplies, and columns" },
152
- TileSideSewer1: { width: 7, height: 3.5, image: "Tile_Sewer_1_MAD25", openings: { N: [{ from: 3.73, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 1.22, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark stone sewer corridor with debris and mechanical equipment" },
153
- TileSideLibraryArchives: { width: 7, height: 3.5, image: "Tile_Library_Archives_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Wooden archive room with bookshelves, scattered papers and red chairs" },
154
- TileSidePrintingPress: { width: 7, height: 3.5, image: "Tile_Printing_Press_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Industrial printing press room with two large presses and columns" },
155
- TileSideExhibit2: { width: 7, height: 3.5, image: "Tile_Exhibit_2_MAD25", openings: { N: [{ from: 0, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 0, to: 3.28, kind: 'open' }] }, desc: "Green checkered museum exhibit hall with display case in center" },
156
- TileSideStreetCorner: { width: 7, height: 3.5, image: "Tile_Street_Corner_MAD25", openings: { N: [{ from: 0.21, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [{ from: 0.21, to: 3.29, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.32, kind: 'door' }] }, desc: "Cobblestone street corner with brick wall and lamppost" },
157
- TileSideResearchLibrary: { width: 7, height: 3.5, image: "Tile_Research_Library_MAD25", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Parquet-floored library with tall bookshelves and large globe" },
158
- TileSideSewer2: { width: 7, height: 3.5, image: "Tile_Sewer_2_MAD25", openings: { N: [], E: [{ from: 0.22, to: 3.28, kind: 'open' }], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 0.22, to: 3.28, kind: 'open' }] }, desc: "Stone sewer tunnel with scattered crates and dark water pools" },
159
- TileSideChapelMAD25: { width: 7, height: 3.5, image: "Tile_Chapel_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Chapel interior with pews, stained glass light and checkered floor" },
146
+ TileSideLobbyMAD25: { width: 7, height: 7, image: "Tile_Lobby_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 2.98, to: 4.02, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Herringbone-floored lobby with fireplace, paintings, and ornate rug" },
147
+ TileSideExhibit3: { width: 7, height: 7, image: "Tile_Exhibit_3_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered museum storage room with diamond-pattern floor and artifacts" },
148
+ TileSideClassroom1: { width: 7, height: 7, image: "Tile_Classroom_1_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [], W: [] }, desc: "Wooden lecture hall with tiered bench seating and podium" },
149
+ TileSideLibraryMAD25: { width: 7, height: 7, image: "Tile_Library_MAD25", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 4.73, to: 5.77, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Warm library with central reading area, bookshelves, and herringbone floor" },
150
+ TileSideGeneralShop: { width: 7, height: 7, image: "Tile_General_Shop_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered general store with shelves, merchandise, and dark wood floors" },
151
+ TileSideStudio: { width: 7, height: 7, image: "Tile_Studio_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 4.73, to: 5.77, kind: 'door' }] }, desc: "Dark artist studio with ghostly canvas, paint supplies, and columns" },
152
+ TileSideSewer1: { width: 7, height: 3.5, image: "Tile_Sewer_1_MAD25", openings: { N: [{ from: 1.22, to: 2.27, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 3.73, to: 7, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark stone sewer corridor with debris and mechanical equipment" },
153
+ TileSideLibraryArchives: { width: 7, height: 3.5, image: "Tile_Library_Archives_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Wooden archive room with bookshelves, scattered papers and red chairs" },
154
+ TileSidePrintingPress: { width: 7, height: 3.5, image: "Tile_Printing_Press_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Industrial printing press room with two large presses and columns" },
155
+ TileSideExhibit2: { width: 7, height: 3.5, image: "Tile_Exhibit_2_MAD25", openings: { N: [], E: [], S: [{ from: 0, to: 3.28, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 0.22, to: 3.5, kind: 'open' }] }, desc: "Green checkered museum exhibit hall with display case in center" },
156
+ TileSideStreetCorner: { width: 7, height: 3.5, image: "Tile_Street_Corner_MAD25", openings: { N: [{ from: 0.21, to: 3.29, kind: 'open' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 0.21, to: 7, kind: 'open' }], W: [{ from: 1.18, to: 2.27, kind: 'door' }] }, desc: "Cobblestone street corner with brick wall and lamppost" },
157
+ TileSideResearchLibrary: { width: 7, height: 3.5, image: "Tile_Research_Library_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Parquet-floored library with tall bookshelves and large globe" },
158
+ TileSideSewer2: { width: 7, height: 3.5, image: "Tile_Sewer_2_MAD25", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [{ from: 0.22, to: 3.28, kind: 'open' }], S: [], W: [{ from: 0.22, to: 3.28, kind: 'open' }] }, desc: "Stone sewer tunnel with scattered crates and dark water pools" },
159
+ TileSideChapelMAD25: { width: 7, height: 3.5, image: "Tile_Chapel_MAD25", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Chapel interior with pews, stained glass light and checkered floor" },
160
160
  TileSideSpeakeasy: { width: 7, height: 3.5, image: "Tile_Speakeasy_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dimly lit speakeasy bar with wooden floors and circular stage" },
161
- TileSidePortraitHall: { width: 7, height: 3.5, image: "Tile_Portrait_Hall_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.73, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.28, kind: 'open' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Green tiled hallway with portraits, luggage and display case" },
162
- TileSideMagicShop: { width: 7, height: 3.5, image: "Tile_Magic_Shop_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered magic shop with shelves, rug and fortune-telling chair" },
163
- TileSideOfficeMAD25: { width: 7, height: 3.5, image: "Tile_Office_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark wood office with large oval rug and desk" },
161
+ TileSidePortraitHall: { width: 7, height: 3.5, image: "Tile_Portrait_Hall_MAD25", openings: { N: [], E: [{ from: 0.22, to: 3.5, kind: 'open' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.73, to: 7, kind: 'open' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Green tiled hallway with portraits, luggage and display case" },
162
+ TileSideMagicShop: { width: 7, height: 3.5, image: "Tile_Magic_Shop_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered magic shop with shelves, rug and fortune-telling chair" },
163
+ TileSideOfficeMAD25: { width: 7, height: 3.5, image: "Tile_Office_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark wood office with large oval rug and desk" },
164
164
  TileSideYard2MAD25: { width: 7, height: 3.5, image: "Tile_Yard_2_MAD25", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Overgrown yard with debris, trees, and winding path" },
165
- TileSideBedroomMAD25: { width: 7, height: 3.5, image: "Tile_Bedroom_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [] }, desc: "Bedroom with round rug, bathtub, and luggage" },
166
- TileSideAlley: { width: 7, height: 3.5, image: "Tile_Alley_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.78, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 0.21, to: 3.29, kind: 'open' }], W: [] }, desc: "Dark cobblestone alley cluttered with crates and debris" },
165
+ TileSideBedroomMAD25: { width: 7, height: 3.5, image: "Tile_Bedroom_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Bedroom with round rug, bathtub, and luggage" },
166
+ TileSideAlley: { width: 7, height: 3.5, image: "Tile_Alley_MAD25", openings: { N: [{ from: 0.21, to: 3.29, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.78, kind: 'open' }], W: [] }, desc: "Dark cobblestone alley cluttered with crates and debris" },
167
167
  TileSideExhibit1: { width: 7, height: 3.5, image: "Tile_Exhibit_1_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.79, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 3.72, to: 6.79, kind: 'open' }], W: [] }, desc: "Museum exhibit hall with checkered floor and dinosaur display" },
168
- TileSideCuriosityShop: { width: 7, height: 3.5, image: "Tile_Curiosity_Shop_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered curiosity shop with round table and red wood walls" },
169
- TileSideHallStairsMAD25: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 0.21, to: 3.27, kind: 'open' }], W: [] }, desc: "Grand hallway with checkered floor and staircases on both sides" },
170
- TileSideWarehouseMAD25: { width: 7, height: 3.5, image: "Tile_Warehouse_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark warehouse packed with crates, barrels, and scattered goods" },
171
- TileSideClassroom2: { width: 7, height: 3.5, image: "Tile_Classroom_2_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Classroom with large blackboard, wooden floor, and scattered papers" },
172
- TileSideClassroom3: { width: 7, height: 3.5, image: "Tile_Classroom_3_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Classroom with long floral-covered table and framed paintings" },
173
- TileSideLoungeMAD25: { width: 7, height: 3.5, image: "Tile_Lounge_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [{ from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Lounge with herringbone floor, paintings, and ornate furniture" },
168
+ TileSideCuriosityShop: { width: 7, height: 3.5, image: "Tile_Curiosity_Shop_MAD25", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Cluttered curiosity shop with round table and red wood walls" },
169
+ TileSideHallStairsMAD25: { width: 7, height: 3.5, image: "Tile_Hall_Stairs_MAD25", openings: { N: [{ from: 0.21, to: 3.27, kind: 'open' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Grand hallway with checkered floor and staircases on both sides" },
170
+ TileSideWarehouseMAD25: { width: 7, height: 3.5, image: "Tile_Warehouse_MAD25", openings: { N: [], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Dark warehouse packed with crates, barrels, and scattered goods" },
171
+ TileSideClassroom2: { width: 7, height: 3.5, image: "Tile_Classroom_2_MAD25", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Classroom with large blackboard, wooden floor, and scattered papers" },
172
+ TileSideClassroom3: { width: 7, height: 3.5, image: "Tile_Classroom_3_MAD25", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [], W: [{ from: 1.23, to: 2.27, kind: 'door' }] }, desc: "Classroom with long floral-covered table and framed paintings" },
173
+ TileSideLoungeMAD25: { width: 7, height: 3.5, image: "Tile_Lounge_MAD25", openings: { N: [{ from: 4.73, to: 5.77, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }, { from: 4.73, to: 5.77, kind: 'door' }], W: [] }, desc: "Lounge with herringbone floor, paintings, and ornate furniture" },
174
174
  // --- sot ---
175
175
  TileSideCafe: { width: 7, height: 7, image: "Tile_Cafe_MAD26", openings: { N: [{ from: 0, to: 3.29, kind: 'open' }], E: [], S: [{ from: 0, to: 3.29, kind: 'open' }], W: [{ from: 0, to: 7, kind: 'open' }] }, desc: "Cafe with cobblestone patio and wood-floored dining area" },
176
176
  TileSideDungeonHall: { width: 7, height: 7, image: "Tile_Dungeon_Hall_MAD26", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Dark dungeon rooms connected by a checkered hallway" },
177
177
  TileSideCeremonyRoomMAD26: { width: 7, height: 3.5, image: "Tile_Ceremony_Room_MAD26", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Ceremonial room with ornate altar and tiled floor" },
178
- TileSideInnerSanctum: { width: 7, height: 3.5, image: "Tile_Inner_Sanctum_MAD26", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 1.22, to: 2.26, kind: 'door' }] }, desc: "Red-carpeted sanctum with cushioned seating and wooden alcove" },
179
- TileSideLoungeMAD26: { width: 7, height: 3.5, image: "Tile_Lounge_MAD26", openings: { N: [{ from: 1.23, to: 2.27, kind: 'door' }], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [], W: [] }, desc: "Herringbone-floored lounge with fireplace and armchair" },
178
+ TileSideInnerSanctum: { width: 7, height: 3.5, image: "Tile_Inner_Sanctum_MAD26", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 1.24, to: 2.28, kind: 'door' }] }, desc: "Red-carpeted sanctum with cushioned seating and wooden alcove" },
179
+ TileSideLoungeMAD26: { width: 7, height: 3.5, image: "Tile_Lounge_MAD26", openings: { N: [], E: [{ from: 1.23, to: 2.27, kind: 'door' }], S: [{ from: 1.23, to: 2.27, kind: 'door' }], W: [] }, desc: "Herringbone-floored lounge with fireplace and armchair" },
180
180
  TileSideParadeFloat1: { width: 7, height: 3.5, image: "Tile_Parade_Float_1_MAD26", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Parade float with large flower decoration on cobblestone street" },
181
181
  TileSideParadeFloat2: { width: 7, height: 3.5, image: "Tile_Parade_Float_2_MAD26", openings: { N: [{ from: 0, to: 7, kind: 'open' }], E: [{ from: 0, to: 3.5, kind: 'open' }], S: [{ from: 0, to: 7, kind: 'open' }], W: [{ from: 0, to: 3.5, kind: 'open' }] }, desc: "Parade float with sunburst banner and central emblem" },
182
- TileSidePharmacy: { width: 7, height: 3.5, image: "Tile_Pharmacy_MAD26", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [], W: [{ from: 1.22, to: 2.26, kind: 'door' }] }, desc: "Blue-tiled pharmacy with counter and shelves of medicine" },
183
- TileSideStorageRoom: { width: 7, height: 3.5, image: "Tile_Storage_Room_MAD26", openings: { N: [{ from: 4.72, to: 5.76, kind: 'door' }], E: [], S: [], W: [] }, desc: "Wooden storage room with racks of equipment and supplies" },
184
- TileSideVault: { width: 7, height: 3.5, image: "Tile_Vault_MAD26", openings: { N: [{ from: 0.21, to: 3.28, kind: 'open' }], E: [], S: [], W: [] }, desc: "Split vault with wooden office area and dark stone strongroom" },
182
+ TileSidePharmacy: { width: 7, height: 3.5, image: "Tile_Pharmacy_MAD26", openings: { N: [], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [{ from: 1.24, to: 2.28, kind: 'door' }] }, desc: "Blue-tiled pharmacy with counter and shelves of medicine" },
183
+ TileSideStorageRoom: { width: 7, height: 3.5, image: "Tile_Storage_Room_MAD26", openings: { N: [], E: [], S: [{ from: 4.72, to: 5.76, kind: 'door' }], W: [] }, desc: "Wooden storage room with racks of equipment and supplies" },
184
+ TileSideVault: { width: 7, height: 3.5, image: "Tile_Vault_MAD26", openings: { N: [], E: [], S: [{ from: 0.21, to: 3.28, kind: 'open' }], W: [] }, desc: "Split vault with wooden office area and dark stone strongroom" },
185
185
  };
186
186
  //# sourceMappingURL=tile-geometry.js.map