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 54d67388..6e0b6d91 100644 Binary files a/games/zelda-like/spritesets/tree-house.png and b/games/zelda-like/spritesets/tree-house.png differ diff --git a/games/zelda-like/tools/build-tree-house.py b/games/zelda-like/tools/build-tree-house.py new file mode 100644 index 00000000..4d62cb78 --- /dev/null +++ b/games/zelda-like/tools/build-tree-house.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +"""Generate the tree-house map from an ASCII plan of the FSA original. + +The authoritative layout reference is the FSA project's own screenshot +(`zelda-games/references/fsa_links_house_reference.png`, the rendered +`links_house` room at 21x15 tiles). Its art pass is older than the +`finalized/` tileset we ship, so this script rebuilds the LAYOUT with +the finalized graphics: an ASCII plan (read off the labeled reference) +plus a legend mapping plan characters to sheet cells. + +Run from the repo root: + python3 games/zelda-like/tools/build-tree-house.py + +It rewrites `games/zelda-like/maps/tree-house.json` (ground layer + +placements stay untouched except positions defined here) and expects +`games/zelda-like/spritesets/tree-house.png` to be the FULL 256x256 +finalized interior sheet (16x16 cells, sprite id = row*16+col). +""" + +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[3] +GAME = ROOT / "games" / "zelda-like" + +COLS, ROWS = 21, 15 +SHEET_COLS = 16 + +# ── plan: one char per tile, read from the labeled reference shot. +# Walls are 2 tiles thick; the door gap sits at x=10 in the bottom wall. +PLAN = [ + " ", + " TTTTTTTTT ", + " 1ttttttttt3 ", + " 1t,,,,,,,,,t3 ", + " Ll,,,EEE,g,,,rR ", + " LlvssEEE,,,,,vrR ", + " Ll,AAA,RRR,DD,rR ", + " Ll,AAA,RRR,DD,rR ", + " Ll,AAA,RRR,,,vrR ", + " Ll,o,,,,,,,Q,,rR ", + " Ll,oo,,,,,pQ,,rR ", + " 5b,,,,,,,,,b7 ", + " 5bbbbmbbbb7 ", + " BBBBmBBBB ", + " ", +] + +# ── legend: char → (sheet col, sheet row); None = leave empty. +# Multi-cell furniture uses REGION anchors (see REGIONS) so the blocks +# blit coherently instead of repeating one cell. +LEGEND = { + " ": None, + "T": (5, 0), # top wall cap + "t": (5, 1), # top wall front + "L": (0, 5), # left wall outer + "l": (1, 5), # left wall inner + "r": (9, 6), # right wall inner + "R": (10, 5), # right wall outer + "1": (1, 1), # NW diagonal + "3": (9, 2), # NE diagonal + "5": (1, 9), # SW diagonal + "7": (9, 8), # SE diagonal + "B": (5, 10), # bottom wall cap + "b": (6, 9), # bottom wall front + "v": (12, 8), # wall vine + ",": (4, 2), # light floor + ".": (8, 2), # dark floor + "m": (1, 11), # door mat + "s": (4, 6), # wooden stool + "g": (5, 6), # gray stool + "o": (9, 5), # barrel + "p": (6, 8), # pot +} + +# Regions: anchor char at its top-left occurrence blits a sheet block. +REGIONS = { + "A": {"sheet": (3, 3), "size": (3, 3)}, # big table + "R": {"sheet": (0, 13), "size": (3, 3)}, # round rug with emblem + "E": {"sheet": (6, 3), "size": (3, 2)}, # bed + "D": {"sheet": (14, 10), "size": (2, 2)}, # bottle dresser + "Q": {"sheet": (14, 12), "size": (1, 2)}, # tall red pot +} +# NOTE: 'R'/'B' appear both as wall chars and region anchors; regions are +# resolved FIRST for contiguous blocks fully inside the floor area +# (x 4..16, y 3..11), walls keep the LEGEND meaning outside it. + +WALKABLE = {",", ".", "m", " "} + + +def main() -> 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()