From c49669ecd8e25388e2f9697a99e4ad9be34c52ae Mon Sep 17 00:00:00 2001 From: Pascal Garber Date: Fri, 12 Jun 2026 12:37:22 +0200 Subject: [PATCH] feat(zelda-like): tree house in original fsa layout --- games/zelda-like/CREDITS.md | 6 +- games/zelda-like/maps/kokiri-forest.json | 8 +- games/zelda-like/maps/tree-house.json | 1244 +++++++++++++----- games/zelda-like/spritesets/tree-house.json | 1265 +++++++++++++++---- games/zelda-like/spritesets/tree-house.png | Bin 13454 -> 24885 bytes games/zelda-like/tools/build-tree-house.py | 159 +++ 6 files changed, 2178 insertions(+), 504 deletions(-) create mode 100644 games/zelda-like/tools/build-tree-house.py diff --git a/games/zelda-like/CREDITS.md b/games/zelda-like/CREDITS.md index 079e9e9d..cba1abbd 100644 --- a/games/zelda-like/CREDITS.md +++ b/games/zelda-like/CREDITS.md @@ -22,8 +22,10 @@ distributed as a game. recomposed onto a uniform sprite grid for the PixelRPG sprite-set format. - **Tree-house interior tileset** — from **OoT2D: Full Steam Ahead** (`oot2d_fsa`, `graphics/finalized/tileset_kokiri_forest_interior.png`, - authored by **xfixium** and the oot2d_fsa contributors), sliced into the - PixelRPG tileset format for the `tree-house` map. + authored by **xfixium** and the oot2d_fsa contributors); the room layout + follows the FSA project's own `links_house` reference screenshot + (`graphics/screens/kokiri_inside_sample_01.png`), rebuilt with the + finalized graphics via `tools/build-tree-house.py`. - The original pixel art in these projects derives from Nintendo's *The Legend of Zelda* games; see the Nintendo notice above. diff --git a/games/zelda-like/maps/kokiri-forest.json b/games/zelda-like/maps/kokiri-forest.json index a93c18bf..1dd546af 100644 --- a/games/zelda-like/maps/kokiri-forest.json +++ b/games/zelda-like/maps/kokiri-forest.json @@ -124816,8 +124816,8 @@ { "type": "teleport", "targetMapId": "tree-house", - "targetTileX": 5, - "targetTileY": 8, + "targetTileX": 10, + "targetTileY": 12, "facing": "up", "label": "Link's Tree House" } @@ -124843,8 +124843,8 @@ { "type": "teleport", "targetMapId": "tree-house", - "targetTileX": 5, - "targetTileY": 8, + "targetTileX": 10, + "targetTileY": 12, "facing": "up", "label": "Link's Tree House" } diff --git a/games/zelda-like/maps/tree-house.json b/games/zelda-like/maps/tree-house.json index 3b5feab9..190fae31 100644 --- a/games/zelda-like/maps/tree-house.json +++ b/games/zelda-like/maps/tree-house.json @@ -4,8 +4,8 @@ "version": "1.0.0", "tileWidth": 16, "tileHeight": 16, - "columns": 11, - "rows": 11, + "columns": 21, + "rows": 15, "spriteSets": [ { "id": "tree-house", @@ -22,633 +22,1313 @@ "tier": "ground", "sprites": [ { - "x": 3, - "y": 0, - "spriteId": 3, + "x": 5, + "y": 5, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 0, - "spriteId": 4, + "x": 6, + "y": 5, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 0, - "spriteId": 5, + "x": 6, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 6, - "y": 0, - "spriteId": 6, + "y": 10, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 7, - "y": 0, - "spriteId": 7, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 8, - "y": 0, - "spriteId": 8, + "y": 4, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 1, - "spriteId": 12, + "x": 8, + "y": 5, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 1, - "spriteId": 13, + "x": 8, + "y": 6, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 1, - "spriteId": 14, + "x": 8, + "y": 7, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 1, - "spriteId": 15, + "x": 8, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 1, - "spriteId": 16, + "x": 9, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 10, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 9, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 10, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 5, + "spriteId": 36, "spriteSetId": "tree-house" }, + { + "x": 16, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + } + ] + }, + { + "id": "layer_decor", + "name": "Decor", + "visible": true, + "tier": "hero", + "sprites": [ { "x": 6, "y": 1, - "spriteId": 17, + "spriteId": 5, "spriteSetId": "tree-house" }, { "x": 7, "y": 1, - "spriteId": 18, + "spriteId": 5, "spriteSetId": "tree-house" }, { "x": 8, "y": 1, - "spriteId": 19, + "spriteId": 5, "spriteSetId": "tree-house" }, { "x": 9, "y": 1, - "spriteId": 20, + "spriteId": 5, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 2, - "spriteId": 23, + "x": 10, + "y": 1, + "spriteId": 5, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 2, - "spriteId": 24, + "x": 11, + "y": 1, + "spriteId": 5, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 2, - "spriteId": 25, + "x": 12, + "y": 1, + "spriteId": 5, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 2, - "spriteId": 26, + "x": 13, + "y": 1, + "spriteId": 5, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 1, + "spriteId": 5, "spriteSetId": "tree-house" }, { "x": 5, "y": 2, - "spriteId": 27, + "spriteId": 17, "spriteSetId": "tree-house" }, { "x": 6, "y": 2, - "spriteId": 28, + "spriteId": 21, "spriteSetId": "tree-house" }, { "x": 7, "y": 2, - "spriteId": 29, + "spriteId": 21, "spriteSetId": "tree-house" }, { "x": 8, "y": 2, - "spriteId": 30, + "spriteId": 21, "spriteSetId": "tree-house" }, { "x": 9, "y": 2, - "spriteId": 31, + "spriteId": 21, "spriteSetId": "tree-house" }, { "x": 10, "y": 2, - "spriteId": 32, + "spriteId": 21, "spriteSetId": "tree-house" }, { - "x": 0, - "y": 3, - "spriteId": 33, + "x": 11, + "y": 2, + "spriteId": 21, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 2, + "spriteId": 21, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 2, + "spriteId": 21, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 2, + "spriteId": 21, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 2, + "spriteId": 41, "spriteSetId": "tree-house" }, { - "x": 1, + "x": 4, "y": 3, - "spriteId": 34, + "spriteId": 17, "spriteSetId": "tree-house" }, { - "x": 2, + "x": 5, "y": 3, - "spriteId": 35, + "spriteId": 21, "spriteSetId": "tree-house" }, { - "x": 3, + "x": 6, "y": 3, "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 3, - "spriteId": 37, + "x": 7, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 3, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 3, + "spriteId": 21, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 3, + "spriteId": 41, + "spriteSetId": "tree-house" + }, + { + "x": 3, + "y": 4, + "spriteId": 80, + "spriteSetId": "tree-house" + }, + { + "x": 4, + "y": 4, + "spriteId": 81, + "spriteSetId": "tree-house" + }, + { + "x": 5, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 4, + "spriteId": 54, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 4, + "spriteId": 55, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 4, + "spriteId": 56, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 4, + "spriteId": 101, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 4, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 4, + "spriteId": 105, + "spriteSetId": "tree-house" + }, + { + "x": 17, + "y": 4, + "spriteId": 90, + "spriteSetId": "tree-house" + }, + { + "x": 3, + "y": 5, + "spriteId": 80, + "spriteSetId": "tree-house" + }, + { + "x": 4, + "y": 5, + "spriteId": 81, + "spriteSetId": "tree-house" + }, + { + "x": 5, + "y": 5, + "spriteId": 140, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 5, + "spriteId": 100, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 5, + "spriteId": 100, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 5, + "spriteId": 70, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 5, + "spriteId": 71, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 5, + "spriteId": 72, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 5, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 5, + "spriteId": 140, + "spriteSetId": "tree-house" + }, + { + "x": 17, + "y": 5, + "spriteId": 105, + "spriteSetId": "tree-house" + }, + { + "x": 18, + "y": 5, + "spriteId": 90, + "spriteSetId": "tree-house" + }, + { + "x": 3, + "y": 6, + "spriteId": 80, + "spriteSetId": "tree-house" + }, + { + "x": 4, + "y": 6, + "spriteId": 81, + "spriteSetId": "tree-house" + }, + { + "x": 5, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 6, + "spriteId": 51, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 6, + "spriteId": 52, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 6, + "spriteId": 53, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 6, + "spriteId": 208, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 6, + "spriteId": 209, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 6, + "spriteId": 210, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 6, + "spriteId": 174, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 6, + "spriteId": 175, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 6, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 17, + "y": 6, + "spriteId": 105, + "spriteSetId": "tree-house" + }, + { + "x": 18, + "y": 6, + "spriteId": 90, + "spriteSetId": "tree-house" + }, + { + "x": 3, + "y": 7, + "spriteId": 80, + "spriteSetId": "tree-house" + }, + { + "x": 4, + "y": 7, + "spriteId": 81, + "spriteSetId": "tree-house" + }, + { + "x": 5, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 7, + "spriteId": 67, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 7, + "spriteId": 68, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 7, + "spriteId": 69, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 10, + "y": 7, + "spriteId": 224, + "spriteSetId": "tree-house" + }, + { + "x": 11, + "y": 7, + "spriteId": 225, + "spriteSetId": "tree-house" + }, + { + "x": 12, + "y": 7, + "spriteId": 226, + "spriteSetId": "tree-house" + }, + { + "x": 13, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 14, + "y": 7, + "spriteId": 190, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 7, + "spriteId": 191, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 7, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 17, + "y": 7, + "spriteId": 105, + "spriteSetId": "tree-house" + }, + { + "x": 18, + "y": 7, + "spriteId": 90, + "spriteSetId": "tree-house" + }, + { + "x": 3, + "y": 8, + "spriteId": 80, + "spriteSetId": "tree-house" + }, + { + "x": 4, + "y": 8, + "spriteId": 81, + "spriteSetId": "tree-house" + }, + { + "x": 5, + "y": 8, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 6, + "y": 8, + "spriteId": 83, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 8, + "spriteId": 84, + "spriteSetId": "tree-house" + }, + { + "x": 8, + "y": 8, + "spriteId": 85, + "spriteSetId": "tree-house" + }, + { + "x": 9, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 3, - "spriteId": 38, + "x": 10, + "y": 8, + "spriteId": 240, "spriteSetId": "tree-house" }, { - "x": 6, - "y": 3, - "spriteId": 39, + "x": 11, + "y": 8, + "spriteId": 241, "spriteSetId": "tree-house" }, { - "x": 7, - "y": 3, - "spriteId": 40, + "x": 12, + "y": 8, + "spriteId": 242, "spriteSetId": "tree-house" }, { - "x": 8, - "y": 3, - "spriteId": 41, + "x": 13, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 9, - "y": 3, - "spriteId": 42, + "x": 14, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 10, - "y": 3, - "spriteId": 43, + "x": 15, + "y": 8, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 0, - "y": 4, - "spriteId": 44, + "x": 16, + "y": 8, + "spriteId": 140, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 4, - "spriteId": 45, + "x": 17, + "y": 8, + "spriteId": 105, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 4, - "spriteId": 46, + "x": 18, + "y": 8, + "spriteId": 90, "spriteSetId": "tree-house" }, { "x": 3, - "y": 4, - "spriteId": 47, + "y": 9, + "spriteId": 80, "spriteSetId": "tree-house" }, { "x": 4, - "y": 4, - "spriteId": 48, + "y": 9, + "spriteId": 81, "spriteSetId": "tree-house" }, { "x": 5, - "y": 4, - "spriteId": 49, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 6, - "y": 4, - "spriteId": 50, + "y": 9, + "spriteId": 89, "spriteSetId": "tree-house" }, { "x": 7, - "y": 4, - "spriteId": 51, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 8, - "y": 4, - "spriteId": 52, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 9, - "y": 4, - "spriteId": 53, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 10, - "y": 4, - "spriteId": 54, - "spriteSetId": "tree-house" - }, - { - "x": 0, - "y": 5, - "spriteId": 55, - "spriteSetId": "tree-house" - }, - { - "x": 1, - "y": 5, - "spriteId": 56, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 5, - "spriteId": 30, + "x": 11, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 5, - "spriteId": 58, + "x": 12, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 5, - "spriteId": 59, + "x": 13, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 5, - "spriteId": 60, + "x": 14, + "y": 9, + "spriteId": 206, "spriteSetId": "tree-house" }, { - "x": 6, - "y": 5, - "spriteId": 61, + "x": 15, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 7, - "y": 5, - "spriteId": 62, + "x": 16, + "y": 9, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 8, - "y": 5, - "spriteId": 63, + "x": 17, + "y": 9, + "spriteId": 105, "spriteSetId": "tree-house" }, { - "x": 9, - "y": 5, - "spriteId": 64, + "x": 18, + "y": 9, + "spriteId": 90, "spriteSetId": "tree-house" }, { - "x": 10, - "y": 5, - "spriteId": 65, + "x": 3, + "y": 10, + "spriteId": 80, "spriteSetId": "tree-house" }, { - "x": 0, - "y": 6, - "spriteId": 66, + "x": 4, + "y": 10, + "spriteId": 81, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 6, - "spriteId": 67, + "x": 5, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 6, - "spriteId": 68, + "x": 6, + "y": 10, + "spriteId": 89, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 6, - "spriteId": 69, + "x": 7, + "y": 10, + "spriteId": 89, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 6, - "spriteId": 70, + "x": 8, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 6, - "spriteId": 71, + "x": 9, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 6, - "y": 6, - "spriteId": 72, + "x": 10, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 7, - "y": 6, - "spriteId": 73, + "x": 11, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 8, - "y": 6, - "spriteId": 74, + "x": 12, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 9, - "y": 6, - "spriteId": 75, + "x": 13, + "y": 10, + "spriteId": 134, "spriteSetId": "tree-house" }, { - "x": 10, - "y": 6, - "spriteId": 76, + "x": 14, + "y": 10, + "spriteId": 222, "spriteSetId": "tree-house" }, { - "x": 0, - "y": 7, - "spriteId": 77, + "x": 15, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 7, - "spriteId": 78, + "x": 16, + "y": 10, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 7, - "spriteId": 79, + "x": 17, + "y": 10, + "spriteId": 105, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 7, - "spriteId": 80, + "x": 18, + "y": 10, + "spriteId": 90, "spriteSetId": "tree-house" }, { "x": 4, - "y": 7, - "spriteId": 81, + "y": 11, + "spriteId": 145, "spriteSetId": "tree-house" }, { "x": 5, - "y": 7, - "spriteId": 82, + "y": 11, + "spriteId": 150, "spriteSetId": "tree-house" }, { "x": 6, - "y": 7, - "spriteId": 83, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 7, - "y": 7, - "spriteId": 84, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 8, - "y": 7, - "spriteId": 85, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 9, - "y": 7, - "spriteId": 86, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { "x": 10, - "y": 7, - "spriteId": 87, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 8, - "spriteId": 89, + "x": 11, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 8, - "spriteId": 90, + "x": 12, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 8, - "spriteId": 91, + "x": 13, + "y": 11, + "spriteId": 36, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 8, - "spriteId": 92, + "x": 14, + "y": 11, + "spriteId": 36, + "spriteSetId": "tree-house" + }, + { + "x": 15, + "y": 11, + "spriteId": 150, + "spriteSetId": "tree-house" + }, + { + "x": 16, + "y": 11, + "spriteId": 137, "spriteSetId": "tree-house" }, { "x": 5, - "y": 8, - "spriteId": 93, + "y": 12, + "spriteId": 145, "spriteSetId": "tree-house" }, { "x": 6, - "y": 8, - "spriteId": 94, + "y": 12, + "spriteId": 150, + "spriteSetId": "tree-house" + }, + { + "x": 7, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { "x": 8, - "y": 8, - "spriteId": 96, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { "x": 9, - "y": 8, - "spriteId": 97, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { "x": 10, - "y": 8, - "spriteId": 98, + "y": 12, + "spriteId": 177, "spriteSetId": "tree-house" }, { - "x": 1, - "y": 9, - "spriteId": 100, + "x": 11, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { - "x": 2, - "y": 9, - "spriteId": 101, + "x": 12, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { - "x": 3, - "y": 9, - "spriteId": 102, + "x": 13, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 9, - "spriteId": 103, + "x": 14, + "y": 12, + "spriteId": 150, "spriteSetId": "tree-house" }, { - "x": 5, - "y": 9, - "spriteId": 104, + "x": 15, + "y": 12, + "spriteId": 137, "spriteSetId": "tree-house" }, { "x": 6, - "y": 9, - "spriteId": 105, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { "x": 7, - "y": 9, - "spriteId": 106, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { "x": 8, - "y": 9, - "spriteId": 107, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { "x": 9, - "y": 9, - "spriteId": 108, - "spriteSetId": "tree-house" - }, - { - "x": 3, - "y": 10, - "spriteId": 113, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { - "x": 4, - "y": 10, - "spriteId": 114, - "spriteSetId": "tree-house" - }, - { - "x": 5, - "y": 10, - "spriteId": 115, + "x": 10, + "y": 13, + "spriteId": 177, "spriteSetId": "tree-house" }, { - "x": 6, - "y": 10, - "spriteId": 116, + "x": 11, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { - "x": 7, - "y": 10, - "spriteId": 117, + "x": 12, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { - "x": 8, - "y": 10, - "spriteId": 118, + "x": 13, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" }, { - "x": 7, - "y": 8, - "spriteId": 30, + "x": 14, + "y": 13, + "spriteId": 165, "spriteSetId": "tree-house" } ] @@ -665,8 +1345,8 @@ { "id": "tp-exit-to-forest", "layerId": "layer_functional", - "tileX": 5, - "tileY": 9, + "tileX": 10, + "tileY": 13, "inline": { "id": "tp-exit-to-forest-def", "name": "Door to Kokiri Forest", @@ -692,8 +1372,8 @@ { "id": "spawn-player", "layerId": "layer_functional", - "tileX": 5, - "tileY": 7, + "tileX": 10, + "tileY": 10, "inline": { "id": "spawn-player-def", "name": "Player spawn", diff --git a/games/zelda-like/spritesets/tree-house.json b/games/zelda-like/spritesets/tree-house.json index a5e5a4a8..8c06a7aa 100644 --- a/games/zelda-like/spritesets/tree-house.json +++ b/games/zelda-like/spritesets/tree-house.json @@ -10,8 +10,8 @@ }, "spriteWidth": 16, "spriteHeight": 16, - "columns": 11, - "rows": 11, + "columns": 16, + "rows": 16, "margin": 0, "spacing": 0, "sprites": [ @@ -83,627 +83,1460 @@ }, { "id": 11, - "col": 0, - "row": 1, + "col": 11, + "row": 0, "solid": true }, { "id": 12, - "col": 1, - "row": 1, + "col": 12, + "row": 0, "solid": true }, { "id": 13, - "col": 2, - "row": 1, + "col": 13, + "row": 0, "solid": true }, { "id": 14, - "col": 3, - "row": 1, + "col": 14, + "row": 0, "solid": true }, { "id": 15, - "col": 4, - "row": 1, + "col": 15, + "row": 0, "solid": true }, { "id": 16, - "col": 5, + "col": 0, "row": 1, "solid": true }, { "id": 17, - "col": 6, + "col": 1, "row": 1, "solid": true }, { "id": 18, - "col": 7, + "col": 2, "row": 1, "solid": true }, { "id": 19, - "col": 8, + "col": 3, "row": 1, "solid": true }, { "id": 20, - "col": 9, + "col": 4, "row": 1, "solid": true }, { "id": 21, - "col": 10, + "col": 5, "row": 1, "solid": true }, { "id": 22, - "col": 0, - "row": 2, + "col": 6, + "row": 1, "solid": true }, { "id": 23, - "col": 1, - "row": 2 + "col": 7, + "row": 1, + "solid": true }, { "id": 24, - "col": 2, - "row": 2 + "col": 8, + "row": 1, + "solid": true }, { "id": 25, - "col": 3, - "row": 2 + "col": 9, + "row": 1, + "solid": true }, { "id": 26, - "col": 4, - "row": 2 + "col": 10, + "row": 1, + "solid": true }, { "id": 27, - "col": 5, - "row": 2 + "col": 11, + "row": 1, + "solid": true }, { "id": 28, - "col": 6, - "row": 2 + "col": 12, + "row": 1, + "solid": true }, { "id": 29, - "col": 7, - "row": 2 + "col": 13, + "row": 1, + "solid": true }, { "id": 30, - "col": 8, - "row": 2 + "col": 14, + "row": 1, + "solid": true }, { "id": 31, - "col": 9, - "row": 2 + "col": 15, + "row": 1, + "solid": true }, { "id": 32, - "col": 10, + "col": 0, "row": 2, "solid": true }, { "id": 33, - "col": 0, - "row": 3, + "col": 1, + "row": 2, "solid": true }, { "id": 34, - "col": 1, - "row": 3 + "col": 2, + "row": 2, + "solid": true }, { "id": 35, - "col": 2, - "row": 3 + "col": 3, + "row": 2, + "solid": true }, { "id": 36, - "col": 3, - "row": 3, - "solid": true + "col": 4, + "row": 2 }, { "id": 37, - "col": 4, - "row": 3, + "col": 5, + "row": 2, "solid": true }, { "id": 38, - "col": 5, - "row": 3, + "col": 6, + "row": 2, "solid": true }, { "id": 39, - "col": 6, - "row": 3, + "col": 7, + "row": 2, "solid": true }, { "id": 40, - "col": 7, - "row": 3, - "solid": true + "col": 8, + "row": 2 }, { "id": 41, - "col": 8, - "row": 3, + "col": 9, + "row": 2, "solid": true }, { "id": 42, - "col": 9, - "row": 3 + "col": 10, + "row": 2, + "solid": true }, { "id": 43, - "col": 10, - "row": 3, + "col": 11, + "row": 2, "solid": true }, { "id": 44, - "col": 0, - "row": 4, + "col": 12, + "row": 2, "solid": true }, { "id": 45, - "col": 1, - "row": 4, + "col": 13, + "row": 2, "solid": true }, { "id": 46, - "col": 2, - "row": 4 + "col": 14, + "row": 2, + "solid": true }, { "id": 47, - "col": 3, - "row": 4, + "col": 15, + "row": 2, "solid": true }, { "id": 48, - "col": 4, - "row": 4, + "col": 0, + "row": 3, "solid": true }, { "id": 49, - "col": 5, - "row": 4, + "col": 1, + "row": 3, "solid": true }, { "id": 50, - "col": 6, - "row": 4, + "col": 2, + "row": 3, "solid": true }, { "id": 51, - "col": 7, - "row": 4, + "col": 3, + "row": 3, "solid": true }, { "id": 52, - "col": 8, - "row": 4, + "col": 4, + "row": 3, "solid": true }, { "id": 53, - "col": 9, - "row": 4 + "col": 5, + "row": 3, + "solid": true }, { "id": 54, - "col": 10, - "row": 4, + "col": 6, + "row": 3, "solid": true }, { "id": 55, - "col": 0, - "row": 5, + "col": 7, + "row": 3, "solid": true }, { "id": 56, - "col": 1, - "row": 5 + "col": 8, + "row": 3, + "solid": true }, { "id": 57, - "col": 2, - "row": 5 + "col": 9, + "row": 3, + "solid": true }, { "id": 58, - "col": 3, - "row": 5, + "col": 10, + "row": 3, "solid": true }, { "id": 59, - "col": 4, - "row": 5, + "col": 11, + "row": 3, "solid": true }, { "id": 60, - "col": 5, - "row": 5, + "col": 12, + "row": 3, "solid": true }, { "id": 61, - "col": 6, - "row": 5 + "col": 13, + "row": 3, + "solid": true }, { "id": 62, - "col": 7, - "row": 5, + "col": 14, + "row": 3, "solid": true }, { "id": 63, - "col": 8, - "row": 5, + "col": 15, + "row": 3, "solid": true }, { "id": 64, - "col": 9, - "row": 5, + "col": 0, + "row": 4, "solid": true }, { "id": 65, - "col": 10, - "row": 5, + "col": 1, + "row": 4, "solid": true }, { "id": 66, - "col": 0, - "row": 6, + "col": 2, + "row": 4, "solid": true }, { "id": 67, - "col": 1, - "row": 6 + "col": 3, + "row": 4, + "solid": true }, { "id": 68, - "col": 2, - "row": 6 + "col": 4, + "row": 4, + "solid": true }, { "id": 69, - "col": 3, - "row": 6, + "col": 5, + "row": 4, "solid": true }, { "id": 70, - "col": 4, - "row": 6 + "col": 6, + "row": 4, + "solid": true }, { "id": 71, - "col": 5, - "row": 6, + "col": 7, + "row": 4, "solid": true }, { "id": 72, - "col": 6, - "row": 6, + "col": 8, + "row": 4, "solid": true }, { "id": 73, - "col": 7, - "row": 6, + "col": 9, + "row": 4, "solid": true }, { "id": 74, - "col": 8, - "row": 6, + "col": 10, + "row": 4, "solid": true }, { "id": 75, - "col": 9, - "row": 6 + "col": 11, + "row": 4, + "solid": true }, { "id": 76, - "col": 10, - "row": 6, + "col": 12, + "row": 4, "solid": true }, { "id": 77, - "col": 0, - "row": 7, + "col": 13, + "row": 4, "solid": true }, { "id": 78, - "col": 1, - "row": 7 + "col": 14, + "row": 4, + "solid": true }, { "id": 79, - "col": 2, - "row": 7 + "col": 15, + "row": 4, + "solid": true }, { "id": 80, - "col": 3, - "row": 7, + "col": 0, + "row": 5, "solid": true }, { "id": 81, - "col": 4, - "row": 7, + "col": 1, + "row": 5, "solid": true }, { "id": 82, - "col": 5, - "row": 7 + "col": 2, + "row": 5, + "solid": true }, { "id": 83, - "col": 6, - "row": 7 + "col": 3, + "row": 5, + "solid": true }, { "id": 84, - "col": 7, - "row": 7, + "col": 4, + "row": 5, "solid": true }, { "id": 85, - "col": 8, - "row": 7, + "col": 5, + "row": 5, "solid": true }, { "id": 86, - "col": 9, - "row": 7 + "col": 6, + "row": 5, + "solid": true }, { "id": 87, - "col": 10, - "row": 7, + "col": 7, + "row": 5, "solid": true }, { "id": 88, - "col": 0, - "row": 8, + "col": 8, + "row": 5, "solid": true }, { "id": 89, - "col": 1, - "row": 8 + "col": 9, + "row": 5, + "solid": true }, { "id": 90, - "col": 2, - "row": 8 + "col": 10, + "row": 5, + "solid": true }, { "id": 91, - "col": 3, - "row": 8 + "col": 11, + "row": 5, + "solid": true }, { "id": 92, - "col": 4, - "row": 8 + "col": 12, + "row": 5, + "solid": true }, { "id": 93, - "col": 5, - "row": 8 + "col": 13, + "row": 5, + "solid": true }, { "id": 94, - "col": 6, - "row": 8, + "col": 14, + "row": 5, "solid": true }, { "id": 95, - "col": 7, - "row": 8 + "col": 15, + "row": 5, + "solid": true }, { "id": 96, - "col": 8, - "row": 8 + "col": 0, + "row": 6, + "solid": true }, { "id": 97, - "col": 9, - "row": 8 + "col": 1, + "row": 6, + "solid": true }, { "id": 98, - "col": 10, - "row": 8, + "col": 2, + "row": 6, "solid": true }, { "id": 99, - "col": 0, - "row": 9, + "col": 3, + "row": 6, "solid": true }, { "id": 100, - "col": 1, - "row": 9, + "col": 4, + "row": 6, "solid": true }, { "id": 101, - "col": 2, - "row": 9, + "col": 5, + "row": 6, "solid": true }, { "id": 102, - "col": 3, - "row": 9, + "col": 6, + "row": 6, "solid": true }, { "id": 103, - "col": 4, - "row": 9, + "col": 7, + "row": 6, "solid": true }, { "id": 104, - "col": 5, - "row": 9 + "col": 8, + "row": 6, + "solid": true }, { "id": 105, - "col": 6, - "row": 9, + "col": 9, + "row": 6, "solid": true }, { "id": 106, - "col": 7, - "row": 9, + "col": 10, + "row": 6, "solid": true }, { "id": 107, - "col": 8, - "row": 9, + "col": 11, + "row": 6, "solid": true }, { "id": 108, - "col": 9, - "row": 9, + "col": 12, + "row": 6, "solid": true }, { "id": 109, - "col": 10, - "row": 9, + "col": 13, + "row": 6, "solid": true }, { "id": 110, - "col": 0, - "row": 10, + "col": 14, + "row": 6, "solid": true }, { "id": 111, - "col": 1, - "row": 10, + "col": 15, + "row": 6, "solid": true }, { "id": 112, - "col": 2, - "row": 10, + "col": 0, + "row": 7, "solid": true }, { "id": 113, - "col": 3, - "row": 10, + "col": 1, + "row": 7, "solid": true }, { "id": 114, - "col": 4, - "row": 10, + "col": 2, + "row": 7, "solid": true }, { "id": 115, - "col": 5, - "row": 10, + "col": 3, + "row": 7, "solid": true }, { "id": 116, - "col": 6, - "row": 10, + "col": 4, + "row": 7, "solid": true }, { "id": 117, - "col": 7, - "row": 10, + "col": 5, + "row": 7, "solid": true }, { "id": 118, - "col": 8, - "row": 10, + "col": 6, + "row": 7, "solid": true }, { "id": 119, - "col": 9, - "row": 10, + "col": 7, + "row": 7, "solid": true }, { "id": 120, + "col": 8, + "row": 7, + "solid": true + }, + { + "id": 121, + "col": 9, + "row": 7, + "solid": true + }, + { + "id": 122, "col": 10, - "row": 10, + "row": 7, + "solid": true + }, + { + "id": 123, + "col": 11, + "row": 7, + "solid": true + }, + { + "id": 124, + "col": 12, + "row": 7, + "solid": true + }, + { + "id": 125, + "col": 13, + "row": 7, + "solid": true + }, + { + "id": 126, + "col": 14, + "row": 7, + "solid": true + }, + { + "id": 127, + "col": 15, + "row": 7, + "solid": true + }, + { + "id": 128, + "col": 0, + "row": 8, + "solid": true + }, + { + "id": 129, + "col": 1, + "row": 8, + "solid": true + }, + { + "id": 130, + "col": 2, + "row": 8, + "solid": true + }, + { + "id": 131, + "col": 3, + "row": 8, + "solid": true + }, + { + "id": 132, + "col": 4, + "row": 8, + "solid": true + }, + { + "id": 133, + "col": 5, + "row": 8, + "solid": true + }, + { + "id": 134, + "col": 6, + "row": 8, + "solid": true + }, + { + "id": 135, + "col": 7, + "row": 8, + "solid": true + }, + { + "id": 136, + "col": 8, + "row": 8, + "solid": true + }, + { + "id": 137, + "col": 9, + "row": 8, + "solid": true + }, + { + "id": 138, + "col": 10, + "row": 8, + "solid": true + }, + { + "id": 139, + "col": 11, + "row": 8, + "solid": true + }, + { + "id": 140, + "col": 12, + "row": 8, + "solid": true + }, + { + "id": 141, + "col": 13, + "row": 8, + "solid": true + }, + { + "id": 142, + "col": 14, + "row": 8, + "solid": true + }, + { + "id": 143, + "col": 15, + "row": 8, + "solid": true + }, + { + "id": 144, + "col": 0, + "row": 9, + "solid": true + }, + { + "id": 145, + "col": 1, + "row": 9, + "solid": true + }, + { + "id": 146, + "col": 2, + "row": 9, + "solid": true + }, + { + "id": 147, + "col": 3, + "row": 9, + "solid": true + }, + { + "id": 148, + "col": 4, + "row": 9, + "solid": true + }, + { + "id": 149, + "col": 5, + "row": 9, + "solid": true + }, + { + "id": 150, + "col": 6, + "row": 9, + "solid": true + }, + { + "id": 151, + "col": 7, + "row": 9, + "solid": true + }, + { + "id": 152, + "col": 8, + "row": 9, + "solid": true + }, + { + "id": 153, + "col": 9, + "row": 9, + "solid": true + }, + { + "id": 154, + "col": 10, + "row": 9, + "solid": true + }, + { + "id": 155, + "col": 11, + "row": 9, + "solid": true + }, + { + "id": 156, + "col": 12, + "row": 9, + "solid": true + }, + { + "id": 157, + "col": 13, + "row": 9, + "solid": true + }, + { + "id": 158, + "col": 14, + "row": 9, + "solid": true + }, + { + "id": 159, + "col": 15, + "row": 9, + "solid": true + }, + { + "id": 160, + "col": 0, + "row": 10, + "solid": true + }, + { + "id": 161, + "col": 1, + "row": 10, + "solid": true + }, + { + "id": 162, + "col": 2, + "row": 10, + "solid": true + }, + { + "id": 163, + "col": 3, + "row": 10, + "solid": true + }, + { + "id": 164, + "col": 4, + "row": 10, + "solid": true + }, + { + "id": 165, + "col": 5, + "row": 10, + "solid": true + }, + { + "id": 166, + "col": 6, + "row": 10, + "solid": true + }, + { + "id": 167, + "col": 7, + "row": 10, + "solid": true + }, + { + "id": 168, + "col": 8, + "row": 10, + "solid": true + }, + { + "id": 169, + "col": 9, + "row": 10, + "solid": true + }, + { + "id": 170, + "col": 10, + "row": 10, + "solid": true + }, + { + "id": 171, + "col": 11, + "row": 10, + "solid": true + }, + { + "id": 172, + "col": 12, + "row": 10, + "solid": true + }, + { + "id": 173, + "col": 13, + "row": 10, + "solid": true + }, + { + "id": 174, + "col": 14, + "row": 10, + "solid": true + }, + { + "id": 175, + "col": 15, + "row": 10, + "solid": true + }, + { + "id": 176, + "col": 0, + "row": 11, + "solid": true + }, + { + "id": 177, + "col": 1, + "row": 11 + }, + { + "id": 178, + "col": 2, + "row": 11, + "solid": true + }, + { + "id": 179, + "col": 3, + "row": 11, + "solid": true + }, + { + "id": 180, + "col": 4, + "row": 11, + "solid": true + }, + { + "id": 181, + "col": 5, + "row": 11, + "solid": true + }, + { + "id": 182, + "col": 6, + "row": 11, + "solid": true + }, + { + "id": 183, + "col": 7, + "row": 11, + "solid": true + }, + { + "id": 184, + "col": 8, + "row": 11, + "solid": true + }, + { + "id": 185, + "col": 9, + "row": 11, + "solid": true + }, + { + "id": 186, + "col": 10, + "row": 11, + "solid": true + }, + { + "id": 187, + "col": 11, + "row": 11, + "solid": true + }, + { + "id": 188, + "col": 12, + "row": 11, + "solid": true + }, + { + "id": 189, + "col": 13, + "row": 11, + "solid": true + }, + { + "id": 190, + "col": 14, + "row": 11, + "solid": true + }, + { + "id": 191, + "col": 15, + "row": 11, + "solid": true + }, + { + "id": 192, + "col": 0, + "row": 12, + "solid": true + }, + { + "id": 193, + "col": 1, + "row": 12, + "solid": true + }, + { + "id": 194, + "col": 2, + "row": 12, + "solid": true + }, + { + "id": 195, + "col": 3, + "row": 12, + "solid": true + }, + { + "id": 196, + "col": 4, + "row": 12, + "solid": true + }, + { + "id": 197, + "col": 5, + "row": 12, + "solid": true + }, + { + "id": 198, + "col": 6, + "row": 12, + "solid": true + }, + { + "id": 199, + "col": 7, + "row": 12, + "solid": true + }, + { + "id": 200, + "col": 8, + "row": 12, + "solid": true + }, + { + "id": 201, + "col": 9, + "row": 12, + "solid": true + }, + { + "id": 202, + "col": 10, + "row": 12, + "solid": true + }, + { + "id": 203, + "col": 11, + "row": 12, + "solid": true + }, + { + "id": 204, + "col": 12, + "row": 12, + "solid": true + }, + { + "id": 205, + "col": 13, + "row": 12, + "solid": true + }, + { + "id": 206, + "col": 14, + "row": 12, + "solid": true + }, + { + "id": 207, + "col": 15, + "row": 12, + "solid": true + }, + { + "id": 208, + "col": 0, + "row": 13 + }, + { + "id": 209, + "col": 1, + "row": 13 + }, + { + "id": 210, + "col": 2, + "row": 13 + }, + { + "id": 211, + "col": 3, + "row": 13, + "solid": true + }, + { + "id": 212, + "col": 4, + "row": 13, + "solid": true + }, + { + "id": 213, + "col": 5, + "row": 13, + "solid": true + }, + { + "id": 214, + "col": 6, + "row": 13, + "solid": true + }, + { + "id": 215, + "col": 7, + "row": 13, + "solid": true + }, + { + "id": 216, + "col": 8, + "row": 13, + "solid": true + }, + { + "id": 217, + "col": 9, + "row": 13, + "solid": true + }, + { + "id": 218, + "col": 10, + "row": 13, + "solid": true + }, + { + "id": 219, + "col": 11, + "row": 13, + "solid": true + }, + { + "id": 220, + "col": 12, + "row": 13, + "solid": true + }, + { + "id": 221, + "col": 13, + "row": 13, + "solid": true + }, + { + "id": 222, + "col": 14, + "row": 13, + "solid": true + }, + { + "id": 223, + "col": 15, + "row": 13, + "solid": true + }, + { + "id": 224, + "col": 0, + "row": 14 + }, + { + "id": 225, + "col": 1, + "row": 14 + }, + { + "id": 226, + "col": 2, + "row": 14 + }, + { + "id": 227, + "col": 3, + "row": 14, + "solid": true + }, + { + "id": 228, + "col": 4, + "row": 14, + "solid": true + }, + { + "id": 229, + "col": 5, + "row": 14, + "solid": true + }, + { + "id": 230, + "col": 6, + "row": 14, + "solid": true + }, + { + "id": 231, + "col": 7, + "row": 14, + "solid": true + }, + { + "id": 232, + "col": 8, + "row": 14, + "solid": true + }, + { + "id": 233, + "col": 9, + "row": 14, + "solid": true + }, + { + "id": 234, + "col": 10, + "row": 14, + "solid": true + }, + { + "id": 235, + "col": 11, + "row": 14, + "solid": true + }, + { + "id": 236, + "col": 12, + "row": 14, + "solid": true + }, + { + "id": 237, + "col": 13, + "row": 14, + "solid": true + }, + { + "id": 238, + "col": 14, + "row": 14, + "solid": true + }, + { + "id": 239, + "col": 15, + "row": 14, + "solid": true + }, + { + "id": 240, + "col": 0, + "row": 15 + }, + { + "id": 241, + "col": 1, + "row": 15 + }, + { + "id": 242, + "col": 2, + "row": 15 + }, + { + "id": 243, + "col": 3, + "row": 15, + "solid": true + }, + { + "id": 244, + "col": 4, + "row": 15, + "solid": true + }, + { + "id": 245, + "col": 5, + "row": 15, + "solid": true + }, + { + "id": 246, + "col": 6, + "row": 15, + "solid": true + }, + { + "id": 247, + "col": 7, + "row": 15, + "solid": true + }, + { + "id": 248, + "col": 8, + "row": 15, + "solid": true + }, + { + "id": 249, + "col": 9, + "row": 15, + "solid": true + }, + { + "id": 250, + "col": 10, + "row": 15, + "solid": true + }, + { + "id": 251, + "col": 11, + "row": 15, + "solid": true + }, + { + "id": 252, + "col": 12, + "row": 15, + "solid": true + }, + { + "id": 253, + "col": 13, + "row": 15, + "solid": true + }, + { + "id": 254, + "col": 14, + "row": 15, + "solid": true + }, + { + "id": 255, + "col": 15, + "row": 15, "solid": true } ] diff --git a/games/zelda-like/spritesets/tree-house.png b/games/zelda-like/spritesets/tree-house.png index 54d673882988ef3efaca3a58a0a892a76082fbb9..6e0b6d91870530fe51d7c98b817d782f4695990d 100644 GIT binary patch literal 24885 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 literal 13454 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≫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 iU*4Xt8iV-W$R9e-29om5MPTn4y_1np6o) None: + grid: dict[tuple[int, int], tuple[int, int]] = {} + consumed: set[tuple[int, int]] = set() + + def in_floor(x: int, y: int) -> bool: + return 4 <= x <= 16 and 3 <= y <= 11 + + # 1. regions (anchored at first cell of each contiguous block) + for char, region in REGIONS.items(): + w, h = region["size"] + sc, sr = region["sheet"] + for y in range(ROWS): + for x in range(COLS): + if PLAN[y][x] != char or (x, y) in consumed or not in_floor(x, y): + continue + # treat as anchor only if the full block is this char + if all( + 0 <= x + dx < COLS and 0 <= y + dy < ROWS and PLAN[y + dy][x + dx] == char + for dx in range(w) + for dy in range(h) + ): + for dy in range(h): + for dx in range(w): + grid[(x + dx, y + dy)] = (sc + dx, sr + dy) + consumed.add((x + dx, y + dy)) + + # 2. singles + for y in range(ROWS): + for x in range(COLS): + if (x, y) in consumed: + continue + ref = LEGEND.get(PLAN[y][x]) + if ref is not None: + grid[(x, y)] = ref + + # 3. floor underlay below furniture/props so transparent cells read + floor = LEGEND[","] + sprites = [] + for (x, y), (sc, sr) in sorted(grid.items(), key=lambda kv: (kv[0][1], kv[0][0])): + sprites.append({"x": x, "y": y, "spriteId": sr * SHEET_COLS + sc, "spriteSetId": "tree-house"}) + underlay = [ + {"x": x, "y": y, "spriteId": floor[1] * SHEET_COLS + floor[0], "spriteSetId": "tree-house"} + for (x, y) in sorted(consumed | {k for k, v in grid.items() if PLAN[k[1]][k[0]] in "sgopvQ"}) + ] + + map_path = GAME / "maps" / "tree-house.json" + data = json.loads(map_path.read_text()) + data["columns"] = COLS + data["rows"] = ROWS + for layer in data["layers"]: + if layer["id"] == "layer_ground": + layer["sprites"] = underlay + if layer["id"] == "layer_decor": + layer["sprites"] = sprites + if not any(l["id"] == "layer_decor" for l in data["layers"]): + data["layers"].insert(1, {"id": "layer_decor", "name": "Decor", "visible": True, "tier": "hero", "sprites": sprites}) + + # placements: door trigger on the mat, spawn on free floor + for p in data["objectPlacements"]: + if p["id"] == "tp-exit-to-forest": + p["tileX"], p["tileY"] = 10, 13 + if p["id"] == "spawn-player": + p["tileX"], p["tileY"] = 10, 10 + map_path.write_text(json.dumps(data, indent=2) + "\n") + print(f"tree-house rebuilt: {len(underlay)} ground + {len(sprites)} decor tiles") + + +if __name__ == "__main__": + main()