diff --git a/README.md b/README.md index 0bd2d81..4a9fab4 100755 --- a/README.md +++ b/README.md @@ -274,7 +274,6 @@ The published HTML is static, but some browser modules rely on same-origin APIs: | Notes board | `pages/notes.js` | `/api/notes` | | Wird tracker | `pages/wird-tracker.js` | `/api/wird`, `/api/wird/motalah`, `/api/calibre/books` | | Competency board | `pages/competency-status-board.js` | `/api/competencies/items...` | -| Princess Lima RPG progress | `pages/princess-lima-game.js` | Device-local `localStorage` state | These APIs are not implemented here. Production routing must serve `output/` and proxy `/api/` to the appropriate backend. When changing an endpoint contract, coordinate the static client and its external service. diff --git a/assets/audio/princess-lima/attack.wav b/assets/audio/princess-lima/attack.wav deleted file mode 100755 index 9390fc1..0000000 Binary files a/assets/audio/princess-lima/attack.wav and /dev/null differ diff --git a/assets/audio/princess-lima/boss-theme.wav b/assets/audio/princess-lima/boss-theme.wav deleted file mode 100755 index 047b621..0000000 Binary files a/assets/audio/princess-lima/boss-theme.wav and /dev/null differ diff --git a/assets/audio/princess-lima/damage.wav b/assets/audio/princess-lima/damage.wav deleted file mode 100755 index 434d417..0000000 Binary files a/assets/audio/princess-lima/damage.wav and /dev/null differ diff --git a/assets/audio/princess-lima/defeat.wav b/assets/audio/princess-lima/defeat.wav deleted file mode 100755 index a940946..0000000 Binary files a/assets/audio/princess-lima/defeat.wav and /dev/null differ diff --git a/assets/audio/princess-lima/door.wav b/assets/audio/princess-lima/door.wav deleted file mode 100755 index 5b1772d..0000000 Binary files a/assets/audio/princess-lima/door.wav and /dev/null differ diff --git a/assets/audio/princess-lima/forest-theme.wav b/assets/audio/princess-lima/forest-theme.wav deleted file mode 100755 index 941d901..0000000 Binary files a/assets/audio/princess-lima/forest-theme.wav and /dev/null differ diff --git a/assets/audio/princess-lima/fortress-theme.wav b/assets/audio/princess-lima/fortress-theme.wav deleted file mode 100755 index d648305..0000000 Binary files a/assets/audio/princess-lima/fortress-theme.wav and /dev/null differ diff --git a/assets/audio/princess-lima/hit.wav b/assets/audio/princess-lima/hit.wav deleted file mode 100755 index 61ecf6d..0000000 Binary files a/assets/audio/princess-lima/hit.wav and /dev/null differ diff --git a/assets/audio/princess-lima/intro-narration-1.wav b/assets/audio/princess-lima/intro-narration-1.wav deleted file mode 100755 index 9ec89b8..0000000 Binary files a/assets/audio/princess-lima/intro-narration-1.wav and /dev/null differ diff --git a/assets/audio/princess-lima/intro-narration-2.wav b/assets/audio/princess-lima/intro-narration-2.wav deleted file mode 100755 index b0dd25c..0000000 Binary files a/assets/audio/princess-lima/intro-narration-2.wav and /dev/null differ diff --git a/assets/audio/princess-lima/intro-narration-3.wav b/assets/audio/princess-lima/intro-narration-3.wav deleted file mode 100755 index 87ab778..0000000 Binary files a/assets/audio/princess-lima/intro-narration-3.wav and /dev/null differ diff --git a/assets/audio/princess-lima/intro-narration-4.wav b/assets/audio/princess-lima/intro-narration-4.wav deleted file mode 100755 index 8a12242..0000000 Binary files a/assets/audio/princess-lima/intro-narration-4.wav and /dev/null differ diff --git a/assets/audio/princess-lima/mountain-theme.wav b/assets/audio/princess-lima/mountain-theme.wav deleted file mode 100755 index 90877ac..0000000 Binary files a/assets/audio/princess-lima/mountain-theme.wav and /dev/null differ diff --git a/assets/audio/princess-lima/pickup.wav b/assets/audio/princess-lima/pickup.wav deleted file mode 100755 index ebddfe6..0000000 Binary files a/assets/audio/princess-lima/pickup.wav and /dev/null differ diff --git a/assets/audio/princess-lima/puzzle.wav b/assets/audio/princess-lima/puzzle.wav deleted file mode 100755 index 258a266..0000000 Binary files a/assets/audio/princess-lima/puzzle.wav and /dev/null differ diff --git a/assets/audio/princess-lima/quest.wav b/assets/audio/princess-lima/quest.wav deleted file mode 100755 index b380183..0000000 Binary files a/assets/audio/princess-lima/quest.wav and /dev/null differ diff --git a/assets/audio/princess-lima/step.wav b/assets/audio/princess-lima/step.wav deleted file mode 100755 index 6085b30..0000000 Binary files a/assets/audio/princess-lima/step.wav and /dev/null differ diff --git a/assets/audio/princess-lima/victory-theme.wav b/assets/audio/princess-lima/victory-theme.wav deleted file mode 100755 index ebfd306..0000000 Binary files a/assets/audio/princess-lima/victory-theme.wav and /dev/null differ diff --git a/assets/audio/princess-lima/victory.wav b/assets/audio/princess-lima/victory.wav deleted file mode 100755 index 8d3f96d..0000000 Binary files a/assets/audio/princess-lima/victory.wav and /dev/null differ diff --git a/assets/audio/princess-lima/village-theme.wav b/assets/audio/princess-lima/village-theme.wav deleted file mode 100755 index 9e85f6e..0000000 Binary files a/assets/audio/princess-lima/village-theme.wav and /dev/null differ diff --git a/assets/content/comment-pages.json b/assets/content/comment-pages.json index b46ed92..8a7b7f8 100755 --- a/assets/content/comment-pages.json +++ b/assets/content/comment-pages.json @@ -379,11 +379,6 @@ "title": "Working on Eid day", "url": "/blogs/2026/05-may/working-on-eid-day-27-05-26.html" }, - { - "slug": "07-06-26-week-review", - "title": "[07-06-2026] - Weekly Review", - "url": "/blogs/2026/06-june/07-06-week-review.html" - }, { "slug": "14-06-26-week-review", "title": "[14-06-2026] - Weekly Review", @@ -414,6 +409,31 @@ "title": "[12-07-2026] - Weekly Review", "url": "/blogs/2026/07-july/12-07-week-review.html" }, + { + "slug": "19-07-26-week-review", + "title": "[19-07-2026] - Weekly Review", + "url": "/blogs/2026/07-july/19-07-week-review.html" + }, + { + "slug": "26-07-26-week-review", + "title": "[26-07-2026] - Weekly Review", + "url": "/blogs/2026/07-july/26-07-week-review.html" + }, + { + "slug": "02-08-26-week-review", + "title": "[02-08-2026] - Weekly Review", + "url": "/blogs/2026/08-august/02-08-week-review.html" + }, + { + "slug": "09-08-26-week-review", + "title": "[09-08-2026] - Weekly Review", + "url": "/blogs/2026/08-august/09-08-week-review.html" + }, + { + "slug": "16-08-26-week-review", + "title": "[16-08-2026] - Weekly Review", + "url": "/blogs/2026/08-august/16-08-week-review.html" + }, { "slug": "publish-pages", "title": "How to publish pages using Org Publish", diff --git a/assets/games/two-rivers/audio/ambience/birds.mp3 b/assets/games/two-rivers/audio/ambience/birds.mp3 deleted file mode 100755 index 769e621..0000000 Binary files a/assets/games/two-rivers/audio/ambience/birds.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/birds.webm b/assets/games/two-rivers/audio/ambience/birds.webm deleted file mode 100755 index 0e0b913..0000000 Binary files a/assets/games/two-rivers/audio/ambience/birds.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/crowd.mp3 b/assets/games/two-rivers/audio/ambience/crowd.mp3 deleted file mode 100755 index 49fbee8..0000000 Binary files a/assets/games/two-rivers/audio/ambience/crowd.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/crowd.webm b/assets/games/two-rivers/audio/ambience/crowd.webm deleted file mode 100755 index 66758b3..0000000 Binary files a/assets/games/two-rivers/audio/ambience/crowd.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/garden-insects.mp3 b/assets/games/two-rivers/audio/ambience/garden-insects.mp3 deleted file mode 100755 index 769e621..0000000 Binary files a/assets/games/two-rivers/audio/ambience/garden-insects.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/garden-insects.webm b/assets/games/two-rivers/audio/ambience/garden-insects.webm deleted file mode 100755 index e0e682f..0000000 Binary files a/assets/games/two-rivers/audio/ambience/garden-insects.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/library-room.mp3 b/assets/games/two-rivers/audio/ambience/library-room.mp3 deleted file mode 100755 index 39e481e..0000000 Binary files a/assets/games/two-rivers/audio/ambience/library-room.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/library-room.webm b/assets/games/two-rivers/audio/ambience/library-room.webm deleted file mode 100755 index 906ca04..0000000 Binary files a/assets/games/two-rivers/audio/ambience/library-room.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/rain.mp3 b/assets/games/two-rivers/audio/ambience/rain.mp3 deleted file mode 100755 index b35bb5d..0000000 Binary files a/assets/games/two-rivers/audio/ambience/rain.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/rain.webm b/assets/games/two-rivers/audio/ambience/rain.webm deleted file mode 100755 index 9125e14..0000000 Binary files a/assets/games/two-rivers/audio/ambience/rain.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/water.mp3 b/assets/games/two-rivers/audio/ambience/water.mp3 deleted file mode 100755 index 769e621..0000000 Binary files a/assets/games/two-rivers/audio/ambience/water.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/water.webm b/assets/games/two-rivers/audio/ambience/water.webm deleted file mode 100755 index 88e120d..0000000 Binary files a/assets/games/two-rivers/audio/ambience/water.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/wind.mp3 b/assets/games/two-rivers/audio/ambience/wind.mp3 deleted file mode 100755 index 39e481e..0000000 Binary files a/assets/games/two-rivers/audio/ambience/wind.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/ambience/wind.webm b/assets/games/two-rivers/audio/ambience/wind.webm deleted file mode 100755 index 6ef67aa..0000000 Binary files a/assets/games/two-rivers/audio/ambience/wind.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/ending.mp3 b/assets/games/two-rivers/audio/music/ending.mp3 deleted file mode 100755 index 09e0af6..0000000 Binary files a/assets/games/two-rivers/audio/music/ending.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/ending.webm b/assets/games/two-rivers/audio/music/ending.webm deleted file mode 100755 index e0cf5a8..0000000 Binary files a/assets/games/two-rivers/audio/music/ending.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/festival.mp3 b/assets/games/two-rivers/audio/music/festival.mp3 deleted file mode 100755 index 09e0af6..0000000 Binary files a/assets/games/two-rivers/audio/music/festival.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/festival.webm b/assets/games/two-rivers/audio/music/festival.webm deleted file mode 100755 index 81f1de3..0000000 Binary files a/assets/games/two-rivers/audio/music/festival.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/garden.mp3 b/assets/games/two-rivers/audio/music/garden.mp3 deleted file mode 100755 index 769e621..0000000 Binary files a/assets/games/two-rivers/audio/music/garden.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/garden.webm b/assets/games/two-rivers/audio/music/garden.webm deleted file mode 100755 index 036dba4..0000000 Binary files a/assets/games/two-rivers/audio/music/garden.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/marketplace.mp3 b/assets/games/two-rivers/audio/music/marketplace.mp3 deleted file mode 100755 index 49fbee8..0000000 Binary files a/assets/games/two-rivers/audio/music/marketplace.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/marketplace.webm b/assets/games/two-rivers/audio/music/marketplace.webm deleted file mode 100755 index ebfe6d6..0000000 Binary files a/assets/games/two-rivers/audio/music/marketplace.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/morning.mp3 b/assets/games/two-rivers/audio/music/morning.mp3 deleted file mode 100755 index 49fbee8..0000000 Binary files a/assets/games/two-rivers/audio/music/morning.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/morning.webm b/assets/games/two-rivers/audio/music/morning.webm deleted file mode 100755 index 2355798..0000000 Binary files a/assets/games/two-rivers/audio/music/morning.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/night.mp3 b/assets/games/two-rivers/audio/music/night.mp3 deleted file mode 100755 index b35bb5d..0000000 Binary files a/assets/games/two-rivers/audio/music/night.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/night.webm b/assets/games/two-rivers/audio/music/night.webm deleted file mode 100755 index c3a8997..0000000 Binary files a/assets/games/two-rivers/audio/music/night.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/palace.mp3 b/assets/games/two-rivers/audio/music/palace.mp3 deleted file mode 100755 index 09e0af6..0000000 Binary files a/assets/games/two-rivers/audio/music/palace.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/palace.webm b/assets/games/two-rivers/audio/music/palace.webm deleted file mode 100755 index 175d66a..0000000 Binary files a/assets/games/two-rivers/audio/music/palace.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/romantic.mp3 b/assets/games/two-rivers/audio/music/romantic.mp3 deleted file mode 100755 index 769e621..0000000 Binary files a/assets/games/two-rivers/audio/music/romantic.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/romantic.webm b/assets/games/two-rivers/audio/music/romantic.webm deleted file mode 100755 index 8f735a2..0000000 Binary files a/assets/games/two-rivers/audio/music/romantic.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/sad.mp3 b/assets/games/two-rivers/audio/music/sad.mp3 deleted file mode 100755 index 39e481e..0000000 Binary files a/assets/games/two-rivers/audio/music/sad.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/sad.webm b/assets/games/two-rivers/audio/music/sad.webm deleted file mode 100755 index 5bda610..0000000 Binary files a/assets/games/two-rivers/audio/music/sad.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/victory.mp3 b/assets/games/two-rivers/audio/music/victory.mp3 deleted file mode 100755 index 09e0af6..0000000 Binary files a/assets/games/two-rivers/audio/music/victory.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/music/victory.webm b/assets/games/two-rivers/audio/music/victory.webm deleted file mode 100755 index 33cb03a..0000000 Binary files a/assets/games/two-rivers/audio/music/victory.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/archery.mp3 b/assets/games/two-rivers/audio/sfx/archery.mp3 deleted file mode 100755 index 9cf340c..0000000 Binary files a/assets/games/two-rivers/audio/sfx/archery.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/archery.webm b/assets/games/two-rivers/audio/sfx/archery.webm deleted file mode 100755 index 54ce22d..0000000 Binary files a/assets/games/two-rivers/audio/sfx/archery.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/cooking.mp3 b/assets/games/two-rivers/audio/sfx/cooking.mp3 deleted file mode 100755 index 1ef623f..0000000 Binary files a/assets/games/two-rivers/audio/sfx/cooking.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/cooking.webm b/assets/games/two-rivers/audio/sfx/cooking.webm deleted file mode 100755 index 1c3430f..0000000 Binary files a/assets/games/two-rivers/audio/sfx/cooking.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/dance.mp3 b/assets/games/two-rivers/audio/sfx/dance.mp3 deleted file mode 100755 index 82ea00a..0000000 Binary files a/assets/games/two-rivers/audio/sfx/dance.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/dance.webm b/assets/games/two-rivers/audio/sfx/dance.webm deleted file mode 100755 index 04d85f3..0000000 Binary files a/assets/games/two-rivers/audio/sfx/dance.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/footstep.mp3 b/assets/games/two-rivers/audio/sfx/footstep.mp3 deleted file mode 100755 index 82ea00a..0000000 Binary files a/assets/games/two-rivers/audio/sfx/footstep.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/footstep.webm b/assets/games/two-rivers/audio/sfx/footstep.webm deleted file mode 100755 index adf08db..0000000 Binary files a/assets/games/two-rivers/audio/sfx/footstep.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/page-turn.mp3 b/assets/games/two-rivers/audio/sfx/page-turn.mp3 deleted file mode 100755 index f719dbd..0000000 Binary files a/assets/games/two-rivers/audio/sfx/page-turn.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/page-turn.webm b/assets/games/two-rivers/audio/sfx/page-turn.webm deleted file mode 100755 index e9c663b..0000000 Binary files a/assets/games/two-rivers/audio/sfx/page-turn.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/pickup.mp3 b/assets/games/two-rivers/audio/sfx/pickup.mp3 deleted file mode 100755 index 103dc02..0000000 Binary files a/assets/games/two-rivers/audio/sfx/pickup.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/pickup.webm b/assets/games/two-rivers/audio/sfx/pickup.webm deleted file mode 100755 index f6e9849..0000000 Binary files a/assets/games/two-rivers/audio/sfx/pickup.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/puzzle.mp3 b/assets/games/two-rivers/audio/sfx/puzzle.mp3 deleted file mode 100755 index c8156b0..0000000 Binary files a/assets/games/two-rivers/audio/sfx/puzzle.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/puzzle.webm b/assets/games/two-rivers/audio/sfx/puzzle.webm deleted file mode 100755 index e8c780f..0000000 Binary files a/assets/games/two-rivers/audio/sfx/puzzle.webm and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/ui.mp3 b/assets/games/two-rivers/audio/sfx/ui.mp3 deleted file mode 100755 index 7bd4e30..0000000 Binary files a/assets/games/two-rivers/audio/sfx/ui.mp3 and /dev/null differ diff --git a/assets/games/two-rivers/audio/sfx/ui.webm b/assets/games/two-rivers/audio/sfx/ui.webm deleted file mode 100755 index 936f4d9..0000000 Binary files a/assets/games/two-rivers/audio/sfx/ui.webm and /dev/null differ diff --git a/assets/games/two-rivers/data/achievements.json b/assets/games/two-rivers/data/achievements.json deleted file mode 100755 index 379e809..0000000 --- a/assets/games/two-rivers/data/achievements.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "first_spark": "Make Lima laugh in the palace courtyard.", - "lantern_reader": "Solve the library cipher.", - "true_aim": "Score four or more bullseyes.", - "kitchen_conspiracy": "Complete the recipe without a mistake.", - "two_left_feet": "Finish the dance, graceful or otherwise.", - "garland_for_all": "Complete A Garland for Everyone.", - "letters_home": "Complete The Bookseller's Letters.", - "thoughtful_gift": "Give Lima a gift.", - "open_book": "Reach Deep Trust.", - "royal_favourite": "Reach Deep Family Approval.", - "moonrise": "Complete the story.", - "every_current": "Unlock all four endings." -} diff --git a/assets/games/two-rivers/data/assets.json b/assets/games/two-rivers/data/assets.json deleted file mode 100755 index ab256a8..0000000 --- a/assets/games/two-rivers/data/assets.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": 1, - "images": [ - {"id": "courtyard", "type": "background", "url": "/assets/games/two-rivers/images/backgrounds/courtyard.webp", "prompt": "prompts/backgrounds.md#palace-courtyard"}, - {"id": "library", "type": "background", "url": "/assets/games/two-rivers/images/backgrounds/library.webp", "prompt": "prompts/backgrounds.md#royal-library"}, - {"id": "garden", "type": "background", "url": "/assets/games/two-rivers/images/backgrounds/garden.webp", "prompt": "prompts/backgrounds.md#moon-garden"}, - {"id": "market", "type": "background", "url": "/assets/games/two-rivers/images/backgrounds/market.webp", "prompt": "prompts/backgrounds.md#old-marketplace"}, - {"id": "pavilion", "type": "background", "url": "/assets/games/two-rivers/images/backgrounds/pavilion.webp", "prompt": "prompts/backgrounds.md#riverside-pavilion"}, - {"id": "z", "type": "character", "url": "/assets/games/two-rivers/images/characters/z.webp", "prompt": "prompts/characters.md#z"}, - {"id": "lima", "type": "character", "url": "/assets/games/two-rivers/images/characters/lima.webp", "prompt": "prompts/characters.md#lima"}, - {"id": "anwara", "type": "npc", "url": "/assets/games/two-rivers/images/characters/anwara.webp", "prompt": "prompts/characters/supporting-cast.md#keeper-anwara"}, - {"id": "saira", "type": "npc", "url": "/assets/games/two-rivers/images/characters/saira.webp", "prompt": "prompts/characters/supporting-cast.md#saira"}, - {"id": "nadia", "type": "npc", "url": "/assets/games/two-rivers/images/characters/nadia.webp", "prompt": "prompts/characters/supporting-cast.md#nadia"}, - {"id": "rayhan", "type": "npc", "url": "/assets/games/two-rivers/images/characters/rayhan.webp", "prompt": "prompts/characters/supporting-cast.md#rayhan"}, - {"id": "mira", "type": "npc", "url": "/assets/games/two-rivers/images/characters/mira.webp", "prompt": "prompts/characters/supporting-cast.md#mira"}, - {"id": "ishan", "type": "npc", "url": "/assets/games/two-rivers/images/characters/ishan.webp", "prompt": "prompts/characters/supporting-cast.md#ishan"}, - {"id": "inkstone", "type": "item", "url": "/assets/games/two-rivers/images/items/inkstone.webp", "prompt": "prompts/items/inkstone.md"}, - {"id": "brass_compass", "type": "item", "url": "/assets/games/two-rivers/images/items/brass_compass.webp", "prompt": "prompts/items/brass-compass.md"}, - {"id": "poetry_book", "type": "item", "url": "/assets/games/two-rivers/images/items/poetry_book.webp", "prompt": "prompts/items/poetry-book.md"}, - {"id": "embroidered_ribbon", "type": "item", "url": "/assets/games/two-rivers/images/items/embroidered_ribbon.webp", "prompt": "prompts/items/embroidered-ribbon.md"}, - {"id": "spiced_tea", "type": "item", "url": "/assets/games/two-rivers/images/items/spiced_tea.webp", "prompt": "prompts/items/spiced-tea.md"}, - {"id": "archery_charm", "type": "item", "url": "/assets/games/two-rivers/images/items/archery_charm.webp", "prompt": "prompts/items/archery-charm.md"}, - {"id": "folio_ribbon", "type": "item", "url": "/assets/games/two-rivers/images/items/folio_ribbon.webp", "prompt": "prompts/items/folio-ribbon.md"}, - {"id": "lantern_rubbing", "type": "item", "url": "/assets/games/two-rivers/images/items/lantern_rubbing.webp", "prompt": "prompts/items/lantern-rubbing.md"}, - {"id": "anwara_note", "type": "item", "url": "/assets/games/two-rivers/images/items/anwara_note.webp", "prompt": "prompts/items/anwara-note.md"}, - {"id": "founders_record", "type": "item", "url": "/assets/games/two-rivers/images/items/founders_record.webp", "prompt": "prompts/items/founders-record.md"}, - {"id": "jasmine", "type": "item", "url": "/assets/games/two-rivers/images/items/jasmine.webp", "prompt": "prompts/items/jasmine.md"}, - {"id": "tuberose", "type": "item", "url": "/assets/games/two-rivers/images/items/tuberose.webp", "prompt": "prompts/items/tuberose.md"}, - {"id": "marigold", "type": "item", "url": "/assets/games/two-rivers/images/items/marigold.webp", "prompt": "prompts/items/marigold.md"}, - {"id": "rose", "type": "item", "url": "/assets/games/two-rivers/images/items/rose.webp", "prompt": "prompts/items/rose.md"}, - {"id": "bakul", "type": "item", "url": "/assets/games/two-rivers/images/items/bakul.webp", "prompt": "prompts/items/bakul.md"}, - {"id": "letter_1", "type": "item", "url": "/assets/games/two-rivers/images/items/letter_1.webp", "prompt": "prompts/items/letter-1.md"}, - {"id": "letter_2", "type": "item", "url": "/assets/games/two-rivers/images/items/letter_2.webp", "prompt": "prompts/items/letter-2.md"}, - {"id": "letter_3", "type": "item", "url": "/assets/games/two-rivers/images/items/letter_3.webp", "prompt": "prompts/items/letter-3.md"}, - {"id": "ending-scholar", "type": "cg", "url": "/assets/games/two-rivers/images/cg/scholar.webp", "prompt": "prompts/cg.md#scholars-promise"}, - {"id": "ending-laughter", "type": "cg", "url": "/assets/games/two-rivers/images/cg/laughter.webp", "prompt": "prompts/cg.md#laughter-after-midnight"}, - {"id": "ending-road", "type": "cg", "url": "/assets/games/two-rivers/images/cg/road.webp", "prompt": "prompts/cg.md#road-beyond-palace"}, - {"id": "ending-families", "type": "cg", "url": "/assets/games/two-rivers/images/cg/families.webp", "prompt": "prompts/cg.md#two-families"}, - {"id": "garland", "type": "cg", "url": "/assets/games/two-rivers/images/cg/garland.webp", "prompt": "prompts/cg.md#garland"}, - {"id": "cg-library", "type": "cg", "url": "/assets/games/two-rivers/images/cg/library.webp", "prompt": "prompts/cg.md#library"} - ], - "audio": [ - {"id": "morning", "type": "music", "url": "/assets/games/two-rivers/audio/music/morning.webm", "urls": ["/assets/games/two-rivers/audio/music/morning.webm", "/assets/games/two-rivers/audio/music/morning.mp3"], "source": "/assets/audio/princess-lima/village-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "palace", "type": "music", "url": "/assets/games/two-rivers/audio/music/palace.webm", "urls": ["/assets/games/two-rivers/audio/music/palace.webm", "/assets/games/two-rivers/audio/music/palace.mp3"], "source": "/assets/audio/princess-lima/victory-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "garden", "type": "music", "url": "/assets/games/two-rivers/audio/music/garden.webm", "urls": ["/assets/games/two-rivers/audio/music/garden.webm", "/assets/games/two-rivers/audio/music/garden.mp3"], "source": "/assets/audio/princess-lima/forest-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "marketplace", "type": "music", "url": "/assets/games/two-rivers/audio/music/marketplace.webm", "urls": ["/assets/games/two-rivers/audio/music/marketplace.webm", "/assets/games/two-rivers/audio/music/marketplace.mp3"], "source": "/assets/audio/princess-lima/village-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "festival", "type": "music", "url": "/assets/games/two-rivers/audio/music/festival.webm", "urls": ["/assets/games/two-rivers/audio/music/festival.webm", "/assets/games/two-rivers/audio/music/festival.mp3"], "source": "/assets/audio/princess-lima/victory-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "romantic", "type": "music", "url": "/assets/games/two-rivers/audio/music/romantic.webm", "urls": ["/assets/games/two-rivers/audio/music/romantic.webm", "/assets/games/two-rivers/audio/music/romantic.mp3"], "source": "/assets/audio/princess-lima/forest-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "sad", "type": "music", "url": "/assets/games/two-rivers/audio/music/sad.webm", "urls": ["/assets/games/two-rivers/audio/music/sad.webm", "/assets/games/two-rivers/audio/music/sad.mp3"], "source": "/assets/audio/princess-lima/mountain-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "night", "type": "music", "url": "/assets/games/two-rivers/audio/music/night.webm", "urls": ["/assets/games/two-rivers/audio/music/night.webm", "/assets/games/two-rivers/audio/music/night.mp3"], "source": "/assets/audio/princess-lima/fortress-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "victory", "type": "music", "url": "/assets/games/two-rivers/audio/music/victory.webm", "urls": ["/assets/games/two-rivers/audio/music/victory.webm", "/assets/games/two-rivers/audio/music/victory.mp3"], "source": "/assets/audio/princess-lima/victory-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - {"id": "ending", "type": "music", "url": "/assets/games/two-rivers/audio/music/ending.webm", "urls": ["/assets/games/two-rivers/audio/music/ending.webm", "/assets/games/two-rivers/audio/music/ending.mp3"], "source": "/assets/audio/princess-lima/victory-theme.wav", "licence": "Original site-owned instrumental; local derivative encodes"}, - - {"id": "birds", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/birds.webm", "urls": ["/assets/games/two-rivers/audio/ambience/birds.webm", "/assets/games/two-rivers/audio/ambience/birds.mp3"], "source": "/assets/audio/princess-lima/forest-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "water", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/water.webm", "urls": ["/assets/games/two-rivers/audio/ambience/water.webm", "/assets/games/two-rivers/audio/ambience/water.mp3"], "source": "/assets/audio/princess-lima/forest-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "wind", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/wind.webm", "urls": ["/assets/games/two-rivers/audio/ambience/wind.webm", "/assets/games/two-rivers/audio/ambience/wind.mp3"], "source": "/assets/audio/princess-lima/mountain-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "crowd", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/crowd.webm", "urls": ["/assets/games/two-rivers/audio/ambience/crowd.webm", "/assets/games/two-rivers/audio/ambience/crowd.mp3"], "source": "/assets/audio/princess-lima/village-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "garden-insects", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/garden-insects.webm", "urls": ["/assets/games/two-rivers/audio/ambience/garden-insects.webm", "/assets/games/two-rivers/audio/ambience/garden-insects.mp3"], "source": "/assets/audio/princess-lima/forest-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "library", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/library-room.webm", "urls": ["/assets/games/two-rivers/audio/ambience/library-room.webm", "/assets/games/two-rivers/audio/ambience/library-room.mp3"], "source": "/assets/audio/princess-lima/mountain-theme.wav", "licence": "Original site-owned ambience derivative"}, - {"id": "rain", "type": "ambience", "url": "/assets/games/two-rivers/audio/ambience/rain.webm", "urls": ["/assets/games/two-rivers/audio/ambience/rain.webm", "/assets/games/two-rivers/audio/ambience/rain.mp3"], "source": "/assets/audio/princess-lima/fortress-theme.wav", "licence": "Original site-owned ambience derivative"}, - - {"id": "ui", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/ui.webm", "urls": ["/assets/games/two-rivers/audio/sfx/ui.webm", "/assets/games/two-rivers/audio/sfx/ui.mp3"], "source": "/assets/audio/princess-lima/quest.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "pickup", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/pickup.webm", "urls": ["/assets/games/two-rivers/audio/sfx/pickup.webm", "/assets/games/two-rivers/audio/sfx/pickup.mp3"], "source": "/assets/audio/princess-lima/pickup.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "puzzle", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/puzzle.webm", "urls": ["/assets/games/two-rivers/audio/sfx/puzzle.webm", "/assets/games/two-rivers/audio/sfx/puzzle.mp3"], "source": "/assets/audio/princess-lima/puzzle.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "archery", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/archery.webm", "urls": ["/assets/games/two-rivers/audio/sfx/archery.webm", "/assets/games/two-rivers/audio/sfx/archery.mp3"], "source": "/assets/audio/princess-lima/attack.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "cooking", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/cooking.webm", "urls": ["/assets/games/two-rivers/audio/sfx/cooking.webm", "/assets/games/two-rivers/audio/sfx/cooking.mp3"], "source": "/assets/audio/princess-lima/hit.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "dance", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/dance.webm", "urls": ["/assets/games/two-rivers/audio/sfx/dance.webm", "/assets/games/two-rivers/audio/sfx/dance.mp3"], "source": "/assets/audio/princess-lima/step.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "footstep", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/footstep.webm", "urls": ["/assets/games/two-rivers/audio/sfx/footstep.webm", "/assets/games/two-rivers/audio/sfx/footstep.mp3"], "source": "/assets/audio/princess-lima/step.wav", "licence": "Original site-owned sound effect derivative"}, - {"id": "page-turn", "type": "sfx", "url": "/assets/games/two-rivers/audio/sfx/page-turn.webm", "urls": ["/assets/games/two-rivers/audio/sfx/page-turn.webm", "/assets/games/two-rivers/audio/sfx/page-turn.mp3"], "source": "/assets/audio/princess-lima/door.wav", "licence": "Original site-owned sound effect derivative"} - ] -} diff --git a/assets/games/two-rivers/data/characters.json b/assets/games/two-rivers/data/characters.json deleted file mode 100755 index 1bc5915..0000000 --- a/assets/games/two-rivers/data/characters.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "z": { - "name": "Z", - "age": 27, - "pronouns": "he/him", - "role": "A Pakistani visiting scholar and amateur archer", - "expressions": ["warm", "wry", "thoughtful", "flustered", "determined", "tender"] - }, - "lima": { - "name": "Princess Lima", - "age": 26, - "pronouns": "she/her", - "role": "A Bengali princess and curator of the Festival of Two Rivers", - "expressions": ["warm", "playful", "regal", "curious", "vulnerable", "tender", "triumphant"] - }, - "anwara": {"name": "Keeper Anwara", "age": 58, "role": "Senior keeper of the royal archive"}, - "saira": {"name": "Saira", "age": 49, "role": "Lima's aunt and chair of the festival council"}, - "nadia": {"name": "Nadia", "age": 34, "role": "A bookseller and collector of letters"}, - "rayhan": {"name": "Rayhan", "age": 31, "role": "The festival's cheerful head cook"}, - "mira": {"name": "Mira", "age": 29, "role": "A gardener and garland artist"}, - "ishan": {"name": "Ishan", "age": 45, "role": "Master of ceremonies"} -} diff --git a/assets/games/two-rivers/data/dialogue/chapters.json b/assets/games/two-rivers/data/dialogue/chapters.json deleted file mode 100755 index 366f80f..0000000 --- a/assets/games/two-rivers/data/dialogue/chapters.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "delegation_walk": { - "start": "one", - "nodes": { - "one": {"speaker": "lima", "expression": "curious", "text": "Before the council turns you into a visiting title with polished shoes, walk with me. The courtyard makes more sense from its edges. Those blue banners were dyed by a family near the eastern canal; the gold ones came with your delegation. I wanted the colours to meet without pretending they had always been the same.", "next": "two"}, - "two": {"speaker": "z", "expression": "thoughtful", "text": "At home, people sometimes speak of hospitality as though it means erasing the seam. My mother says a good host lets you see where the cloth was joined, because that is where the work and affection live. I think she would approve of your banners—and ask who climbed the ladder to hang them.", "next": "three"}, - "three": {"speaker": "lima", "expression": "playful", "text": "I climbed the first ladder. Ishan discovered me, delivered a speech about royal ankles, and assigned three guards to the remaining banners. Being a princess is frequently the art of doing something useful before protocol notices. Being a scholar, I assume, is doing something reckless and adding footnotes afterward.", "next": "four"}, - "four": {"speaker": "z", "expression": "wry", "text": "Only the finest footnotes. Mine would record that the curator had excellent balance, questionable respect for ceremonial ladders, and a smile capable of making a witness forget the relevant safety regulation.", "choices": [ - {"id": "flirt", "text": "Admit that the smile is distracting.", "effects": [{"type": "relationship", "key": "romance", "amount": 4}, {"type": "relationship", "key": "humour", "amount": 2}], "next": "five"}, - {"id": "candour", "text": "Say you admire how she credits the makers.", "effects": [{"type": "relationship", "key": "respect", "amount": 4}, {"type": "relationship", "key": "trust", "amount": 2}], "next": "five"}, - {"id": "adventure", "text": "Offer to hold the next ladder.", "effects": [{"type": "relationship", "key": "adventure", "amount": 4}, {"type": "relationship", "key": "comfort", "amount": 2}], "next": "five"} - ]}, - "five": {"speaker": "lima", "expression": "warm", "text": "That answer may earn you a second circuit of the courtyard. Look there: cooks testing clay ovens, gardeners threading garlands, copyists checking name cards. The court calls this a royal festival because the palace pays for the pavilion. I call it a city festival because the city supplies every reason anyone comes.", "next": "six"}, - "six": {"speaker": "z", "expression": "thoughtful", "text": "Then the exhibition should name hands, not only patrons. In Lahore I studied a travel album praised for a governor’s taste. The margins named the paper maker, the binder, and the woman who repaired it after a flood. Those small names changed the whole object. Suddenly history had a crowded room behind it.", "next": "seven"}, - "seven": {"speaker": "lima", "expression": "vulnerable", "text": "That is what I am trying to build here, though some relatives prefer an uncluttered family legend. I can argue with them in committee. What frightens me is becoming fluent in their language and forgetting why I began. If you see me polishing away a difficult truth, will you tell me before I become impossible?", "next": "eight"}, - "eight": {"speaker": "z", "expression": "tender", "text": "I will tell you privately, with evidence, tea, and an escape route from the committee. In return, if I start treating people like an interesting archive instead of people, you may confiscate my notebook. Temporarily. I have grown attached to it.", "next": "nine"}, - "nine": {"speaker": "lima", "expression": "playful", "text": "Agreed. Though I reserve the right to ransom the notebook for another dangerously flattering footnote. Come—the library bell is about to sound. Whatever waits inside, I am glad the delegation sent the scholar who notices seams.", "effects": [{"type": "relationship", "key": "comfort", "amount": 3}, {"type": "relationship", "key": "trust", "amount": 3}, {"type": "flag", "id": "delegation_understanding"}]} - } - }, - "library_search": { - "start": "one", - "nodes": { - "one": {"speaker": "anwara", "expression": "thoughtful", "text": "Search as conservators, not hunters. A hunter asks what was taken. A conservator asks what changed around the absence. The velvet beneath the folio is uncreased, the cabinet lock is unmarked, and the humidity paper was replaced at dawn by someone who understood why it mattered.", "next": "two"}, - "two": {"speaker": "lima", "expression": "determined", "text": "So the person had access, knowledge, and enough patience to move the folio without bruising the binding. That narrows the suspects to an uncomfortable number of people I trust. I dislike mysteries that begin by making suspicion feel intelligent.", "next": "three"}, - "three": {"speaker": "z", "expression": "thoughtful", "text": "Suspicion is only one tool. The cabinet smells faintly of vetiver and rain, but the room is dry. The folio may have been wrapped in a cooling cloth before it moved. Whoever did this was protecting it even while disobeying you.", "next": "four"}, - "four": {"speaker": "anwara", "expression": "warm", "text": "Good. The final leaf was repaired with starch paste after the monsoon of my apprenticeship. Heat makes that repair tighten. Festival lamps, a crowded pavilion, and an hour of speeches would be a poor climate for it. Write that in your notebook before romance makes you careless, young scholar.", "next": "five"}, - "five": {"speaker": "lima", "expression": "playful", "text": "Keeper, we have known each other for less than an afternoon. At least allow him time to become careless on his own merits.", "choices": [ - {"id": "professional", "text": "Promise professional concentration, mostly.", "effects": [{"type": "relationship", "key": "humour", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 2}], "next": "six"}, - {"id": "honest", "text": "Say that care and attraction can coexist.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 3}], "next": "six"}, - {"id": "folio", "text": "Return gently to the evidence.", "effects": [{"type": "relationship", "key": "respect", "amount": 4}], "next": "six"} - ]}, - "six": {"speaker": "z", "expression": "determined", "text": "The replacement humidity paper is cut from a ledger page. Its watermark matches the festival accounts on the western desk. Someone wanted us to notice the paper but not immediately. There are pinpricks along one edge—five, two, seven, one—too deliberate for ordinary filing.", "next": "seven"}, - "seven": {"speaker": "lima", "expression": "curious", "text": "Shelf numbers. Five is river histories, two is household accounts, seven is poetry, one is gardening. Anwara taught me that route when I was twelve. She called it the path by which a palace remembers it is fed, watered, criticised, and loved.", "next": "eight"}, - "eight": {"speaker": "anwara", "expression": "vulnerable", "text": "I taught many children many routes. Some lessons are remembered only when an emergency gives them teeth. Follow the shelves. Read the marginal names. And if the trail asks you to choose between a perfect ceremony and an honest history, understand that the choice was present long before the folio vanished.", "next": "nine"}, - "nine": {"speaker": "z", "expression": "thoughtful", "text": "This is not a thief’s escape path. It is a curator’s argument arranged as evidence. We will follow it without disturbing the repair, and we will keep separate notes about what we know, what we infer, and what we merely fear.", "next": "ten"}, - "ten": {"speaker": "lima", "expression": "warm", "text": "Separate notes, shared tea, no accusations without proof. You are remarkably calming for a man who arrived carrying a bow case and a reputation for inconvenient questions. Stay close. The poetry shelf has a rolling ladder, and Ishan has already expressed his views on my ankles.", "effects": [{"type": "relationship", "key": "respect", "amount": 3}, {"type": "relationship", "key": "comfort", "amount": 3}, {"type": "flag", "id": "search_complete"}]} - } - }, - "garden_walk": { - "start": "one", - "nodes": { - "one": {"speaker": "mira", "expression": "warm", "text": "The moon garden is not planted for a single country or a single season. Jasmine opens beside tuberose; bakul waits for warmer air; marigolds carry daylight into evening. A garland works because each flower keeps its own scent while accepting the same thread.", "next": "two"}, - "two": {"speaker": "lima", "expression": "thoughtful", "text": "My grandmother used that image in speeches. She usually left out the gardeners who chose which flowers could survive beside one another. Metaphors become very tidy when the labour is removed.", "next": "three"}, - "three": {"speaker": "z", "expression": "warm", "text": "Then let us keep the labour in view. My aunt grows jasmine in pots she moves twice a day to chase shade. She would laugh at any poet who called fragrance effortless. She would also ask why I had not yet offered to carry your basket.", "next": "four"}, - "four": {"speaker": "lima", "expression": "playful", "text": "Because you suspected I would make you earn the privilege. Correctly. Tell me something true while we walk—something your official biography omitted. Visiting scholars are always reduced to institutions, awards, and one respectable hobby.", "choices": [ - {"id": "failure", "text": "Describe the tournament where every arrow missed.", "effects": [{"type": "relationship", "key": "trust", "amount": 4}, {"type": "relationship", "key": "humour", "amount": 2}], "next": "five"}, - {"id": "family", "text": "Talk about loud family breakfasts.", "effects": [{"type": "relationship", "key": "comfort", "amount": 4}, {"type": "relationship", "key": "familyApproval", "amount": 2}], "next": "five"}, - {"id": "desire", "text": "Admit you wanted this journey to change you.", "effects": [{"type": "relationship", "key": "adventure", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 3}], "next": "five"} - ]}, - "five": {"speaker": "z", "expression": "vulnerable", "text": "The polished version makes me sound certain. I am not. I came because I was tired of being praised for questions that never required me to risk an answer. I wanted to meet people who could disagree with my work and still invite me to dinner afterward.", "next": "six"}, - "six": {"speaker": "lima", "expression": "tender", "text": "That sounds less like uncertainty than hunger. I know it. Everyone praises my exhibitions for balance, which sometimes means I have placed every difficult fact where no guest must look at it for long. This folio may be asking whether I want approval more than truth.", "next": "seven"}, - "seven": {"speaker": "z", "expression": "thoughtful", "text": "Truth without care can become another performance of power. Care without truth becomes decoration. Perhaps the work is to refuse both shortcuts. We can protect the page, credit the founders, and let the court feel the discomfort it has postponed.", "next": "eight"}, - "eight": {"speaker": "lima", "expression": "warm", "text": "You say 'we' very easily. I notice that I like it. I also notice you have carried my basket for half the path without asking again, which is either considerate or a cunning strategy to stand close enough that our shoulders keep touching.", "next": "nine"}, - "nine": {"speaker": "z", "expression": "wry", "text": "A serious researcher does not discard a successful method merely because the subject has identified it. For the record, the shoulder contact appears mutually reproducible.", "next": "ten"}, - "ten": {"speaker": "lima", "expression": "playful", "text": "Peer review can wait until after the archery trial. If you impress me, I may permit a larger sample. If you miss every target, I will still be impressed by the honesty of your earlier confession. Either way, the garden seems determined to keep us on the same path.", "effects": [{"type": "relationship", "key": "comfort", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 3}, {"type": "flag", "id": "garden_walk_complete"}]} - } - }, - "market_founders": { - "start": "one", - "nodes": { - "one": {"speaker": "nadia", "expression": "determined", "text": "People imagine censorship as a locked door. More often it is a filing choice. Put a cook’s letter under household accounts, a gardener’s poem under seasonal instructions, a traveller’s sketch under customs records, and soon no scholar thinks to gather them. Nothing is destroyed. Everything is made lonely.", "next": "two"}, - "two": {"speaker": "z", "expression": "thoughtful", "text": "The folio gathers those lonely records. Its border motifs match the letters: the cook’s copper ladle, the gardener’s five-petal seal, the boatwoman’s knotted rope. The royal dedication was added later in a different hand. The festival began below the line where official histories usually stop reading.", "next": "three"}, - "three": {"speaker": "lima", "expression": "vulnerable", "text": "My family did support it eventually. That matters, but it is not the same as founding it. I can already hear the council offering a tasteful plaque to the unnamed citizens while keeping the royal story at the centre. Gratitude can be used to make theft sound gracious.", "next": "four"}, - "four": {"speaker": "rayhan", "expression": "warm", "text": "Then do not serve history as garnish. My kitchen still cooks the founders’ river rice: mustard from one bank, dried fruit brought by travellers from the west, fish or aubergine depending on the household. No single pot owns the dish. The recipe survives because people keep arguing lovingly over it.", "next": "five"}, - "five": {"speaker": "z", "expression": "warm", "text": "That argument sounds familiar. At family tables, authenticity is often whoever speaks loudest until an aunt produces a stained notebook. Perhaps the public presentation should work like that notebook: specific names, specific work, no grand claim that smooths away difference.", "choices": [ - {"id": "public", "text": "Recommend naming every known founder publicly.", "effects": [{"type": "relationship", "key": "respect", "amount": 4}, {"type": "relationship", "key": "familyApproval", "amount": 1}], "next": "six"}, - {"id": "community", "text": "Invite descendants and guilds to tell the story.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}, {"type": "relationship", "key": "familyApproval", "amount": 3}], "next": "six"}, - {"id": "protect", "text": "Put preservation before spectacle.", "effects": [{"type": "relationship", "key": "comfort", "amount": 3}, {"type": "relationship", "key": "respect", "amount": 3}], "next": "six"} - ]}, - "six": {"speaker": "nadia", "expression": "curious", "text": "All three can coexist if the palace gives up being the only narrator. Display a facsimile, keep the fragile page in controlled light, and place the letters beside present-day voices. Let visitors see how evidence, memory, and living practice correct one another.", "next": "seven"}, - "seven": {"speaker": "lima", "expression": "determined", "text": "The council will say there is no time. I will remind them that urgency was created by announcing an unveiling before conservation approval. I signed that schedule. I can admit the mistake in the same voice I use to correct it.", "next": "eight"}, - "eight": {"speaker": "z", "expression": "tender", "text": "I will stand beside you, but I will not turn your admission into my heroic interruption. You discovered the conflict, listened to the keepers, and changed the exhibition. Partnership should make courage easier without stealing its name.", "next": "nine"}, - "nine": {"speaker": "lima", "expression": "tender", "text": "Be careful. That is the sort of sentence a woman remembers while pretending to examine a nineteenth-century spice ledger. Stand beside me tonight and I may ask you to remain there after the speeches, when partnership has fewer witnesses and considerably less formal clothing.", "next": "ten"}, - "ten": {"speaker": "rayhan", "expression": "playful", "text": "I heard nothing. I am only a cook standing three steps away with excellent hearing. Come test the founders’ dish. Cooperation under pressure reveals character, and if the two of you keep looking at each other like that, at least the rice deserves supervision.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 4}, {"type": "flag", "id": "founders_plan"}]} - } - }, - "pavilion_waiting": { - "start": "one", - "nodes": { - "one": {"speaker": "ishan", "expression": "determined", "text": "The pavilion is full. Guild representatives are seated along the river side, the court delegation faces the stage, and three rival newspapers have discovered the phrase 'missing royal treasure.' I can delay the opening twelve minutes with music and perhaps five more by complimenting the ambassador’s shawl.", "next": "two"}, - "two": {"speaker": "saira", "expression": "thoughtful", "text": "Use ten. We should not behave as though truth is an emergency to be hidden behind entertainment. Lima, the council is divided, but no one disputes that the original cannot endure the lamps. The remaining question is whether we name the concealment and the mistaken history ourselves.", "next": "three"}, - "three": {"speaker": "lima", "expression": "determined", "text": "We do. Anwara protected the folio through an improper act prompted by our improper schedule. I will not punish her publicly to preserve my authority. We will show the conservation images, read the founders’ names, and invite the market guilds to correct the record as research continues.", "next": "four"}, - "four": {"speaker": "z", "expression": "thoughtful", "text": "The evidence supports that account. I can explain the repair, the mismatched dedication, and the letters without claiming certainty where gaps remain. The most persuasive thing we can do is let the audience see the method, including the point where our first assumptions failed.", "next": "five"}, - "five": {"speaker": "saira", "expression": "warm", "text": "You have both chosen a difficult path with unusual grace. Z, a visiting scholar can leave after making trouble and call it principle. You have stayed for the repair. That distinction matters to families, even modern ones who pretend not to conduct interviews over tea.", "choices": [ - {"id": "families", "text": "Say that staying for the repair is the point.", "effects": [{"type": "relationship", "key": "familyApproval", "amount": 5}, {"type": "relationship", "key": "comfort", "amount": 2}], "next": "six"}, - {"id": "lima", "text": "Say that Lima made staying an easy choice.", "effects": [{"type": "relationship", "key": "romance", "amount": 5}, {"type": "relationship", "key": "trust", "amount": 2}], "next": "six"}, - {"id": "work", "text": "Commit to the continuing research.", "effects": [{"type": "relationship", "key": "respect", "amount": 5}, {"type": "relationship", "key": "adventure", "amount": 2}], "next": "six"} - ]}, - "six": {"speaker": "lima", "expression": "flustered", "text": "Aunt Saira, if this is an interview, you might have warned me before allowing him to answer so well. I have a speech to deliver and would prefer not to do it while visibly imagining future tea tables.", "next": "seven"}, - "seven": {"speaker": "saira", "expression": "playful", "text": "A curator should be able to manage competing interpretations. Besides, the entire market has managed to notice what you two believe remains subtle. Do not worry—the newspapers are still occupied with the missing-treasure headline.", "next": "eight"}, - "eight": {"speaker": "z", "expression": "tender", "text": "After the speech, may I have the first dance? This is partly strategic. If I stumble publicly, the scandal may distract everyone from the archive. If I do not, I would like one memory tonight that belongs to us before it becomes an exhibition note.", "next": "nine"}, - "nine": {"speaker": "lima", "expression": "tender", "text": "You may have the first dance and the private memory. You may even have the truth: I have been saving that dance since the garden, when you called our shoulders a reproducible result. Do not make me regret rewarding such terrible scholarship.", "next": "ten"}, - "ten": {"speaker": "ishan", "expression": "warm", "text": "Your twelve minutes have become two. The river lamps are lit, the facsimile is in place, and the musicians are waiting. Whatever changes after tonight, the story will no longer belong to a single house. Take your positions—and, for all our sakes, save the kissing until after the council vote.", "effects": [{"type": "relationship", "key": "familyApproval", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 3}, {"type": "flag", "id": "pavilion_ready"}]} - } - } -} diff --git a/assets/games/two-rivers/data/dialogue/scenes.json b/assets/games/two-rivers/data/dialogue/scenes.json deleted file mode 100755 index bf68025..0000000 --- a/assets/games/two-rivers/data/dialogue/scenes.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "courtyard_preparations": { - "start": "banners", - "nodes": { - "banners": {"speaker": "lima", "expression": "curious", "text": "The indigo banners belong on the riverward arches, but three ministers have moved them because blue is apparently insufficiently regal. This is what curating means: defending colour choices against men who own ceremonial hats.", "next": "z_notices"}, - "z_notices": {"speaker": "z", "expression": "wry", "text": "In Lahore, a committee once spent two meetings deciding whether a catalogue ribbon was blue or philosophically teal. I survived by bringing tea and agreeing with the eldest librarian.", "choices": [ - {"text": "Offer to help restore Lima's original arrangement.", "next": "help", "effects": [{"type": "relationship", "key": "respect", "amount": 3}, {"type": "relationship", "key": "comfort", "amount": 2}]}, - {"text": "Suggest hiding the ministers' hats until they surrender.", "next": "hats", "effects": [{"type": "relationship", "key": "humour", "amount": 4}]}, - {"text": "Admit that the curator makes indigo look dangerously persuasive.", "next": "indigo", "effects": [{"type": "relationship", "key": "romance", "amount": 4}]} - ]}, - "help": {"speaker": "lima", "expression": "warm", "text": "You take the river side; I will take the palace side. If anyone objects, look scholarly and mention preservation standards. People become wonderfully obedient when afraid of footnotes.", "next": "work"}, - "hats": {"speaker": "lima", "expression": "playful", "text": "Tempting. Yet Aunt Saira says diplomacy means allowing people to keep one dignity each. We shall permit the hats and reclaim the arches.", "next": "work"}, - "indigo": {"speaker": "lima", "expression": "playful", "text": "That line was either shameless or culturally observant. I will decide after you carry the heavier banner stand.", "next": "work"}, - "work": {"speaker": "z", "expression": "warm", "text": "They work shoulder to shoulder while musicians tune beyond the gate. Lima explains how each banner carries a different river poem; Z notices she quotes the boatwoman's verse before the king's.", "next": "founders"}, - "founders": {"speaker": "lima", "expression": "thoughtful", "text": "My catalogue begins with rulers because the archive begins with rulers. But festivals are made by people who cook, mend boats, grow flowers, and stay awake arranging banners. I wish the records remembered them as clearly as the songs do.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}, {"type": "discoverGift", "id": "poetry_book"}]} - } - }, - "ishan_protocol": { - "start": "warning", - "nodes": { - "warning": {"speaker": "ishan", "text": "Master Z, a word of survival. At sunset you will be introduced to the council. Bow to Saira, nod to the ministers, and do not call the royal genealogist's speech 'surprisingly brief.' He considers that an insult.", "next": "reply"}, - "reply": {"speaker": "z", "expression": "wry", "text": "How does he feel about 'mercifully finite'?", "choices": [ - {"text": "Promise impeccable diplomatic restraint.", "next": "restraint", "effects": [{"type": "relationship", "key": "familyApproval", "amount": 3}]}, - {"text": "Ask which protocol Lima ignores when nobody watches.", "next": "lima", "effects": [{"type": "relationship", "key": "humour", "amount": 2}, {"type": "relationship", "key": "romance", "amount": 2}]} - ]}, - "restraint": {"speaker": "ishan", "text": "Excellent. You have the solemn face for it. Keep that expression when the trumpets miss their entrance and we may all preserve our employment.", "next": "kindness"}, - "lima": {"speaker": "ishan", "text": "Her Highness ignores any protocol that places a tedious person between her and a useful book. I did not tell you this. I especially did not tell you she has already asked where you are staying.", "next": "kindness"}, - "kindness": {"speaker": "ishan", "text": "One serious instruction: the public pavilion is for everyone. The palace is host, not owner. Lima has fought for that distinction since she was seventeen. Stand beside her on it and the city will notice.", "effects": [{"type": "relationship", "key": "respect", "amount": 2}]} - } - }, - "anwara_memory": { - "start": "dust", - "nodes": { - "dust": {"speaker": "anwara", "text": "Do not wipe that dust away. It is clean dust, which is rarer than clean politics. It tells me the eastern cabinet has not been opened since yesterday.", "next": "lesson"}, - "lesson": {"speaker": "lima", "expression": "warm", "text": "Anwara taught me to read dust before she taught me the alphabet. I spent a month believing every shelf was a sentence.", "next": "z"}, - "z": {"speaker": "z", "expression": "thoughtful", "text": "Perhaps it is. Absence has grammar. A moved book leaves a pale verb behind; a missing folio creates an accusation.", "choices": [ - {"text": "Ask Anwara who requested access to the manuscript.", "next": "access", "effects": [{"type": "relationship", "key": "trust", "amount": 3}]}, - {"text": "Ask why the final folio matters to Lima personally.", "next": "personal", "effects": [{"type": "relationship", "key": "comfort", "amount": 3}]} - ]}, - "access": {"speaker": "anwara", "text": "The council, the conservators, the curator, and me. Too many keys for certainty; too few for coincidence. Yesterday a minister asked whether heat could make old ink appear brighter. I disliked the question.", "next": "warning"}, - "personal": {"speaker": "lima", "expression": "vulnerable", "text": "My mother read its dedication at the first festival I remember. She said a country becomes honest when ordinary names are spoken in royal rooms. After she died, the folio became the sound of her voice.", "next": "warning"}, - "warning": {"speaker": "anwara", "text": "The glass case is new. Its lamps are stronger than the conservators approved. If anyone values spectacle above the page, the manuscript will not survive their admiration.", "effects": [{"type": "flag", "id": "lamp_warning"}, {"type": "relationship", "key": "respect", "amount": 2}]} - } - }, - "library_balcony": { - "start": "rain", - "nodes": { - "rain": {"speaker": "lima", "expression": "thoughtful", "text": "Rain on the library roof used to frighten me. The ceiling leaked above the military histories, and I imagined every dead general swimming indignantly through the catalogue.", "next": "z"}, - "z": {"speaker": "z", "expression": "wry", "text": "A useful image. Most military histories would improve if the generals had to tread water while explaining themselves.", "next": "laugh"}, - "laugh": {"speaker": "lima", "expression": "playful", "text": "There. You have done it again—made irreverence sound like scholarship. Is that a visiting-scholars' technique, or are you uniquely troublesome?", "choices": [ - {"text": "Say the trouble appears only around her.", "next": "around", "effects": [{"type": "relationship", "key": "romance", "amount": 5}, {"type": "relationship", "key": "humour", "amount": 2}]}, - {"text": "Confess that unfamiliar places make humour feel like a bridge.", "next": "bridge", "effects": [{"type": "relationship", "key": "trust", "amount": 4}, {"type": "relationship", "key": "comfort", "amount": 3}]} - ]}, - "around": {"speaker": "lima", "expression": "tender", "text": "How inconvenient for us both. She leans against the balcony rail close enough that his sleeve brushes hers, then makes no effort to move.", "next": "home"}, - "bridge": {"speaker": "lima", "expression": "warm", "text": "Then I am glad you crossed. A palace can make guests feel observed instead of welcomed. With you, I keep forgetting which of us is supposed to be impressive.", "next": "home"}, - "home": {"speaker": "z", "expression": "thoughtful", "text": "He tells her about evenings of cardamom tea, cousins arguing over cricket, his mother's precise opinions on hospitality, and the quiet loneliness of being praised for travelling far from everyone who knows how he takes breakfast.", "next": "answer"}, - "answer": {"speaker": "lima", "expression": "vulnerable", "text": "I understand the loneliness of being known publicly and guessed at privately. Stay after the festival, if you can. Not forever. Just long enough that neither of us has to guess.", "effects": [{"type": "relationship", "key": "comfort", "amount": 5}, {"type": "relationship", "key": "romance", "amount": 4}, {"type": "discoverGift", "id": "spiced_tea"}]} - } - }, - "mira_garland": { - "start": "empty", - "nodes": { - "empty": {"speaker": "mira", "text": "The communal arch is bare because the palace florist sent only roses. Beautiful, expensive, and completely wrong. This garland should smell like five neighbourhoods, not one drawing room.", "next": "flowers"}, - "flowers": {"speaker": "mira", "text": "Jasmine for welcome, tuberose for evening, marigold for shared work, rose for affection, and bakul for memory. None belongs to one family. Together they belong to the festival.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "determined", "text": "We will find every one. Put the palace roses aside for the ministers' table; they may enjoy being arranged with their peers.", "choices": [ - {"text": "Volunteer to gather the flowers with Lima.", "next": "volunteer", "effects": [{"type": "relationship", "key": "adventure", "amount": 3}, {"type": "relationship", "key": "familyApproval", "amount": 2}]}, - {"text": "Tell Mira the garland is living historical evidence.", "next": "evidence", "effects": [{"type": "relationship", "key": "respect", "amount": 3}]} - ]}, - "volunteer": {"speaker": "mira", "text": "Good. A scholar who can identify a flower is worth three who merely classify it. Her Highness knows the garden; you carry the basket and try not to stare at her.", "next": "promise"}, - "evidence": {"speaker": "mira", "text": "Exactly. History that wilts by morning still matters. Perhaps especially then. Gather carefully, scholar; the roots must remain for next year's story.", "next": "promise"}, - "promise": {"speaker": "z", "expression": "warm", "text": "Z accepts the basket. Lima's hand closes over the other handle. For several steps neither admits that the path is wide enough to carry it separately.", "effects": [{"type": "quest", "id": "garland", "action": "start"}, {"type": "relationship", "key": "romance", "amount": 2}]} - } - }, - "garden_history": { - "start": "mosaic", - "nodes": { - "mosaic": {"speaker": "z", "expression": "thoughtful", "text": "The mosaic repeats the manuscript's four symbols, but flowers replace the royal seals. Whoever designed this wanted the clue understood by gardeners, not courtiers.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "curious", "text": "My tutors called it decorative. Mira calls it a planting calendar. Anwara called both answers incomplete and refused to explain why.", "next": "sequence"}, - "sequence": {"speaker": "z", "expression": "determined", "text": "Jasmine opens at welcome, tuberose carries into dusk, marigold marks the communal feast, and bakul keeps its fragrance after falling. Dawn, evening, fire, memory.", "choices": [ - {"text": "Invite Lima to press the first flower with you.", "next": "together", "effects": [{"type": "relationship", "key": "comfort", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 3}]}, - {"text": "Ask whether she enjoys being proved right by a wall.", "next": "wall", "effects": [{"type": "relationship", "key": "humour", "amount": 3}]} - ]}, - "together": {"speaker": "lima", "expression": "tender", "text": "Their fingertips meet over the stone jasmine. The mechanism clicks, but Lima looks at him rather than the opening seam. “Remarkably effective scholarship,” she murmurs.", "next": "note"}, - "wall": {"speaker": "lima", "expression": "playful", "text": "Immensely. Walls interrupt less than ministers and apologise more gracefully. This one may even reveal a secret compartment.", "next": "note"}, - "note": {"speaker": "z", "expression": "thoughtful", "text": "Inside is Anwara's note: The straightest arrow is useless when the target is false. Beneath it rests an old brass range token stamped with a boatwoman's name.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}]} - } - }, - "archery_after": { - "start": "retrieve", - "nodes": { - "retrieve": {"speaker": "lima", "expression": "playful", "text": "Lima retrieves the last arrow and examines the target with theatrical gravity. “The hay has submitted. The kingdom is safe.”", "next": "z"}, - "z": {"speaker": "z", "expression": "wry", "text": "I had hoped for a medal. Or at least a curator's favourable annotation.", "choices": [ - {"text": "Ask her to correct your stance at very close range.", "next": "stance", "effects": [{"type": "relationship", "key": "romance", "amount": 5}, {"type": "relationship", "key": "comfort", "amount": 2}]}, - {"text": "Offer to teach her the draw you learned from your aunt.", "next": "teach", "effects": [{"type": "relationship", "key": "respect", "amount": 4}, {"type": "relationship", "key": "adventure", "amount": 3}]} - ]}, - "stance": {"speaker": "lima", "expression": "tender", "text": "She steps behind him, one hand at his elbow and one at his waist. “Your stance is perfectly adequate,” she says near his ear. “I am correcting your unbearable confidence.”", "next": "token"}, - "teach": {"speaker": "lima", "expression": "warm", "text": "He adjusts her grip only after asking. She mirrors the unfamiliar draw, releases, and strikes the inner ring. Her delight is immediate and wholly unroyal.", "next": "token"}, - "token": {"speaker": "z", "expression": "thoughtful", "text": "The range ledger names the token's owner: Samira the boatwright, winner of the first riverside contest and one of the signatures omitted from the court catalogue.", "effects": [{"type": "item", "id": "founders_record"}, {"type": "relationship", "key": "trust", "amount": 2}]} - } - }, - "nadia_letters": { - "start": "shelf", - "nodes": { - "shelf": {"speaker": "nadia", "text": "If you are looking for respectable books, try the front table. If you are looking for truthful ones, help me move this crate before the inspectors notice.", "next": "letters"}, - "letters": {"speaker": "nadia", "text": "Three letters were filed under royal invitations because nobody read past the seals. They describe cooks feeding strikers, gardeners lending boats, and travellers carrying poems between the rivers.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "determined", "text": "Those letters should have been in the festival archive. My office requested all founder material last winter.", "choices": [ - {"text": "Defend Nadia's caution without dismissing Lima's frustration.", "next": "balance", "effects": [{"type": "relationship", "key": "trust", "amount": 4}, {"type": "relationship", "key": "respect", "amount": 3}]}, - {"text": "Point out that mistrust of the palace was historically earned.", "next": "earned", "effects": [{"type": "relationship", "key": "adventure", "amount": 3}, {"type": "relationship", "key": "respect", "amount": 2}]} - ]}, - "balance": {"speaker": "z", "expression": "thoughtful", "text": "Nadia protected vulnerable evidence; Lima tried to bring it into public care. Neither intention repairs the gap alone. They need a process the market can trust and the archive must honour.", "next": "agreement"}, - "earned": {"speaker": "z", "expression": "determined", "text": "A seal once removed ordinary names from the record. Another seal cannot demand confidence by decree. Let the booksellers decide how copies are made and credited.", "next": "agreement"}, - "agreement": {"speaker": "nadia", "text": "Copies first, originals later, and a market witness at every catalogue meeting. Agree to that and I will show you where the last two letters wandered.", "effects": [{"type": "quest", "id": "letters", "action": "start"}, {"type": "relationship", "key": "familyApproval", "amount": 2}]} - } - }, - "rayhan_kitchen": { - "start": "steam", - "nodes": { - "steam": {"speaker": "rayhan", "text": "Excellent, educated hands. Wash them. The council doubled the guest list and halved my warning. We are making fragrant rice for two hundred people and one princess who keeps stealing pistachios.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "playful", "text": "Allegations without witnesses. Z, as a scholar, you understand the importance of evidence.", "next": "z"}, - "z": {"speaker": "z", "expression": "wry", "text": "There is pistachio dust on your sleeve and an expression of profound guiltlessness. The evidence is unusually charming.", "choices": [ - {"text": "Take Lima's side and demand a formal tasting.", "next": "taste", "effects": [{"type": "relationship", "key": "humour", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 2}]}, - {"text": "Ask Rayhan about the founders' communal meal.", "next": "history", "effects": [{"type": "relationship", "key": "respect", "amount": 3}]} - ]}, - "taste": {"speaker": "rayhan", "text": "A tasting. Naturally. Stand close together so I can mistrust you efficiently. Rice first, saffron second, citrus third, pistachio last.", "next": "recipe"}, - "history": {"speaker": "rayhan", "text": "The first meal used whatever five streets could spare. The palace supplied plates only after discovering everyone had already eaten. Remember that when someone calls generosity a royal invention.", "next": "recipe"}, - "recipe": {"speaker": "lima", "expression": "warm", "text": "Foundation, gold, brightness, green. She ties an apron around Z and leaves her hands at his waist one heartbeat longer than the knot requires. “For scholarship,” she says.", "effects": [{"type": "discoverGift", "id": "spiced_tea"}, {"type": "relationship", "key": "comfort", "amount": 2}]} - } - }, - "market_walk": { - "start": "crowd", - "nodes": { - "crowd": {"speaker": "lima", "expression": "warm", "text": "In the palace every silence becomes a rumour. Here I can disappear between a spice seller and a family arguing over sweets. It is the closest thing I have to privacy.", "next": "z"}, - "z": {"speaker": "z", "expression": "thoughtful", "text": "You are not very well disguised. Three vendors bowed, two children waved, and that woman gave me a look suggesting she has already planned our wedding menu.", "next": "laugh"}, - "laugh": {"speaker": "lima", "expression": "playful", "text": "That is Farida. She plans everyone's wedding menu. Last month she married two customers because they reached for the same mango.", "choices": [ - {"text": "Ask what Farida would serve at theirs.", "next": "wedding", "effects": [{"type": "relationship", "key": "romance", "amount": 6}, {"type": "relationship", "key": "humour", "amount": 3}]}, - {"text": "Say you like seeing the city know and love her.", "next": "known", "effects": [{"type": "relationship", "key": "comfort", "amount": 5}, {"type": "relationship", "key": "familyApproval", "amount": 3}]} - ]}, - "wedding": {"speaker": "lima", "expression": "tender", "text": "Lima stops walking. “You move quickly for a man who took ten minutes to choose a library chair.” Then, softer: “Saffron sweets. Farida believes optimism should stain the fingers.”", "next": "hand"}, - "known": {"speaker": "lima", "expression": "vulnerable", "text": "Loved is easier here because they knew me before the speeches. They remember when I fell into the fountain chasing a paper boat. I want you to know that version too.", "next": "hand"}, - "hand": {"speaker": "z", "expression": "warm", "text": "A surge in the crowd presses them together. Z offers his hand; Lima takes it, and keeps it after the street widens. Neither mentions the unnecessary duration.", "effects": [{"type": "relationship", "key": "trust", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 3}, {"type": "discoverGift", "id": "brass_compass"}]} - } - }, - "garland_complete": { - "start": "finished", - "nodes": { - "finished": {"speaker": "mira", "text": "Five neighbourhoods, five fragrances, and not one palace rose in command. Hold the far end, both of you. A communal garland should be lifted by more than one pair of hands.", "next": "lift"}, - "lift": {"speaker": "lima", "expression": "triumphant", "text": "The arch rises above the market entrance. Children call the flower names while Mira knots each stem into the next. The crowd applauds itself rather than the palace.", "next": "z"}, - "z": {"speaker": "z", "expression": "warm", "text": "This is the festival Anwara was trying to protect: not an object beneath glass, but memory practised together.", "choices": [ - {"text": "Give the public credit when Saira arrives.", "next": "credit", "effects": [{"type": "relationship", "key": "familyApproval", "amount": 5}, {"type": "relationship", "key": "respect", "amount": 3}]}, - {"text": "Quietly tuck one fallen jasmine into Lima's hair.", "next": "jasmine", "effects": [{"type": "relationship", "key": "romance", "amount": 5}, {"type": "relationship", "key": "comfort", "amount": 3}]} - ]}, - "credit": {"speaker": "saira", "text": "Then the programme will name every contributing street. Tradition is not weakened by accurate credits; only vanity is.", "next": "memory"}, - "jasmine": {"speaker": "lima", "expression": "tender", "text": "She turns her face into his palm before propriety can object. “There,” she says. “Now the arrangement contains one dangerously observant scholar.”", "next": "memory"}, - "memory": {"speaker": "mira", "text": "Mira sends them away with jasmine-scented fingers and the knowledge that the first founders used this same sequence to mark safe meeting places.", "effects": [{"type": "unlockCG", "id": "garland"}]} - } - }, - "letters_complete": { - "start": "three", - "nodes": { - "three": {"speaker": "nadia", "text": "All three. A cook's account, a gardener's map, and a traveller's letter home. Read the signatures aloud; they have waited long enough.", "next": "names"}, - "names": {"speaker": "z", "expression": "thoughtful", "text": "Amina Rahman, who fed the night crews. Debu Sen, who opened the garden gates. Samira Qureshi, who carried verses upstream and returned with another language in the margins.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "vulnerable", "text": "My catalogue reduced them to 'local assistance.' Two words where three lives should be. I signed that edition.", "choices": [ - {"text": "Remind her that responsibility includes correction, not self-punishment.", "next": "correct", "effects": [{"type": "relationship", "key": "trust", "amount": 5}, {"type": "relationship", "key": "comfort", "amount": 4}]}, - {"text": "Offer to write the corrected entry beside her.", "next": "beside", "effects": [{"type": "relationship", "key": "respect", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 3}]} - ]}, - "correct": {"speaker": "z", "expression": "warm", "text": "You inherited an archive designed to overlook them. Your responsibility is not to have been born knowing better; it is to change what the next curator inherits.", "next": "copy"}, - "beside": {"speaker": "z", "expression": "tender", "text": "Two chairs, one desk, several arguments over commas. I can imagine worse futures. Lima's answering smile makes the bookseller suddenly fascinated by another shelf.", "next": "copy"}, - "copy": {"speaker": "nadia", "text": "The private reading room is yours until moonrise. Make the copy together. Leave the door open for propriety if you must; the shelves have heard better gossip.", "effects": [{"type": "unlockCG", "id": "library"}, {"type": "relationship", "key": "familyApproval", "amount": 3}]} - } - }, - "ishan_stage": { - "start": "programme", - "nodes": { - "programme": {"speaker": "ishan", "text": "The council has rewritten the programme four times. At present the folio is unveiled, praised, illuminated, praised again, and possibly cooked by the lamps before dessert.", "next": "lima"}, - "lima": {"speaker": "lima", "expression": "determined", "text": "Then there will be no unveiling. We will display a facsimile, keep the original in controlled light, and give the founders' descendants the stage.", "next": "risk"}, - "risk": {"speaker": "saira", "text": "Several ministers will call that humiliation. They expected the palace to own the revelation.", "choices": [ - {"text": "Frame preservation as honour rather than retreat.", "next": "honour", "effects": [{"type": "relationship", "key": "respect", "amount": 4}, {"type": "relationship", "key": "familyApproval", "amount": 3}]}, - {"text": "Let the ministers be embarrassed by accurate history.", "next": "embarrassed", "effects": [{"type": "relationship", "key": "adventure", "amount": 4}, {"type": "relationship", "key": "humour", "amount": 2}]} - ]}, - "honour": {"speaker": "z", "expression": "determined", "text": "A fragile page is not honoured by being sacrificed to applause. The facsimile lets everyone read it; the original survives to correct us again.", "next": "ready"}, - "embarrassed": {"speaker": "lima", "expression": "triumphant", "text": "At last, a festival entertainment I can endorse. Ishan, place their reserved seats where they can hear every omitted name clearly.", "next": "ready"}, - "ready": {"speaker": "ishan", "text": "The descendants are waiting, the facsimile is mounted, and the lamps are safely dim. Your Highness, Master Z—the stage is yours.", "effects": [{"type": "relationship", "key": "trust", "amount": 2}]} - } - }, - "dance_after": { - "start": "breath", - "nodes": { - "breath": {"speaker": "lima", "expression": "tender", "text": "They leave the dancers beneath a storm of petals. Lima is breathless, laughing, and still holding both his hands. “You followed beautifully,” she says. “Even when you did not.”", "next": "z"}, - "z": {"speaker": "z", "expression": "flustered", "text": "I was conducting field research into whether a princess will catch a scholar who misses a turn.", "next": "result"}, - "result": {"speaker": "lima", "expression": "playful", "text": "And your findings?", "choices": [ - {"text": "She catches him, but keeps him longer than necessary.", "next": "keeps", "effects": [{"type": "relationship", "key": "romance", "amount": 6}, {"type": "relationship", "key": "comfort", "amount": 3}]}, - {"text": "Further trials require somewhere quieter.", "next": "quieter", "effects": [{"type": "relationship", "key": "humour", "amount": 3}, {"type": "relationship", "key": "adventure", "amount": 2}, {"type": "relationship", "key": "romance", "amount": 4}]} - ]}, - "keeps": {"speaker": "lima", "expression": "tender", "text": "“A serious methodological concern.” Her thumb traces his knuckles. “We should discuss it beside the river, where nobody will interrupt the peer review.”", "next": "leave"}, - "quieter": {"speaker": "lima", "expression": "playful", "text": "“At last, rigorous scholarship.” She steals him from the pavilion while Ishan heroically redirects three councillors and an aunt who is not fooled at all.", "next": "leave"}, - "leave": {"speaker": "z", "expression": "warm", "text": "They walk toward the moonlit steps as music softens behind them, the public argument safely alive and the private answer waiting by the water.", "effects": [{"type": "relationship", "key": "trust", "amount": 2}]} - } - } -} diff --git a/assets/games/two-rivers/data/dialogue/story.json b/assets/games/two-rivers/data/dialogue/story.json deleted file mode 100755 index f170627..0000000 --- a/assets/games/two-rivers/data/dialogue/story.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "arrival": { - "start": "first", - "nodes": { - "first": { - "speaker": "lima", - "expression": "curious", - "text": "You must be Z. The scholar who corrected three footnotes in our festival catalogue before breakfast.", - "next": "reply" - }, - "reply": { - "speaker": "z", - "expression": "wry", - "text": "Two footnotes. The third was merely being watched very closely.", - "choices": [ - {"text": "I was hoping to impress the curator.", "next": "flirt", "effects": [{"type": "relationship", "key": "romance", "amount": 5}, {"type": "relationship", "key": "humour", "amount": 4}, {"type": "achievement", "id": "first_spark"}]}, - {"text": "Accuracy is a form of respect.", "next": "respect", "effects": [{"type": "relationship", "key": "respect", "amount": 6}, {"type": "relationship", "key": "trust", "amount": 3}]}, - {"text": "I panic-edit when beautiful royalty reads over my shoulder.", "next": "flirt", "effects": [{"type": "relationship", "key": "romance", "amount": 6}, {"type": "relationship", "key": "comfort", "amount": 3}, {"type": "achievement", "id": "first_spark"}]} - ] - }, - "flirt": { - "speaker": "lima", - "expression": "playful", - "text": "Careful. If you keep speaking that plainly, I may arrange for you to stand very close to me all week.", - "next": "business" - }, - "respect": { - "speaker": "lima", - "expression": "warm", - "text": "Then we agree. History deserves precision—especially when powerful people prefer decoration.", - "next": "business" - }, - "business": { - "speaker": "lima", - "expression": "regal", - "text": "Come. I want you to see the Moonlit Manuscript before the doors open. Its last folio carries the festival's oldest dedication.", - "effects": [{"type": "flag", "id": "met_lima"}, {"type": "relationship", "key": "adventure", "amount": 2}, {"type": "discoverGift", "id": "inkstone"}] - } - } - }, - "saira": { - "start": "welcome", - "nodes": { - "welcome": { - "speaker": "saira", - "text": "So you are the visiting scholar. Lima has mentioned your footnotes twice, which is once more than she mentions most diplomats.", - "choices": [ - {"text": "Her catalogue deserved the attention.", "next": "good", "effects": [{"type": "relationship", "key": "familyApproval", "amount": 5}, {"type": "relationship", "key": "respect", "amount": 2}]}, - {"text": "Only the footnotes? I must work harder.", "next": "bold", "effects": [{"type": "relationship", "key": "humour", "amount": 3}, {"type": "relationship", "key": "romance", "amount": 2}]} - ] - }, - "good": {"speaker": "saira", "text": "A diplomatic answer. Fortunately, your expression ruined it. I think I shall like you.", "effects": [{"type": "discoverGift", "id": "embroidered_ribbon"}]}, - "bold": {"speaker": "saira", "text": "Bold. I see why she smiled after breakfast. Do try not to cause an international incident before supper.", "effects": [{"type": "discoverGift", "id": "embroidered_ribbon"}]} - } - }, - "missing_folio": { - "start": "case", - "nodes": { - "case": { - "speaker": "lima", - "expression": "determined", - "text": "The seal is intact, the glass unbroken, and the final folio is gone. Someone with a keeper's key removed it.", - "next": "ribbon" - }, - "ribbon": { - "speaker": "z", - "expression": "thoughtful", - "text": "Not quite gone. This indigo thread was caught beneath the frame. The knot marks a reading order: dawn, rain, lantern, moon.", - "choices": [ - {"text": "Ask Lima what she thinks before proposing a theory.", "next": "together", "effects": [{"type": "relationship", "key": "respect", "amount": 5}, {"type": "relationship", "key": "trust", "amount": 4}]}, - {"text": "Suggest a secret keeper's trail.", "next": "trail", "effects": [{"type": "relationship", "key": "adventure", "amount": 5}, {"type": "relationship", "key": "trust", "amount": 2}]}, - {"text": "Observe that mysteries improve an already excellent first date.", "next": "date", "effects": [{"type": "relationship", "key": "humour", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 5}]} - ] - }, - "together": { - "speaker": "lima", - "expression": "warm", - "text": "You ask instead of announcing. That is rarer in this palace than any illuminated folio. I think Anwara wants us to follow.", - "next": "close" - }, - "trail": { - "speaker": "lima", - "expression": "curious", - "text": "Anwara taught me that knot when I was twelve. If she left it, the disappearance is a message—not a theft.", - "next": "close" - }, - "date": { - "speaker": "lima", - "expression": "playful", - "text": "A first date usually includes tea. Solve my missing-manuscript problem and I may permit a scandalous second cup.", - "next": "close" - }, - "close": { - "speaker": "z", - "expression": "warm", - "text": "Then we begin with four shelves and one lantern. Stay close—the scholarship may become dangerous.", - "effects": [{"type": "item", "id": "folio_ribbon"}, {"type": "quest", "id": "letters", "action": "start"}, {"type": "discoverGift", "id": "poetry_book"}] - } - } - }, - "garden_confidence": { - "start": "bench", - "nodes": { - "bench": { - "speaker": "lima", - "expression": "vulnerable", - "text": "Everyone assumes confidence is effortless when one wears a crown. Mostly it means learning where to hide the trembling.", - "choices": [ - {"text": "Offer your hand without filling the silence.", "next": "hand", "effects": [{"type": "relationship", "key": "comfort", "amount": 7}, {"type": "relationship", "key": "trust", "amount": 5}, {"type": "relationship", "key": "romance", "amount": 3}]}, - {"text": "Tell her courage is action taken while trembling.", "next": "courage", "effects": [{"type": "relationship", "key": "respect", "amount": 5}, {"type": "relationship", "key": "adventure", "amount": 4}]}, - {"text": "Confess that she makes you forget several useful words.", "next": "words", "effects": [{"type": "relationship", "key": "humour", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 7}]} - ] - }, - "hand": { - "speaker": "lima", - "expression": "tender", - "text": "Her fingers settle between yours. “You are surprisingly good at silence, Z. Do not become proud; I still prefer your voice.”", - "effects": [{"type": "discoverGift", "id": "spiced_tea"}] - }, - "courage": { - "speaker": "lima", - "expression": "determined", - "text": "Then let us tremble efficiently. There is a clue at the archery range—and I intend to beat you to it.", - "effects": [{"type": "discoverGift", "id": "archery_charm"}] - }, - "words": { - "speaker": "lima", - "expression": "playful", - "text": "Only several? I had hoped to be devastating. Sit nearer. Perhaps proximity will improve my performance.", - "effects": [{"type": "discoverGift", "id": "brass_compass"}] - } - } - }, - "anwara_truth": { - "start": "meeting", - "nodes": { - "meeting": { - "speaker": "anwara", - "text": "You followed every thread. Good. I hid the folio because the council planned to display it beneath hot lamps until its pigments flaked away.", - "next": "history" - }, - "history": { - "speaker": "anwara", - "text": "But protection was not my only reason. The dedication names cooks, boatwrights, poets, gardeners, and travellers as the festival's founders. The court catalogue names only kings.", - "next": "lima" - }, - "lima": { - "speaker": "lima", - "expression": "determined", - "text": "You should have trusted me with the truth.", - "choices": [ - {"text": "Anwara was wrong to act alone, but right to protect the folio.", "next": "balanced", "effects": [{"type": "relationship", "key": "trust", "amount": 5}, {"type": "relationship", "key": "respect", "amount": 5}, {"type": "relationship", "key": "familyApproval", "amount": 3}]}, - {"text": "The public deserves the complete history tonight.", "next": "public", "effects": [{"type": "relationship", "key": "adventure", "amount": 6}, {"type": "relationship", "key": "respect", "amount": 3}]}, - {"text": "Let Lima decide; it is her risk and responsibility.", "next": "decide", "effects": [{"type": "relationship", "key": "trust", "amount": 7}, {"type": "relationship", "key": "romance", "amount": 3}]} - ] - }, - "balanced": {"speaker": "anwara", "text": "A precise rebuke. You would have made a formidable keeper."}, - "public": {"speaker": "lima", "expression": "triumphant", "text": "Then tonight the founders recover their names—and the council learns that truth survives poor lighting."}, - "decide": {"speaker": "lima", "expression": "tender", "text": "Thank you. Not for agreeing—for remembering that the choice is mine. We reveal it, carefully and completely."} - } - }, - "resolution": { - "start": "stage", - "nodes": { - "stage": { - "speaker": "saira", - "text": "The council is listening, Lima. How shall the folio be presented?", - "choices": [ - {"text": "As a shared text, studied before it is celebrated.", "next": "scholar", "effects": [{"type": "bias", "id": "scholar", "amount": 12}, {"type": "relationship", "key": "respect", "amount": 6}]}, - {"text": "With the founders' descendants telling the story.", "next": "families", "effects": [{"type": "bias", "id": "families", "amount": 12}, {"type": "relationship", "key": "familyApproval", "amount": 7}]}, - {"text": "As the first clue in a travelling exhibition.", "next": "road", "effects": [{"type": "bias", "id": "road", "amount": 12}, {"type": "relationship", "key": "adventure", "amount": 7}]}, - {"text": "Briefly. Then we dance before the speeches breed.", "next": "laughter", "effects": [{"type": "bias", "id": "laughter", "amount": 12}, {"type": "relationship", "key": "humour", "amount": 7}]} - ] - }, - "scholar": {"speaker": "lima", "expression": "warm", "text": "Z and I will prepare the first public edition together. I expect lively arguments in the margins."}, - "families": {"speaker": "lima", "expression": "regal", "text": "The palace will lend the page; the city will supply the voices. That is how the festival began."}, - "road": {"speaker": "lima", "expression": "triumphant", "text": "Let the folio travel both rivers. History should meet the people who inherited it."}, - "laughter": {"speaker": "lima", "expression": "playful", "text": "A compelling scholarly principle. I second the motion—especially the dancing."} - } - }, - "moonrise": { - "start": "river", - "nodes": { - "river": { - "speaker": "lima", - "expression": "tender", - "text": "The city is still arguing about the folio. You realise this means the festival succeeded.", - "next": "z" - }, - "z": { - "speaker": "z", - "expression": "warm", - "text": "I have been distracted from the historical significance by the way moonlight keeps taking your side.", - "choices": [ - {"text": "Ask whether she would object to being kissed.", "next": "kiss", "effects": [{"type": "relationship", "key": "trust", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 9}]}, - {"text": "Tell her you do not want this night to be an ending.", "next": "promise", "effects": [{"type": "relationship", "key": "comfort", "amount": 5}, {"type": "relationship", "key": "romance", "amount": 8}]}, - {"text": "Suggest investigating the dangerous proximity of her smile.", "next": "kiss", "effects": [{"type": "relationship", "key": "humour", "amount": 4}, {"type": "relationship", "key": "romance", "amount": 8}]} - ] - }, - "kiss": { - "speaker": "lima", - "expression": "playful", - "text": "“I would object only to further delay.” She catches his collar, and the river, the music, and every carefully prepared sentence disappear.", - "next": "after" - }, - "promise": { - "speaker": "lima", - "expression": "tender", - "text": "“Good. I have several mornings in mind.” Her kiss is warm, certain, and entirely unconcerned with the waiting palace.", - "next": "after" - }, - "after": { - "speaker": "z", - "expression": "flustered", - "text": "Much later, when the pavilion lanterns burn low, Z remembers that he once came here to correct footnotes.", - "effects": [{"type": "achievement", "id": "moonrise"}, {"type": "ending"}] - } - } - } -} diff --git a/assets/games/two-rivers/data/endings.json b/assets/games/two-rivers/data/endings.json deleted file mode 100755 index f5c8864..0000000 --- a/assets/games/two-rivers/data/endings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "scholar": { - "title": "The Scholar's Promise", - "weights": {"respect": 0.35, "trust": 0.25, "comfort": 0.2, "romance": 0.2}, - "epilogue": "They begin with letters—long, argumentative, tender letters—until two desks become one shared library. Lima calls it diplomacy. Z calls it losing every debate beautifully." - }, - "laughter": { - "title": "Laughter After Midnight", - "weights": {"humour": 0.35, "comfort": 0.3, "romance": 0.2, "adventure": 0.15}, - "epilogue": "Their courtship becomes a minor scandal of badly concealed smiles, midnight tea, and solemn meetings ruined by private jokes. Neither of them makes the slightest effort to improve." - }, - "road": { - "title": "The Road Beyond the Palace", - "weights": {"adventure": 0.35, "trust": 0.25, "humour": 0.2, "romance": 0.2}, - "epilogue": "At first light they leave with two horses, one map, and no agreement about the route. Lima brings books. Z brings snacks. The horizon learns to expect them." - }, - "families": { - "title": "Two Families, One Table", - "weights": {"familyApproval": 0.35, "respect": 0.25, "comfort": 0.2, "romance": 0.2}, - "epilogue": "The first shared supper runs past midnight: recipes exchanged, stories improved in the telling, and two families pretending not to notice whose hands remain joined beneath the table." - } -} diff --git a/assets/games/two-rivers/data/items.json b/assets/games/two-rivers/data/items.json deleted file mode 100755 index 8dc6449..0000000 --- a/assets/games/two-rivers/data/items.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "gifts": [ - {"id": "inkstone", "name": "Carved Inkstone", "hint": "For someone who writes in every margin.", "effects": {"respect": 5, "romance": 3}}, - {"id": "brass_compass", "name": "Brass Star Compass", "hint": "For a curious traveller who dislikes standing still.", "effects": {"adventure": 5, "romance": 3}}, - {"id": "poetry_book", "name": "Book of River Poems", "hint": "For a reader with an inconveniently warm smile.", "effects": {"comfort": 4, "romance": 5}}, - {"id": "embroidered_ribbon", "name": "Embroidered Ribbon", "hint": "A small festival keepsake in indigo and gold.", "effects": {"familyApproval": 4, "romance": 3}}, - {"id": "spiced_tea", "name": "Tea Blend", "hint": "Cardamom, citrus peel, and an excuse to linger.", "effects": {"comfort": 5, "humour": 2}}, - {"id": "archery_charm", "name": "Archer's Charm", "hint": "For someone who claimed she was not competitive.", "effects": {"adventure": 4, "humour": 4}} - ], - "clues": ["folio_ribbon", "lantern_rubbing", "anwara_note", "founders_record"], - "flowers": ["jasmine", "tuberose", "marigold", "rose", "bakul"], - "letters": ["letter_1", "letter_2", "letter_3"] -} diff --git a/assets/games/two-rivers/data/locations.json b/assets/games/two-rivers/data/locations.json deleted file mode 100755 index d9ce10a..0000000 --- a/assets/games/two-rivers/data/locations.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "courtyard": { - "name": "Palace Courtyard", - "act": "Act I · The Missing Folio", - "background": "courtyard", - "music": "palace", - "ambience": "birds", - "actors": [{"id": "ishan", "x": 0.5}, {"id": "saira", "x": 0.84}], - "spawn": 0.14, - "objective": "Meet Lima beside the exhibition tables.", - "hotspots": [ - {"id": "courtyard_preparations", "x": 0.3, "label": "Help arrange the festival banners", "dialogue": "courtyard_preparations", "once": true}, - {"id": "ishan_protocol", "x": 0.5, "label": "Ask Ishan about festival protocol", "dialogue": "ishan_protocol", "once": true}, - {"id": "lima_arrival", "x": 0.68, "label": "Speak with Lima", "dialogue": "arrival", "once": true}, - {"id": "delegation_walk", "x": 0.76, "label": "Walk the courtyard edge with Lima", "dialogue": "delegation_walk", "requires": ["dialogue:arrival"], "once": true}, - {"id": "saira_welcome", "x": 0.84, "label": "Greet Aunt Saira", "dialogue": "saira", "once": true}, - {"id": "to_library", "x": 0.94, "label": "Enter the royal library", "goto": "library", "requires": ["dialogue:arrival", "dialogue:delegation_walk", "dialogue:courtyard_preparations", "dialogue:ishan_protocol"]} - ] - }, - "library": { - "name": "Royal Library", - "act": "Act I · The Missing Folio", - "background": "library", - "music": "morning", - "ambience": "library", - "actors": [{"id": "anwara", "x": 0.16}], - "spawn": 0.1, - "objective": "Examine the empty display and solve Anwara's lantern cipher.", - "hotspots": [ - {"id": "anwara_memory", "x": 0.16, "label": "Inspect the eastern cabinet with Anwara", "dialogue": "anwara_memory", "once": true}, - {"id": "empty_case", "x": 0.3, "label": "Examine the empty case", "dialogue": "missing_folio", "once": true}, - {"id": "library_search", "x": 0.4, "label": "Search the altered shelves", "dialogue": "library_search", "requires": ["dialogue:missing_folio"], "once": true}, - {"id": "letter_one", "x": 0.48, "label": "Recover a misfiled letter", "collect": "letter_1", "quest": "letters", "once": true}, - {"id": "library_balcony", "x": 0.6, "label": "Step onto the rain balcony with Lima", "dialogue": "library_balcony", "requires": ["dialogue:missing_folio"], "once": true}, - {"id": "cipher", "x": 0.73, "label": "Solve the lantern cipher", "puzzle": "cipher", "requires": ["dialogue:missing_folio"], "once": true}, - {"id": "to_garden", "x": 0.94, "label": "Follow the clue to the moon garden", "goto": "garden", "requires": ["flag:cipher_solved", "dialogue:anwara_memory", "dialogue:library_search", "dialogue:library_balcony"]} - ] - }, - "garden": { - "name": "Moon Garden", - "act": "Act II · A City of Clues", - "background": "garden", - "music": "garden", - "ambience": "water", - "actors": [{"id": "mira", "x": 0.08}], - "spawn": 0.08, - "objective": "Find the flowers named in the folio and test the old archery clue.", - "hotspots": [ - {"id": "mira_garland", "x": 0.08, "label": "Ask Mira about the communal garland", "dialogue": "mira_garland", "once": true}, - {"id": "flower_jasmine", "x": 0.16, "label": "Gather jasmine", "collect": "jasmine", "quest": "garland", "once": true}, - {"id": "flower_tuberose", "x": 0.3, "label": "Gather tuberose", "collect": "tuberose", "quest": "garland", "once": true}, - {"id": "garden_talk", "x": 0.56, "label": "Sit with Lima", "dialogue": "garden_confidence", "once": true}, - {"id": "garden_walk", "x": 0.6, "label": "Carry Mira's basket with Lima", "dialogue": "garden_walk", "requires": ["dialogue:garden_confidence"], "once": true}, - {"id": "garden_history", "x": 0.64, "label": "Study the founders' flower mosaic", "dialogue": "garden_history", "requires": ["dialogue:garden_confidence"], "once": true}, - {"id": "flower_sequence", "x": 0.7, "label": "Solve the flower mosaic", "puzzle": "flower_sequence", "requires": ["dialogue:garden_history"], "once": true}, - {"id": "archery", "x": 0.79, "label": "Try the moonlit archery trial", "minigame": "archery", "requires": ["flag:flower_sequence_solved"], "once": true}, - {"id": "archery_after", "x": 0.87, "label": "Review the range ledger with Lima", "dialogue": "archery_after", "requires": ["minigame:archery"], "once": true}, - {"id": "to_market", "x": 0.94, "label": "Continue to the old marketplace", "goto": "market", "requires": ["minigame:archery", "dialogue:archery_after", "dialogue:mira_garland", "dialogue:garden_walk"]} - ] - }, - "market": { - "name": "Old Marketplace", - "act": "Act II · A City of Clues", - "background": "market", - "music": "marketplace", - "ambience": "crowd", - "actors": [{"id": "nadia", "x": 0.08}, {"id": "rayhan", "x": 0.81}, {"id": "anwara", "x": 0.91}], - "spawn": 0.08, - "objective": "Ask the market's keepers what the court history forgot.", - "hotspots": [ - {"id": "nadia_letters", "x": 0.08, "label": "Speak with Nadia the bookseller", "dialogue": "nadia_letters", "once": true}, - {"id": "flower_marigold", "x": 0.18, "label": "Gather marigold", "collect": "marigold", "quest": "garland", "once": true}, - {"id": "flower_rose", "x": 0.3, "label": "Gather a garden rose", "collect": "rose", "quest": "garland", "once": true}, - {"id": "flower_bakul", "x": 0.42, "label": "Gather bakul blossom", "collect": "bakul", "quest": "garland", "once": true}, - {"id": "letter_two", "x": 0.53, "label": "Recover a bookseller's letter", "collect": "letter_2", "quest": "letters", "once": true}, - {"id": "letter_three", "x": 0.62, "label": "Recover the final letter", "collect": "letter_3", "quest": "letters", "once": true}, - {"id": "market_walk", "x": 0.67, "label": "Walk through the market with Lima", "dialogue": "market_walk", "once": true}, - {"id": "gift", "x": 0.72, "label": "Choose a gift for Lima", "gift": true, "once": true}, - {"id": "garland_complete", "x": 0.75, "label": "Raise the completed communal garland", "dialogue": "garland_complete", "requires": ["quest:garland"], "once": true}, - {"id": "letters_complete", "x": 0.78, "label": "Read the recovered founders' letters", "dialogue": "letters_complete", "requires": ["quest:letters"], "once": true}, - {"id": "market_founders", "x": 0.79, "label": "Plan how to credit the festival founders", "dialogue": "market_founders", "requires": ["dialogue:nadia_letters", "dialogue:market_walk"], "once": true}, - {"id": "rayhan_kitchen", "x": 0.81, "label": "Join Rayhan at the festival kitchen", "dialogue": "rayhan_kitchen", "once": true}, - {"id": "cooking", "x": 0.85, "label": "Help Rayhan finish the festival dish", "minigame": "cooking", "requires": ["dialogue:rayhan_kitchen"], "once": true}, - {"id": "anwara_truth", "x": 0.91, "label": "Confront Keeper Anwara", "dialogue": "anwara_truth", "requires": ["minigame:cooking"], "once": true}, - {"id": "to_festival", "x": 0.97, "label": "Carry the truth to the riverside", "goto": "pavilion", "requires": ["dialogue:anwara_truth", "dialogue:nadia_letters", "dialogue:market_walk", "dialogue:market_founders"]} - ] - }, - "pavilion": { - "name": "Riverside Festival Pavilion", - "act": "Act III · Moonrise", - "background": "pavilion", - "music": "festival", - "ambience": "crowd", - "actors": [{"id": "ishan", "x": 0.28}, {"id": "saira", "x": 0.4}], - "spawn": 0.08, - "objective": "Choose how the true story will be told.", - "hotspots": [ - {"id": "ishan_stage", "x": 0.28, "label": "Prepare the public presentation", "dialogue": "ishan_stage", "once": true}, - {"id": "pavilion_waiting", "x": 0.38, "label": "Wait with the council before the unveiling", "dialogue": "pavilion_waiting", "requires": ["dialogue:ishan_stage"], "once": true}, - {"id": "resolution", "x": 0.48, "label": "Address the festival council", "dialogue": "resolution", "requires": ["dialogue:ishan_stage", "dialogue:pavilion_waiting"], "once": true}, - {"id": "dance", "x": 0.72, "label": "Join Lima for the moonrise dance", "minigame": "dance", "requires": ["dialogue:resolution"], "once": true}, - {"id": "dance_after", "x": 0.82, "label": "Catch your breath with Lima", "dialogue": "dance_after", "requires": ["minigame:dance"], "once": true}, - {"id": "moonrise", "x": 0.9, "label": "Walk with Lima by the river", "dialogue": "moonrise", "requires": ["dialogue:dance_after"], "once": true} - ] - } -} diff --git a/assets/games/two-rivers/data/quests.json b/assets/games/two-rivers/data/quests.json deleted file mode 100755 index 90e0bb4..0000000 --- a/assets/games/two-rivers/data/quests.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "garland": { - "name": "A Garland for Everyone", - "description": "Gather five flowers for Mira's communal festival garland.", - "target": 5, - "reward": {"familyApproval": 8, "comfort": 3, "cg": "garland"} - }, - "letters": { - "name": "The Bookseller's Letters", - "description": "Recover three letters that record the festival's forgotten founders.", - "target": 3, - "reward": {"trust": 5, "respect": 6, "cg": "library"} - } -} diff --git a/assets/games/two-rivers/images/backgrounds/courtyard.png b/assets/games/two-rivers/images/backgrounds/courtyard.png deleted file mode 100755 index 07ccf49..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/courtyard.png and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/courtyard.webp b/assets/games/two-rivers/images/backgrounds/courtyard.webp deleted file mode 100755 index 902b344..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/courtyard.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/garden.png b/assets/games/two-rivers/images/backgrounds/garden.png deleted file mode 100755 index bbd409b..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/garden.png and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/garden.webp b/assets/games/two-rivers/images/backgrounds/garden.webp deleted file mode 100755 index 79f8633..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/garden.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/library.png b/assets/games/two-rivers/images/backgrounds/library.png deleted file mode 100755 index 38a0a21..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/library.png and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/library.webp b/assets/games/two-rivers/images/backgrounds/library.webp deleted file mode 100755 index f47f39f..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/library.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/market.png b/assets/games/two-rivers/images/backgrounds/market.png deleted file mode 100755 index e50ed82..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/market.png and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/market.webp b/assets/games/two-rivers/images/backgrounds/market.webp deleted file mode 100755 index 9aa56d0..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/market.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/pavilion.png b/assets/games/two-rivers/images/backgrounds/pavilion.png deleted file mode 100755 index f0bd848..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/pavilion.png and /dev/null differ diff --git a/assets/games/two-rivers/images/backgrounds/pavilion.webp b/assets/games/two-rivers/images/backgrounds/pavilion.webp deleted file mode 100755 index a5cc4ba..0000000 Binary files a/assets/games/two-rivers/images/backgrounds/pavilion.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/families.png b/assets/games/two-rivers/images/cg/families.png deleted file mode 100755 index ae5be21..0000000 Binary files a/assets/games/two-rivers/images/cg/families.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/families.webp b/assets/games/two-rivers/images/cg/families.webp deleted file mode 100755 index f1bcf77..0000000 Binary files a/assets/games/two-rivers/images/cg/families.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/garland.png b/assets/games/two-rivers/images/cg/garland.png deleted file mode 100755 index d8f7f5f..0000000 Binary files a/assets/games/two-rivers/images/cg/garland.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/garland.webp b/assets/games/two-rivers/images/cg/garland.webp deleted file mode 100755 index b40e214..0000000 Binary files a/assets/games/two-rivers/images/cg/garland.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/laughter.png b/assets/games/two-rivers/images/cg/laughter.png deleted file mode 100755 index 4dc4df4..0000000 Binary files a/assets/games/two-rivers/images/cg/laughter.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/laughter.webp b/assets/games/two-rivers/images/cg/laughter.webp deleted file mode 100755 index e9b2699..0000000 Binary files a/assets/games/two-rivers/images/cg/laughter.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/library.png b/assets/games/two-rivers/images/cg/library.png deleted file mode 100755 index e7c8b62..0000000 Binary files a/assets/games/two-rivers/images/cg/library.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/library.webp b/assets/games/two-rivers/images/cg/library.webp deleted file mode 100755 index 3909d25..0000000 Binary files a/assets/games/two-rivers/images/cg/library.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/road.png b/assets/games/two-rivers/images/cg/road.png deleted file mode 100755 index 6495d17..0000000 Binary files a/assets/games/two-rivers/images/cg/road.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/road.webp b/assets/games/two-rivers/images/cg/road.webp deleted file mode 100755 index d8ac850..0000000 Binary files a/assets/games/two-rivers/images/cg/road.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/scholar.png b/assets/games/two-rivers/images/cg/scholar.png deleted file mode 100755 index 9bd7f01..0000000 Binary files a/assets/games/two-rivers/images/cg/scholar.png and /dev/null differ diff --git a/assets/games/two-rivers/images/cg/scholar.webp b/assets/games/two-rivers/images/cg/scholar.webp deleted file mode 100755 index c4b47aa..0000000 Binary files a/assets/games/two-rivers/images/cg/scholar.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/anwara.png b/assets/games/two-rivers/images/characters/anwara.png deleted file mode 100755 index 12ec5c4..0000000 Binary files a/assets/games/two-rivers/images/characters/anwara.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/anwara.webp b/assets/games/two-rivers/images/characters/anwara.webp deleted file mode 100755 index c121e85..0000000 Binary files a/assets/games/two-rivers/images/characters/anwara.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/ishan.png b/assets/games/two-rivers/images/characters/ishan.png deleted file mode 100755 index 45a4f3a..0000000 Binary files a/assets/games/two-rivers/images/characters/ishan.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/ishan.webp b/assets/games/two-rivers/images/characters/ishan.webp deleted file mode 100755 index 7456a93..0000000 Binary files a/assets/games/two-rivers/images/characters/ishan.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/lima.png b/assets/games/two-rivers/images/characters/lima.png deleted file mode 100755 index d6e4876..0000000 Binary files a/assets/games/two-rivers/images/characters/lima.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/lima.webp b/assets/games/two-rivers/images/characters/lima.webp deleted file mode 100755 index bb0365c..0000000 Binary files a/assets/games/two-rivers/images/characters/lima.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/mira.png b/assets/games/two-rivers/images/characters/mira.png deleted file mode 100755 index a7370e1..0000000 Binary files a/assets/games/two-rivers/images/characters/mira.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/mira.webp b/assets/games/two-rivers/images/characters/mira.webp deleted file mode 100755 index f797dac..0000000 Binary files a/assets/games/two-rivers/images/characters/mira.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/nadia.png b/assets/games/two-rivers/images/characters/nadia.png deleted file mode 100755 index 5ce91a7..0000000 Binary files a/assets/games/two-rivers/images/characters/nadia.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/nadia.webp b/assets/games/two-rivers/images/characters/nadia.webp deleted file mode 100755 index f4cfdc4..0000000 Binary files a/assets/games/two-rivers/images/characters/nadia.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/rayhan.png b/assets/games/two-rivers/images/characters/rayhan.png deleted file mode 100755 index 36bcbf6..0000000 Binary files a/assets/games/two-rivers/images/characters/rayhan.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/rayhan.webp b/assets/games/two-rivers/images/characters/rayhan.webp deleted file mode 100755 index d7f2332..0000000 Binary files a/assets/games/two-rivers/images/characters/rayhan.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/saira.png b/assets/games/two-rivers/images/characters/saira.png deleted file mode 100755 index 383889f..0000000 Binary files a/assets/games/two-rivers/images/characters/saira.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/saira.webp b/assets/games/two-rivers/images/characters/saira.webp deleted file mode 100755 index 8ca6215..0000000 Binary files a/assets/games/two-rivers/images/characters/saira.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/z.png b/assets/games/two-rivers/images/characters/z.png deleted file mode 100755 index 6dab0d8..0000000 Binary files a/assets/games/two-rivers/images/characters/z.png and /dev/null differ diff --git a/assets/games/two-rivers/images/characters/z.webp b/assets/games/two-rivers/images/characters/z.webp deleted file mode 100755 index aaabf54..0000000 Binary files a/assets/games/two-rivers/images/characters/z.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/anwara_note.png b/assets/games/two-rivers/images/items/anwara_note.png deleted file mode 100755 index f814f48..0000000 Binary files a/assets/games/two-rivers/images/items/anwara_note.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/anwara_note.webp b/assets/games/two-rivers/images/items/anwara_note.webp deleted file mode 100755 index 745f478..0000000 Binary files a/assets/games/two-rivers/images/items/anwara_note.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/archery_charm.png b/assets/games/two-rivers/images/items/archery_charm.png deleted file mode 100755 index 5fde914..0000000 Binary files a/assets/games/two-rivers/images/items/archery_charm.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/archery_charm.webp b/assets/games/two-rivers/images/items/archery_charm.webp deleted file mode 100755 index e33b3bb..0000000 Binary files a/assets/games/two-rivers/images/items/archery_charm.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/bakul.png b/assets/games/two-rivers/images/items/bakul.png deleted file mode 100755 index 09ae4d3..0000000 Binary files a/assets/games/two-rivers/images/items/bakul.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/bakul.webp b/assets/games/two-rivers/images/items/bakul.webp deleted file mode 100755 index 7628ab8..0000000 Binary files a/assets/games/two-rivers/images/items/bakul.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/brass_compass.png b/assets/games/two-rivers/images/items/brass_compass.png deleted file mode 100755 index 7c15733..0000000 Binary files a/assets/games/two-rivers/images/items/brass_compass.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/brass_compass.webp b/assets/games/two-rivers/images/items/brass_compass.webp deleted file mode 100755 index d67b844..0000000 Binary files a/assets/games/two-rivers/images/items/brass_compass.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/embroidered_ribbon.png b/assets/games/two-rivers/images/items/embroidered_ribbon.png deleted file mode 100755 index 51efb97..0000000 Binary files a/assets/games/two-rivers/images/items/embroidered_ribbon.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/embroidered_ribbon.webp b/assets/games/two-rivers/images/items/embroidered_ribbon.webp deleted file mode 100755 index cbc1275..0000000 Binary files a/assets/games/two-rivers/images/items/embroidered_ribbon.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/folio_ribbon.png b/assets/games/two-rivers/images/items/folio_ribbon.png deleted file mode 100755 index 81c0978..0000000 Binary files a/assets/games/two-rivers/images/items/folio_ribbon.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/folio_ribbon.webp b/assets/games/two-rivers/images/items/folio_ribbon.webp deleted file mode 100755 index 6c7125d..0000000 Binary files a/assets/games/two-rivers/images/items/folio_ribbon.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/founders_record.png b/assets/games/two-rivers/images/items/founders_record.png deleted file mode 100755 index c1cdae1..0000000 Binary files a/assets/games/two-rivers/images/items/founders_record.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/founders_record.webp b/assets/games/two-rivers/images/items/founders_record.webp deleted file mode 100755 index 737529b..0000000 Binary files a/assets/games/two-rivers/images/items/founders_record.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/inkstone.png b/assets/games/two-rivers/images/items/inkstone.png deleted file mode 100755 index e942ee1..0000000 Binary files a/assets/games/two-rivers/images/items/inkstone.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/inkstone.webp b/assets/games/two-rivers/images/items/inkstone.webp deleted file mode 100755 index 8ada53d..0000000 Binary files a/assets/games/two-rivers/images/items/inkstone.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/jasmine.png b/assets/games/two-rivers/images/items/jasmine.png deleted file mode 100755 index 072c917..0000000 Binary files a/assets/games/two-rivers/images/items/jasmine.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/jasmine.webp b/assets/games/two-rivers/images/items/jasmine.webp deleted file mode 100755 index 5965742..0000000 Binary files a/assets/games/two-rivers/images/items/jasmine.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/lantern_rubbing.png b/assets/games/two-rivers/images/items/lantern_rubbing.png deleted file mode 100755 index d8b12a5..0000000 Binary files a/assets/games/two-rivers/images/items/lantern_rubbing.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/lantern_rubbing.webp b/assets/games/two-rivers/images/items/lantern_rubbing.webp deleted file mode 100755 index 43025d9..0000000 Binary files a/assets/games/two-rivers/images/items/lantern_rubbing.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_1.png b/assets/games/two-rivers/images/items/letter_1.png deleted file mode 100755 index 3f4d40d..0000000 Binary files a/assets/games/two-rivers/images/items/letter_1.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_1.webp b/assets/games/two-rivers/images/items/letter_1.webp deleted file mode 100755 index c1107b8..0000000 Binary files a/assets/games/two-rivers/images/items/letter_1.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_2.png b/assets/games/two-rivers/images/items/letter_2.png deleted file mode 100755 index 1511983..0000000 Binary files a/assets/games/two-rivers/images/items/letter_2.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_2.webp b/assets/games/two-rivers/images/items/letter_2.webp deleted file mode 100755 index cc3de4f..0000000 Binary files a/assets/games/two-rivers/images/items/letter_2.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_3.png b/assets/games/two-rivers/images/items/letter_3.png deleted file mode 100755 index 74751e6..0000000 Binary files a/assets/games/two-rivers/images/items/letter_3.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/letter_3.webp b/assets/games/two-rivers/images/items/letter_3.webp deleted file mode 100755 index 7fc9975..0000000 Binary files a/assets/games/two-rivers/images/items/letter_3.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/marigold.png b/assets/games/two-rivers/images/items/marigold.png deleted file mode 100755 index 3566245..0000000 Binary files a/assets/games/two-rivers/images/items/marigold.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/marigold.webp b/assets/games/two-rivers/images/items/marigold.webp deleted file mode 100755 index b5c4908..0000000 Binary files a/assets/games/two-rivers/images/items/marigold.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/poetry_book.png b/assets/games/two-rivers/images/items/poetry_book.png deleted file mode 100755 index c36447f..0000000 Binary files a/assets/games/two-rivers/images/items/poetry_book.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/poetry_book.webp b/assets/games/two-rivers/images/items/poetry_book.webp deleted file mode 100755 index c4fa1a5..0000000 Binary files a/assets/games/two-rivers/images/items/poetry_book.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/rose.png b/assets/games/two-rivers/images/items/rose.png deleted file mode 100755 index 051dd5f..0000000 Binary files a/assets/games/two-rivers/images/items/rose.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/rose.webp b/assets/games/two-rivers/images/items/rose.webp deleted file mode 100755 index 33e0e8f..0000000 Binary files a/assets/games/two-rivers/images/items/rose.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/spiced_tea.png b/assets/games/two-rivers/images/items/spiced_tea.png deleted file mode 100755 index 0ef4988..0000000 Binary files a/assets/games/two-rivers/images/items/spiced_tea.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/spiced_tea.webp b/assets/games/two-rivers/images/items/spiced_tea.webp deleted file mode 100755 index 23ba37f..0000000 Binary files a/assets/games/two-rivers/images/items/spiced_tea.webp and /dev/null differ diff --git a/assets/games/two-rivers/images/items/tuberose.png b/assets/games/two-rivers/images/items/tuberose.png deleted file mode 100755 index c6c688a..0000000 Binary files a/assets/games/two-rivers/images/items/tuberose.png and /dev/null differ diff --git a/assets/games/two-rivers/images/items/tuberose.webp b/assets/games/two-rivers/images/items/tuberose.webp deleted file mode 100755 index 9eeb8d3..0000000 Binary files a/assets/games/two-rivers/images/items/tuberose.webp and /dev/null differ diff --git a/assets/games/two-rivers/prompts/art-direction.md b/assets/games/two-rivers/prompts/art-direction.md deleted file mode 100755 index ec9152f..0000000 --- a/assets/games/two-rivers/prompts/art-direction.md +++ /dev/null @@ -1,30 +0,0 @@ -# Two Rivers at Moonrise — Art Direction - -## Visual language - -Painterly storybook fantasy for original fictional adults: vibrant natural colour, soft brush texture, expressive faces, cinematic light, detailed architecture, and grounded human proportions. Camera height remains near adult eye level. Environments use wide 16:9 side-view compositions with a clear walk lane in the lower third. - -## Cultural distinction - -- Lima and the palace-city draw specifically from Bengali textiles, river culture, terracotta craft, muslin, jamdani-inspired geometry, flower garlands, food presentation, and climate. -- Z’s clothing draws specifically from Pakistani tailoring and textiles: a structured kurta or sherwani-influenced long coat, waistcoat details, ajrak-informed geometry where appropriate, and practical scholar/traveller accessories. -- These references remain visibly distinct. Avoid a generic blended “South Asian” costume language. -- Sacred or ceremonial motifs are not used as arbitrary decoration. No pseudo-script or generated lettering appears in artwork. - -## Continuity - -Z is 27, with warm brown skin, dark wavy hair, a short neat beard, a teal long coat over a cream kurta, brown leather satchel, and archer’s bracer. Lima is 26, with warm brown skin, long dark braided hair, an ivory muslin sari with a deep red border, restrained gold jewellery, and an indigo curator’s sash when working. - -Full-body characters use the same proportions, three-quarter side-view orientation, soft outline treatment, warm key light from camera left, transparent final background, and foot anchor at the bottom centre. Portraits preserve facial identity and clothing. - -## Environment progression - -Afternoon begins with warm river light. Act II moves through golden dusk and blue garden shadow. Act III uses indigo moonlight, warm lantern pools, reflected river light, and restrained celebratory particles. - -## Exclusions - -No pixel art, anime conventions, photorealistic likenesses, celebrity resemblance, clip art, primitive placeholder geometry, generated words, watermarks, modern objects, sexualized anatomy, nudity, or characters who appear under 25. - -## Quality gate - -Reject assets with inconsistent faces, extra or malformed fingers, broken jewellery, unreadable silhouette, incorrect clothing construction, mixed cultural references without purpose, muddy alpha edges, chroma spill, watermarks, or embedded text. diff --git a/assets/games/two-rivers/prompts/audio-direction.md b/assets/games/two-rivers/prompts/audio-direction.md deleted file mode 100755 index 4bf45ea..0000000 --- a/assets/games/two-rivers/prompts/audio-direction.md +++ /dev/null @@ -1,5 +0,0 @@ -# Audio Direction and Provenance - -Ten state names are Morning, Palace, Garden, Marketplace, Festival, Romantic, Sad, Night, Victory, and Ending. Seven ambience groups are birds, water, wind, crowd, garden insects, library room tone, and rain. SFX cover UI, footsteps, page turns, pickups, archery, cooking, puzzle feedback, and dance steps. - -Runtime derivatives use WebM/Opus first with MP3 fallback. `assets.json` records each original same-site source and licence statement. Howler is the only playback layer; Phaser audio remains disabled. diff --git a/assets/games/two-rivers/prompts/backgrounds.md b/assets/games/two-rivers/prompts/backgrounds.md deleted file mode 100755 index 7c52d8b..0000000 --- a/assets/games/two-rivers/prompts/backgrounds.md +++ /dev/null @@ -1,23 +0,0 @@ -# Environment Production Prompts - -Shared constraints: `illustration-story`, 1536×1024 wide side-view game environment, painterly storybook fantasy, adult eye-level camera, clear walk lane across the lower third, layered foreground foliage or architecture, no people in the player lane, no text, watermark, photorealism, anime, or modern objects. Apply `art-direction.md`. - -## Palace Courtyard - -Warm afternoon Bengali river-palace courtyard prepared for a public manuscript exhibition; carved red stone arches, muslin canopies, indigo textiles, river visible beyond, framed folio displays at right, flowering planters, cinematic sunlight from upper left. - -## Royal Library - -Quiet Bengali royal archive with terracotta details, tall dark wood shelves, conservation tables, an empty glass folio case, brass lantern mechanisms, rain balcony, warm window light and deep scholarly shadows. - -## Moon Garden - -Lush palace moon garden at blue-gold dusk; jasmine, tuberose, marigolds, bakul, water channel, old floral mosaic, modest archery range, fireflies, pale moon emerging through foliage. - -## Old Marketplace - -Busy old Bengali river-city market at early evening; bookstall, flower sellers, communal kitchen, fabric awnings, terracotta façades, lanterns, clear walk lane, inviting civic energy without generated signs. - -## Riverside Pavilion - -Festival pavilion beside two moonlit rivers; indigo and ivory canopies, flower garlands, safe facsimile display, dance floor, public seating, lantern reflections, celebratory but intimate night atmosphere. diff --git a/assets/games/two-rivers/prompts/cg.md b/assets/games/two-rivers/prompts/cg.md deleted file mode 100755 index 724f95c..0000000 --- a/assets/games/two-rivers/prompts/cg.md +++ /dev/null @@ -1,27 +0,0 @@ -# CG Production Prompts - -Shared constraints: `illustration-story`, 1536×1024 painterly romantic-adventure illustration, preserve approved Z and Lima identities, both unmistakably adult, consensual warmth, cinematic lighting, culturally distinct clothing, no text, watermark, explicit sex, nudity, or real-person resemblance. - -## Scholar's Promise - -Z and Lima sharing a library desk at dawn, annotated pages and two cups of tea, shoulders touching, affectionate argument visible in their expressions. - -## Laughter After Midnight - -Z and Lima laughing beneath late festival lanterns, private joke, hands linked, empty pavilion behind them. - -## Road Beyond the Palace - -Z and Lima at a river road overlook with travel satchels, one folded map, sunrise horizon, adventurous partnership. - -## Two Families - -Long shared supper table with Z and Lima seated together, joined hands discreetly visible, warm multigenerational welcome and distinct food traditions. - -## Garland - -Z and Lima raising the five-flower communal garland with Mira and neighbourhood helpers, civic celebration centred on ordinary contributors. - -## Library - -Private archive reading scene: Z and Lima copying the recovered founders’ letters side by side, tender eye contact, open door and warm lamplight. diff --git a/assets/games/two-rivers/prompts/characters.md b/assets/games/two-rivers/prompts/characters.md deleted file mode 100755 index c35dd1b..0000000 --- a/assets/games/two-rivers/prompts/characters.md +++ /dev/null @@ -1,11 +0,0 @@ -# Lead Character Production Prompts - -Apply `art-direction.md`. `illustration-story`, original fictional adult, full-body three-quarter side-view game cutout, 1024×1536, flat chroma-key source converted to transparent PNG/WebP, no shadow, text, watermark, anime, photorealism, or real-person resemblance. - -## Z - -Pakistani visiting scholar, age 27, warm brown skin, dark wavy hair, short neat beard, thoughtful expressive face, teal tailored long coat over cream kurta, brown leather satchel, practical archer’s bracer. Warm key light from left. Distinct Pakistani tailoring and restrained ajrak-informed geometry. - -## Lima - -Bengali princess and festival curator, age 26, warm brown skin, long dark braided hair, expressive adult face, ivory muslin sari with deep red Bengali woven border, restrained gold jewellery, curator’s working posture. Warm key light from left. diff --git a/assets/games/two-rivers/prompts/characters/supporting-cast.md b/assets/games/two-rivers/prompts/characters/supporting-cast.md deleted file mode 100755 index 6e7674d..0000000 --- a/assets/games/two-rivers/prompts/characters/supporting-cast.md +++ /dev/null @@ -1,27 +0,0 @@ -# Supporting Cast Prompts - -All six assets use `illustration-story`, full-body game-character cutouts at 1024×1536. Apply the master art direction. Place one adult character alone on perfectly flat `#00ff00` chroma key with no shadow, floor, gradient, texture, lettering, or watermark. Keep generous padding and never use the key colour in clothing. - -## Keeper Anwara - -Fictional Bengali woman, age 58, senior manuscript keeper. Intelligent lined face, silver-streaked dark hair in a practical low bun, deep indigo sari with a restrained rust border, cream archive blouse, small spectacles on a cord, cotton gloves tucked at waist, one closed folio held carefully. Calm authority, three-quarter side view facing right. - -## Saira - -Fictional Bengali woman, age 49, Lima’s aunt and festival-council chair. Warm, formidable expression, elegant burgundy jamdani-inspired sari with ivory geometric weaving, modest gold jewellery, dignified upright posture, folded programme fan in one hand. Three-quarter side view facing left. - -## Nadia - -Fictional Bengali woman, age 34, independent old-market bookseller. Practical ochre sari over a teal blouse, ink-stained fingers, round spectacles, key ring and ledger pouch, alert amused expression, two tied letters held against her chest. Three-quarter side view facing right. - -## Rayhan - -Fictional Bengali man, age 31, cheerful festival head cook. Warm brown skin, short dark hair and moustache, cream panjabi with rolled sleeves, terracotta apron, patterned gamcha over one shoulder, wooden tasting spoon, broad welcoming expression. Three-quarter side view facing left. - -## Mira - -Fictional Bengali woman, age 29, gardener and garland artist. Leaf-green sari with a marigold border, practical wrapped sleeves, long dark braid threaded with one jasmine bloom, flower basket at hip, gentle observant expression. Three-quarter side view facing right. - -## Ishan - -Fictional Bengali man, age 45, master of ceremonies. Deep plum achkan with subtle woven pattern over ivory trousers, neatly groomed greying hair and moustache, festival programme scroll, composed expression with dry humour. Three-quarter side view facing left. diff --git a/assets/games/two-rivers/prompts/effects.md b/assets/games/two-rivers/prompts/effects.md deleted file mode 100755 index 88c242d..0000000 --- a/assets/games/two-rivers/prompts/effects.md +++ /dev/null @@ -1,3 +0,0 @@ -# Effect Texture Prompt Specification - -Separate transparent textures for warm firefly, pale petal, rain streak, dust mote, lantern glow, water glint, leaf silhouette, and soft moon flare. Painterly edges, no lettering, no opaque background. Effects remain subtle and support reduced/minimal quality modes. diff --git a/assets/games/two-rivers/prompts/items/all-items.md b/assets/games/two-rivers/prompts/items/all-items.md deleted file mode 100755 index e968f72..0000000 --- a/assets/games/two-rivers/prompts/items/all-items.md +++ /dev/null @@ -1,22 +0,0 @@ -# Item, Gift, and Clue Prompts - -Each item is a separate `illustration-story` inventory asset at 1024×1024, centred on flat `#00ff00` chroma key for removal. Painterly storybook rendering, three-quarter object view, crisp silhouette, generous padding, no shadow, lettering, watermark, hands, or extra props. - -1. `inkstone`: carved dark stone inkstone with river-wave border and a small dry brush rest. -2. `brass_compass`: aged brass star compass with indigo enamel points; no readable letters. -3. `poetry_book`: hand-bound indigo book with gold river ornament; blank spine and cover. -4. `embroidered_ribbon`: folded ivory ribbon with indigo and red geometric embroidery. -5. `spiced_tea`: small sealed tea tin with cardamom pods and dried citrus beside it; no label. -6. `archery_charm`: small brass bow-and-river charm on a red cord. -7. `folio_ribbon`: frayed indigo manuscript thread tied in a distinctive four-loop keeper’s knot. -8. `lantern_rubbing`: charcoal rubbing of four symbols—sunrise, rain drops, lantern, crescent moon—with no words. -9. `anwara_note`: folded cream archival note sealed with plain indigo thread; no visible writing. -10. `founders_record`: aged range ledger page with decorative lines and abstract marks only; no generated text. -11. `jasmine`: fresh white jasmine sprig. -12. `tuberose`: creamy tuberose stem. -13. `marigold`: vivid orange marigold cluster. -14. `rose`: deep red garden rose. -15. `bakul`: small cream bakul blossoms with glossy leaves. -16. `letter_1`: worn folded letter with ochre wax seal and cook’s ladle emblem. -17. `letter_2`: worn folded letter with green thread and garden-gate emblem. -18. `letter_3`: travel-stained folded letter with blue thread and small boat emblem. diff --git a/assets/games/two-rivers/prompts/items/anwara-note.md b/assets/games/two-rivers/prompts/items/anwara-note.md deleted file mode 100755 index 93b03af..0000000 --- a/assets/games/two-rivers/prompts/items/anwara-note.md +++ /dev/null @@ -1,3 +0,0 @@ -# Anwara's Note - -`illustration-story`, 1:1 clue icon. Folded cream archival note tied closed with plain indigo thread, gently aged edges, centred on flat `#00ff00` for alpha removal. No visible writing, seal, hands, shadow, or watermark. diff --git a/assets/games/two-rivers/prompts/items/archery-charm.md b/assets/games/two-rivers/prompts/items/archery-charm.md deleted file mode 100755 index b9e9377..0000000 --- a/assets/games/two-rivers/prompts/items/archery-charm.md +++ /dev/null @@ -1,3 +0,0 @@ -# Archer's Charm - -`illustration-story`, 1:1 inventory icon. Aged-brass recurved bow crossing a flowing-river line on deep-red cotton cord; centred on flat `#00ff00` for alpha removal. No shadow, hands, lettering, or watermark. diff --git a/assets/games/two-rivers/prompts/items/bakul.md b/assets/games/two-rivers/prompts/items/bakul.md deleted file mode 100755 index b910f6b..0000000 --- a/assets/games/two-rivers/prompts/items/bakul.md +++ /dev/null @@ -1,3 +0,0 @@ -# Bakul - -`illustration-story`, 1:1 botanical icon. Botanically plausible Mimusops elengi sprig with small cream star blossoms and glossy deep-green leaves, centred on flat `#ff00ff` for alpha removal. No vase, hand, text, or watermark. diff --git a/assets/games/two-rivers/prompts/items/brass-compass.md b/assets/games/two-rivers/prompts/items/brass-compass.md deleted file mode 100755 index 08d14cb..0000000 --- a/assets/games/two-rivers/prompts/items/brass-compass.md +++ /dev/null @@ -1,3 +0,0 @@ -# Brass Star Compass - -`illustration-story`, 1:1 inventory icon. One aged brass eight-point star compass with restrained indigo enamel and simple needle; centred three-quarter view, warm upper-left light, flat `#00ff00` for alpha removal. No letters, numbers, shadow, hands, text, or watermark. diff --git a/assets/games/two-rivers/prompts/items/embroidered-ribbon.md b/assets/games/two-rivers/prompts/items/embroidered-ribbon.md deleted file mode 100755 index d7da0ec..0000000 --- a/assets/games/two-rivers/prompts/items/embroidered-ribbon.md +++ /dev/null @@ -1,3 +0,0 @@ -# Embroidered Ribbon - -`illustration-story`, 1:1 inventory icon. Folded ivory cotton ribbon with hand-embroidered indigo and deep-red geometric border motifs; tactile threadwork, centred on flat `#00ff00` for alpha removal. No shadow, hands, lettering, or watermark. diff --git a/assets/games/two-rivers/prompts/items/folio-ribbon.md b/assets/games/two-rivers/prompts/items/folio-ribbon.md deleted file mode 100755 index 1fd3d7f..0000000 --- a/assets/games/two-rivers/prompts/items/folio-ribbon.md +++ /dev/null @@ -1,3 +0,0 @@ -# Folio Ribbon - -`illustration-story`, 1:1 clue icon. Frayed indigo manuscript thread tied in a distinctive four-loop keeper’s knot, tactile old cotton, centred on flat `#00ff00` for alpha removal. No paper, hands, shadow, writing, or watermark. diff --git a/assets/games/two-rivers/prompts/items/founders-record.md b/assets/games/two-rivers/prompts/items/founders-record.md deleted file mode 100755 index a2966fa..0000000 --- a/assets/games/two-rivers/prompts/items/founders-record.md +++ /dev/null @@ -1,3 +0,0 @@ -# Founders' Range Record - -`illustration-story`, 1:1 clue icon. Aged ruled range-ledger page with boat-and-arrow emblem and abstract ink marks only, centred on flat `#00ff00` for alpha removal. Absolutely no readable words or numbers. diff --git a/assets/games/two-rivers/prompts/items/inkstone.md b/assets/games/two-rivers/prompts/items/inkstone.md deleted file mode 100755 index 52a7367..0000000 --- a/assets/games/two-rivers/prompts/items/inkstone.md +++ /dev/null @@ -1,3 +0,0 @@ -# Carved Inkstone - -`illustration-story`, 1:1 inventory icon. One carved dark stone inkstone with shallow well, river-wave border, and dry brush rest; centred three-quarter view, warm upper-left light, crisp silhouette on flat `#00ff00` for alpha removal. No shadow, hands, text, watermark, or extra props. diff --git a/assets/games/two-rivers/prompts/items/jasmine.md b/assets/games/two-rivers/prompts/items/jasmine.md deleted file mode 100755 index 0470676..0000000 --- a/assets/games/two-rivers/prompts/items/jasmine.md +++ /dev/null @@ -1,3 +0,0 @@ -# Jasmine - -`illustration-story`, 1:1 botanical icon. Botanically plausible fresh white jasmine sprig with star-shaped blossoms and deep-green leaves, centred on flat `#ff00ff` for alpha removal. No vase, hand, shadow, text, or watermark. diff --git a/assets/games/two-rivers/prompts/items/lantern-rubbing.md b/assets/games/two-rivers/prompts/items/lantern-rubbing.md deleted file mode 100755 index 06e166f..0000000 --- a/assets/games/two-rivers/prompts/items/lantern-rubbing.md +++ /dev/null @@ -1,3 +0,0 @@ -# Lantern Rubbing - -`illustration-story`, 1:1 clue icon. Cream charcoal rubbing with exactly four pictograms—sunrise, rain, lantern, crescent moon—on torn paper, centred on flat `#00ff00` for alpha removal. No words, hands, shadow, or watermark. diff --git a/assets/games/two-rivers/prompts/items/letter-1.md b/assets/games/two-rivers/prompts/items/letter-1.md deleted file mode 100755 index cfd0bfd..0000000 --- a/assets/games/two-rivers/prompts/items/letter-1.md +++ /dev/null @@ -1,3 +0,0 @@ -# Cook's Letter - -`illustration-story`, 1:1 historical-letter icon. Worn folded cream letter tied with ochre thread and ochre wax seal bearing a simple ladle emblem, centred on flat `#00ff00` for alpha removal. No writing, hands, shadow, or watermark. diff --git a/assets/games/two-rivers/prompts/items/letter-2.md b/assets/games/two-rivers/prompts/items/letter-2.md deleted file mode 100755 index bde1bbd..0000000 --- a/assets/games/two-rivers/prompts/items/letter-2.md +++ /dev/null @@ -1,3 +0,0 @@ -# Gardener's Letter - -`illustration-story`, 1:1 historical-letter icon. Worn folded cream letter tied with deep-green thread and terracotta seal bearing an open-gate emblem, centred on flat `#ff00ff` for alpha removal. No writing, hands, shadow, or watermark. diff --git a/assets/games/two-rivers/prompts/items/letter-3.md b/assets/games/two-rivers/prompts/items/letter-3.md deleted file mode 100755 index 56be339..0000000 --- a/assets/games/two-rivers/prompts/items/letter-3.md +++ /dev/null @@ -1,3 +0,0 @@ -# Traveller's Letter - -`illustration-story`, 1:1 historical-letter icon. Travel-stained folded cream letter tied with indigo thread and muted-blue seal bearing a river-boat emblem, centred on flat `#00ff00` for alpha removal. No writing, hands, shadow, or watermark. diff --git a/assets/games/two-rivers/prompts/items/marigold.md b/assets/games/two-rivers/prompts/items/marigold.md deleted file mode 100755 index 0f3831d..0000000 --- a/assets/games/two-rivers/prompts/items/marigold.md +++ /dev/null @@ -1,3 +0,0 @@ -# Marigold - -`illustration-story`, 1:1 botanical icon. Three vivid orange, densely petalled marigold blooms with buds and deep-green leaves, centred on flat `#ff00ff` for alpha removal. No garland, vase, hand, text, or watermark. diff --git a/assets/games/two-rivers/prompts/items/poetry-book.md b/assets/games/two-rivers/prompts/items/poetry-book.md deleted file mode 100755 index a421bf3..0000000 --- a/assets/games/two-rivers/prompts/items/poetry-book.md +++ /dev/null @@ -1,3 +0,0 @@ -# Book of River Poems - -`illustration-story`, 1:1 inventory icon. Small hand-bound indigo cloth book with stitched binding and gold flowing-river ornament; blank cover and spine, centred three-quarter view on flat `#00ff00` for alpha removal. No writing, shadow, hands, or watermark. diff --git a/assets/games/two-rivers/prompts/items/rose.md b/assets/games/two-rivers/prompts/items/rose.md deleted file mode 100755 index 36c775b..0000000 --- a/assets/games/two-rivers/prompts/items/rose.md +++ /dev/null @@ -1,3 +0,0 @@ -# Garden Rose - -`illustration-story`, 1:1 botanical icon. Deep-red garden rose in full bloom with one bud, thorned stem, and deep-green leaves, centred on flat cyan chroma key for alpha removal. No bouquet, hand, shadow, text, or watermark. diff --git a/assets/games/two-rivers/prompts/items/spiced-tea.md b/assets/games/two-rivers/prompts/items/spiced-tea.md deleted file mode 100755 index c20cc06..0000000 --- a/assets/games/two-rivers/prompts/items/spiced-tea.md +++ /dev/null @@ -1,3 +0,0 @@ -# Tea Blend - -`illustration-story`, 1:1 inventory icon. Sealed hammered-brass tea tin with blank indigo lid, three cardamom pods, and one curl of dried citrus; compact arrangement on flat `#00ff00` for alpha removal. No label, cup, shadow, hands, writing, or watermark. diff --git a/assets/games/two-rivers/prompts/items/tuberose.md b/assets/games/two-rivers/prompts/items/tuberose.md deleted file mode 100755 index d80330b..0000000 --- a/assets/games/two-rivers/prompts/items/tuberose.md +++ /dev/null @@ -1,3 +0,0 @@ -# Tuberose - -`illustration-story`, 1:1 botanical icon. Botanically plausible creamy tuberose stem with waxy blossoms, buds, and narrow green leaves, centred on flat `#ff00ff` for alpha removal. No vase, hand, shadow, text, or watermark. diff --git a/assets/games/two-rivers/prompts/portraits.md b/assets/games/two-rivers/prompts/portraits.md deleted file mode 100755 index db7e39b..0000000 --- a/assets/games/two-rivers/prompts/portraits.md +++ /dev/null @@ -1,3 +0,0 @@ -# Portrait and Expression Prompt Specification - -Create identity-consistent waist-up portrait variants from the approved full-body masters. Transparent background, 768×1024, same clothing and light direction. Z: warm, wry, thoughtful, flustered, determined, tender. Lima: warm, playful, regal, curious, vulnerable, tender, triumphant. Supporting cast: neutral, warm, concerned, and amused where narratively appropriate. No text or changed identity. diff --git a/assets/games/two-rivers/prompts/ui.md b/assets/games/two-rivers/prompts/ui.md deleted file mode 100755 index ab98231..0000000 --- a/assets/games/two-rivers/prompts/ui.md +++ /dev/null @@ -1,3 +0,0 @@ -# UI Ornament Prompt Specification - -Twelve separate transparent painterly ornaments: paired river line, crescent-and-lantern divider, manuscript corner, indigo knot, jasmine corner, marigold corner, brass compass rose, archive seal, dance-step flourish, archery ring, cooking steam curl, and gallery frame. Gold/indigo/ivory palette, readable at small size, no words or pseudo-script. diff --git a/assets/images/play/princess-lima/actor-atlas-v2.png b/assets/images/play/princess-lima/actor-atlas-v2.png deleted file mode 100755 index 88bbd8f..0000000 Binary files a/assets/images/play/princess-lima/actor-atlas-v2.png and /dev/null differ diff --git a/assets/images/play/princess-lima/cast-atlas.png b/assets/images/play/princess-lima/cast-atlas.png deleted file mode 100755 index e34094e..0000000 Binary files a/assets/images/play/princess-lima/cast-atlas.png and /dev/null differ diff --git a/assets/images/play/princess-lima/effects-atlas-v2.png b/assets/images/play/princess-lima/effects-atlas-v2.png deleted file mode 100755 index 285da53..0000000 Binary files a/assets/images/play/princess-lima/effects-atlas-v2.png and /dev/null differ diff --git a/assets/images/play/princess-lima/intro-storyboard.png b/assets/images/play/princess-lima/intro-storyboard.png deleted file mode 100755 index 6ce4f40..0000000 Binary files a/assets/images/play/princess-lima/intro-storyboard.png and /dev/null differ diff --git a/assets/images/play/princess-lima/portrait-atlas-v2.png b/assets/images/play/princess-lima/portrait-atlas-v2.png deleted file mode 100755 index a5ee64a..0000000 Binary files a/assets/images/play/princess-lima/portrait-atlas-v2.png and /dev/null differ diff --git a/assets/images/play/princess-lima/regional-style-atlas.png b/assets/images/play/princess-lima/regional-style-atlas.png deleted file mode 100755 index 1529b36..0000000 Binary files a/assets/images/play/princess-lima/regional-style-atlas.png and /dev/null differ diff --git a/assets/images/play/princess-lima/title-landscape.png b/assets/images/play/princess-lima/title-landscape.png deleted file mode 100755 index f9a2897..0000000 Binary files a/assets/images/play/princess-lima/title-landscape.png and /dev/null differ diff --git a/assets/images/play/princess-lima/world-tiles-v2.png b/assets/images/play/princess-lima/world-tiles-v2.png deleted file mode 100755 index 6706a50..0000000 Binary files a/assets/images/play/princess-lima/world-tiles-v2.png and /dev/null differ diff --git a/assets/images/play/princess-lima/world-tiles.png b/assets/images/play/princess-lima/world-tiles.png deleted file mode 100755 index 46a0b37..0000000 Binary files a/assets/images/play/princess-lima/world-tiles.png and /dev/null differ diff --git a/assets/maps/princess-lima/bossArena.json b/assets/maps/princess-lima/bossArena.json deleted file mode 100755 index 228250c..0000000 --- a/assets/maps/princess-lima/bossArena.json +++ /dev/null @@ -1,7896 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 0, - "y": 0, - "width": 160, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Void" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 800, - "y": 0, - "width": 160, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Void" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 160, - "y": 0, - "width": 640, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Throne wall" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 160, - "y": 640, - "width": 640, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Arena wall" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 224, - "y": 128, - "width": 64, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Pillar" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 672, - "y": 128, - "width": 64, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Pillar" - } - ] - }, - { - "id": 7, - "name": "solid-6", - "type": "collision", - "x": 224, - "y": 512, - "width": 64, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Pillar" - } - ] - }, - { - "id": 8, - "name": "solid-7", - "type": "collision", - "x": 672, - "y": 512, - "width": 64, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Pillar" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 9, - "name": "sun-pedestal", - "type": "interaction", - "x": 336, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "boss-mechanic" - } - ] - }, - { - "id": 10, - "name": "moon-pedestal", - "type": "interaction", - "x": 656, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "boss-mechanic" - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "malrec", - "type": "npc", - "x": 496, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "malrec" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 12, - "name": "sun-pedestal", - "type": "quest", - "x": 336, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "boss-mechanic" - } - ] - }, - { - "id": 13, - "name": "moon-pedestal", - "type": "quest", - "x": 656, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "boss-mechanic" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 14, - "name": "malrec-0", - "type": "enemy", - "x": 496, - "y": 272, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "malrec" - }, - { - "name": "leash", - "type": "float", - "value": 420 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 15, - "name": "throne-arena", - "type": "camera", - "x": 160, - "y": 64, - "width": 640, - "height": 576, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 16, - "name": "chamber", - "type": "transition", - "x": 448, - "y": 0, - "width": 96, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "chamber" - }, - { - "name": "spawn", - "type": "string", - "value": "door" - }, - { - "name": "requirement", - "type": "string", - "value": "malrec_defeated" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 17, - "name": "entrance", - "type": "spawn", - "x": 496, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 18, - "name": "bossArena-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "boss-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - } - ], - "nextlayerid": 22, - "nextobjectid": 19, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "bossArena" - }, - { - "name": "displayName", - "type": "string", - "value": "Throne of Night" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "bossArena_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/camp.json b/assets/maps/princess-lima/camp.json deleted file mode 100755 index 7bd3495..0000000 --- a/assets/maps/princess-lima/camp.json +++ /dev/null @@ -1,7989 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 64, - "y": 64, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Supply tent" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 672, - "y": 64, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Infirmary" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 64, - "y": 512, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Barracks" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 672, - "y": 512, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Scout post" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 320, - "y": 480, - "width": 320, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Barricade" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 6, - "name": "map", - "type": "interaction", - "x": 496, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "route-choice" - } - ] - }, - { - "id": 7, - "name": "supplies", - "type": "interaction", - "x": 752, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "A ledger records medicine sent to the wounded." - } - ] - }, - { - "id": 8, - "name": "dummies", - "type": "interaction", - "x": 240, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "block-tutorial" - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 9, - "name": "elowen", - "type": "npc", - "x": 496, - "y": 304, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "elowen" - } - ] - }, - { - "id": 10, - "name": "nia", - "type": "npc", - "x": 752, - "y": 272, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "nia" - } - ] - }, - { - "id": 11, - "name": "elder", - "type": "npc", - "x": 464, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "elder" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 12, - "name": "map", - "type": "quest", - "x": 496, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "route-choice" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 13, - "name": "shield-0", - "type": "enemy", - "x": 368, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "shield" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 14, - "name": "archer-1", - "type": "enemy", - "x": 624, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "archer" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 15, - "name": "captain-2", - "type": "enemy", - "x": 592, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "captain" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 16, - "name": "command-area", - "type": "camera", - "x": 320, - "y": 224, - "width": 320, - "height": 288, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.08 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 17, - "name": "mountain", - "type": "transition", - "x": 0, - "y": 320, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "mountain" - }, - { - "name": "spawn", - "type": "string", - "value": "campRoad" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - }, - { - "id": 18, - "name": "fortress", - "type": "transition", - "x": 928, - "y": 320, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "fortressExterior" - }, - { - "name": "spawn", - "type": "string", - "value": "campGate" - }, - { - "name": "requirement", - "type": "string", - "value": "emblem_found" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 19, - "name": "mountainRoad", - "type": "spawn", - "x": 80, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 20, - "name": "fortressRoad", - "type": "spawn", - "x": 880, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 21, - "name": "camp-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "village-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 22, - "name": "scout-cache", - "type": "secret", - "x": 880, - "y": 560, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "A scout cache contains smoke bombs." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 23, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "camp" - }, - { - "name": "displayName", - "type": "string", - "value": "Resistance Camp" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "camp_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/chamber.json b/assets/maps/princess-lima/chamber.json deleted file mode 100755 index 973d39c..0000000 --- a/assets/maps/princess-lima/chamber.json +++ /dev/null @@ -1,7787 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 36, - 36, - 36, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 0, - "y": 0, - "width": 128, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Outer wall" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 832, - "y": 0, - "width": 128, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Outer wall" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 128, - "y": 0, - "width": 704, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Balcony" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 128, - "y": 640, - "width": 704, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Outer wall" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 192, - "y": 128, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Bed" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 608, - "y": 128, - "width": 160, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Writing desk" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 7, - "name": "journal", - "type": "interaction", - "x": 688, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "Lima wrote plans for rebuilding every village Malrec harmed." - } - ] - }, - { - "id": 8, - "name": "chain", - "type": "interaction", - "x": 304, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "The broken shackle is scored where Lima worked at it night after night." - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 9, - "name": "lima", - "type": "npc", - "x": 496, - "y": 304, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "lima" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 10, - "name": "rescue-framing", - "type": "camera", - "x": 224, - "y": 96, - "width": 512, - "height": 448, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.14 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "door", - "type": "spawn", - "x": 496, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 12, - "name": "chamber-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "victory-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 13, - "name": "keepsake", - "type": "secret", - "x": 752, - "y": 560, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "A small carved bird bears the traveller's name." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 14, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "chamber" - }, - { - "name": "displayName", - "type": "string", - "value": "Lima's Chamber" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "chamber_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/forest.json b/assets/maps/princess-lima/forest.json deleted file mode 100755 index 09e9d2a..0000000 --- a/assets/maps/princess-lima/forest.json +++ /dev/null @@ -1,8071 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 32, - "y": 32, - "width": 160, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 224, - "y": 32, - "width": 192, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 576, - "y": 32, - "width": 128, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 832, - "y": 32, - "width": 96, - "height": 288, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 32, - "y": 448, - "width": 256, - "height": 224, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 576, - "y": 480, - "width": 128, - "height": 192, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - }, - { - "id": 7, - "name": "solid-6", - "type": "collision", - "x": 832, - "y": 448, - "width": 96, - "height": 224, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Canopy" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 8, - "name": "stone-young", - "type": "interaction", - "x": 272, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 9, - "name": "stone-old", - "type": "interaction", - "x": 656, - "y": 208, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 10, - "name": "tracks", - "type": "interaction", - "x": 592, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "Claw marks turn toward the briar clearing." - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "tovin", - "type": "npc", - "x": 656, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "tovin" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 12, - "name": "stone-young", - "type": "quest", - "x": 272, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 13, - "name": "stone-old", - "type": "quest", - "x": 656, - "y": 208, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 14, - "name": "wolf-0", - "type": "enemy", - "x": 272, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "wolf" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 15, - "name": "ambusher-1", - "type": "enemy", - "x": 656, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "ambusher" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 16, - "name": "archer-2", - "type": "enemy", - "x": 816, - "y": 528, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "archer" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 17, - "name": "briar_wolf-3", - "type": "enemy", - "x": 784, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "briar_wolf" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 18, - "name": "briar-clearing", - "type": "camera", - "x": 640, - "y": 448, - "width": 256, - "height": 224, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.12 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 19, - "name": "village", - "type": "transition", - "x": 0, - "y": 320, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "village" - }, - { - "name": "spawn", - "type": "string", - "value": "forestRoad" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - }, - { - "id": 20, - "name": "ruins", - "type": "transition", - "x": 736, - "y": 672, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "ruins" - }, - { - "name": "spawn", - "type": "string", - "value": "forestDoor" - }, - { - "name": "requirement", - "type": "string", - "value": "guide_found" - } - ] - }, - { - "id": 21, - "name": "mountain", - "type": "transition", - "x": 736, - "y": 0, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "mountain" - }, - { - "name": "spawn", - "type": "string", - "value": "forestTrail" - }, - { - "name": "requirement", - "type": "string", - "value": "briar_defeated" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 22, - "name": "villagePath", - "type": "spawn", - "x": 80, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 23, - "name": "ruinsPath", - "type": "spawn", - "x": 784, - "y": 656, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 24, - "name": "mountainPath", - "type": "spawn", - "x": 784, - "y": 112, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 25, - "name": "forest-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "forest-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 26, - "name": "hollow", - "type": "secret", - "x": 208, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "Inside the hollow: a Forest Charm fragment." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 27, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "forest" - }, - { - "name": "displayName", - "type": "string", - "value": "Whispering Woods" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "forest_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/fortressExterior.json b/assets/maps/princess-lima/fortressExterior.json deleted file mode 100755 index 709bd80..0000000 --- a/assets/maps/princess-lima/fortressExterior.json +++ /dev/null @@ -1,8036 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 0, - "y": 0, - "width": 960, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Fortress wall" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 0, - "y": 96, - "width": 128, - "height": 416, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cliff wall" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 832, - "y": 96, - "width": 128, - "height": 416, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cliff wall" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 160, - "y": 128, - "width": 160, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "West tower" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 640, - "y": 128, - "width": 160, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "East tower" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 352, - "y": 64, - "width": 256, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Gatehouse" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 7, - "name": "ballista", - "type": "interaction", - "x": 240, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "disable-defence" - } - ] - }, - { - "id": 8, - "name": "ward", - "type": "interaction", - "x": 720, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "disable-defence" - } - ] - }, - { - "id": 9, - "name": "breach", - "type": "interaction", - "x": 144, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "side-route" - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 10, - "name": "elowen", - "type": "npc", - "x": 176, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "elowen" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "ballista", - "type": "quest", - "x": 240, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "disable-defence" - } - ] - }, - { - "id": 12, - "name": "ward", - "type": "quest", - "x": 720, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "disable-defence" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 13, - "name": "shield-0", - "type": "enemy", - "x": 304, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "shield" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 14, - "name": "archer-1", - "type": "enemy", - "x": 240, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "archer" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 15, - "name": "archer-2", - "type": "enemy", - "x": 720, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "archer" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 16, - "name": "caster-3", - "type": "enemy", - "x": 688, - "y": 496, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "caster" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 17, - "name": "support-4", - "type": "enemy", - "x": 496, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "support" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 18, - "name": "fortress-reveal", - "type": "camera", - "x": 128, - "y": 64, - "width": 704, - "height": 448, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 19, - "name": "camp", - "type": "transition", - "x": 0, - "y": 512, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "camp" - }, - { - "name": "spawn", - "type": "string", - "value": "fortressRoad" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - }, - { - "id": 20, - "name": "interior", - "type": "transition", - "x": 448, - "y": 160, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "fortressInterior" - }, - { - "name": "spawn", - "type": "string", - "value": "frontHall" - }, - { - "name": "requirement", - "type": "string", - "value": "emblem_found" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 21, - "name": "campGate", - "type": "spawn", - "x": 80, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 22, - "name": "innerGate", - "type": "spawn", - "x": 496, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 23, - "name": "fortressExterior-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "fortress-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 24, - "name": "drain", - "type": "secret", - "x": 816, - "y": 624, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "A half-flooded drain bypasses the main courtyard." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 25, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "fortressExterior" - }, - { - "name": "displayName", - "type": "string", - "value": "Fortress Exterior" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "fortressExterior_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/fortressInterior.json b/assets/maps/princess-lima/fortressInterior.json deleted file mode 100755 index 50ff26e..0000000 --- a/assets/maps/princess-lima/fortressInterior.json +++ /dev/null @@ -1,8205 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 27, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 26, - 26, - 26 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 0, - "y": 0, - "width": 128, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Outer wall" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 832, - "y": 0, - "width": 128, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Outer wall" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 128, - "y": 0, - "width": 288, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Library" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 576, - "y": 0, - "width": 256, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Chapel" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 128, - "y": 224, - "width": 224, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Prison wall" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 608, - "y": 224, - "width": 224, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Armoury wall" - } - ] - }, - { - "id": 7, - "name": "solid-6", - "type": "collision", - "x": 128, - "y": 416, - "width": 224, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Kitchen" - } - ] - }, - { - "id": 8, - "name": "solid-7", - "type": "collision", - "x": 608, - "y": 416, - "width": 224, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Barracks" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 9, - "name": "cell-west", - "type": "interaction", - "x": 208, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "free-prisoner" - } - ] - }, - { - "id": 10, - "name": "cell-east", - "type": "interaction", - "x": 272, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "free-prisoner" - } - ] - }, - { - "id": 11, - "name": "ward-moon", - "type": "interaction", - "x": 240, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 12, - "name": "ward-crown", - "type": "interaction", - "x": 496, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 13, - "name": "ward-flame", - "type": "interaction", - "x": 720, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 14, - "name": "passage", - "type": "interaction", - "x": 496, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "shortcut" - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 15, - "name": "prisoner", - "type": "npc", - "x": 240, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "prisoner" - } - ] - }, - { - "id": 16, - "name": "elowen", - "type": "npc", - "x": 272, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "elowen" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 17, - "name": "cell-west", - "type": "quest", - "x": 208, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "free-prisoner" - } - ] - }, - { - "id": 18, - "name": "cell-east", - "type": "quest", - "x": 272, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "free-prisoner" - } - ] - }, - { - "id": 19, - "name": "ward-moon", - "type": "quest", - "x": 240, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 20, - "name": "ward-crown", - "type": "quest", - "x": 496, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 21, - "name": "ward-flame", - "type": "quest", - "x": 720, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 22, - "name": "shield-0", - "type": "enemy", - "x": 496, - "y": 528, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "shield" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 23, - "name": "archer-1", - "type": "enemy", - "x": 720, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "archer" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 24, - "name": "caster-2", - "type": "enemy", - "x": 720, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "caster" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 25, - "name": "support-3", - "type": "enemy", - "x": 240, - "y": 176, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "support" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 26, - "name": "elite-4", - "type": "enemy", - "x": 496, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "elite" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 27, - "name": "great-hall", - "type": "camera", - "x": 128, - "y": 96, - "width": 704, - "height": 512, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.04 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 28, - "name": "outside", - "type": "transition", - "x": 448, - "y": 672, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "fortressExterior" - }, - { - "name": "spawn", - "type": "string", - "value": "innerGate" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - }, - { - "id": 29, - "name": "throne", - "type": "transition", - "x": 448, - "y": 0, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "bossArena" - }, - { - "name": "spawn", - "type": "string", - "value": "entrance" - }, - { - "name": "requirement", - "type": "string", - "value": "wards_broken" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 30, - "name": "frontHall", - "type": "spawn", - "x": 496, - "y": 656, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 31, - "name": "throneDoor", - "type": "spawn", - "x": 496, - "y": 80, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 32, - "name": "fortressInterior-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "fortress-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 33, - "name": "library-cache", - "type": "secret", - "x": 176, - "y": 80, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "Malrec's notes reveal the throne's weakness." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 34, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "fortressInterior" - }, - { - "name": "displayName", - "type": "string", - "value": "Fortress Interior" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "fortressInterior_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/mountain.json b/assets/maps/princess-lima/mountain.json deleted file mode 100755 index 34cf9c0..0000000 --- a/assets/maps/princess-lima/mountain.json +++ /dev/null @@ -1,7952 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 0, - "y": 256, - "width": 128, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cliff" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 256, - "y": 128, - "width": 384, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cliff" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 832, - "y": 640, - "width": 128, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cliff" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 384, - "y": 416, - "width": 224, - "height": 96, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Broken bridge" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 5, - "name": "west-winch", - "type": "interaction", - "x": 336, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 6, - "name": "east-winch", - "type": "interaction", - "x": 656, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 7, - "name": "campfire", - "type": "interaction", - "x": 752, - "y": 208, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "The sheltered flame steadies your breath." - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 8, - "name": "bram", - "type": "npc", - "x": 752, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "bram" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 9, - "name": "west-winch", - "type": "quest", - "x": 336, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 10, - "name": "east-winch", - "type": "quest", - "x": 656, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "flying-0", - "type": "enemy", - "x": 240, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "flying" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 12, - "name": "shield-1", - "type": "enemy", - "x": 720, - "y": 528, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "shield" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 13, - "name": "stone_guardian-2", - "type": "enemy", - "x": 784, - "y": 368, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "stone_guardian" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 14, - "name": "guardian-arena", - "type": "camera", - "x": 608, - "y": 224, - "width": 288, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.12 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 15, - "name": "forest", - "type": "transition", - "x": 0, - "y": 512, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "forest" - }, - { - "name": "spawn", - "type": "string", - "value": "mountainPath" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - }, - { - "id": 16, - "name": "camp", - "type": "transition", - "x": 928, - "y": 512, - "width": 32, - "height": 128, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "camp" - }, - { - "name": "spawn", - "type": "string", - "value": "mountainRoad" - }, - { - "name": "requirement", - "type": "string", - "value": "guardian_defeated" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 17, - "name": "forestTrail", - "type": "spawn", - "x": 80, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 18, - "name": "campRoad", - "type": "spawn", - "x": 880, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 19, - "name": "mountain-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "mountain-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 20, - "name": "ice-cave", - "type": "secret", - "x": 176, - "y": 304, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "Behind the frozen fall lies a Royal Draught." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 21, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "mountain" - }, - { - "name": "displayName", - "type": "string", - "value": "Frostpeak Mountain" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "mountain_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/ruins.json b/assets/maps/princess-lima/ruins.json deleted file mode 100755 index d61f1a8..0000000 --- a/assets/maps/princess-lima/ruins.json +++ /dev/null @@ -1,7985 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 256, - "y": 32, - "width": 64, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Collapsed wall" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 640, - "y": 32, - "width": 64, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Collapsed wall" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 256, - "y": 416, - "width": 64, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Collapsed wall" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 640, - "y": 416, - "width": 64, - "height": 256, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Collapsed wall" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 352, - "y": 160, - "width": 256, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Mosaic gate" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 6, - "name": "dawn", - "type": "interaction", - "x": 368, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 7, - "name": "noon", - "type": "interaction", - "x": 496, - "y": 208, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 8, - "name": "dusk", - "type": "interaction", - "x": 624, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 9, - "name": "night", - "type": "interaction", - "x": 496, - "y": 560, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 10, - "name": "mural", - "type": "interaction", - "x": 496, - "y": 112, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "The mural shows dawn, noon, dusk, then night." - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 11, - "name": "dawn", - "type": "quest", - "x": 368, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 12, - "name": "noon", - "type": "quest", - "x": 496, - "y": 208, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 13, - "name": "dusk", - "type": "quest", - "x": 624, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - }, - { - "id": 14, - "name": "night", - "type": "quest", - "x": 496, - "y": 560, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "puzzle" - } - ] - } - ] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 15, - "name": "flying-0", - "type": "enemy", - "x": 368, - "y": 272, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "flying" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 16, - "name": "caster-1", - "type": "enemy", - "x": 624, - "y": 272, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "caster" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 17, - "name": "ambusher-2", - "type": "enemy", - "x": 496, - "y": 496, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "ambusher" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 18, - "name": "mosaic-hall", - "type": "camera", - "x": 288, - "y": 128, - "width": 384, - "height": 448, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.1 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 19, - "name": "forest", - "type": "transition", - "x": 448, - "y": 672, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "forest" - }, - { - "name": "spawn", - "type": "string", - "value": "ruinsPath" - }, - { - "name": "requirement", - "type": "string", - "value": "" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 20, - "name": "forestDoor", - "type": "spawn", - "x": 496, - "y": 656, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 21, - "name": "ruins-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "forest-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 22, - "name": "hidden-room", - "type": "secret", - "x": 752, - "y": 592, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "A concealed chamber holds the Sun Crystal." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 23, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "ruins" - }, - { - "name": "displayName", - "type": "string", - "value": "Ancient Ruins" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "ruins_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/village.json b/assets/maps/princess-lima/village.json deleted file mode 100755 index db7f246..0000000 --- a/assets/maps/princess-lima/village.json +++ /dev/null @@ -1,7972 +0,0 @@ -{ - "compressionlevel": -1, - "height": 22, - "width": 30, - "infinite": false, - "layers": [ - { - "id": 1, - "name": "Base terrain", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "id": 2, - "name": "Terrain variation", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 3, - "name": "Paths", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 4, - "name": "Water", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 5, - "name": "Cliffs and buildings", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 6, - "name": "Props", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 7, - "name": "Objects behind actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 8, - "name": "Actor layer", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 9, - "name": "Objects above actors", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 1, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 10, - "name": "Shadows", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.45, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 11, - "name": "Lighting", - "type": "tilelayer", - "width": 30, - "height": 22, - "x": 0, - "y": 0, - "visible": true, - "opacity": 0.3, - "data": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - { - "id": 12, - "name": "Collision", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 1, - "name": "solid-0", - "type": "collision", - "x": 32, - "y": 32, - "width": 256, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Damaged home" - } - ] - }, - { - "id": 2, - "name": "solid-1", - "type": "collision", - "x": 640, - "y": 32, - "width": 256, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Healer" - } - ] - }, - { - "id": 3, - "name": "solid-2", - "type": "collision", - "x": 32, - "y": 512, - "width": 256, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Blacksmith" - } - ] - }, - { - "id": 4, - "name": "solid-3", - "type": "collision", - "x": 672, - "y": 512, - "width": 224, - "height": 160, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Burnt farm" - } - ] - }, - { - "id": 5, - "name": "solid-4", - "type": "collision", - "x": 32, - "y": 224, - "width": 128, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Cart" - } - ] - }, - { - "id": 6, - "name": "solid-5", - "type": "collision", - "x": 768, - "y": 256, - "width": 128, - "height": 64, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "material", - "type": "string", - "value": "Barricade" - } - ] - } - ] - }, - { - "id": 13, - "name": "Interaction zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 7, - "name": "well", - "type": "interaction", - "x": 496, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "The old well reflects a sky bruised by smoke." - } - ] - }, - { - "id": 8, - "name": "memorial", - "type": "interaction", - "x": 624, - "y": 464, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "Fresh ribbons promise that the village will endure." - } - ] - }, - { - "id": 9, - "name": "chest-village", - "type": "interaction", - "x": 208, - "y": 432, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "action", - "type": "string", - "value": "chest" - } - ] - } - ] - }, - { - "id": 14, - "name": "Dialogue triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 10, - "name": "elder", - "type": "npc", - "x": 496, - "y": 336, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "elder" - } - ] - }, - { - "id": 11, - "name": "bram", - "type": "npc", - "x": 304, - "y": 528, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "bram" - } - ] - }, - { - "id": 12, - "name": "nia", - "type": "npc", - "x": 688, - "y": 240, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "dialogue", - "type": "string", - "value": "nia" - } - ] - } - ] - }, - { - "id": 15, - "name": "Quest triggers", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [] - }, - { - "id": 16, - "name": "Enemy zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 13, - "name": "raider-0", - "type": "enemy", - "x": 368, - "y": 432, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "raider" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 14, - "name": "raider-1", - "type": "enemy", - "x": 592, - "y": 464, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "raider" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - }, - { - "id": 15, - "name": "shield-2", - "type": "enemy", - "x": 496, - "y": 528, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "enemy", - "type": "string", - "value": "shield" - }, - { - "name": "leash", - "type": "float", - "value": 190 - } - ] - } - ] - }, - { - "id": 17, - "name": "Camera zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 16, - "name": "square-reveal", - "type": "camera", - "x": 320, - "y": 224, - "width": 320, - "height": 288, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "zoom", - "type": "float", - "value": 1.08 - } - ] - } - ] - }, - { - "id": 18, - "name": "Scene transitions", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 17, - "name": "forest-road", - "type": "transition", - "x": 448, - "y": 0, - "width": 96, - "height": 32, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "target", - "type": "string", - "value": "forest" - }, - { - "name": "spawn", - "type": "string", - "value": "villagePath" - }, - { - "name": "requirement", - "type": "string", - "value": "village_defended" - } - ] - } - ] - }, - { - "id": 19, - "name": "Named safe spawns", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 18, - "name": "start", - "type": "spawn", - "x": 496, - "y": 624, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 19, - "name": "square", - "type": "spawn", - "x": 496, - "y": 400, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - }, - { - "id": 20, - "name": "forestRoad", - "type": "spawn", - "x": 496, - "y": 80, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [] - } - ] - }, - { - "id": 20, - "name": "Audio zones", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 21, - "name": "village-ambience", - "type": "audio", - "x": 0, - "y": 0, - "width": 960, - "height": 704, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "music", - "type": "string", - "value": "village-theme" - } - ] - } - ] - }, - { - "id": 21, - "name": "Optional secrets", - "type": "objectgroup", - "visible": true, - "opacity": 1, - "draworder": "topdown", - "objects": [ - { - "id": 22, - "name": "cellar", - "type": "secret", - "x": 112, - "y": 496, - "width": 0, - "height": 0, - "point": true, - "visible": true, - "rotation": 0, - "properties": [ - { - "name": "observation", - "type": "string", - "value": "A loose foundation stone hides a moon coin." - } - ] - } - ] - } - ], - "nextlayerid": 22, - "nextobjectid": 23, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilewidth": 32, - "type": "map", - "version": "1.10", - "properties": [ - { - "name": "id", - "type": "string", - "value": "village" - }, - { - "name": "displayName", - "type": "string", - "value": "Broken Village" - }, - { - "name": "schemaVersion", - "type": "float", - "value": 2 - }, - { - "name": "resolvedFlag", - "type": "string", - "value": "village_resolved" - } - ], - "tilesets": [ - { - "firstgid": 1, - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32 - } - ] -} diff --git a/assets/maps/princess-lima/world-tiles.tsj b/assets/maps/princess-lima/world-tiles.tsj deleted file mode 100755 index 67d64e3..0000000 --- a/assets/maps/princess-lima/world-tiles.tsj +++ /dev/null @@ -1,15 +0,0 @@ -{ - "columns": 4, - "image": "../../images/play/princess-lima/world-tiles-v2.png", - "imageheight": 288, - "imagewidth": 128, - "margin": 0, - "name": "Princess Lima World", - "spacing": 0, - "tilecount": 36, - "tileheight": 32, - "tilewidth": 32, - "tiledversion": "1.11.2", - "type": "tileset", - "version": "1.10" -} diff --git a/assets/scripts/games/two-rivers/core/content.js b/assets/scripts/games/two-rivers/core/content.js deleted file mode 100755 index 85dd3bc..0000000 --- a/assets/scripts/games/two-rivers/core/content.js +++ /dev/null @@ -1,71 +0,0 @@ -// Served as .js so strict production MIME checks accept this native ES module. -const ROOT = "/assets/games/two-rivers/data"; -const FILES = { - assets: "assets.json", - characters: "characters.json", - locations: "locations.json", - items: "items.json", - quests: "quests.json", - achievements: "achievements.json", - endings: "endings.json", - dialogue: ["dialogue/story.json", "dialogue/scenes.json", "dialogue/chapters.json"] -}; - -export async function loadContent(onProgress = () => {}) { - const content = {}; - const entries = Object.entries(FILES); - for (let index = 0; index < entries.length; index += 1) { - const [key, file] = entries[index]; - const files = Array.isArray(file) ? file : [file]; - const payloads = []; - for (const source of files) { - const response = await fetch(`${ROOT}/${source}`, {cache: "no-cache"}); - if (!response.ok) throw new Error(`Could not load ${source} (${response.status})`); - payloads.push(await response.json()); - } - content[key] = Array.isArray(file) ? Object.assign({}, ...payloads) : payloads[0]; - onProgress(Math.round(((index + 1) / entries.length) * 100), files.at(-1)); - } - const errors = validateContent(content); - if (errors.length) throw new Error(`Content validation failed: ${errors.join("; ")}`); - return Object.freeze(content); -} - -export function validateContent(content) { - const errors = []; - ["assets", "characters", "locations", "items", "quests", "achievements", "endings", "dialogue"].forEach((key) => { - if (!content[key] || typeof content[key] !== "object") errors.push(`missing ${key}`); - }); - if (errors.length) return errors; - Object.entries(content.locations).forEach(([id, location]) => { - if (!location.name || !Array.isArray(location.hotspots)) errors.push(`invalid location ${id}`); - if (!content.assets.images.some((asset) => asset.id === location.background)) errors.push(`unknown background ${id}/${location.background}`); - location.hotspots?.forEach((spot) => { - if (!spot.id || typeof spot.x !== "number" || spot.x < 0 || spot.x > 1) errors.push(`invalid hotspot ${id}/${spot.id || "unknown"}`); - if (spot.dialogue && !content.dialogue[spot.dialogue]) errors.push(`unknown dialogue ${spot.dialogue}`); - if (spot.goto && !content.locations[spot.goto]) errors.push(`unknown location ${spot.goto}`); - }); - }); - const effectTypes = new Set(["relationship", "flag", "item", "achievement", "unlockCG", "bias", "quest", "ending", "goto", "discoverGift"]); - Object.entries(content.dialogue).forEach(([dialogueId, dialogue]) => { - if (!dialogue.nodes?.[dialogue.start]) errors.push(`invalid start ${dialogueId}`); - Object.entries(dialogue.nodes || {}).forEach(([nodeId, node]) => { - if (!node.text || !node.speaker) errors.push(`invalid node ${dialogueId}/${nodeId}`); - if (!content.characters[node.speaker]) errors.push(`unknown speaker ${dialogueId}/${nodeId}/${node.speaker}`); - if (node.next && !dialogue.nodes[node.next]) errors.push(`unknown next ${dialogueId}/${nodeId}`); - if (node.conditions && !Array.isArray(node.conditions)) errors.push(`invalid conditions ${dialogueId}/${nodeId}`); - node.choices?.forEach((choice) => { - if (!dialogue.nodes[choice.next]) errors.push(`unknown choice next ${dialogueId}/${nodeId}`); - if (choice.conditions && !Array.isArray(choice.conditions)) errors.push(`invalid choice conditions ${dialogueId}/${nodeId}`); - choice.effects?.forEach((effect) => { - if (!effectTypes.has(effect.type)) errors.push(`invalid effect ${effect.type}`); - }); - }); - node.effects?.forEach((effect) => { - if (!effectTypes.has(effect.type)) errors.push(`invalid effect ${effect.type}`); - }); - }); - }); - if (Object.keys(content.endings).length !== 4) errors.push("exactly four endings required"); - return errors; -} diff --git a/assets/scripts/games/two-rivers/core/save.js b/assets/scripts/games/two-rivers/core/save.js deleted file mode 100755 index 9e10526..0000000 --- a/assets/scripts/games/two-rivers/core/save.js +++ /dev/null @@ -1,109 +0,0 @@ -import {normalizeState} from "./state.js"; - -export const SAVE_KEY = "zxh_two_rivers_saves_v1"; -export const SETTINGS_KEY = "zxh_two_rivers_settings_v1"; -export const AGE_KEY = "zxh_two_rivers_age_gate_v1"; - -function checksum(value) { - let hash = 2166136261; - for (let index = 0; index < value.length; index += 1) { - hash ^= value.charCodeAt(index); - hash = Math.imul(hash, 16777619); - } - return (hash >>> 0).toString(16); -} - -export function createSaveService(storage = window.localStorage) { - let recovery = null; - - const parseEnvelope = (raw, source) => { - if (!raw) return null; - try { - const envelope = JSON.parse(raw); - if (!envelope || typeof envelope !== "object") throw new Error("Save data is not an object"); - if (envelope.version !== 1) throw new Error(`Unknown save version ${String(envelope.version)}`); - if (!envelope.slots || typeof envelope.slots !== "object") throw new Error("Save slots are missing"); - return envelope; - } catch (error) { - recovery = {source, message: error.message}; - return null; - } - }; - - const readEnvelope = () => { - recovery = null; - const primaryRaw = storage.getItem(SAVE_KEY); - if (!primaryRaw) { - const pending = parseEnvelope(storage.getItem(`${SAVE_KEY}:pending`), "pending"); - if (pending) { - recovery = {source: "pending", message: "Recovered an interrupted save write."}; - return pending; - } - return {version: 1, slots: {}}; - } - const primary = parseEnvelope(primaryRaw, "primary"); - if (primary) return primary; - const primaryIssue = recovery; - const backup = parseEnvelope(storage.getItem(`${SAVE_KEY}:backup`), "backup"); - if (backup) { - recovery = {source: "backup", message: `Recovered the previous valid save. ${primaryIssue?.message || ""}`.trim()}; - return backup; - } - recovery = primaryIssue || {source: "primary", message: "Save data could not be read."}; - return {version: 1, slots: {}}; - }; - - const writeEnvelope = (envelope) => { - const previous = storage.getItem(SAVE_KEY); - if (previous) storage.setItem(`${SAVE_KEY}:backup`, previous); - storage.setItem(`${SAVE_KEY}:pending`, JSON.stringify(envelope)); - storage.setItem(SAVE_KEY, JSON.stringify(envelope)); - storage.removeItem(`${SAVE_KEY}:pending`); - }; - - return { - list() { - return readEnvelope().slots; - }, - recoveryInfo() { - readEnvelope(); - return recovery ? {...recovery} : null; - }, - save(slot, state) { - const normalized = normalizeState(state); - if (!normalized) throw new Error("Refused invalid save state"); - const envelope = readEnvelope(); - const payload = JSON.stringify(normalized); - envelope.slots[slot] = { - version: 1, - timestamp: new Date().toISOString(), - checksum: checksum(payload), - location: normalized.location, - playTimeSeconds: normalized.playTimeSeconds, - state: normalized - }; - writeEnvelope(envelope); - return envelope.slots[slot]; - }, - load(slot) { - const record = readEnvelope().slots[slot]; - if (!record?.state) return null; - const normalized = normalizeState(record.state); - if (!normalized || checksum(JSON.stringify(normalized)) !== record.checksum) return null; - return normalized; - }, - hasSave() { - return Boolean(readEnvelope().slots.auto); - }, - settings(value) { - if (value) storage.setItem(SETTINGS_KEY, JSON.stringify(value)); - try { return JSON.parse(storage.getItem(SETTINGS_KEY) || "{}"); } catch (_error) { return {}; } - }, - ageConfirmed() { - return storage.getItem(AGE_KEY) === "yes"; - }, - confirmAge() { - storage.setItem(AGE_KEY, "yes"); - } - }; -} diff --git a/assets/scripts/games/two-rivers/core/state.js b/assets/scripts/games/two-rivers/core/state.js deleted file mode 100755 index 81f92af..0000000 --- a/assets/scripts/games/two-rivers/core/state.js +++ /dev/null @@ -1,318 +0,0 @@ -// Native ES module; the .js suffix matches the production server's JavaScript MIME mapping. -export const RELATIONSHIPS = ["trust", "respect", "comfort", "humour", "adventure", "romance", "familyApproval"]; -export const SAVE_VERSION = 1; - -const clamp = (value, min = 0, max = 100) => Math.max(min, Math.min(max, Number(value) || 0)); -const clone = (value) => JSON.parse(JSON.stringify(value)); - -export function freshState(settings = {}) { - return normalizeState({ - version: SAVE_VERSION, - location: "courtyard", - checkpoint: "courtyard", - position: 0.14, - relationships: { - trust: 24, respect: 28, comfort: 18, humour: 20, - adventure: 22, romance: 12, familyApproval: 20 - }, - inventory: [], - gifts: [], - discoveredGifts: [], - flags: {}, - choices: [], - quests: { - garland: {status: "active", count: 0, rewarded: false}, - letters: {status: "locked", count: 0, rewarded: false} - }, - puzzles: {}, - minigames: {}, - unlockedCGs: [], - achievements: [], - unlockedEndings: [], - readNodes: [], - dialogueHistory: [], - dialogue: null, - endingBias: {}, - finalChoice: null, - currentEnding: null, - minigameCheckpoint: null, - playTimeSeconds: 0, - settings: { - sound: false, - masterVolume: 0.65, - musicVolume: 0.55, - ambienceVolume: 0.35, - sfxVolume: 0.7, - textSpeed: "normal", - autoDelay: 1800, - reducedMotion: matchMediaSafe("(prefers-reduced-motion: reduce)"), - highContrast: false, - assistedMinigames: false, - effectsQuality: "full", - ...settings - } - }); -} - -function matchMediaSafe(query) { - return typeof window !== "undefined" && window.matchMedia ? window.matchMedia(query).matches : false; -} - -export function normalizeState(candidate) { - if (!candidate || typeof candidate !== "object") return null; - const base = { - version: SAVE_VERSION, - location: String(candidate.location || "courtyard"), - checkpoint: String(candidate.checkpoint || candidate.location || "courtyard"), - position: clamp(candidate.position ?? 0.14, 0.04, 0.96), - relationships: {}, - inventory: uniqueStrings(candidate.inventory, 80), - gifts: uniqueStrings(candidate.gifts, 6), - discoveredGifts: uniqueStrings(candidate.discoveredGifts, 6), - flags: cleanObject(candidate.flags), - choices: uniqueStrings(candidate.choices, 160), - quests: candidate.quests && typeof candidate.quests === "object" ? clone(candidate.quests) : {}, - puzzles: cleanObject(candidate.puzzles), - minigames: candidate.minigames && typeof candidate.minigames === "object" ? clone(candidate.minigames) : {}, - unlockedCGs: uniqueStrings(candidate.unlockedCGs, 16), - achievements: uniqueStrings(candidate.achievements, 24), - unlockedEndings: uniqueStrings(candidate.unlockedEndings, 4), - readNodes: uniqueStrings(candidate.readNodes, 400), - dialogueHistory: normalizeHistory(candidate.dialogueHistory), - dialogue: candidate.dialogue && typeof candidate.dialogue === "object" ? clone(candidate.dialogue) : null, - endingBias: candidate.endingBias && typeof candidate.endingBias === "object" ? clone(candidate.endingBias) : {}, - finalChoice: typeof candidate.finalChoice === "string" ? candidate.finalChoice : null, - currentEnding: typeof candidate.currentEnding === "string" ? candidate.currentEnding : null, - minigameCheckpoint: typeof candidate.minigameCheckpoint === "string" ? candidate.minigameCheckpoint : null, - playTimeSeconds: clamp(candidate.playTimeSeconds, 0, 999999), - settings: { - sound: Boolean(candidate.settings?.sound), - masterVolume: clamp(candidate.settings?.masterVolume ?? 0.65, 0, 1), - musicVolume: clamp(candidate.settings?.musicVolume ?? 0.55, 0, 1), - ambienceVolume: clamp(candidate.settings?.ambienceVolume ?? 0.35, 0, 1), - sfxVolume: clamp(candidate.settings?.sfxVolume ?? 0.7, 0, 1), - textSpeed: ["slow", "normal", "fast", "instant"].includes(candidate.settings?.textSpeed) ? candidate.settings.textSpeed : "normal", - autoDelay: clamp(candidate.settings?.autoDelay ?? 1800, 800, 5000), - reducedMotion: Boolean(candidate.settings?.reducedMotion), - highContrast: Boolean(candidate.settings?.highContrast), - assistedMinigames: Boolean(candidate.settings?.assistedMinigames), - effectsQuality: ["full", "reduced", "minimal"].includes(candidate.settings?.effectsQuality) ? candidate.settings.effectsQuality : "full" - } - }; - RELATIONSHIPS.forEach((key) => { base.relationships[key] = clamp(candidate.relationships?.[key] ?? 20); }); - ["garland", "letters"].forEach((id) => { - const value = base.quests[id] || {}; - base.quests[id] = { - status: ["locked", "active", "complete"].includes(value.status) ? value.status : (id === "garland" ? "active" : "locked"), - count: clamp(value.count, 0, id === "garland" ? 5 : 3), - rewarded: Boolean(value.rewarded) - }; - }); - return base; -} - -function uniqueStrings(value, cap) { - return Array.isArray(value) - ? [...new Set(value.filter((item) => typeof item === "string" && /^[a-z0-9_:-]{1,80}$/i.test(item)))].slice(0, cap) - : []; -} - -function cleanObject(value) { - if (!value || typeof value !== "object" || Array.isArray(value)) return {}; - return Object.fromEntries(Object.entries(value).filter(([key, item]) => - /^[a-z0-9_:-]{1,80}$/i.test(key) && ["boolean", "number", "string"].includes(typeof item)).slice(0, 200)); -} - -function normalizeHistory(value) { - if (!Array.isArray(value)) return []; - return value.filter((entry) => - entry && typeof entry === "object" && - typeof entry.speaker === "string" && typeof entry.text === "string") - .slice(-200) - .map((entry) => ({ - speaker: entry.speaker.slice(0, 80), - text: entry.text.slice(0, 1200) - })); -} - -export function createStore(initial) { - let state = normalizeState(initial) || freshState(); - const listeners = new Set(); - return { - get: () => clone(state), - dispatch(command) { - state = reduce(state, command); - listeners.forEach((listener) => listener(clone(state), command)); - return clone(state); - }, - replace(next) { - const normalized = normalizeState(next); - if (!normalized) throw new Error("Invalid game state"); - state = normalized; - listeners.forEach((listener) => listener(clone(state), {type: "replace"})); - }, - subscribe(listener) { - listeners.add(listener); - return () => listeners.delete(listener); - } - }; -} - -export function reduce(current, command) { - const state = clone(current); - if (!command || typeof command.type !== "string") return normalizeState(state); - switch (command.type) { - case "relationship": - if (RELATIONSHIPS.includes(command.key)) { - state.relationships[command.key] = clamp(state.relationships[command.key] + Number(command.amount || 0)); - if (command.key === "trust" && state.relationships.trust >= 75 && !state.achievements.includes("open_book")) state.achievements.push("open_book"); - if (command.key === "familyApproval" && state.relationships.familyApproval >= 75 && !state.achievements.includes("royal_favourite")) state.achievements.push("royal_favourite"); - } - break; - case "flag": - if (/^[a-z0-9_:-]+$/i.test(command.id)) state.flags[command.id] = command.value !== false; - break; - case "goto": - state.location = command.location; - state.checkpoint = command.location; - state.position = clamp(command.position ?? 0.08, 0.04, 0.96); - state.dialogue = null; - break; - case "position": - state.position = clamp(command.value, 0.04, 0.96); - break; - case "item": - if (!state.inventory.includes(command.id)) state.inventory.push(command.id); - break; - case "choice": - if (!state.choices.includes(command.id)) state.choices.push(command.id); - break; - case "read": - if (!state.readNodes.includes(command.id)) state.readNodes.push(command.id); - break; - case "history": - state.dialogueHistory.push({speaker: String(command.speaker || "").slice(0, 80), text: String(command.text || "").slice(0, 1200)}); - state.dialogueHistory = state.dialogueHistory.slice(-200); - break; - case "dialogue": - state.dialogue = command.value ? clone(command.value) : null; - break; - case "questStart": - if (state.quests[command.id] && state.quests[command.id].status === "locked") state.quests[command.id].status = "active"; - break; - case "questProgress": - progressQuest(state, command.id, command.item, command.target, command.reward); - break; - case "puzzle": - state.puzzles[command.id] = true; - state.flags[`${command.id}_solved`] = true; - break; - case "minigameStart": - state.minigameCheckpoint = command.id; - break; - case "minigame": - { - const previous = state.minigames[command.id]; - const score = clamp(command.score, 0, 999); - state.minigames[command.id] = { - complete: true, - score: Math.max(previous?.score || 0, score), - perfect: Boolean(previous?.perfect || command.perfect), - attempts: clamp((previous?.attempts || 0) + 1, 1, 99) - }; - state.minigameCheckpoint = null; - } - break; - case "gift": - if (!state.gifts.includes(command.id)) state.gifts.push(command.id); - break; - case "discoverGift": - if (!state.discoveredGifts.includes(command.id)) state.discoveredGifts.push(command.id); - break; - case "achievement": - if (!state.achievements.includes(command.id)) state.achievements.push(command.id); - break; - case "unlockCG": - if (!state.unlockedCGs.includes(command.id)) state.unlockedCGs.push(command.id); - break; - case "bias": - state.endingBias[command.id] = clamp((state.endingBias[command.id] || 0) + Number(command.amount || 0), 0, 50); - state.finalChoice = command.id; - break; - case "ending": - state.currentEnding = command.id; - if (!state.unlockedEndings.includes(command.id)) state.unlockedEndings.push(command.id); - break; - case "setting": - if (Object.hasOwn(state.settings, command.key)) state.settings[command.key] = command.value; - break; - case "tick": - state.playTimeSeconds = clamp(state.playTimeSeconds + Number(command.seconds || 0), 0, 999999); - break; - } - return normalizeState(state); -} - -function progressQuest(state, id, item, target, reward = {}) { - const quest = state.quests[id]; - if (!quest || quest.status === "complete" || state.inventory.includes(item)) return; - state.inventory.push(item); - if (quest.status === "locked") quest.status = "active"; - quest.count = Math.min(target, quest.count + 1); - if (quest.count < target) return; - quest.status = "complete"; - if (quest.rewarded) return; - quest.rewarded = true; - Object.entries(reward).forEach(([key, amount]) => { - if (RELATIONSHIPS.includes(key)) state.relationships[key] = clamp(state.relationships[key] + Number(amount)); - }); - if (reward.cg && !state.unlockedCGs.includes(reward.cg)) state.unlockedCGs.push(reward.cg); - const achievement = id === "garland" ? "garland_for_all" : "letters_home"; - if (!state.achievements.includes(achievement)) state.achievements.push(achievement); -} - -export function applyEffects(store, effects = []) { - effects.forEach((effect) => { - if (effect.type === "relationship") store.dispatch(effect); - else if (effect.type === "flag") store.dispatch(effect); - else if (effect.type === "item") store.dispatch(effect); - else if (effect.type === "achievement") store.dispatch(effect); - else if (effect.type === "unlockCG") store.dispatch(effect); - else if (effect.type === "bias") store.dispatch(effect); - else if (effect.type === "goto") store.dispatch({type: "goto", location: effect.location, position: effect.position}); - else if (effect.type === "discoverGift") store.dispatch(effect); - else if (effect.type === "quest" && effect.action === "start") store.dispatch({type: "questStart", id: effect.id}); - }); -} - -export function relationshipStage(value) { - if (value >= 75) return "Deep"; - if (value >= 50) return "Warm"; - if (value >= 25) return "Growing"; - return "New"; -} - -export function resolveEnding(state, endings) { - const order = ["scholar", "laughter", "road", "families"]; - const scores = Object.fromEntries(order.map((id) => { - const weighted = Object.entries(endings[id].weights).reduce((sum, [key, weight]) => sum + state.relationships[key] * weight, 0); - return [id, weighted + Number(state.endingBias[id] || 0)]; - })); - return order.sort((a, b) => - scores[b] - scores[a] || - Number(Boolean(state.endingBias[b])) - Number(Boolean(state.endingBias[a])) || - state.relationships.romance - state.relationships.romance || - state.relationships.trust - state.relationships.trust || - order.indexOf(a) - order.indexOf(b))[0]; -} - -export function requirementMet(state, requirement) { - const [kind, id] = requirement.split(":"); - if (kind === "flag") return Boolean(state.flags[id]); - if (kind === "dialogue") return Boolean(state.flags[`dialogue_${id}`]); - if (kind === "minigame") return Boolean(state.minigames[id]?.complete); - if (kind === "item") return state.inventory.includes(id); - if (kind === "quest") return state.quests[id]?.status === "complete"; - if (kind === "puzzle") return Boolean(state.puzzles[id]); - return false; -} diff --git a/assets/scripts/games/two-rivers/gate.js b/assets/scripts/games/two-rivers/gate.js deleted file mode 100755 index a5e584a..0000000 --- a/assets/scripts/games/two-rivers/gate.js +++ /dev/null @@ -1,35 +0,0 @@ -(function () { - "use strict"; - - var root = document.querySelector("[data-two-rivers]"); - if (!root) return; - - var button = root.querySelector("[data-tr-age-confirm]"); - var ageScreen = root.querySelector("[data-tr-age]"); - var loading = root.querySelector("[data-tr-loading]"); - var loadingCopy = root.querySelector("[data-tr-loading-copy]"); - var AGE_KEY = "zxh_two_rivers_age_gate_v1"; - - if (!button || !ageScreen || !loading) return; - - button.addEventListener("click", function () { - root.dataset.ageConfirmed = "true"; - try { - localStorage.setItem(AGE_KEY, "true"); - } catch (_error) { - // The module bootstrap can still use the in-page marker when storage is unavailable. - } - - ageScreen.hidden = true; - loading.hidden = false; - if (loadingCopy) loadingCopy.textContent = "Opening the festival…"; - - window.setTimeout(function () { - if (!loading.hidden && !root.querySelector("[data-tr-menu]:not([hidden])")) { - loading.innerHTML = "
Refresh once to fetch the latest game files. If the problem continues, the deployment is incomplete.
Return to the playroom${String(error.message || error)}
Return to playroomThe pockets are, for once, empty.
"}An original, locally hosted romantic adventure created for zainezq.com.
-Bengali and Pakistani influences are treated as distinct sources of clothing, food, architecture, and visual language inside a wholly fictional fantasy setting.
`); - } - - gallery() { - const state = this.store.get(); - const cards = ["garland", "library", "scholar", "laughter", "road", "families"].map((id) => { - const unlocked = state.unlockedCGs.includes(id) || state.unlockedEndings.includes(id); - return `
` : "${escapeHtml(info.message)}
-Your current game can still begin safely. A recovery copy was used when available; existing Princess Lima saves were not touched.
- `, "A save needed attention", false); - this.panelBody.querySelector("[data-recovery-close]").addEventListener("click", () => { - this.overlay.hidden = true; - this.panelBody.innerHTML = ""; - }); - } - - savesPanel(onLoad) { - const slots = this.saves.list(); - const state = this.store.get(); - this.openPanel("Save slots", `${escapeHtml(entry.text)}
The indigo knot named an order. Touch the carved shelf emblems from first light to moonrise.
-${progress.length ? progress.join(" · ") : "The lantern waits."}
- ${this.store.get().settings.assistedMinigames ? "Assisted hint: Dawn → Rain → Lantern → Moon" : ""}`, "Library puzzle", false); - this.panelBody.querySelectorAll("[data-symbol]").forEach((button) => button.addEventListener("click", () => { - const value = button.dataset.symbol; - if (value === answer[progress.length]) { - progress.push(value); - this.audio.sfx("puzzle"); - if (progress.length === answer.length) { - this.store.dispatch({type: "puzzle", id: "cipher"}); - this.store.dispatch({type: "achievement", id: "lantern_reader"}); - this.store.dispatch({type: "item", id: "lantern_rubbing"}); - this.overlay.hidden = true; - this.toast("The shelves answer with a hidden garden map."); - this.saves.save("auto", this.store.get()); - done(); - } else render(); - } else { - progress = []; - this.toast("The lanterns dim. Begin again."); - render(); - } - })); - }; - render(); - } - - flowerSequence(done) { - const answer = ["Jasmine", "Tuberose", "Marigold", "Bakul"]; - const symbols = ["Bakul", "Jasmine", "Marigold", "Tuberose"]; - let progress = []; - const render = () => { - this.openPanel("The founders' flower mosaic", ` -Four carved blooms follow the old festival day: welcome at dawn, fragrance at dusk, fire at the feast, memory at moonrise.
-${progress.length ? progress.join(" · ") : "The stone petals wait beneath your hand."}
- ${this.store.get().settings.assistedMinigames ? "Assisted hint: Jasmine → Tuberose → Marigold → Bakul" : ""}`, - "Moon garden puzzle · untimed", false); - this.panelBody.querySelectorAll("[data-flower]").forEach((button) => button.addEventListener("click", () => { - const value = button.dataset.flower; - if (value === answer[progress.length]) { - progress.push(value); - this.audio.sfx("puzzle"); - if (progress.length === answer.length) { - this.store.dispatch({type: "puzzle", id: "flower_sequence"}); - this.store.dispatch({type: "item", id: "anwara_note"}); - this.overlay.hidden = true; - this.toast("The mosaic opens around a note and an archer's brass token."); - this.saves.save("auto", this.store.get()); - done(); - } else render(); - } else { - progress = []; - this.toast("The carved vine returns to its beginning."); - render(); - } - })); - }; - render(); - } - - gifts(done) { - const discovered = this.store.get().discoveredGifts; - const available = this.content.items.gifts.filter((gift) => discovered.includes(gift.id)); - const cards = available.map((gift) => - ``).join(""); - this.openPanel("A gift for Lima", `Choose from the ideas Z noticed in conversation. No sincere gift is punished, and only one gift is exchanged in this act.
${escapeHtml(instructions.copy)}
-${escapeHtml(instructions.input)}
- ${this.store.get().settings.assistedMinigames ? "Assisted mode is on: cues move more slowly or reveal the next correct input.
" : ""} - `, "Practice instructions · pause safely · story progress is guaranteed", false); - this.panelBody.querySelector("[data-mini-begin]").addEventListener("click", () => { - if (type === "archery") this.archery(done); - else if (type === "cooking") this.cooking(done); - else this.dance(done); - }); - } - - archery(done) { - const firstCompletion = !this.store.get().minigames.archery?.complete; - let shots = 0; - let score = 0; - let direction = 1; - let position = 0; - const assisted = this.store.get().settings.assistedMinigames; - this.openPanel("Moonlit Archery", ` -Loose five arrows when the moving glint crosses the gold centre. Press Space or tap Loose.
-Arrows 0/5 · Score 0
-Build Rayhan's fragrant rice in the order hidden in Nadia's rhyme: foundation, gold, brightness, green.
-${index}/4 prepared · ${mistakes} ${mistakes === 1 ? "correction" : "corrections"}
- ${this.store.get().settings.assistedMinigames ? "Assisted order: Rice, Saffron, Citrus, Pistachio." : ""}`, "Cooperative cooking", false); - this.panelBody.querySelectorAll("[data-ingredient]").forEach((button) => button.addEventListener("click", () => { - if (button.dataset.ingredient === recipe[index]) { - index += 1; - this.audio.sfx("cooking"); - if (index === recipe.length) { - this.store.dispatch({type: "minigame", id: "cooking", score: Math.max(0, 100 - mistakes * 20), perfect: mistakes === 0}); - if (firstCompletion) { - this.store.dispatch({type: "relationship", key: "comfort", amount: mistakes === 0 ? 7 : 4}); - this.store.dispatch({type: "relationship", key: "humour", amount: mistakes ? 5 : 2}); - if (!mistakes) this.store.dispatch({type: "achievement", id: "kitchen_conspiracy"}); - } - this.overlay.hidden = true; - this.toast(mistakes ? "The dish is delicious. The flour on Lima's cheek is a separate triumph." : "Rayhan declares the dish—and the teamwork—suspiciously perfect."); - this.saves.save("auto", this.store.get()); - done(); - } else render(); - } else { - mistakes += 1; - this.toast("Lima catches your wrist. “Bold. Incorrect, but bold.”"); - render(); - } - })); - this.panel.onkeydown = (event) => { - const number = Number(event.key); - if (number >= 1 && number <= 4) this.panelBody.querySelectorAll("[data-ingredient]")[number - 1]?.click(); - }; - }; - render(); - } - - dance(done) { - const firstCompletion = !this.store.get().minigames.dance?.complete; - const pattern = ["←", "↑", "→", "↓", "←", "→", "↑", "↓", "→", "←", "↓", "↑"]; - let index = 0; - let score = 0; - const assisted = this.store.get().settings.assistedMinigames; - const render = () => { - this.openPanel("Dance at moonrise", ` -Follow Lima's sequence. Grace is welcome; recovery is irresistible.
-Step ${index + 1}/${pattern.length} · Rhythm ${score}
- ${assisted ? `Assisted: choose ${pattern[index]}` : ""}`, "Festival dance", false); - this.panelBody.querySelectorAll("[data-step]").forEach((button) => button.addEventListener("click", () => { - if (button.dataset.step === pattern[index]) score += 10; - else score += 3; - index += 1; - this.audio.sfx("dance"); - if (index >= pattern.length) { - this.store.dispatch({type: "minigame", id: "dance", score, perfect: score === 120}); - if (firstCompletion) { - this.store.dispatch({type: "relationship", key: "romance", amount: score >= 90 ? 8 : 5}); - this.store.dispatch({type: "relationship", key: "comfort", amount: score >= 90 ? 4 : 6}); - this.store.dispatch({type: "achievement", id: "two_left_feet"}); - } - this.overlay.hidden = true; - this.toast(score >= 90 ? "For one breath, the entire pavilion follows your rhythm." : "You miss a turn. Lima catches you—and does not let go."); - this.saves.save("auto", this.store.get()); - done(); - } else render(); - })); - this.panel.onkeydown = (event) => { - const arrows = {ArrowLeft: "←", ArrowUp: "↑", ArrowDown: "↓", ArrowRight: "→"}; - if (arrows[event.key]) { - event.preventDefault(); - this.panelBody.querySelector(`[data-step="${arrows[event.key]}"]`)?.click(); - } - }; - }; - render(); - } - - ending(done) { - const state = this.store.get(); - const id = resolveEnding(state, this.content.endings); - const ending = this.content.endings[id]; - this.store.dispatch({type: "ending", id}); - this.store.dispatch({type: "unlockCG", id}); - if (this.store.get().unlockedEndings.length === 4) this.store.dispatch({type: "achievement", id: "every_current"}); - this.saves.save("auto", this.store.get()); - this.audio.playLocation("ending", "water"); - this.openPanel(ending.title, ` -
- ${escapeHtml(ending.epilogue)}
“Tomorrow?” Z asks.
“Obviously,” Lima says. “We have several footnotes left to ruin.”
Create a traveller to save audio and accessibility preferences. The introduction always includes subtitles and can be muted or skipped.
"); - }); - root.querySelector("[data-lima-credits]").addEventListener("click", () => controller.ui.show( - "credits", "Credits", - "Designed and built for zainezq.com. Original fantasy artwork and locally generated audio. Powered by locally vendored Phaser.
" - )); - root.querySelector("[data-lima-setup-form]").addEventListener("submit", submitSetup); - root.querySelector("[data-lima-setup-cancel]").addEventListener("click", closeSetup); - bindButton("[data-lima-pause]", () => openPanel("pause")); - bindButton("[data-lima-inventory]", () => openPanel("inventory")); - bindButton("[data-lima-quests]", () => openPanel("quests")); - bindButton("[data-lima-sound]", toggleSound); - bindButton("[data-lima-fullscreen]", toggleFullscreen); - document.addEventListener("fullscreenchange", updateFullscreenButton); - } - - function bindButton(selector, handler) { - controller.root.querySelectorAll(selector).forEach((button) => button.addEventListener("click", handler)); - } - - function openSetup() { - controller.root.querySelector("[data-lima-menu]").hidden = true; - controller.root.querySelector("[data-lima-setup]").hidden = false; - controller.root.querySelector("[data-lima-setup] input[name=name]").focus(); - } - - function closeSetup() { - controller.root.querySelector("[data-lima-setup]").hidden = true; - controller.root.querySelector("[data-lima-menu]").hidden = false; - } - - function submitSetup(event) { - event.preventDefault(); - const form = event.currentTarget; - const name = State.validName(form.elements.name.value); - const appearance = form.elements.appearance.value; - const error = controller.root.querySelector("[data-lima-setup-error]"); - if (!name || !State.APPEARANCES.includes(appearance)) { - error.textContent = "Enter a name from 1 to 20 characters and choose an appearance."; - return; - } - controller.state = State.fresh(name, appearance); - save(); - closeSetup(); - startIntro(false); - } - - function beginAdventure() { - controller.audio.unlock(); - controller.root.querySelector("[data-lima-menu]").hidden = true; - controller.root.querySelector("[data-lima-intro]").hidden = true; - controller.root.querySelector("[data-lima-hud]").hidden = false; - controller.root.querySelector("[data-lima-status-stack]").hidden = false; - controller.locked = false; - controller.game.scene.start("LimaWorld", { region: controller.state.region }); - focusGame(); - } - - function startIntro(replay) { - controller.audio.unlock(); - controller.root.querySelector("[data-lima-menu]").hidden = true; - controller.root.querySelector("[data-lima-hud]").hidden = true; - controller.root.querySelector("[data-lima-status-stack]").hidden = true; - controller.intro.start({ replay }); - } - - function completeIntro(result) { - if (controller.state && !result.replay) { - controller.state.introSeen = true; - controller.state = State.normalize(controller.state); - save(); - beginAdventure(); - return; - } - controller.locked = true; - controller.root.querySelector("[data-lima-menu]").hidden = false; - controller.root.querySelector("[data-lima-menu] button").focus(); - } - - function travel(region, spawn) { - if (controller.transitioning || !Data.MAPS[region]) return; - controller.transitioning = true; - persistPosition(false); - const point = Data.MAPS[region].spawns[spawn] || Object.values(Data.MAPS[region].spawns)[0]; - let next = State.withPosition(controller.state, region, spawn, point.x, point.y, "south"); - next = State.withCheckpoint(next, region, spawn, point.x, point.y); - setState(next, `Travelling to ${Data.MAPS[region].name}…`); - controller.audio.play("door"); - try { - controller.scene.scene.restart({ region }); - } catch (error) { - controller.devWarn(`Transition recovered: ${error.message}`); - controller.transitioning = false; - controller.game.scene.start("LimaWorld", { region }); - } - } - - function reloadRegion() { - if (controller.scene) controller.scene.scene.restart({ region: controller.state.region }); - } - - function persistPosition(checkpoint) { - if (!controller.scene || !controller.scene.player || !controller.state) return; - const safe = Systems.nearestSafeSpawn(controller.state, controller.scene.regionId, controller.scene.player.x, controller.scene.player.y); - let next = State.withPosition(controller.state, safe.region, safe.spawn, safe.x, safe.y, controller.scene.facing); - if (checkpoint) next = State.withCheckpoint(next, safe.region, safe.spawn, safe.x, safe.y); - controller.state = next; - save(); - } - - function setState(next, message) { - const normalized = State.normalize(next); - if (!normalized) return; - controller.state = normalized; - save(); - updateHud(); - controller.audio.apply(); - if (message) status(message); - } - - function save() { - if (!controller.state) return; - try { localStorage.setItem(State.STORAGE_KEY, JSON.stringify(controller.state)); } catch (_error) { /* Session play remains available. */ } - } - - function resetSave() { - try { localStorage.removeItem(State.STORAGE_KEY); } catch (_error) { /* Nothing else to clear. */ } - controller.state = null; - window.location.reload(); - } - - function respawn() { - controller.state = Systems.respawn(controller.state); - save(); - controller.ui.close(); - controller.locked = false; - controller.game.scene.start("LimaWorld", { region: controller.state.region }); - } - - function useTonic() { - if (!controller.state) return; - const result = Systems.useItem(controller.state, "healing_tonic"); - if (!result.used) return status(controller.state.health >= controller.state.maxHealth ? "Health is already full." : "No Healing Tonics remain."); - setState(result.state, `Healing Tonic restores ${result.amount} health.`); - } - - function updateSetting(key, value) { - if (!controller.state || !(key in controller.state.settings)) return; - controller.state.settings[key] = value; - setState(controller.state); - controller.root.classList.toggle("is-high-contrast", controller.state.settings.highContrast); - } - - function toggleSound() { - if (!controller.state) return; - controller.audio.unlock(); - controller.state.settings.soundEnabled = !controller.state.settings.soundEnabled; - setState(controller.state, controller.state.settings.soundEnabled ? "Audio enabled." : "Audio muted."); - } - - async function toggleFullscreen() { - const shell = controller.root; - try { - if (!document.fullscreenElement) await shell.requestFullscreen(); - else await document.exitFullscreen(); - } catch (_error) { - status("Fullscreen is not available in this browser."); - } - } - - function updateFullscreenButton() { - const button = controller.root.querySelector("[data-lima-fullscreen]"); - const active = Boolean(document.fullscreenElement); - button.setAttribute("aria-pressed", String(active)); - button.textContent = active ? "Exit Fullscreen" : "Fullscreen"; - if (!active) focusGame(); - } - - function openDialogue(id, done) { - controller.ui.openDialogue(id, done); - } - - function openPanel(kind) { - if (controller.state) controller.ui.openPanel(kind, controller.state); - } - - function gameOver() { - controller.locked = true; - controller.ui.gameOver(controller.state); - } - - function openEnding() { - controller.locked = true; - controller.ui.ending(controller.state); - } - - function updateHud() { - if (!controller.state || !controller.root) return; - text("[data-lima-player]", controller.state.player.name); - text("[data-lima-health]", `${Math.ceil(controller.state.health)} / ${controller.state.maxHealth}`); - text("[data-lima-region]", Data.MAPS[controller.state.region].name); - text("[data-lima-chapter]", `Chapter ${controller.state.chapter}`); - text("[data-lima-objective]", Systems.currentObjective(controller.state)); - text("[data-lima-tonics]", `Tonic ×${Systems.quantity(controller.state, "healing_tonic")}`); - text("[data-lima-weapon]", controller.state.equipment.weapon ? Data.ITEMS[controller.state.equipment.weapon].name : "Unarmed"); - text("[data-lima-armour]", controller.state.equipment.armour ? Data.ITEMS[controller.state.equipment.armour].name : "None"); - text("[data-lima-selected-item]", `Healing Tonic ×${Systems.quantity(controller.state, "healing_tonic")}`); - text("[data-lima-currency]", String(Systems.quantity(controller.state, "moon_coin"))); - text("[data-lima-sound]", controller.state.settings.soundEnabled ? "Sound On" : "Sound Muted"); - const healthBar = controller.root.querySelector(".lima-hud__healthbar i"); - if (healthBar) healthBar.style.width = `${controller.state.health / controller.state.maxHealth * 100}%`; - controller.root.classList.toggle("is-high-contrast", controller.state.settings.highContrast); - } - - function cycleItem() { - status("Healing Tonic selected. Press Q to use it."); - } - - function prompt(message) { - text("[data-lima-prompt]", message || "Explore the road ahead."); - } - - function status(message) { - text("[data-lima-status]", message); - } - - function boss(name, health, maximum) { - const hud = controller.root.querySelector("[data-lima-boss]"); - hud.hidden = false; - text("[data-lima-boss-name]", name); - hud.querySelector("i").style.width = `${Math.max(0, health / maximum) * 100}%`; - } - - function text(selector, value) { - const node = controller.root && controller.root.querySelector(selector); - if (node) node.textContent = value; - } - - function focusGame() { - const game = controller.root.querySelector("[data-lima-game]"); - if (game) game.focus(); - } - - function localDebug() { - const params = new URLSearchParams(window.location.search); - return ["localhost", "127.0.0.1"].includes(window.location.hostname) && params.get("collisionDebug") === "1"; - } - - function localRegionPreview() { - if (!["localhost", "127.0.0.1"].includes(window.location.hostname)) return null; - const region = new URLSearchParams(window.location.search).get("region"); - return Data.MAPS[region] ? region : null; - } - - let queuedStatus = ""; - function queueStatus(message) { queuedStatus = message; } - function flushQueuedStatus() { if (queuedStatus) status(queuedStatus); } - - function gracefulFailure(message) { - const loading = document.querySelector("[data-lima-loading]"); - if (loading) loading.innerHTML = `The adventure could not start.${message || "A required local game file is unavailable."}Exit to Website`; - } - - Object.assign(controller, { - ready, travel, reloadRegion, persistPosition, setState, updateHud, status, prompt, boss, - openDialogue, openPanel, gameOver, openEnding, useTonic, toggleFullscreen, toggleSound, cycleItem - }); -}()); diff --git a/assets/scripts/pages/princess-lima-intro.js b/assets/scripts/pages/princess-lima-intro.js deleted file mode 100755 index b501b35..0000000 --- a/assets/scripts/pages/princess-lima-intro.js +++ /dev/null @@ -1,154 +0,0 @@ -(function (root) { - "use strict"; - - const BEATS = Object.freeze([ - Object.freeze({ - panel: 0, duration: 15000, voice: "intro-narration-1", - subtitle: "Before shadow crossed the northern road, Princess Lima walked among her people—listening before she ruled, and helping before she asked." - }), - Object.freeze({ - panel: 1, duration: 14000, voice: "intro-narration-2", effect: "door", - subtitle: "Then Lord Malrec descended from the Fortress of Shadows. His riders carried fear through the valleys, searching for the royal oath." - }), - Object.freeze({ - panel: 2, duration: 15000, voice: "intro-narration-3", effect: "attack", - subtitle: "Lima stood between the riders and the village. Malrec could not bend her will, so he bound her in shadow and carried her beyond the mountains." - }), - Object.freeze({ - panel: 3, duration: 15000, voice: "intro-narration-4", effect: "quest", - subtitle: "At dawn, a lone traveller reached the broken village. The road was dangerous, but every rescued life would become another light leading to Lima." - }), - Object.freeze({ - panel: 3, duration: 8000, voice: null, effect: "victory", - subtitle: "RESCUE PRINCESS LIMA — Chapter One: The Broken Village" - }) - ]); - - function create(container, actions) { - const element = container.querySelector("[data-lima-intro]"); - const picture = element.querySelector("[data-lima-intro-picture]"); - const subtitle = element.querySelector("[data-lima-intro-subtitle]"); - const progress = element.querySelector("[data-lima-intro-progress]"); - const pauseButton = element.querySelector("[data-lima-intro-pause]"); - const muteButton = element.querySelector("[data-lima-intro-mute]"); - let beatIndex = 0; - let elapsed = 0; - let startedAt = 0; - let timer = 0; - let paused = false; - let replay = false; - let escapeStarted = 0; - let running = false; - - function start(options) { - stopTimer(); - beatIndex = 0; - elapsed = 0; - paused = false; - replay = Boolean(options && options.replay); - running = true; - element.hidden = false; - container.classList.add("is-intro-running"); - actions.onLock(true); - actions.onAudioUnlock(); - renderBeat(); - element.focus(); - } - - function renderBeat() { - const beat = BEATS[beatIndex]; - picture.dataset.panel = String(beat.panel); - subtitle.textContent = beat.subtitle; - subtitle.hidden = !actions.subtitlesEnabled(); - progress.style.width = `${beatIndex / BEATS.length * 100}%`; - progress.parentElement.setAttribute("aria-valuenow", String(beatIndex + 1)); - if (beat.voice && actions.narrationEnabled()) actions.playVoice(beat.voice); - if (beat.effect) actions.playEffect(beat.effect, 0.55); - startedAt = Date.now(); - timer = window.setTimeout(next, beat.duration); - pauseButton.textContent = "Pause"; - pauseButton.setAttribute("aria-pressed", "false"); - } - - function next() { - stopTimer(); - actions.stopVoice(); - beatIndex += 1; - elapsed = 0; - if (beatIndex >= BEATS.length) return finish(false); - renderBeat(); - } - - function togglePause() { - if (!running) return; - paused = !paused; - if (paused) { - elapsed += Date.now() - startedAt; - stopTimer(); - actions.stopVoice(); - } else { - const beat = BEATS[beatIndex]; - startedAt = Date.now(); - timer = window.setTimeout(next, Math.max(500, beat.duration - elapsed)); - if (beat.voice && actions.narrationEnabled()) actions.playVoice(beat.voice); - } - pauseButton.textContent = paused ? "Resume" : "Pause"; - pauseButton.setAttribute("aria-pressed", String(paused)); - element.classList.toggle("is-paused", paused); - } - - function finish(skipped) { - if (!running) return; - running = false; - stopTimer(); - actions.stopVoice(); - progress.style.width = "100%"; - element.hidden = true; - element.classList.remove("is-paused"); - container.classList.remove("is-intro-running"); - actions.onComplete({ replay, skipped }); - } - - function stopTimer() { - if (timer) window.clearTimeout(timer); - timer = 0; - } - - function updateMute() { - const enabled = actions.soundEnabled(); - muteButton.textContent = enabled ? "Mute" : "Enable sound"; - muteButton.setAttribute("aria-pressed", String(!enabled)); - } - - pauseButton.addEventListener("click", togglePause); - muteButton.addEventListener("click", () => { - actions.toggleSound(); - updateMute(); - }); - element.querySelector("[data-lima-intro-skip]").addEventListener("click", () => finish(true)); - - document.addEventListener("keydown", (event) => { - if (!running) return; - if (event.key === "Escape" && !escapeStarted) { - event.preventDefault(); - escapeStarted = Date.now(); - } else if (event.key.toLowerCase() === "p") { - event.preventDefault(); - togglePause(); - } - }); - document.addEventListener("keyup", (event) => { - if (!running || event.key !== "Escape") return; - event.preventDefault(); - if (escapeStarted && Date.now() - escapeStarted >= 900) finish(true); - else actions.status("Hold Escape for one second to skip the introduction."); - escapeStarted = 0; - }); - - return Object.freeze({ start, finish, togglePause, isRunning: () => running, updateMute, BEATS }); - } - - const api = Object.freeze({ create, BEATS }); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaIntro = api; -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-maps.js b/assets/scripts/pages/princess-lima-maps.js deleted file mode 100755 index 6734439..0000000 --- a/assets/scripts/pages/princess-lima-maps.js +++ /dev/null @@ -1,38 +0,0 @@ -(function (root) { - "use strict"; - - const Data = root.PrincessLimaData; - const REGION_FRAME = Object.freeze({ - village: 0, - forest: 1, - ruins: 2, - mountain: 3, - camp: 4, - fortressExterior: 5, - fortressInterior: 6, - bossArena: 7, - chamber: 8 - }); - - /* - * The generated atlas is the finished map artwork, not a texture reference. - * Keep it square and opaque. Collision is supplied separately by the region - * data so production rendering never paints debug geometry over the image. - */ - function render(scene, regionId) { - return scene.add.image( - Data.WIDTH / 2, - Data.HEIGHT / 2, - "lima-region-atlas", - REGION_FRAME[regionId] - ) - .setDisplaySize(Data.WIDTH, Data.HEIGHT) - .setOrigin(0.5) - .setAlpha(1) - .setDepth(0); - } - - const api = Object.freeze({ REGION_FRAME, render }); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaMaps = api; -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-scenes.js b/assets/scripts/pages/princess-lima-scenes.js deleted file mode 100755 index bf07738..0000000 --- a/assets/scripts/pages/princess-lima-scenes.js +++ /dev/null @@ -1,610 +0,0 @@ -(function (root) { - "use strict"; - - const Data = root.PrincessLimaData; - const Systems = root.PrincessLimaSystems; - const State = root.PrincessLimaState; - const Maps = root.PrincessLimaMaps; - - function createSceneClasses(controller) { - class BootScene extends Phaser.Scene { - constructor() { super("LimaBoot"); } - - preload() { - this.load.image("lima-title", "/assets/images/play/princess-lima/title-landscape.png"); - this.load.spritesheet("lima-cast", "/assets/images/play/princess-lima/cast-atlas.png", { frameWidth: 314, frameHeight: 314 }); - this.load.spritesheet("lima-region-atlas", "/assets/images/play/princess-lima/regional-style-atlas.png", { frameWidth: 418, frameHeight: 418 }); - const audio = "/assets/audio/princess-lima/"; - [ - "village-theme", "forest-theme", "mountain-theme", "fortress-theme", "boss-theme", "victory-theme", - "step", "attack", "hit", "damage", "defeat", "pickup", "quest", "puzzle", "door", "victory", - "intro-narration-1", "intro-narration-2", "intro-narration-3", "intro-narration-4" - ].forEach((key) => this.load.audio(key, `${audio}${key}.wav`)); - this.load.on("loaderror", (file) => controller.devWarn(`Optional asset failed: ${file.key}`)); - } - - create() { - this.add.image(Data.WIDTH / 2, Data.HEIGHT / 2, "lima-title").setDisplaySize(Data.WIDTH, Data.HEIGHT); - controller.audio.attach(this, "village"); - controller.ready(); - } - } - - class WorldScene extends Phaser.Scene { - constructor() { - super("LimaWorld"); - this.regionId = "village"; - this.facing = "east"; - this.lastAttack = 0; - this.lastHit = 0; - this.stepDistance = 0; - this.previous = null; - this.puzzleInput = []; - this.enemySerial = 0; - this.attacking = false; - this.attackToken = 0; - this.attackHits = new Set(); - } - - init(data) { - this.regionId = Data.MAPS[data && data.region] ? data.region : controller.getState().region; - } - - create() { - controller.scene = this; - controller.transitioning = false; - this.map = Data.MAPS[this.regionId]; - this.physics.world.setBounds(0, 0, Data.WIDTH, Data.HEIGHT); - this.drawMap(); - this.solids = this.physics.add.staticGroup(); - Systems.activeObstacles(controller.getState(), this.regionId).forEach((shape) => this.addSolid(shape)); - this.interactables = []; - this.createExits(); - this.createPuzzle(); - this.createPickups(); - this.createNpcs(); - this.createPlayer(); - this.createEnemies(); - this.createInput(); - this.projectiles = this.physics.add.group(); - this.physics.add.collider(this.projectiles, this.solids, (projectile) => projectile.destroy()); - this.physics.add.overlap(this.player, this.projectiles, (_player, projectile) => { - this.hurtPlayer(projectile.getData("damage") || 10, projectile.x, projectile.y); - projectile.destroy(); - }); - this.cameras.main.setBounds(0, 0, Data.WIDTH, Data.HEIGHT); - this.cameras.main.startFollow(this.player, true, controller.reducedMotion() ? 1 : 0.2, controller.reducedMotion() ? 1 : 0.2); - this.cameras.main.setDeadzone(90, 60); - controller.audio.attach(this, this.regionId); - controller.updateHud(); - controller.status(`${this.map.name}. ${Systems.currentObjective(controller.getState())}`); - controller.persistPosition(true); - if (this.regionId === "bossArena" && !controller.getState().defeatedBosses.includes("malrec")) { - controller.openDialogue("malrec", () => { - let state = controller.getState(); - state.flags.boss_started = true; - state = Systems.startQuest(state, "defeat_malrec"); - controller.setState(state, "The final battle begins."); - this.refreshRequiredEnemies(); - }); - } - } - - drawMap() { - this.cameras.main.setBackgroundColor(this.map.palette[0]); - Maps.render(this, this.regionId); - } - - addSolid(shape) { - let object; - if (shape.shape === "circle") { - object = this.add.circle(shape.x, shape.y, shape.radius, 0xffffff, 0); - this.physics.add.existing(object, true); - object.body.setCircle(shape.radius); - } else { - object = this.add.rectangle(shape.x + shape.width / 2, shape.y + shape.height / 2, shape.width, shape.height, 0xffffff, 0); - this.physics.add.existing(object, true); - } - this.solids.add(object); - } - - createPlayer() { - const state = controller.getState(); - const saved = state.region === this.regionId ? state.position : { x: this.map.spawns[Object.keys(this.map.spawns)[0]].x, y: this.map.spawns[Object.keys(this.map.spawns)[0]].y }; - const safe = Systems.nearestSafeSpawn(state, this.regionId, saved.x, saved.y); - this.facing = state.position.facing || "east"; - this.player = this.physics.add.sprite(safe.x, safe.y, "lima-cast", playerFrame(this.facing)).setScale(0.3).setDepth(100); - this.player.body.setSize(70, 42).setOffset(122, 215); - this.player.setCollideWorldBounds(true).setMaxVelocity(176, 176); - this.physics.add.collider(this.player, this.solids); - this.physics.add.collider(this.player, this.npcGroup); - this.previous = { x: this.player.x, y: this.player.y }; - } - - createNpcs() { - this.npcGroup = this.physics.add.staticGroup(); - (this.map.npcs || []).forEach(([id, x, y]) => { - const npc = this.npcGroup.create(x, y, "lima-cast", Data.NPCS[id].frame).setScale(0.29).setDepth(y + 40); - npc.refreshBody(); - npc.body.setSize(70, 42).setOffset(122, 215); - this.interactables.push({ type: "npc", id, x, y, sprite: npc }); - }); - } - - createEnemies() { - this.enemies = this.physics.add.group(); - this.physics.add.collider(this.enemies, this.solids); - this.physics.add.collider(this.enemies, this.enemies); - this.physics.add.collider(this.enemies, this.npcGroup); - this.physics.add.overlap(this.player, this.enemies, (_player, enemyObject) => { - this.hurtPlayer(enemyObject.getData("spec").damage, enemyObject.x, enemyObject.y); - }); - (this.map.enemies || []).forEach((spawn) => { - if (spawn.boss && controller.getState().defeatedBosses.includes(spawn.type)) return; - this.spawnEnemy(spawn); - }); - } - - spawnEnemy(spawn) { - const spec = Data.ENEMIES[spawn.type]; - const enemyObject = this.physics.add.sprite(spawn.x, spawn.y, "lima-cast", spec.frame) - .setScale(spec.boss ? 0.34 : 0.25).setDepth(spawn.y + 30); - enemyObject.body.setSize(spec.boss ? 130 : 95, spec.boss ? 78 : 58).setOffset(spec.boss ? 92 : 110, spec.boss ? 200 : 205); - enemyObject.setData({ - id: `${spawn.type}-${++this.enemySerial}`, type: spawn.type, spec, spawn, - health: spec.health, homeX: spawn.x, homeY: spawn.y, nextAction: this.time.now + 900, phase: 1 - }); - this.enemies.add(enemyObject); - this.applyEnemyRequirement(enemyObject); - } - - applyEnemyRequirement(enemyObject) { - const requirement = enemyObject.getData("spawn").requires; - const available = !requirement || controller.getState().flags[requirement] - || controller.getState().unlockedRoutes.includes(requirement); - enemyObject.setVisible(available); - enemyObject.body.enable = available; - } - - refreshRequiredEnemies() { - this.enemies.getChildren().forEach((enemyObject) => this.applyEnemyRequirement(enemyObject)); - } - - createExits() { - (this.map.exits || []).forEach((item) => { - const zone = this.add.zone(item.x + item.width / 2, item.y + item.height / 2, item.width, item.height); - this.interactables.push({ type: "exit", id: item.id, x: item.x + item.width / 2, y: item.y + item.height / 2, data: item, sprite: zone }); - }); - } - - createPuzzle() { - const puzzle = this.map.puzzle; - if (!puzzle || controller.getState().solvedPuzzles.includes(puzzle.id)) return; - puzzle.objects.forEach(([id, x, y]) => { - const node = this.add.zone(x, y, 38, 38); - const marker = this.createInteractionMarker(x, y, `${readableId(id)} · E`); - this.interactables.push({ type: "puzzle", id, puzzle, x, y, sprite: node, marker }); - }); - } - - createPickups() { - (this.map.pickups || []).forEach(([id, x, y], index) => { - const chestId = `${this.regionId}-${id}-${index}`; - if (controller.getState().openedChests.includes(chestId)) return; - const item = this.add.zone(x, y, 34, 34); - const marker = this.createInteractionMarker(x, y, `${Data.ITEMS[id].name} · E`); - this.interactables.push({ type: "pickup", id, chestId, x, y, sprite: item, marker }); - }); - } - - createInteractionMarker(x, y, label) { - return this.add.text(x, y - 32, label, { - fontFamily: "monospace", - fontSize: "13px", - fontStyle: "bold", - color: "#fff6ce", - backgroundColor: "#111827", - padding: { x: 7, y: 4 } - }).setOrigin(0.5).setDepth(900).setVisible(false); - } - - createInput() { - this.cursors = this.input.keyboard.createCursorKeys(); - this.keys = this.input.keyboard.addKeys({ - up: "W", down: "S", left: "A", right: "D", interact: "E", enter: "ENTER", - item: "Q", pause: "ESC", menu: "M", inventory: "I", quests: "J", fullscreen: "F", cycle: "TAB" - }); - this.input.keyboard.addCapture(["SPACE", "TAB", "UP", "DOWN", "LEFT", "RIGHT"]); - } - - update(time, delta) { - if (!this.player) return; - if (controller.locked || controller.transitioning) { - this.player.setVelocity(0); - return; - } - const traveled = Math.hypot(this.player.x - this.previous.x, this.player.y - this.previous.y); - this.previous = { x: this.player.x, y: this.player.y }; - let dx = 0; - let dy = 0; - if (this.cursors.left.isDown || this.keys.left.isDown) dx -= 1; - if (this.cursors.right.isDown || this.keys.right.isDown) dx += 1; - if (this.cursors.up.isDown || this.keys.up.isDown) dy -= 1; - if (this.cursors.down.isDown || this.keys.down.isDown) dy += 1; - if (this.attacking) dx = dy = 0; - const velocity = Systems.approachVelocity( - this.player.body.velocity.x, this.player.body.velocity.y, dx, dy, delta, - Boolean(controller.getState().equipment.boots) - ); - this.player.setVelocity(velocity.x, velocity.y); - if (dx || dy) { - this.facing = Math.abs(dx) > Math.abs(dy) ? (dx < 0 ? "west" : "east") : (dy < 0 ? "north" : "south"); - this.player.setFrame(playerFrame(this.facing)); - const bob = controller.reducedMotion() ? 1 : 1 + Math.sin(time / 90) * 0.018; - this.player.setScale(0.3, 0.3 * bob); - this.stepDistance += traveled; - if (this.stepDistance >= 48) { - controller.audio.play("step", 0.45); - this.stepDistance = 0; - } - } else { - this.player.setScale(0.3); - this.stepDistance = 0; - } - this.player.setDepth(this.player.y + 80); - this.updateNearest(); - this.updateEnemies(time); - this.handleKeys(time); - if ((dx || dy) && time - controller.lastSaveAt > 900) { - controller.lastSaveAt = time; - controller.persistPosition(false); - } - } - - updateNearest() { - let best = Infinity; - let nearest = null; - this.interactables.forEach((item) => { - const distance = Math.hypot(item.x - this.player.x, item.y - this.player.y); - if (item.marker) item.marker.setVisible(distance <= 92); - const radius = item.type === "exit" ? 70 : 54; - if (distance <= radius && distance < best) { - best = distance; - nearest = item; - } - }); - this.nearest = nearest; - controller.prompt(nearest ? promptFor(nearest) : ""); - } - - handleKeys(time) { - if (Phaser.Input.Keyboard.JustDown(this.keys.interact) || Phaser.Input.Keyboard.JustDown(this.keys.enter)) this.interact(); - if (Phaser.Input.Keyboard.JustDown(this.cursors.space)) this.attack(time); - if (Phaser.Input.Keyboard.JustDown(this.keys.item)) controller.useTonic(); - if (Phaser.Input.Keyboard.JustDown(this.keys.pause) || Phaser.Input.Keyboard.JustDown(this.keys.menu)) controller.openPanel("pause"); - if (Phaser.Input.Keyboard.JustDown(this.keys.inventory)) controller.openPanel("inventory"); - if (Phaser.Input.Keyboard.JustDown(this.keys.quests)) controller.openPanel("quests"); - if (Phaser.Input.Keyboard.JustDown(this.keys.fullscreen)) controller.toggleFullscreen(); - if (Phaser.Input.Keyboard.JustDown(this.keys.cycle)) controller.cycleItem(); - } - - interact() { - const item = this.nearest; - if (!item) return controller.status("There is nothing close enough to interact with."); - if (item.type === "exit") { - if (item.data.requirement && !controller.getState().unlockedRoutes.includes(item.data.requirement)) { - return controller.status(`The route is blocked. ${Systems.currentObjective(controller.getState())}`); - } - controller.travel(item.data.target, item.data.spawn); - } else if (item.type === "npc") this.interactNpc(item); - else if (item.type === "puzzle") this.activatePuzzle(item); - else if (item.type === "pickup") this.collect(item); - } - - interactNpc(item) { - const dx = item.x - this.player.x; - const dy = item.y - this.player.y; - this.facing = Math.abs(dx) > Math.abs(dy) ? (dx < 0 ? "west" : "east") : (dy < 0 ? "north" : "south"); - this.player.setFrame(playerFrame(this.facing)); - controller.openDialogue(item.id, () => this.resolveNpc(item.id)); - } - - resolveNpc(id) { - let state = controller.getState(); - if (id === "elder" && !state.flags.aftermath_complete) { - state = Systems.completeQuest(Systems.startQuest(state, "aftermath"), "aftermath"); - state = Systems.startQuest(state, "village_defence"); - controller.setState(state, "Wayfarer Sword acquired. The second raid has begun."); - this.refreshRequiredEnemies(); - } else if (id === "nia") { - state = Systems.startQuest(state, "healer_herbs"); - if (Systems.quantity(state, "silver_leaf") >= 2) { - state = Systems.completeQuest(state, "healer_herbs"); - controller.setState(state, "Nia brews two healing tonics."); - } else controller.setState(state, "Optional quest started: collect two Silver Leaves."); - } else if (id === "tovin") { - state = Systems.startQuest(state, "find_guide"); - controller.setState(state, "Wake the three standing stones from youngest tree to oldest."); - } else if (id === "bram" && this.regionId === "mountain") { - state = Systems.startQuest(state, "repair_bridge"); - controller.setState(state, "Restart the west and east bridge winches."); - } else if (id === "elowen" && this.regionId === "camp") { - state = Systems.startQuest(state, "free_scout"); - state = Systems.progressQuest(state, "free_scout", 1); - controller.setState(state, "Elowen is free. Defeat Captain Veyr for his emblem."); - } else if (id === "elowen" && this.regionId === "fortressInterior") { - state = Systems.startQuest(state, "free_prisoners"); - state = Systems.progressQuest(state, "free_prisoners", 1); - state = Systems.startQuest(state, "break_wards"); - controller.setState(state, "Elowen's captured ally is free. Disable the fortress wards."); - } else if (id === "prisoner") { - state = Systems.startQuest(state, "free_prisoners"); - state = Systems.progressQuest(state, "free_prisoners", 1); - state = Systems.startQuest(state, "break_wards"); - controller.setState(state, "A prisoner is free. Disable the fortress wards."); - } else if (id === "lima" && state.defeatedBosses.includes("malrec")) { - state.rescued = true; - state.story = "complete"; - controller.setState(State.normalize(state), "Princess Lima is safe."); - controller.openEnding(); - } - } - - activatePuzzle(item) { - const puzzle = item.puzzle; - const state = controller.getState(); - if (state.solvedPuzzles.includes(puzzle.id)) return; - if (puzzle.type === "set") { - if (!this.puzzleInput.includes(item.id)) this.puzzleInput.push(item.id); - if (item.marker) item.marker.setText(`✓ ${readableId(item.id)}`); - if (this.puzzleInput.length === puzzle.sequence.length) this.finishPuzzle(puzzle.id); - else controller.status(`${this.puzzleInput.length} / ${puzzle.sequence.length} mechanisms active.`); - return; - } - this.puzzleInput.push(item.id); - const valid = this.puzzleInput.every((value, index) => value === puzzle.sequence[index]); - if (!valid) { - this.puzzleInput = []; - controller.status("The sequence resets. Look for the environmental clue and try again."); - return; - } - if (item.marker) item.marker.setText(`✓ ${readableId(item.id)}`); - if (this.puzzleInput.length === puzzle.sequence.length) this.finishPuzzle(puzzle.id); - else controller.status(`${item.id} answers. ${this.puzzleInput.length} / ${puzzle.sequence.length}.`); - } - - finishPuzzle(id) { - let state = Systems.solvePuzzle(controller.getState(), id); - if (id === "sun_pedestals") { - state.solvedPuzzles.push(id); - state.flags.sun_veil_broken = true; - state = State.normalize(state); - } - controller.setState(state, "Puzzle complete. A sealed route opens."); - controller.audio.play("puzzle"); - if (id === "bridge_winches") controller.reloadRegion(); - } - - collect(item) { - let state = controller.getState(); - if (state.openedChests.includes(item.chestId)) return; - state.openedChests.push(item.chestId); - state = Systems.addItem(state, item.id, 1); - controller.setState(state, `${Data.ITEMS[item.id].name} collected.`); - controller.audio.play("pickup"); - item.sprite.destroy(); - if (item.marker) item.marker.destroy(); - this.interactables = this.interactables.filter((entry) => entry !== item); - } - - attack(time) { - if (time - this.lastAttack < Systems.ATTACK_TIMING.cooldown || controller.locked || this.attacking) return; - this.lastAttack = time; - this.attacking = true; - const token = ++this.attackToken; - const facing = this.facing; - this.attackHits = new Set(); - this.player.setVelocity(0); - controller.audio.play("attack"); - const direction = faceVector(facing); - const blade = this.add.rectangle(0, -22, 6, 42, 0xeaf6ff).setStrokeStyle(2, 0x5e6b78); - const guard = this.add.rectangle(0, 1, 20, 6, 0xf2c467).setStrokeStyle(1, 0x5b3d25); - const grip = this.add.rectangle(0, 11, 6, 19, 0x70432d); - const weapon = this.add.container( - this.player.x + direction.x * 19, - this.player.y + direction.y * 16, - [blade, guard, grip] - ).setDepth(690).setAngle(direction.angle + 5); - const windupAngle = facing === "west" || facing === "north" ? -12 : 12; - this.tweens.add({ - targets: this.player, angle: windupAngle, scaleX: 0.29, scaleY: 0.31, - duration: Systems.ATTACK_TIMING.windup, ease: "Stepped" - }); - this.tweens.add({ - targets: weapon, - angle: direction.angle + 90, - duration: Systems.ATTACK_TIMING.windup + Systems.ATTACK_TIMING.active, - ease: "Cubic.Out" - }); - this.time.delayedCall(Systems.ATTACK_TIMING.windup, () => { - if (!this.player.active || token !== this.attackToken) return; - this.player.setAngle(-windupAngle).setScale(0.32, 0.28); - this.performAttackHit(facing, token); - }); - this.time.delayedCall(Systems.ATTACK_TIMING.windup + Systems.ATTACK_TIMING.active, () => { - if (!this.player.active || token !== this.attackToken) return; - this.player.setAngle(windupAngle / 2).setScale(0.3); - }); - this.time.delayedCall( - Systems.ATTACK_TIMING.windup + Systems.ATTACK_TIMING.active + Systems.ATTACK_TIMING.recovery, - () => { - if (!this.player.active || token !== this.attackToken) return; - this.player.setAngle(0).setScale(0.3).setFrame(playerFrame(this.facing)); - if (weapon.active) weapon.destroy(); - this.attacking = false; - } - ); - } - - performAttackHit(facing, token) { - const box = Systems.attackHitbox(facing, this.player.x, this.player.y); - const direction = faceVector(facing); - const hitbox = this.add.rectangle(box.x + box.width / 2, box.y + box.height / 2, box.width, box.height, 0xff4df3, controller.debugCollision ? 0.28 : 0); - this.physics.add.existing(hitbox, true); - const slash = this.add.graphics().setDepth(700); - slash.lineStyle(9, 0xffefb0, 0.95).beginPath(); - slash.arc( - this.player.x + direction.x * 30, this.player.y + direction.y * 24, 50, - Phaser.Math.DegToRad(direction.angle - 58), Phaser.Math.DegToRad(direction.angle + 58), false - ).strokePath(); - slash.lineStyle(3, 0xd3f7ff, 0.9).strokePath(); - this.physics.overlap(hitbox, this.enemies, (_hit, enemyObject) => this.hitEnemy(enemyObject, direction, token)); - this.time.delayedCall(Systems.ATTACK_TIMING.active, () => { - if (hitbox.active) hitbox.destroy(); - if (slash.active) slash.destroy(); - }); - } - - hitEnemy(enemyObject, direction, token) { - if (!enemyObject.active || !enemyObject.visible) return; - const enemyId = enemyObject.getData("id"); - if (this.attackHits.has(enemyId) || token !== this.attackToken) return; - this.attackHits.add(enemyId); - if (enemyObject.getData("type") === "malrec" && enemyObject.getData("phase") >= 3 && !controller.getState().flags.sun_veil_broken) { - controller.status("Malrec's final veil holds. Activate both Sun Crystal pedestals."); - return; - } - const health = enemyObject.getData("health") - controller.getState().attack; - enemyObject.setData("health", health); - const pushDistance = controller.reducedMotion() ? 20 : enemyObject.getData("spec").boss ? 24 : 42; - const target = Systems.wallSafeKnockback(controller.getState(), this.regionId, enemyObject.x, enemyObject.y, direction.x, direction.y, pushDistance); - const push = Systems.normalizedVector(target.x - enemyObject.x, target.y - enemyObject.y, controller.reducedMotion() ? 90 : 190); - enemyObject.setData("stunnedUntil", this.time.now + 210); - enemyObject.setVelocity(push.x, push.y).setTintFill(0xffe1b0); - controller.audio.play("hit", enemyObject.getData("spec").boss ? 1 : 0.78); - const impact = this.add.star(enemyObject.x, enemyObject.y - 15, 6, 5, 15, 0xfff1a8, 0.95).setDepth(750); - this.time.delayedCall(70, () => { if (impact.active) impact.destroy(); }); - this.time.delayedCall(110, () => { - if (enemyObject.active) { - enemyObject.clearTint(); - enemyObject.setVelocity(0); - } - }); - const pause = enemyObject.getData("spec").boss ? 58 : 38; - this.physics.world.pause(); - this.time.delayedCall(pause, () => { if (this.physics.world) this.physics.world.resume(); }); - if (enemyObject.getData("spec").boss && !controller.reducedMotion() && controller.getState().settings.screenShake) { - this.cameras.main.shake(70, 0.0025); - } - if (health <= 0) this.defeatEnemy(enemyObject); - } - - defeatEnemy(enemyObject) { - const type = enemyObject.getData("type"); - const spawn = enemyObject.getData("spawn"); - const wasBoss = enemyObject.getData("spec").boss; - enemyObject.destroy(); - controller.audio.play("defeat"); - let state = controller.getState(); - if (spawn.quest === "village_defence") state = Systems.progressQuest(state, "village_defence", 1); - if (wasBoss) state = Systems.recordBoss(state, type); - controller.setState(state, wasBoss ? `${Data.ENEMIES[type].name} defeated. The route is open.` : `${Data.ENEMIES[type].name} defeated.`); - if (type === "malrec") { - controller.audio.play("victory"); - this.time.delayedCall(500, () => controller.travel("chamber", "door")); - } - } - - updateEnemies(time) { - this.enemies.getChildren().forEach((enemyObject) => { - if (!enemyObject.active || !enemyObject.body.enable) return; - if (time < (enemyObject.getData("stunnedUntil") || 0)) return; - const spec = enemyObject.getData("spec"); - const distance = Math.hypot(enemyObject.x - this.player.x, enemyObject.y - this.player.y); - const homeDistance = Math.hypot(enemyObject.x - enemyObject.getData("homeX"), enemyObject.y - enemyObject.getData("homeY")); - if (distance > 270 || homeDistance > enemyObject.getData("spawn").leash) { - this.physics.moveTo(enemyObject, enemyObject.getData("homeX"), enemyObject.getData("homeY"), spec.speed); - return; - } - if (spec.behaviour === "wander" && time > enemyObject.getData("nextAction")) { - const angle = Math.random() * Math.PI * 2; - enemyObject.setVelocity(Math.cos(angle) * spec.speed, Math.sin(angle) * spec.speed); - enemyObject.setData("nextAction", time + 650); - } else if (["charge", "slam", "final"].includes(spec.behaviour)) this.updateBoss(enemyObject, time, distance); - else this.physics.moveToObject(enemyObject, this.player, spec.speed); - enemyObject.setDepth(enemyObject.y + 60); - }); - } - - updateBoss(enemyObject, time, distance) { - const spec = enemyObject.getData("spec"); - const ratio = enemyObject.getData("health") / spec.health; - const phase = Systems.bossPhase(enemyObject.getData("health"), spec.health, spec.phases || 1); - enemyObject.setData("phase", phase); - controller.boss(spec.name, enemyObject.getData("health"), spec.health); - if (time < enemyObject.getData("nextAction")) return; - enemyObject.setVelocity(0).setTint(0xf5c96e); - const telegraph = controller.getState().settings.reducedMotion ? 780 : 560; - enemyObject.setData("nextAction", time + 1500); - this.time.delayedCall(telegraph, () => { - if (!enemyObject.active) return; - enemyObject.clearTint(); - if (spec.behaviour === "final" && phase >= 2) this.fireRadial(enemyObject, phase === 3 ? 8 : 5); - else if (distance < 340) this.physics.moveToObject(enemyObject, this.player, spec.speed * 2.1); - }); - } - - fireRadial(enemyObject, count) { - for (let index = 0; index < count; index += 1) { - const angle = Math.PI * 2 * index / count; - const shot = this.add.circle(enemyObject.x, enemyObject.y, 8, 0x6f3d89).setStrokeStyle(2, 0xf1b4ff).setDepth(400); - this.physics.add.existing(shot); - shot.body.setVelocity(Math.cos(angle) * 150, Math.sin(angle) * 150); - shot.setData("damage", 13); - this.projectiles.add(shot); - this.time.delayedCall(3600, () => { if (shot.active) shot.destroy(); }); - } - } - - hurtPlayer(amount, fromX, fromY) { - const result = Systems.damage(controller.getState(), amount, this.time.now, this.lastHit); - if (!result.hit) return; - this.lastHit = this.time.now; - controller.setState(result.state, `You take ${result.amount} damage.`); - controller.audio.play("damage"); - const push = Systems.normalizedVector(this.player.x - fromX, this.player.y - fromY, 210); - this.player.setVelocity(push.x, push.y).setTint(0xff8c8c); - this.time.delayedCall(170, () => { if (this.player.active) this.player.clearTint(); }); - if (!controller.reducedMotion() && controller.getState().settings.screenShake) this.cameras.main.shake(100, 0.003); - if (result.defeated) controller.gameOver(); - } - } - - return [BootScene, WorldScene]; - } - - function playerFrame(facing) { - return { south: 0, east: 1, north: 2, west: 3 }[facing] || 0; - } - - function faceVector(facing) { - return { - north: { x: 0, y: -1, angle: 270 }, south: { x: 0, y: 1, angle: 90 }, - west: { x: -1, y: 0, angle: 180 }, east: { x: 1, y: 0, angle: 0 } - }[facing]; - } - - function promptFor(item) { - if (item.type === "exit") return `${item.data.label} · E / Enter`; - if (item.type === "npc") return `Speak with ${Data.NPCS[item.id].name} · E / Enter`; - if (item.type === "puzzle") return `Activate ${item.id} · E / Enter`; - if (item.type === "pickup") return `Collect ${Data.ITEMS[item.id].name} · E / Enter`; - return "Interact · E / Enter"; - } - - function readableId(value) { - return String(value).replace(/_/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase()); - } - - root.PrincessLimaScenes = Object.freeze({ createSceneClasses, playerFrame }); -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-state.js b/assets/scripts/pages/princess-lima-state.js deleted file mode 100755 index 650b3c7..0000000 --- a/assets/scripts/pages/princess-lima-state.js +++ /dev/null @@ -1,204 +0,0 @@ -(function (root, factory) { - "use strict"; - const data = root.PrincessLimaData || (typeof require === "function" ? require("./princess-lima-data.js") : null); - const api = factory(data); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaState = api; -}(typeof globalThis !== "undefined" ? globalThis : this, function (Data) { - "use strict"; - - const VERSION = 1; - const STORAGE_KEY = "zxh_princess_lima_rpg_v1"; - const APPEARANCES = Object.freeze(["azure", "ember", "pine"]); - const FACES = Object.freeze(["north", "south", "east", "west"]); - const START = Object.freeze({ - region: "village", - spawn: "start", - x: Data.MAPS.village.spawns.start.x, - y: Data.MAPS.village.spawns.start.y, - facing: "north" - }); - - function validName(value) { - const name = String(value || "").trim().replace(/\s+/g, " "); - return name.length >= 1 && name.length <= 20 ? name : null; - } - - function finite(value, fallback, min, max) { - const number = Number(value); - return Number.isFinite(number) ? Math.min(max, Math.max(min, number)) : fallback; - } - - function unique(values, allowed) { - return Array.isArray(values) ? Array.from(new Set(values.filter((id) => allowed.includes(id)))) : []; - } - - function questDefaults() { - return Object.fromEntries(Data.QUEST_IDS.map((id) => [id, { status: "locked", count: 0, rewarded: false }])); - } - - function fresh(name, appearance) { - return { - version: VERSION, - player: { name: validName(name) || "", appearance: APPEARANCES.includes(appearance) ? appearance : "azure" }, - health: 100, - maxHealth: 100, - attack: 1, - defence: 0, - region: START.region, - position: { spawn: START.spawn, x: START.x, y: START.y, facing: START.facing }, - checkpoint: { region: START.region, spawn: START.spawn, x: START.x, y: START.y }, - chapter: 1, - story: "arrival", - quests: questDefaults(), - inventory: [{ id: "healing_tonic", quantity: 2 }], - equipment: { weapon: null, armour: null, boots: null, charm: null }, - flags: {}, - solvedPuzzles: [], - defeatedBosses: [], - openedChests: [], - unlockedRoutes: [], - rescued: false, - introSeen: false, - playTimeSeconds: 0, - settings: { - soundEnabled: false, - master: 0.8, - music: 0.45, - effects: 0.7, - voice: 0.85, - narrationEnabled: true, - subtitles: true, - reducedMotion: null, - screenShake: true, - highContrast: false, - textSpeed: "normal" - } - }; - } - - function normalizePosition(regionId, candidate, fallback) { - const region = Data.MAPS[regionId] || Data.MAPS.village; - const named = region.spawns[candidate && candidate.spawn] || region.spawns[fallback.spawn] || Object.values(region.spawns)[0]; - return { - spawn: String(candidate && candidate.spawn || fallback.spawn).slice(0, 32), - x: finite(candidate && candidate.x, named.x, 24, Data.WIDTH - 24), - y: finite(candidate && candidate.y, named.y, 24, Data.HEIGHT - 24), - facing: candidate && FACES.includes(candidate.facing) ? candidate.facing : fallback.facing || "south" - }; - } - - function normalizeInventory(value) { - const quantities = new Map(); - if (Array.isArray(value)) value.forEach((entry) => { - const item = entry && Data.ITEMS[entry.id]; - if (!item) return; - const cap = item.stack || 1; - quantities.set(entry.id, Math.min(cap, (quantities.get(entry.id) || 0) + Math.floor(finite(entry.quantity, 1, 1, cap)))); - }); - return Array.from(quantities, ([id, quantity]) => ({ id, quantity })); - } - - function normalizeQuests(value) { - const quests = questDefaults(); - Data.QUEST_IDS.forEach((id) => { - const source = value && value[id]; - if (!source) return; - quests[id] = { - status: ["locked", "active", "complete"].includes(source.status) ? source.status : "locked", - count: Math.floor(finite(source.count, 0, 0, 99)), - rewarded: source.rewarded === true - }; - }); - return quests; - } - - function normalize(candidate) { - if (!candidate || candidate.version !== VERSION) return null; - const name = validName(candidate.player && candidate.player.name); - const appearance = candidate.player && APPEARANCES.includes(candidate.player.appearance) ? candidate.player.appearance : null; - if (!name || !appearance) return null; - const region = Data.MAP_IDS.includes(candidate.region) ? candidate.region : START.region; - const position = normalizePosition(region, candidate.position, START); - const checkpointRegion = candidate.checkpoint && Data.MAP_IDS.includes(candidate.checkpoint.region) - ? candidate.checkpoint.region : START.region; - const checkpointPosition = normalizePosition(checkpointRegion, candidate.checkpoint, START); - const inventory = normalizeInventory(candidate.inventory); - const has = (id) => inventory.some((entry) => entry.id === id); - const equipment = { - weapon: has("tempered_sword") ? "tempered_sword" : has("village_sword") ? "village_sword" : null, - armour: has("buckler") ? "buckler" : null, - boots: has("trail_boots") ? "trail_boots" : null, - charm: has("forest_charm") ? "forest_charm" : null - }; - const attack = equipment.weapon ? Data.ITEMS[equipment.weapon].attack : 1; - const defence = equipment.armour ? Data.ITEMS[equipment.armour].defence : 0; - const maxHealth = finite(candidate.maxHealth, 100, 100, 160); - return { - version: VERSION, - player: { name, appearance }, - health: finite(candidate.health, maxHealth, 0, maxHealth), - maxHealth, - attack, - defence, - region, - position, - checkpoint: { region: checkpointRegion, spawn: checkpointPosition.spawn, x: checkpointPosition.x, y: checkpointPosition.y }, - chapter: Math.floor(finite(candidate.chapter, 1, 1, 4)), - story: String(candidate.story || "arrival").slice(0, 48), - quests: normalizeQuests(candidate.quests), - inventory, - equipment, - flags: candidate.flags && typeof candidate.flags === "object" && !Array.isArray(candidate.flags) - ? Object.fromEntries(Object.entries(candidate.flags).filter(([key, val]) => /^[a-z0-9_-]{1,48}$/.test(key) && typeof val === "boolean").slice(0, 96)) - : {}, - solvedPuzzles: unique(candidate.solvedPuzzles, ["forest_stones", "ruin_braziers", "bridge_winches", "shadow_wards", "sun_pedestals"]), - defeatedBosses: unique(candidate.defeatedBosses, ["briar_wolf", "stone_guardian", "captain", "malrec"]), - openedChests: Array.isArray(candidate.openedChests) ? Array.from(new Set(candidate.openedChests.filter((id) => typeof id === "string"))).slice(0, 64) : [], - unlockedRoutes: unique(candidate.unlockedRoutes, ["village_defended", "guide_found", "ruins_complete", "briar_defeated", "bridge_repaired", "guardian_defeated", "emblem_found", "wards_broken", "malrec_defeated"]), - rescued: candidate.rescued === true, - // Existing v1 saves predate the cinematic and must continue directly. - introSeen: candidate.introSeen !== false, - playTimeSeconds: Math.floor(finite(candidate.playTimeSeconds, 0, 0, 999999)), - settings: { - soundEnabled: candidate.settings && candidate.settings.soundEnabled === true, - master: finite(candidate.settings && candidate.settings.master, 0.8, 0, 1), - music: finite(candidate.settings && candidate.settings.music, 0.45, 0, 1), - effects: finite(candidate.settings && candidate.settings.effects, 0.7, 0, 1), - voice: finite(candidate.settings && candidate.settings.voice, 0.85, 0, 1), - narrationEnabled: !(candidate.settings && candidate.settings.narrationEnabled === false), - subtitles: !(candidate.settings && candidate.settings.subtitles === false), - reducedMotion: candidate.settings && typeof candidate.settings.reducedMotion === "boolean" ? candidate.settings.reducedMotion : null, - screenShake: !(candidate.settings && candidate.settings.screenShake === false), - highContrast: candidate.settings && candidate.settings.highContrast === true, - textSpeed: candidate.settings && ["slow", "normal", "fast", "instant"].includes(candidate.settings.textSpeed) ? candidate.settings.textSpeed : "normal" - } - }; - } - - function parse(raw) { - try { return raw ? normalize(JSON.parse(raw)) : null; } catch (_error) { return null; } - } - - function withPosition(state, region, spawn, x, y, facing) { - const next = normalize(state); - if (!next || !Data.MAPS[region]) return next; - next.region = region; - next.position = normalizePosition(region, { spawn, x, y, facing }, START); - return normalize(next); - } - - function withCheckpoint(state, region, spawn, x, y) { - const next = normalize(state); - if (!next || !Data.MAPS[region]) return next; - const point = normalizePosition(region, { spawn, x, y, facing: "south" }, START); - next.checkpoint = { region, spawn: point.spawn, x: point.x, y: point.y }; - return normalize(next); - } - - return Object.freeze({ - VERSION, STORAGE_KEY, APPEARANCES, FACES, START, - validName, fresh, normalize, parse, normalizeInventory, normalizeQuests, - normalizePosition, withPosition, withCheckpoint - }); -})); diff --git a/assets/scripts/pages/princess-lima-systems.js b/assets/scripts/pages/princess-lima-systems.js deleted file mode 100755 index 1ead398..0000000 --- a/assets/scripts/pages/princess-lima-systems.js +++ /dev/null @@ -1,251 +0,0 @@ -(function (root, factory) { - "use strict"; - const data = root.PrincessLimaData || (typeof require === "function" ? require("./princess-lima-data.js") : null); - const stateApi = root.PrincessLimaState || (typeof require === "function" ? require("./princess-lima-state.js") : null); - const api = factory(data, stateApi); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaSystems = api; -}(typeof globalThis !== "undefined" ? globalThis : this, function (Data, State) { - "use strict"; - - function copy(state) { - return State.normalize(JSON.parse(JSON.stringify(state))); - } - - function normalizedVector(x, y, speed) { - const length = Math.hypot(Number(x) || 0, Number(y) || 0); - return length ? { x: x / length * speed, y: y / length * speed } : { x: 0, y: 0 }; - } - - function approachVelocity(currentX, currentY, inputX, inputY, deltaMs, boots) { - const target = normalizedVector(inputX, inputY, 176); - const moving = Boolean(inputX || inputY); - const rate = moving ? (boots ? 1900 : 1500) : 2300; - const change = Math.min(50, Math.max(0, Number(deltaMs) || 0)) / 1000 * rate; - function approach(value, goal) { - return Math.abs(goal - value) <= change ? goal : value + Math.sign(goal - value) * change; - } - const velocity = { x: approach(currentX || 0, target.x), y: approach(currentY || 0, target.y) }; - const length = Math.hypot(velocity.x, velocity.y); - return length > 176 ? normalizedVector(velocity.x, velocity.y, 176) : velocity; - } - - function pointInShape(x, y, shape, padding) { - const pad = Number(padding) || 0; - if (shape.shape === "circle") return Math.hypot(x - shape.x, y - shape.y) <= shape.radius + pad; - return x >= shape.x - pad && x <= shape.x + shape.width + pad - && y >= shape.y - pad && y <= shape.y + shape.height + pad; - } - - function activeObstacles(state, regionId) { - const map = Data.MAPS[regionId]; - if (!map) return []; - const layers = Data.MAP_LAYERS[regionId] || []; - const collision = layers.find((layer) => layer.name === "Collision"); - const dynamic = layers.find((layer) => layer.name === "Dynamic Collision"); - return (collision ? collision.objects : map.obstacles).concat( - (dynamic ? dynamic.objects : map.dynamicObstacles || []) - .filter((item) => !state.unlockedRoutes.includes(item.opensWith)) - ); - } - - function isSafePosition(state, regionId, x, y) { - if (!Data.MAPS[regionId] || x < 30 || y < 30 || x > Data.WIDTH - 30 || y > Data.HEIGHT - 30) return false; - return !activeObstacles(state, regionId).some((shape) => pointInShape(x, y, shape, 14)); - } - - function nearestSafeSpawn(state, regionId, x, y) { - const map = Data.MAPS[regionId] || Data.MAPS.village; - if (isSafePosition(state, regionId, x, y)) return { region: regionId, spawn: "saved", x, y }; - const candidates = Object.entries(map.spawns).filter(([, point]) => isSafePosition(state, regionId, point.x, point.y)); - const best = candidates.sort((a, b) => - Math.hypot(a[1].x - x, a[1].y - y) - Math.hypot(b[1].x - x, b[1].y - y))[0]; - return best ? { region: regionId, spawn: best[0], x: best[1].x, y: best[1].y } - : { region: "village", spawn: "start", x: State.START.x, y: State.START.y }; - } - - function quantity(state, id) { - const found = state.inventory.find((entry) => entry.id === id); - return found ? found.quantity : 0; - } - - function addItem(state, id, amount) { - const next = copy(state); - const item = Data.ITEMS[id]; - if (!next || !item) return next; - const cap = item.stack || 1; - const existing = next.inventory.find((entry) => entry.id === id); - if (existing) existing.quantity = Math.min(cap, existing.quantity + Math.max(1, Math.floor(amount || 1))); - else next.inventory.push({ id, quantity: Math.min(cap, Math.max(1, Math.floor(amount || 1))) }); - return State.normalize(next); - } - - function removeItem(state, id, amount) { - const next = copy(state); - const item = Data.ITEMS[id]; - if (!next || !item || item.protected) return { state: next, removed: false }; - const existing = next.inventory.find((entry) => entry.id === id); - if (!existing || existing.quantity < amount) return { state: next, removed: false }; - existing.quantity -= amount; - next.inventory = next.inventory.filter((entry) => entry.quantity > 0); - return { state: State.normalize(next), removed: true }; - } - - function useItem(state, id) { - const item = Data.ITEMS[id]; - const next = copy(state); - if (!next || !item || item.type !== "consumable" || quantity(next, id) < 1 || next.health >= next.maxHealth) { - return { state: next, used: false, amount: 0 }; - } - const amount = Math.min(next.maxHealth - next.health, item.heal); - next.health += amount; - const removed = removeItem(next, id, 1); - return { state: removed.state, used: true, amount }; - } - - function startQuest(state, id) { - const next = copy(state); - if (!next || !Data.QUESTS[id]) return next; - if (next.quests[id].status === "locked") next.quests[id] = { status: "active", count: 0, rewarded: false }; - return State.normalize(next); - } - - function progressQuest(state, id, amount) { - let next = startQuest(state, id); - if (!next || next.quests[id].status === "complete") return next; - next.quests[id].count = Math.min(Data.QUESTS[id].target, next.quests[id].count + Math.max(1, amount || 1)); - return next.quests[id].count >= Data.QUESTS[id].target ? completeQuest(next, id) : State.normalize(next); - } - - function applyQuestConsequences(state, id) { - const routes = { - village_defence: "village_defended", find_guide: "guide_found", ruins_light: "ruins_complete", - wolf_miniboss: "briar_defeated", repair_bridge: "bridge_repaired", - stone_guardian: "guardian_defeated", free_scout: "emblem_found", - break_wards: "wards_broken", defeat_malrec: "malrec_defeated" - }; - if (routes[id] && !state.unlockedRoutes.includes(routes[id])) state.unlockedRoutes.push(routes[id]); - if (id === "aftermath") state.flags.aftermath_complete = true; - if (id === "find_guide") state.chapter = Math.max(state.chapter, 2); - if (id === "repair_bridge") state.chapter = Math.max(state.chapter, 3); - if (id === "free_scout") state.chapter = Math.max(state.chapter, 4); - if (id === "defeat_malrec") state.story = "rescue"; - return state; - } - - function completeQuest(state, id) { - let next = startQuest(state, id); - if (!next || next.quests[id].status === "complete") return next; - next.quests[id].status = "complete"; - if (!next.quests[id].rewarded) { - (Data.QUESTS[id].reward || []).forEach(([itemId, amount]) => { next = addItem(next, itemId, amount); }); - next.quests[id].rewarded = true; - } - next = applyQuestConsequences(next, id); - return State.normalize(next); - } - - function solvePuzzle(state, id) { - const next = copy(state); - if (!next || next.solvedPuzzles.includes(id)) return next; - next.solvedPuzzles.push(id); - if (id === "forest_stones") return completeQuest(next, "find_guide"); - if (id === "ruin_braziers") return completeQuest(next, "ruins_light"); - if (id === "bridge_winches") return completeQuest(next, "repair_bridge"); - if (id === "shadow_wards") return completeQuest(next, "break_wards"); - return State.normalize(next); - } - - function damage(state, amount, now, lastHitAt) { - const next = copy(state); - if (!next || Number(now) - Number(lastHitAt || 0) < 850) return { state: next, hit: false, defeated: false }; - const dealt = Math.max(1, Math.round(amount - next.defence)); - next.health = Math.max(0, next.health - dealt); - return { state: State.normalize(next), hit: true, defeated: next.health <= 0, amount: dealt }; - } - - function bossPhase(health, maximum, phases) { - const count = Math.max(1, Math.floor(Number(phases) || 1)); - const ratio = Math.max(0, Number(health) || 0) / Math.max(1, Number(maximum) || 1); - if (count === 1) return 1; - if (count === 2) return ratio > 0.5 ? 1 : 2; - return ratio > 0.66 ? 1 : ratio > 0.33 ? 2 : 3; - } - - const ATTACK_TIMING = Object.freeze({ windup: 85, active: 105, recovery: 135, cooldown: 360 }); - - function attackPhase(elapsed, timing) { - const value = Math.max(0, Number(elapsed) || 0); - const config = timing || ATTACK_TIMING; - if (value < config.windup) return "windup"; - if (value < config.windup + config.active) return "active"; - if (value < config.windup + config.active + config.recovery) return "recovery"; - return "complete"; - } - - function attackHitbox(facing, x, y) { - const boxes = { - north: { x: x - 25, y: y - 76, width: 50, height: 66, angle: 270 }, - south: { x: x - 25, y: y + 8, width: 50, height: 66, angle: 90 }, - west: { x: x - 76, y: y - 27, width: 66, height: 54, angle: 180 }, - east: { x: x + 10, y: y - 27, width: 66, height: 54, angle: 0 } - }; - return boxes[facing] || boxes.south; - } - - function wallSafeKnockback(state, regionId, x, y, directionX, directionY, distance) { - const push = normalizedVector(directionX, directionY, Math.max(0, Number(distance) || 0)); - const target = { x: x + push.x, y: y + push.y }; - if (isSafePosition(state, regionId, target.x, target.y)) return target; - for (let scale = 0.75; scale >= 0; scale -= 0.25) { - const candidate = { x: x + push.x * scale, y: y + push.y * scale }; - if (isSafePosition(state, regionId, candidate.x, candidate.y)) return candidate; - } - return { x, y }; - } - - function respawn(state) { - let next = copy(state); - if (!next) return next; - const safe = nearestSafeSpawn(next, next.checkpoint.region, next.checkpoint.x, next.checkpoint.y); - next.health = Math.max(50, Math.ceil(next.maxHealth * 0.65)); - next.region = safe.region; - next.position = { spawn: safe.spawn, x: safe.x, y: safe.y, facing: "south" }; - return State.normalize(next); - } - - function recordBoss(state, id) { - let next = copy(state); - if (!next || !["briar_wolf", "stone_guardian", "captain", "malrec"].includes(id)) return next; - if (!next.defeatedBosses.includes(id)) next.defeatedBosses.push(id); - if (id === "briar_wolf") next = completeQuest(next, "wolf_miniboss"); - if (id === "stone_guardian") next = completeQuest(next, "stone_guardian"); - if (id === "captain") next = progressQuest(next, "free_scout", 1); - if (id === "malrec") next = completeQuest(next, "defeat_malrec"); - return State.normalize(next); - } - - function currentObjective(state) { - if (state.rescued) return "Princess Lima is safe. The road home is open."; - const activeMain = Data.QUEST_IDS.find((id) => Data.QUESTS[id].main && state.quests[id].status === "active"); - if (activeMain) return Data.QUESTS[activeMain].description; - if (!state.flags.aftermath_complete) return "Speak with Elder Corin in the village square."; - if (!state.unlockedRoutes.includes("village_defended")) return "Defend the village from the second raid."; - if (!state.unlockedRoutes.includes("guide_found")) return "Find Guide Tovin in the Whispering Woods."; - if (!state.unlockedRoutes.includes("ruins_complete")) return "Explore the Sunken Ruins."; - if (!state.unlockedRoutes.includes("briar_defeated")) return "Defeat the Briar Wolf and open the mountain trail."; - if (!state.unlockedRoutes.includes("bridge_repaired")) return "Repair the bridge across the Mountain Pass."; - if (!state.unlockedRoutes.includes("guardian_defeated")) return "Defeat the Stone Guardian."; - if (!state.unlockedRoutes.includes("emblem_found")) return "Free Scout Elowen at Blackridge Camp."; - if (!state.unlockedRoutes.includes("wards_broken")) return "Break the three wards inside the fortress."; - if (!state.unlockedRoutes.includes("malrec_defeated")) return "Confront Lord Malrec in the throne room."; - return "Find Princess Lima beyond the throne room."; - } - - return Object.freeze({ - normalizedVector, approachVelocity, pointInShape, activeObstacles, isSafePosition, nearestSafeSpawn, - quantity, addItem, removeItem, useItem, startQuest, progressQuest, completeQuest, solvePuzzle, - damage, bossPhase, ATTACK_TIMING, attackPhase, attackHitbox, wallSafeKnockback, - respawn, recordBoss, currentObjective - }); -})); diff --git a/assets/scripts/pages/princess-lima-ui.js b/assets/scripts/pages/princess-lima-ui.js deleted file mode 100755 index 56394ad..0000000 --- a/assets/scripts/pages/princess-lima-ui.js +++ /dev/null @@ -1,193 +0,0 @@ -(function (root) { - "use strict"; - - const Data = root.PrincessLimaData; - const Systems = root.PrincessLimaSystems; - - function create(container, actions) { - const overlay = container.querySelector("[data-lima-overlay]"); - const panel = container.querySelector("[data-lima-panel]"); - const title = container.querySelector("[data-lima-panel-title]"); - const body = container.querySelector("[data-lima-panel-body]"); - const closeButton = container.querySelector("[data-lima-panel-close]"); - let returnFocus = null; - let dialogue = null; - let dialogueIndex = 0; - - function lock(value) { - actions.onLock(value); - overlay.hidden = !value; - container.classList.toggle("is-overlay-open", value); - } - - function show(kind, heading, html, closable) { - returnFocus = document.activeElement; - panel.dataset.kind = kind; - title.textContent = heading; - body.innerHTML = html; - closeButton.hidden = closable === false; - lock(true); - const target = body.querySelector("button, input, select") || closeButton; - target.focus(); - } - - function close() { - if (dialogue) return advanceDialogue(); - lock(false); - body.innerHTML = ""; - if (returnFocus && document.contains(returnFocus)) returnFocus.focus(); - else container.querySelector("[data-lima-game]").focus(); - } - - function openDialogue(id, done) { - const npc = Data.NPCS[id]; - if (!npc) return; - dialogue = { id, lines: npc.dialogue.slice(), done }; - dialogueIndex = 0; - renderDialogue(); - } - - function renderDialogue() { - const npc = Data.NPCS[dialogue.id]; - const line = dialogue.lines[dialogueIndex]; - show("dialogue", npc.name, ` -${escapeHtml(line)}
-${escapeHtml(item.description)}
${escapeHtml(quest.description)} · ${escapeHtml(quest.region)}
-${escapeHtml(Systems.currentObjective(state))}
${escapeHtml(Systems.currentObjective(state))}
- - `); - body.querySelectorAll("[data-panel]").forEach((button) => button.addEventListener("click", () => openPanel(button.dataset.panel, actions.getState()))); - body.querySelector("[data-lima-replay-intro-panel]").addEventListener("click", actions.onReplayIntro); - body.querySelector("[data-lima-fullscreen-panel]").addEventListener("click", actions.onFullscreen); - body.querySelector("[data-lima-reset-request]").addEventListener("click", confirmReset); - } - } - - function confirmReset() { - show("confirm", "Delete this adventure?", ` -This permanently removes the Princess Lima save on this device.
- - `, false); - body.querySelector("[data-confirm-reset]").addEventListener("click", actions.onReset, { once: true }); - body.querySelector("[data-cancel-reset]").addEventListener("click", () => openPanel("pause", actions.getState()), { once: true }); - } - - function gameOver(state) { - show("defeat", "The road is not finished", ` -You awaken at the latest safe checkpoint with your quests and important items intact.
- - `, false); - body.querySelector("[data-respawn]").addEventListener("click", actions.onRespawn, { once: true }); - } - - function ending(state) { - show("ending", "Princess Lima Rescued", ` -At dawn, the roads reopen. The villages ring their bells, the forest paths quiet, and the mountain fires become beacons instead of warnings.
-${escapeHtml(state.player.name)} is offered a place at the royal table—and chooses first to walk the repaired road home with Lima.
-The kingdom remains explorable from your final save.
- - Exit to Website - `, false); - body.querySelector("[data-ending-continue]").addEventListener("click", close, { once: true }); - } - - closeButton.addEventListener("click", close); - overlay.addEventListener("click", (event) => { if (event.target === overlay && !dialogue) close(); }); - document.addEventListener("keydown", (event) => { - if (event.key === "Escape" && !overlay.hidden && !dialogue) { - event.preventDefault(); - close(); - } - if ((event.key === "Enter" || event.key === " ") && dialogue && !overlay.hidden) { - event.preventDefault(); - advanceDialogue(); - } - if (!overlay.hidden && !dialogue && ["ArrowDown", "ArrowUp"].includes(event.key)) { - const controls = Array.from(panel.querySelectorAll("button:not([hidden]), a[href], input, select")) - .filter((control) => !control.disabled && control.offsetParent !== null); - if (!controls.length) return; - event.preventDefault(); - const current = controls.indexOf(document.activeElement); - const change = event.key === "ArrowDown" ? 1 : -1; - controls[(current + change + controls.length) % controls.length].focus(); - } - }); - - return Object.freeze({ show, close, openDialogue, openPanel, gameOver, ending, confirmReset }); - } - - function escapeHtml(value) { - return String(value).replace(/[&<>"']/g, (character) => ({ - "&": "&", "<": "<", ">": ">", '"': """, "'": "'" - }[character])); - } - - root.PrincessLimaUI = Object.freeze({ create }); -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-v2-data.js b/assets/scripts/pages/princess-lima-v2-data.js deleted file mode 100755 index a06bc34..0000000 --- a/assets/scripts/pages/princess-lima-v2-data.js +++ /dev/null @@ -1,234 +0,0 @@ -(function (root, factory) { - "use strict"; - const api = factory(); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaV2Data = api; -}(typeof globalThis !== "undefined" ? globalThis : this, function () { - "use strict"; - - const SCHEMA_VERSION = 2; - const WIDTH = 960; - const HEIGHT = 540; - const TILE = 32; - const MAP_IDS = Object.freeze([ - "village", "forest", "ruins", "mountain", "camp", - "fortressExterior", "fortressInterior", "bossArena", "chamber" - ]); - const MAP_NAMES = Object.freeze({ - village: "Broken Village", forest: "Whispering Woods", ruins: "Ancient Ruins", - mountain: "Frostpeak Mountain", camp: "Resistance Camp", - fortressExterior: "Fortress Exterior", fortressInterior: "Fortress Interior", - bossArena: "Throne of Night", chamber: "Lima's Chamber" - }); - const MAP_URLS = Object.freeze(Object.fromEntries(MAP_IDS.map((id) => [ - id, `/assets/maps/princess-lima/${id}.json` - ]))); - - const ASSETS = Object.freeze({ - schemaVersion: SCHEMA_VERSION, - shared: Object.freeze([ - { type: "image", key: "world-tiles", url: "/assets/images/play/princess-lima/world-tiles-v2.png", required: true }, - { type: "spritesheet", key: "actors-v2", url: "/assets/images/play/princess-lima/actor-atlas-v2.png", frameWidth: 48, frameHeight: 64, required: true }, - { type: "spritesheet", key: "effects-v2", url: "/assets/images/play/princess-lima/effects-atlas-v2.png", frameWidth: 32, frameHeight: 32, required: false }, - { type: "image", key: "lima-title", url: "/assets/images/play/princess-lima/title-landscape.png", required: true } - ]), - portraits: "/assets/images/play/princess-lima/portrait-atlas-v2.png", - maps: MAP_URLS - }); - - const ACTORS = Object.freeze({ - player: { row: 0, name: "Traveller" }, lima: { row: 1, name: "Princess Lima" }, - elder: { row: 2, name: "Elder Corin" }, bram: { row: 3, name: "Blacksmith Bram" }, - nia: { row: 4, name: "Healer Nia" }, tovin: { row: 5, name: "Guide Tovin" }, - malrec: { row: 6, name: "Lord Malrec" }, slime: { row: 7, name: "Marsh Slime" }, - wolf: { row: 8, name: "Grey Wolf" }, raider: { row: 9, name: "Blackroad Raider" }, - flying: { row: 10, name: "Cave Bat" }, shield: { row: 11, name: "Shadow Guard" }, - stone_guardian: { row: 12, name: "Stone Guardian" }, archer: { row: 13, name: "Shadow Archer" }, - elowen: { row: 14, name: "Commander Elowen" }, prisoner: { row: 15, name: "Resistance Prisoner" }, - ambusher: { row: 8, name: "Briar Stalker" }, caster: { row: 6, name: "Night Caster" }, - support: { row: 4, name: "Shadow Mender" }, elite: { row: 11, name: "Blackguard Elite" }, - captain: { row: 11, name: "Captain Veyr" }, briar_wolf: { row: 8, name: "Briar Wolf" } - }); - - const ENEMIES = Object.freeze({ - raider: { role: "melee", health: 5, damage: 9, speed: 86, awareness: 210, attackRange: 42, cooldown: 900, telegraph: 230 }, - shield: { role: "shield", health: 9, damage: 11, speed: 58, awareness: 190, attackRange: 42, cooldown: 1250, telegraph: 360 }, - archer: { role: "ranged", health: 5, damage: 10, speed: 64, awareness: 310, attackRange: 230, cooldown: 1550, telegraph: 450 }, - wolf: { role: "fast", health: 4, damage: 8, speed: 122, awareness: 250, attackRange: 38, cooldown: 760, telegraph: 180 }, - ambusher: { role: "ambush", health: 5, damage: 12, speed: 104, awareness: 135, attackRange: 38, cooldown: 1100, telegraph: 280 }, - caster: { role: "caster", health: 6, damage: 11, speed: 50, awareness: 280, attackRange: 185, cooldown: 1800, telegraph: 600 }, - flying: { role: "flying", health: 3, damage: 7, speed: 112, awareness: 240, attackRange: 34, cooldown: 800, telegraph: 160 }, - support: { role: "support", health: 5, damage: 5, speed: 58, awareness: 240, attackRange: 150, cooldown: 1900, telegraph: 420 }, - elite: { role: "elite", health: 15, damage: 15, speed: 72, awareness: 260, attackRange: 48, cooldown: 1100, telegraph: 300 }, - briar_wolf: { role: "boss", boss: true, phases: 2, health: 30, damage: 14, speed: 118, awareness: 430, attackRange: 56, cooldown: 950, telegraph: 380 }, - stone_guardian: { role: "boss", boss: true, phases: 3, health: 42, damage: 17, speed: 54, awareness: 430, attackRange: 74, cooldown: 1350, telegraph: 620 }, - captain: { role: "boss", boss: true, phases: 2, health: 36, damage: 15, speed: 78, awareness: 430, attackRange: 54, cooldown: 1050, telegraph: 360 }, - malrec: { role: "boss", boss: true, phases: 3, health: 52, damage: 13, speed: 60, awareness: 520, attackRange: 190, cooldown: 1600, telegraph: 760 } - }); - - const ITEMS = Object.freeze({ - village_sword: { name: "Wayfarer Sword", type: "weapon", attack: 2, unique: true }, - tempered_sword: { name: "Sun-tempered Sword", type: "weapon", attack: 4, unique: true }, - buckler: { name: "Oak Buckler", type: "armour", defence: 2, unique: true }, - reinforced_buckler: { name: "Resistance Buckler", type: "armour", defence: 4, unique: true }, - trail_boots: { name: "Trail Boots", type: "equipment", unique: true }, - forest_charm: { name: "Forest Charm", type: "charm", unique: true }, - sun_crystal: { name: "Sun Crystal", type: "quest", unique: true }, - fortress_emblem: { name: "Fortress Emblem", type: "quest", unique: true }, - prison_key: { name: "Prison Key", type: "quest", unique: true }, - smoke_bomb: { name: "Smoke Bomb", type: "consumable", stack: 5 }, - healing_tonic: { name: "Healing Tonic", type: "consumable", heal: 40, stack: 9 }, - royal_draught: { name: "Royal Draught", type: "consumable", heal: 999, stack: 3 }, - silver_leaf: { name: "Silver Leaf", type: "collectable", stack: 12 }, - moon_coin: { name: "Moon Coin", type: "currency", stack: 99 } - }); - - const QUESTS = Object.freeze({ - aftermath: { title: "After the Black Riders", chapter: 1, region: "village", main: true, target: 1, reward: [["village_sword", 1]] }, - village_defence: { title: "The Second Raid", chapter: 1, region: "village", main: true, target: 3, reward: [["buckler", 1], ["healing_tonic", 2]] }, - healer_herbs: { title: "Silver for the Wounded", chapter: 1, region: "village", main: false, target: 2, reward: [["healing_tonic", 2]] }, - find_guide: { title: "The Missing Guide", chapter: 2, region: "forest", main: true, target: 2, reward: [["trail_boots", 1], ["forest_charm", 1]] }, - ruins_light: { title: "Light Beneath the Roots", chapter: 2, region: "ruins", main: true, target: 4, reward: [["sun_crystal", 1]] }, - wolf_miniboss: { title: "The Briar Wolf", chapter: 2, region: "forest", main: true, target: 1, reward: [] }, - repair_bridge: { title: "A Road Across the Sky", chapter: 3, region: "mountain", main: true, target: 2, reward: [["tempered_sword", 1]] }, - stone_guardian: { title: "Guardian of Frostpeak", chapter: 3, region: "mountain", main: true, target: 1, reward: [["royal_draught", 1]] }, - rally_resistance: { title: "A Camp Rekindled", chapter: 3, region: "camp", main: true, target: 2, reward: [["fortress_emblem", 1], ["reinforced_buckler", 1]] }, - disable_defences: { title: "Blind the Fortress", chapter: 4, region: "fortressExterior", main: false, target: 2, reward: [["smoke_bomb", 2]] }, - free_prisoners: { title: "No One Left in Shadow", chapter: 4, region: "fortressInterior", main: true, target: 2, reward: [["prison_key", 1]] }, - break_wards: { title: "The Three Shadow Wards", chapter: 4, region: "fortressInterior", main: true, target: 3, reward: [] }, - defeat_malrec: { title: "The Last Shadow", chapter: 4, region: "bossArena", main: true, target: 1, reward: [] } - }); - - const PORTRAITS = Object.freeze({ - lima: { determined: 0, relieved: 1 }, malrec: { enraged: 2, cold: 3 }, - elder: { worried: 4, thoughtful: 5 }, bram: { neutral: 6, determined: 7 }, - nia: { gentle: 8, worried: 9 }, tovin: { alert: 10, surprised: 11 }, - elowen: { neutral: 12, determined: 13 }, player: { neutral: 14, injured: 15 }, - prisoner: { worried: 4, relieved: 1 } - }); - - const DIALOGUES = Object.freeze({ - elder: { - id: "elder", start: "arrival", essential: true, - nodes: { - arrival: { speaker: "elder", expression: "worried", text: "The black riders took Princess Lima north. She stood between Malrec and every soul in this square.", camera: "two-shot", next: "choice" }, - choice: { speaker: "elder", expression: "thoughtful", text: "We need more than a sword. Will you help us stand before you follow?", choices: [ - { text: "No one is left behind.", next: "accept", effects: [{ type: "startQuest", id: "aftermath" }, { type: "flag", id: "promised_village", value: true }] }, - { text: "Tell me where Malrec went.", next: "direct", effects: [{ type: "startQuest", id: "aftermath" }] } - ] }, - accept: { speaker: "player", expression: "neutral", text: "I will help the village—and then I will bring Lima home.", next: "end" }, - direct: { speaker: "elder", expression: "worried", text: "Through the Whispering Woods, over Frostpeak, into the Fortress of Shadows. But Bram's blade must go with you.", next: "end" }, - end: { speaker: "elder", expression: "thoughtful", text: "Then hope has arrived before dawn after all.", effects: [{ type: "completeQuest", id: "aftermath" }] } - } - }, - bram: { - id: "bram", start: "start", essential: false, - nodes: { - start: { speaker: "bram", expression: "neutral", text: "This blade was forged for a royal guard. Today it chooses the road, not the rank.", next: "end" }, - end: { speaker: "bram", expression: "determined", text: "Bring it to Frostpeak's old forge and I will teach sunlight to live in steel." } - } - }, - nia: { - id: "nia", start: "start", essential: false, - nodes: { - start: { speaker: "nia", expression: "gentle", text: "Silver Leaf grows where moonlight reaches the forest floor. Two sprigs would save a fevered child.", choices: [ - { text: "I will look for it.", next: "thanks", effects: [{ type: "startQuest", id: "healer_herbs" }] }, - { text: "I cannot promise, but I will remember.", next: "thanks" } - ] }, - thanks: { speaker: "nia", expression: "worried", text: "Courage is easier when it remembers tenderness." } - } - }, - tovin: { - id: "tovin", start: "start", essential: true, - nodes: { - start: { speaker: "tovin", expression: "surprised", text: "You found me. The woods hid the true path after Malrec poisoned the old stones.", next: "clue" }, - clue: { speaker: "tovin", expression: "alert", text: "Wake dawn, noon, dusk, then night beneath the ruins. The forest will open when its memory is whole.", effects: [{ type: "startQuest", id: "find_guide" }] } - } - }, - elowen: { - id: "elowen", start: "start", essential: true, - nodes: { - start: { speaker: "elowen", expression: "determined", text: "We can hit the gate, slip through the drain, or blind the detection wards first.", choices: [ - { text: "Direct assault.", next: "route", effects: [{ type: "flag", id: "route_assault", value: true }] }, - { text: "Use the hidden drain.", next: "route", effects: [{ type: "flag", id: "route_infiltration", value: true }] }, - { text: "Disable every defence.", next: "route", effects: [{ type: "startQuest", id: "disable_defences" }, { type: "flag", id: "route_sabotage", value: true }] } - ] }, - route: { speaker: "elowen", expression: "neutral", text: "Then that is our road. Lima held the kingdom together alone long enough." } - } - }, - prisoner: { - id: "prisoner", start: "start", essential: false, - nodes: { - start: { speaker: "prisoner", expression: "worried", text: "The three wards feed the throne. Break moon, crown, and flame before Malrec can draw on them.", next: "end" }, - end: { speaker: "prisoner", expression: "relieved", text: "Open the cells and we will make sure no guard reaches your back.", effects: [{ type: "startQuest", id: "free_prisoners" }, { type: "startQuest", id: "break_wards" }] } - } - }, - malrec: { - id: "malrec", start: "start", essential: true, - nodes: { - start: { speaker: "malrec", expression: "cold", text: "Lima's oath could end a century of quarrels. You call it freedom when every lord may choose another war.", next: "reply" }, - reply: { speaker: "player", expression: "neutral", text: "Peace forced by shadow is only silence.", next: "end" }, - end: { speaker: "malrec", expression: "enraged", text: "Then listen closely as hope learns to break.", effects: [{ type: "startQuest", id: "defeat_malrec" }, { type: "flag", id: "boss_started", value: true }] } - } - }, - lima: { - id: "lima", start: "start", essential: true, - nodes: { - start: { speaker: "lima", expression: "determined", text: "You crossed a wounded kingdom for someone you had never met.", choices: [ - { text: "Every person I helped led me here.", next: "hope", effects: [{ type: "flag", id: "ending_community", value: true }] }, - { text: "No throne belongs to shadow.", next: "hope", effects: [{ type: "flag", id: "ending_defiance", value: true }] } - ] }, - hope: { speaker: "lima", expression: "relieved", text: "Then let us go home—not as legend and princess, but as two people who chose to help.", effects: [{ type: "flag", id: "rescued", value: true }] } - } - } - }); - - const CUTSCENES = Object.freeze({ - intro: [ - { command: "fade", direction: "in", duration: 800 }, - { command: "caption", text: "Before shadow crossed the northern road, Princess Lima listened before she ruled." }, - { command: "music", key: "village-theme" }, - { command: "caption", text: "Lord Malrec came for the royal oath. Lima refused him, and the kingdom paid for her courage." }, - { command: "shake", duration: 180, intensity: 0.003 }, - { command: "caption", text: "At dawn, one traveller reached the broken village." }, - { command: "title", text: "RESCUE PRINCESS LIMA" }, - { command: "transition", scene: "LimaWorld", region: "village" } - ], - malrecEntrance: [ - { command: "lock", reason: "cutscene" }, { command: "camera", target: "malrec", zoom: 1.18, duration: 700 }, - { command: "lighting", preset: "shadow" }, { command: "dialogue", id: "malrec" }, - { command: "cameraRestore", duration: 500 }, { command: "unlock", reason: "cutscene" } - ] - }); - - function validateDialogue(dialogue) { - if (!dialogue || !dialogue.id || !dialogue.start || !dialogue.nodes || !dialogue.nodes[dialogue.start]) return false; - return Object.values(dialogue.nodes).every((node) => { - if (!node.speaker || typeof node.text !== "string") return false; - if (node.next && !dialogue.nodes[node.next]) return false; - return !node.choices || node.choices.every((choice) => choice.text && dialogue.nodes[choice.next]); - }); - } - - function validateAssetManifest(manifest) { - return Boolean(manifest && manifest.schemaVersion === SCHEMA_VERSION && - Array.isArray(manifest.shared) && manifest.shared.every((item) => item.key && item.url && item.type)); - } - - function validateAll() { - const errors = []; - if (!validateAssetManifest(ASSETS)) errors.push("asset-manifest"); - Object.entries(DIALOGUES).forEach(([id, dialogue]) => { if (!validateDialogue(dialogue)) errors.push(`dialogue:${id}`); }); - Object.entries(ENEMIES).forEach(([id, enemy]) => { - if (!ACTORS[id] || enemy.health <= 0 || enemy.speed <= 0) errors.push(`enemy:${id}`); - }); - MAP_IDS.forEach((id) => { if (!MAP_URLS[id] || !MAP_NAMES[id]) errors.push(`map:${id}`); }); - return errors; - } - - return Object.freeze({ - SCHEMA_VERSION, WIDTH, HEIGHT, TILE, MAP_IDS, MAP_NAMES, MAP_URLS, ASSETS, - ACTORS, ENEMIES, ITEMS, QUESTS, PORTRAITS, DIALOGUES, CUTSCENES, - validateDialogue, validateAssetManifest, validateAll - }); -})); diff --git a/assets/scripts/pages/princess-lima-v2-game.js b/assets/scripts/pages/princess-lima-v2-game.js deleted file mode 100755 index 30e16f9..0000000 --- a/assets/scripts/pages/princess-lima-v2-game.js +++ /dev/null @@ -1,278 +0,0 @@ -(function () { - "use strict"; - const Data = window.PrincessLimaV2Data; - const State = window.PrincessLimaV2State; - const Scenes = window.PrincessLimaV2Scenes; - const UI = window.PrincessLimaV2UI; - const Audio = window.PrincessLimaAudio; - - const controller = { - root: null, game: null, scene: null, state: null, audio: null, ui: null, - inputLock: null, uiTokens: new Map(), lastSaveAt: 0, - systemReducedMotion: window.matchMedia("(prefers-reduced-motion: reduce)").matches, - reducedMotion() { - return this.state && typeof this.state.settings.reducedMotion === "boolean" - ? this.state.settings.reducedMotion : this.systemReducedMotion; - } - }; - document.addEventListener("DOMContentLoaded", init, { once: true }); - - function init() { - const root = document.querySelector("[data-princess-lima-rpg]"); - if (!root || !Data || !State || !Scenes || !UI || !Audio || !window.Phaser || !window.PrincessLimaV2Maps) return; - controller.root = root; - const loaded = State.load(localStorage); - controller.state = loaded.state; - controller.audio = Audio.create(() => controller.state); - controller.inputLock = window.PrincessLimaV2Systems.createInputLock((locked) => root.classList.toggle("is-input-locked", locked)); - controller.ui = UI.create(root, { - getState: () => controller.state, - setState, - applyEffects: (effects) => setState(State.applyEffects(controller.state, effects)), - recordDialogue, - lock, - beginDialogue: (_id, target) => controller.scene && controller.scene.beginDialogue(target), - frameDialogue: (node) => controller.scene && controller.scene.frameDialogue(node), - endDialogue: () => controller.scene && controller.scene.endDialogue(), - focusGame, - useTonic, - setting: updateSetting, - replayIntro, - respawn, - returnToMenu - }); - bindPage(); - startEngine(); - if (loaded.migrated) queueMicrotask(() => status("Legacy progress imported safely. Your original v1 save remains untouched.")); - window.addEventListener("error", (event) => status(`The game recovered from a problem: ${event.message}`)); - document.addEventListener("visibilitychange", () => { - if (document.hidden) { - controller.inputLock.acquire("hidden-tab"); - controller.audio.suspend(); - } else { - controller.inputLock.releaseReason("hidden-tab"); - controller.audio.resume(); - } - }); - window.PrincessLimaV2Controller = controller; - } - function startEngine() { - try { - controller.game = new Phaser.Game({ - type: Phaser.AUTO, - width: Data.WIDTH, - height: Data.HEIGHT, - parent: "princess-lima-game", - pixelArt: true, - roundPixels: true, - backgroundColor: "#080a12", - physics: { default: "arcade", arcade: { gravity: { x: 0, y: 0 }, debug: location.search.includes("collisionDebug=1") } }, - scale: { mode: Phaser.Scale.FIT, autoCenter: Phaser.Scale.CENTER_BOTH, width: Data.WIDTH, height: Data.HEIGHT }, - render: { antialias: false, pixelArt: true, powerPreference: "high-performance" }, - scene: Scenes.createSceneClasses(controller) - }); - } catch (error) { fatal(error.message); } - } - function bindPage() { - const root = controller.root; - root.querySelector("[data-lima-new]").addEventListener("click", openSetup); - root.querySelector("[data-lima-continue]").addEventListener("click", () => { - if (!controller.state) return; - controller.audio.unlock(); - controller.state.introSeen ? beginAdventure() : startIntro(false); - }); - root.querySelector("[data-lima-replay-intro]").addEventListener("click", replayIntro); - root.querySelector("[data-lima-menu-settings]").addEventListener("click", () => controller.state ? controller.ui.openPanel("settings") : status("Create a traveller first; all accessibility settings remain available during play.")); - root.querySelector("[data-lima-credits]").addEventListener("click", () => controller.ui.openPanel("credits")); - root.querySelector("[data-lima-setup-form]").addEventListener("submit", submitSetup); - root.querySelector("[data-lima-setup-cancel]").addEventListener("click", closeSetup); - root.querySelector("[data-lima-pause]").addEventListener("click", () => controller.ui.openPanel("pause")); - root.querySelector("[data-lima-inventory]").addEventListener("click", () => controller.ui.openPanel("inventory")); - root.querySelector("[data-lima-quests]").addEventListener("click", () => controller.ui.openPanel("quests")); - root.querySelector("[data-lima-sound]").addEventListener("click", toggleSound); - root.querySelector("[data-lima-fullscreen]").addEventListener("click", toggleFullscreen); - document.addEventListener("fullscreenchange", updateFullscreenButton); - } - function ready() { - controller.root.dataset.ready = "true"; - controller.root.querySelector("[data-lima-loading]").hidden = true; - const button = controller.root.querySelector("[data-lima-continue]"); - button.disabled = !controller.state; - button.textContent = controller.state ? `Continue · Chapter ${controller.state.chapter}` : "Continue"; - } - function showMenu() { - controller.inputLock.clear(); - controller.root.querySelector("[data-lima-menu]").hidden = false; - controller.root.querySelector("[data-lima-hud]").hidden = true; - controller.root.querySelector("[data-lima-status-stack]").hidden = true; - requestAnimationFrame(() => controller.root.querySelector("[data-lima-menu] button").focus()); - } - function hideMenu() { - controller.root.querySelector("[data-lima-menu]").hidden = true; - } - function openSetup() { - hideMenu(); - controller.root.querySelector("[data-lima-setup]").hidden = false; - controller.root.querySelector("[data-lima-setup] input").focus(); - } - function closeSetup() { - controller.root.querySelector("[data-lima-setup]").hidden = true; - showMenu(); - } - function submitSetup(event) { - event.preventDefault(); - const form = event.currentTarget; - const name = State.validName(form.elements.name.value); - const appearance = form.elements.appearance.value; - if (!name || !State.APPEARANCES.includes(appearance)) { - controller.root.querySelector("[data-lima-setup-error]").textContent = "Enter a name from 1 to 20 characters and choose a cloak."; - return; - } - controller.state = State.fresh(name, appearance); - controller.audio.unlock(); - save(); - controller.root.querySelector("[data-lima-setup]").hidden = true; - startIntro(false); - } - function startIntro(replay) { - hideMenu(); - controller.root.querySelector("[data-lima-hud]").hidden = true; - controller.game.scene.start("LimaIntro", { replay }); - } - function replayIntro() { - controller.ui.close(); - startIntro(true); - } - function beginAdventure(sourceScene) { - hideMenu(); - controller.audio.unlock(); - const region = controller.state.region || "village"; - if (sourceScene && sourceScene.scene) sourceScene.scene.start("LimaWorld", { region }); - else controller.game.scene.start("LimaWorld", { region }); - focusGame(); - } - function showHud() { - controller.root.querySelector("[data-lima-hud]").hidden = false; - controller.root.querySelector("[data-lima-status-stack]").hidden = false; - } - function updateHud() { - if (!controller.state) return; - const state = controller.state; - controller.root.querySelector("[data-lima-player]").textContent = state.player.name; - controller.root.querySelector("[data-lima-chapter]").textContent = `Chapter ${state.chapter}`; - controller.root.querySelector("[data-lima-health]").textContent = `${Math.ceil(state.health)} / ${state.maxHealth}`; - controller.root.querySelector(".lima-hud__healthbar i").style.width = `${state.health / state.maxHealth * 100}%`; - controller.root.querySelector("[data-lima-weapon]").textContent = state.equipment.weapon ? Data.ITEMS[state.equipment.weapon].name : "Unarmed"; - controller.root.querySelector("[data-lima-armour]").textContent = state.equipment.armour ? Data.ITEMS[state.equipment.armour].name : "None"; - controller.root.querySelector("[data-lima-selected-item]").textContent = `Healing Tonic ×${State.quantity(state, "healing_tonic")}`; - controller.root.querySelector("[data-lima-currency]").textContent = State.quantity(state, "moon_coin"); - controller.root.querySelector("[data-lima-region]").textContent = Data.MAP_NAMES[state.region]; - controller.root.querySelector("[data-lima-objective]").textContent = window.PrincessLimaV2Systems.currentObjective(state); - controller.root.classList.toggle("is-high-contrast", state.settings.highContrast); - } - function setState(next, message) { - const normalized = State.normalize(next); - if (!normalized) return; - controller.state = normalized; - save(); - updateHud(); - if (message) status(message); - } - function recordDialogue(id) { - if (!controller.state.dialogueHistory.includes(id)) controller.state.dialogueHistory.push(id); - save(); - } - function save() { - if (!controller.state) return; - try { - localStorage.setItem(State.STORAGE_KEY, JSON.stringify(State.normalize(controller.state))); - controller.lastSaveAt = Date.now(); - controller.root.dataset.saved = "true"; - setTimeout(() => { if (controller.root) controller.root.dataset.saved = "false"; }, 900); - } catch (_error) { status("Saving is unavailable in this browser session."); } - } - function travel(region, spawn) { - const safe = State.safeSpawn(region, spawn); - controller.state.region = region; - controller.state.position = Object.assign({}, safe, { facing: "south" }); - controller.state.checkpoint = safe; - save(); - controller.audio.play("door"); - controller.game.scene.start("LimaWorld", { region }); - } - function respawn() { - const checkpoint = controller.state.checkpoint; - controller.state.region = checkpoint.region; - controller.state.position = Object.assign({}, checkpoint, { facing: "south" }); - controller.state.health = Math.max(Math.ceil(controller.state.maxHealth * 0.6), 1); - save(); - controller.game.scene.start("LimaWorld", { region: checkpoint.region }); - } - function useTonic() { - const result = State.useTonic(controller.state); - if (!result.used) return status(controller.state.health >= controller.state.maxHealth ? "Health is already full." : "No Healing Tonics remain."); - setState(result.state, "Healing Tonic used."); - controller.audio.play("pickup"); - } - function updateSetting(key, value) { - if (!controller.state || !(key in controller.state.settings)) return; - controller.state.settings[key] = value; - controller.state = State.normalize(controller.state); - save(); - controller.audio.apply(); - updateHud(); - if (["effectsQuality", "particles", "lighting"].includes(key) && controller.scene) status("This visual setting applies fully after the next region transition."); - } - function toggleSound() { - if (!controller.state) return; - controller.state.settings.soundEnabled = !controller.state.settings.soundEnabled; - controller.audio.unlock(); - controller.audio.apply(); - save(); - const button = controller.root.querySelector("[data-lima-sound]"); - button.textContent = controller.state.settings.soundEnabled ? "Sound On" : "Sound Muted"; - button.setAttribute("aria-pressed", String(controller.state.settings.soundEnabled)); - } - function toggleFullscreen() { - if (document.fullscreenElement) document.exitFullscreen(); - else controller.root.requestFullscreen().catch(() => status("Fullscreen is unavailable in this browser.")); - } - function updateFullscreenButton() { - const button = controller.root.querySelector("[data-lima-fullscreen]"); - button.setAttribute("aria-pressed", String(Boolean(document.fullscreenElement))); - button.textContent = document.fullscreenElement ? "Exit Fullscreen" : "Fullscreen"; - } - function lock(value, reason) { - if (value) { - if (!controller.uiTokens.has(reason)) controller.uiTokens.set(reason, controller.inputLock.acquire(reason)); - } else if (controller.uiTokens.has(reason)) { - controller.inputLock.release(controller.uiTokens.get(reason)); - controller.uiTokens.delete(reason); - } else controller.inputLock.releaseReason(reason); - } - function frameDialogue(node) { if (controller.scene) controller.scene.frameDialogue(node); } - function focusGame() { const game = controller.root.querySelector("[data-lima-game]"); if (game) game.focus({ preventScroll: true }); } - function prompt(text) { controller.root.querySelector("[data-lima-prompt]").textContent = text || "Explore · speak · protect · discover"; } - function status(message) { const element = controller.root && controller.root.querySelector("[data-lima-status]"); if (element) element.textContent = message; } - function boss(name, health, maxHealth, phase) { - const container = controller.root.querySelector("[data-lima-boss]"); - container.hidden = !name; - if (!name) return; - container.querySelector("[data-lima-boss-name]").textContent = `${name} · Phase ${phase}`; - container.querySelector("i").style.width = `${Math.max(0, health) / maxHealth * 100}%`; - } - function returnToMenu() { - controller.ui.close(); - controller.game.scene.start("LimaTitle"); - } - function fatal(message) { - if (!controller.root) return; - controller.root.querySelector("[data-lima-loading]").innerHTML = `The road could not open.${escapeHtml(message)}Return to Play`; - } - function escapeHtml(value) { return String(value).replace(/[&<>"']/g, (char) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[char])); } - - Object.assign(controller, { - ready, showMenu, hideMenu, beginAdventure, showHud, updateHud, setState, save, travel, - prompt, status, boss, toggleFullscreen, fatal, frameDialogue, root: null - }); -}()); diff --git a/assets/scripts/pages/princess-lima-v2-maps.js b/assets/scripts/pages/princess-lima-v2-maps.js deleted file mode 100755 index bd1d9e7..0000000 --- a/assets/scripts/pages/princess-lima-v2-maps.js +++ /dev/null @@ -1,82 +0,0 @@ -(function (root) { - "use strict"; - const Data = root.PrincessLimaV2Data; - const Systems = root.PrincessLimaV2Systems; - - function properties(object) { - return Systems.propertyMap(object); - } - function objects(map, layerName) { - const layer = map.getObjectLayer(layerName); - return layer ? layer.objects : []; - } - function build(scene, regionId, state) { - const map = scene.make.tilemap({ key: `map-${regionId}` }); - const tileset = map.addTilesetImage("Princess Lima World", "world-tiles", 32, 32, 0, 0); - if (!tileset) throw new Error(`Tileset could not be attached for ${regionId}`); - const tileLayers = [ - ["Base terrain", 0, 1], ["Terrain variation", 2, 0.62], ["Paths", 3, 1], - ["Water", 4, 0.94], ["Cliffs and buildings", 8, 1], ["Props", 12, 1], - ["Objects behind actors", 20, 1], ["Actor layer", 100, 1], - ["Objects above actors", 9000, 1], ["Shadows", 8800, 0.42], ["Lighting", 8900, 0.34] - ].map(([name, depth, alpha]) => { - const layer = map.createLayer(name, tileset, 0, 0); - if (layer) layer.setDepth(depth).setAlpha(alpha); - return layer; - }).filter(Boolean); - - const collisions = scene.physics.add.staticGroup(); - objects(map, "Collision").forEach((object) => { - const blocker = scene.add.rectangle(object.x + object.width / 2, object.y + object.height / 2, object.width, object.height, 0x000000, 0); - scene.physics.add.existing(blocker, true); - collisions.add(blocker); - }); - const bounds = { width: map.widthInPixels, height: map.heightInPixels }; - const resolved = Boolean(state.flags[`${regionId}_resolved`]); - const tint = resolved ? 0xffffff : { - village: 0xd9c1a8, forest: 0xb7cfba, ruins: 0xaabdc4, mountain: 0xc7d8e6, - camp: 0xd8c09c, fortressExterior: 0xb7a7c2, fortressInterior: 0xa996af, - bossArena: 0xa17ca8, chamber: 0xfff1cc - }[regionId] || 0xffffff; - tileLayers.forEach((layer) => layer.setTint(tint)); - - const ambience = createAmbience(scene, regionId, bounds, state); - return { - map, tileset, tileLayers, collisions, bounds, ambience, - spawns: Object.fromEntries(objects(map, "Named safe spawns").map((object) => [object.name, { x: object.x, y: object.y }])), - npcs: objects(map, "Dialogue triggers"), - enemies: objects(map, "Enemy zones"), - interactions: objects(map, "Interaction zones").concat(objects(map, "Optional secrets")), - transitions: objects(map, "Scene transitions"), - cameraZones: objects(map, "Camera zones") - }; - } - function createAmbience(scene, regionId, bounds, state) { - const container = scene.add.container(0, 0).setDepth(8700); - if (!state.settings.particles || state.settings.effectsQuality === "minimal") return container; - const colors = { - village: 0xffa75e, forest: 0xb9f39a, ruins: 0x6dd7df, mountain: 0xe8f5ff, - camp: 0xffc16b, fortressExterior: 0x9d6fb4, fortressInterior: 0x9d6fb4, - bossArena: 0xd968c2, chamber: 0xffe3a3 - }; - const count = state.settings.effectsQuality === "reduced" ? 10 : 24; - for (let index = 0; index < count; index += 1) { - const mote = scene.add.circle( - (index * 149 + 71) % bounds.width, - (index * 83 + 37) % bounds.height, - index % 3 + 1, - colors[regionId] || 0xffffff, - 0.12 + (index % 4) * 0.07 - ); - container.add(mote); - if (!state.settings.reducedMotion) scene.tweens.add({ - targets: mote, y: mote.y - 32 - (index % 5) * 8, x: mote.x + ((index % 3) - 1) * 18, - alpha: { from: mote.alpha, to: 0.03 }, duration: 2600 + index * 97, yoyo: true, repeat: -1, - ease: "Sine.InOut" - }); - } - return container; - } - - root.PrincessLimaV2Maps = Object.freeze({ build, objects, properties }); -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-v2-scenes.js b/assets/scripts/pages/princess-lima-v2-scenes.js deleted file mode 100755 index 055c75a..0000000 --- a/assets/scripts/pages/princess-lima-v2-scenes.js +++ /dev/null @@ -1,717 +0,0 @@ -(function (root) { - "use strict"; - const Data = root.PrincessLimaV2Data; - const State = root.PrincessLimaV2State; - const Systems = root.PrincessLimaV2Systems; - const Maps = root.PrincessLimaV2Maps; - - function createSceneClasses(controller) { - class BootScene extends Phaser.Scene { - constructor() { super("LimaBoot"); } - create() { - const errors = Data.validateAll(); - if (errors.length) return controller.fatal(`Game data failed validation: ${errors.join(", ")}`); - this.scene.start("LimaPreload"); - } - } - - class PreloadScene extends Phaser.Scene { - constructor() { super("LimaPreload"); } - preload() { - const bar = this.add.rectangle(Data.WIDTH / 2, Data.HEIGHT / 2, 420, 10, 0x352c42).setOrigin(0.5); - const fill = this.add.rectangle(Data.WIDTH / 2 - 210, Data.HEIGHT / 2, 0, 10, 0xdcb96c).setOrigin(0, 0.5); - this.load.on("progress", (value) => { fill.width = 420 * value; }); - this.load.on("loaderror", (file) => { - if (Data.ASSETS.shared.find((asset) => asset.key === file.key && asset.required)) controller.fatal(`Required asset could not load: ${file.key}`); - }); - Data.ASSETS.shared.forEach((asset) => { - if (asset.type === "image") this.load.image(asset.key, asset.url); - if (asset.type === "spritesheet") this.load.spritesheet(asset.key, asset.url, { frameWidth: asset.frameWidth, frameHeight: asset.frameHeight }); - }); - Object.entries(Data.MAP_URLS).forEach(([id, url]) => this.load.tilemapTiledJSON(`map-${id}`, url)); - const audio = "/assets/audio/princess-lima/"; - ["step", "attack", "hit", "damage", "defeat", "pickup", "quest", "puzzle", "door", "victory", - "village-theme", "forest-theme", "mountain-theme", "fortress-theme", "boss-theme", "victory-theme", - "intro-narration-1", "intro-narration-2", "intro-narration-3", "intro-narration-4"].forEach((key) => - this.load.audio(key, `${audio}${key}.wav`)); - bar.setDepth(-1); - } - create() { - createAnimations(this); - controller.ready(); - this.scene.start("LimaTitle"); - } - } - - class TitleScene extends Phaser.Scene { - constructor() { super("LimaTitle"); } - create() { - this.add.image(Data.WIDTH / 2, Data.HEIGHT / 2, "lima-title").setDisplaySize(Data.WIDTH, Data.HEIGHT).setTint(0xb9a8c8); - this.add.rectangle(Data.WIDTH / 2, Data.HEIGHT / 2, Data.WIDTH, Data.HEIGHT, 0x070912, 0.45); - controller.showMenu(); - } - } - - class IntroScene extends Phaser.Scene { - constructor() { super("LimaIntro"); } - init(data) { this.replay = Boolean(data && data.replay); } - create() { - controller.hideMenu(); - controller.audio.attach(this, "village"); - this.token = controller.inputLock.acquire("intro"); - this.step = 0; - this.paused = false; - this.finished = false; - this.background = this.add.image(Data.WIDTH / 2, Data.HEIGHT / 2, "lima-title").setDisplaySize(Data.WIDTH, Data.HEIGHT).setTint(0x7e8faa); - this.vignette = this.add.rectangle(Data.WIDTH / 2, Data.HEIGHT / 2, Data.WIDTH, Data.HEIGHT, 0x070912, 0.48); - this.caption = this.add.text(Data.WIDTH / 2, 420, "", { - fontFamily: "Georgia, serif", fontSize: "24px", color: "#fff2d0", align: "center", - wordWrap: { width: 760 }, stroke: "#10101b", strokeThickness: 5 - }).setOrigin(0.5); - this.title = this.add.text(Data.WIDTH / 2, 230, "", { - fontFamily: "Georgia, serif", fontSize: "54px", color: "#f7d88a", align: "center", - stroke: "#17101f", strokeThickness: 8 - }).setOrigin(0.5).setAlpha(0); - this.input.keyboard.on("keydown-P", () => this.togglePause()); - this.input.keyboard.on("keydown-ESC", () => this.finish(true)); - this.runBeat(); - } - runBeat() { - const beats = [ - ["Before shadow crossed the northern road, Princess Lima listened before she ruled.", 0xbac9d8, "intro-narration-1"], - ["Lord Malrec came for the royal oath. Lima refused him, and the kingdom paid for her courage.", 0x7e5a72, "intro-narration-2"], - ["Bound in shadow, Lima left a trail of courage through the woods and over Frostpeak.", 0x6f86a0, "intro-narration-3"], - ["At dawn, one traveller reached the broken village.", 0xd1a66b, "intro-narration-4"] - ]; - if (this.step >= beats.length) { - this.title.setText("RESCUE\nPRINCESS LIMA"); - this.tweens.add({ targets: this.title, alpha: 1, scale: { from: 0.92, to: 1 }, duration: controller.reducedMotion() ? 1 : 900 }); - this.time.delayedCall(1800, () => this.finish(false)); - return; - } - const [text, tint, voice] = beats[this.step]; - this.caption.setText(text).setAlpha(0); - this.background.setTint(tint); - if (controller.state.settings.soundEnabled && controller.state.settings.narrationEnabled) controller.audio.playVoice(voice); - this.tweens.add({ - targets: this.caption, alpha: 1, y: { from: 436, to: 420 }, duration: controller.reducedMotion() ? 1 : 500, - onComplete: () => { this.timer = this.time.delayedCall(controller.reducedMotion() ? 1800 : 4300, () => { this.step += 1; this.runBeat(); }); } - }); - } - togglePause() { - this.paused = !this.paused; - if (this.timer) this.timer.paused = this.paused; - this.caption.setText(this.paused ? "Paused · press P to continue" : this.caption.text); - } - finish(skipped) { - if (this.finished) return; - this.finished = true; - controller.audio.stopVoice(); - controller.inputLock.release(this.token); - if (!this.replay) { - controller.state.introSeen = true; - controller.save(); - controller.beginAdventure(this); - } else { - controller.showMenu(); - this.scene.start("LimaTitle"); - } - if (skipped) controller.status("Introduction skipped safely."); - } - shutdown() { - controller.audio.stopVoice(); - if (this.token) controller.inputLock.release(this.token); - } - } - - class WorldScene extends Phaser.Scene { - constructor() { super("LimaWorld"); } - init(data) { - this.regionId = data && Data.MAP_IDS.includes(data.region) ? data.region : controller.state.region; - this.attack = null; - this.attackSerial = 0; - this.attackHits = new Set(); - this.combo = 0; - this.spaceDownAt = 0; - this.blocking = false; - this.lastDamagedAt = -1000; - this.lastStepAt = 0; - this.interactionTarget = null; - this.enemySerial = 0; - this.projectiles = []; - this.dialogueSnapshot = null; - this.pathTick = 0; - this.puzzleProgress = {}; - this.spawnedObjects = new Set(); - this.sunAidUsed = false; - } - create() { - controller.scene = this; - controller.state.region = this.regionId; - const safe = State.safeSpawn(this.regionId, controller.state.position.spawn); - if (controller.state.region !== this.regionId) controller.state.position = Object.assign(safe, { facing: "south" }); - this.world = Maps.build(this, this.regionId, controller.state); - this.physics.world.setBounds(0, 0, this.world.bounds.width, this.world.bounds.height); - this.cameras.main.setBounds(0, 0, this.world.bounds.width, this.world.bounds.height); - this.createPlayer(); - this.createActors(); - this.createInputs(); - this.physics.add.collider(this.player, this.world.collisions); - this.physics.add.collider(this.enemies, this.world.collisions); - this.cameras.main.startFollow(this.player, true, controller.reducedMotion() ? 1 : 0.12, controller.reducedMotion() ? 1 : 0.12); - this.cameras.main.setDeadzone(126, 84).setZoom(1.04); - this.setupPathfinding(); - controller.audio.attach(this, this.regionId); - controller.showHud(); - controller.updateHud(); - controller.save(); - this.events.once(Phaser.Scenes.Events.SHUTDOWN, () => this.cleanup()); - if (this.regionId === "bossArena" && !controller.state.flags.boss_intro_seen) { - controller.state.flags.boss_intro_seen = true; - this.time.delayedCall(350, () => controller.ui.startDialogue("malrec", { - target: this.findActor("malrec"), - done: () => this.world.enemies.filter((object) => Maps.properties(object).enemy === "malrec").forEach((object) => this.spawnEnemy(object)) - })); - } - if (this.regionId === "chamber") this.time.delayedCall(500, () => controller.ui.startDialogue("lima", { - target: this.findActor("lima"), done: () => { controller.state.rescued = true; controller.state.flags.chamber_resolved = true; controller.save(); controller.ui.ending(); } - })); - } - createPlayer() { - const position = controller.state.position; - this.facing = position.facing || "south"; - this.player = this.physics.add.sprite(position.x, position.y, "actors-v2", actorFrame("player", this.facing, 0)) - .setDepth(position.y + 100).setCollideWorldBounds(true); - this.player.body.setSize(25, 26).setOffset(12, 35); - this.player.setData("actorId", "player"); - this.shadow = this.add.ellipse(position.x, position.y + 25, 31, 12, 0x080912, 0.34).setDepth(position.y + 80); - } - createActors() { - this.npcs = this.physics.add.staticGroup(); - this.enemies = this.physics.add.group(); - this.world.npcs.forEach((object) => { - const actor = this.npcs.create(object.x, object.y, "actors-v2", actorFrame(object.name, "south", 0)); - actor.setData({ actorId: object.name, dialogue: Maps.properties(object).dialogue }).setDepth(object.y + 100); - actor.body.setSize(24, 24).setOffset(12, 38); - }); - this.world.enemies.forEach((object) => this.spawnEnemy(object)); - } - spawnEnemy(object) { - const props = Maps.properties(object); - const id = props.enemy; - const spec = Data.ENEMIES[id]; - if (!spec || this.spawnedObjects.has(object.id) || controller.state.defeatedBosses.includes(id)) return; - if (this.regionId === "village" && controller.state.quests.village_defence.status !== "active") return; - if (id === "briar_wolf" && controller.state.quests.ruins_light.status !== "complete") return; - if (id === "stone_guardian" && controller.state.quests.repair_bridge.status !== "complete") return; - if (id === "captain" && controller.state.quests.rally_resistance.status === "locked") return; - if (id === "malrec" && !controller.state.flags.boss_started) return; - this.spawnedObjects.add(object.id); - const enemy = this.physics.add.sprite(object.x, object.y, "actors-v2", actorFrame(id, "south", 0)); - enemy.body.setSize(spec.boss ? 36 : 25, spec.boss ? 34 : 25).setOffset(spec.boss ? 6 : 12, spec.boss ? 26 : 35); - enemy.setData({ - uid: `${id}-${++this.enemySerial}`, actorId: id, spec, health: spec.health, maxHealth: spec.health, - state: spec.role === "ambush" ? "hidden" : "patrol", homeX: object.x, homeY: object.y, - leash: Number(props.leash) || 190, nextAction: this.time.now + 500, telegraphUntil: 0, - attackUntil: 0, recoverUntil: 0, stunnedUntil: 0, phase: 1, lastPathAt: 0, path: [] - }).setDepth(object.y + 100); - if (spec.role === "ambush") enemy.setAlpha(0.22); - this.enemies.add(enemy); - } - createInputs() { - this.cursors = this.input.keyboard.createCursorKeys(); - this.keys = this.input.keyboard.addKeys({ - up: "W", down: "S", left: "A", right: "D", interact: "E", alternateInteract: "ENTER", - attack: "SPACE", block: "SHIFT", item: "Q", inventory: "I", quests: "J", menu: "M", - fullscreen: "F", charged: "C", escape: "ESC" - }); - this.input.keyboard.on("keydown-SPACE", () => { if (!controller.inputLock.locked()) this.spaceDownAt = this.time.now; }); - this.input.keyboard.on("keyup-SPACE", () => { - if (controller.inputLock.locked()) return; - const held = this.time.now - this.spaceDownAt; - this.startAttack(held >= 440 ? "charged" : (this.combo === 1 && this.time.now - this.lastAttackEnd < 360 ? "light2" : "light1")); - }); - } - setupPathfinding() { - if (!root.EasyStar || !root.EasyStar.js) return; - const grid = Array.from({ length: this.world.map.height }, () => Array(this.world.map.width).fill(0)); - Maps.objects(this.world.map, "Collision").forEach((solid) => { - const sx = Math.floor(solid.x / 32), sy = Math.floor(solid.y / 32); - const ex = Math.ceil((solid.x + solid.width) / 32), ey = Math.ceil((solid.y + solid.height) / 32); - for (let y = sy; y < ey; y += 1) for (let x = sx; x < ex; x += 1) if (grid[y] && grid[y][x] !== undefined) grid[y][x] = 1; - }); - this.pathfinder = new EasyStar.js(); - this.pathfinder.setGrid(grid); - this.pathfinder.setAcceptableTiles([0]); - this.pathfinder.enableDiagonals(); - this.pathfinder.disableCornerCutting(); - this.pathfinder.setIterationsPerCalculation(180); - } - update(time, delta) { - if (!this.player || !this.player.active) return; - if (!controller.inputLock.locked()) { - this.updatePlayer(time, delta); - this.updateInteractions(); - this.updateShortcuts(); - } else this.player.setVelocity(0); - this.updateEnemies(time, delta); - this.updateProjectiles(time); - this.updateCameraZones(); - this.shadow.setPosition(this.player.x, this.player.y + 25).setDepth(this.player.y + 80); - this.player.setDepth(this.player.y + 100); - if (this.pathfinder) this.pathfinder.calculate(); - } - updatePlayer(time, delta) { - let x = (this.cursors.left.isDown || this.keys.left.isDown ? -1 : 0) + (this.cursors.right.isDown || this.keys.right.isDown ? 1 : 0); - let y = (this.cursors.up.isDown || this.keys.up.isDown ? -1 : 0) + (this.cursors.down.isDown || this.keys.down.isDown ? 1 : 0); - this.blocking = this.keys.block.isDown && !this.attack; - if (this.attack || this.blocking) { x = 0; y = 0; } - const speed = controller.state.equipment.boots ? 188 : 168; - const velocity = Systems.movementVelocity(this.player.body.velocity.x, this.player.body.velocity.y, x, y, delta, speed, Boolean(controller.state.equipment.boots)); - this.player.setVelocity(velocity.x, velocity.y); - if (x || y) { - if (Math.abs(x) > Math.abs(y)) this.facing = x > 0 ? "east" : "west"; - else this.facing = y > 0 ? "south" : "north"; - this.player.anims.play(`walk-${Data.ACTORS.player.row}-${this.facing}`, true); - if (time - this.lastStepAt > 310) { controller.audio.play("step", 0.22); this.lastStepAt = time; } - } else if (!this.attack) this.player.anims.play(`idle-${Data.ACTORS.player.row}-${this.facing}`, true); - if (this.blocking) this.player.setTint(0x9ec9e8); else if (!this.attack) this.player.clearTint(); - if (Phaser.Input.Keyboard.JustDown(this.keys.interact) || Phaser.Input.Keyboard.JustDown(this.keys.alternateInteract)) this.interact(); - } - updateShortcuts() { - if (Phaser.Input.Keyboard.JustDown(this.keys.item)) controller.useTonic(); - if (Phaser.Input.Keyboard.JustDown(this.keys.inventory)) controller.ui.openPanel("inventory"); - if (Phaser.Input.Keyboard.JustDown(this.keys.quests)) controller.ui.openPanel("quests"); - if (Phaser.Input.Keyboard.JustDown(this.keys.menu) || Phaser.Input.Keyboard.JustDown(this.keys.escape)) controller.ui.openPanel("pause"); - if (Phaser.Input.Keyboard.JustDown(this.keys.fullscreen)) controller.toggleFullscreen(); - } - updateInteractions() { - const candidates = []; - this.npcs.getChildren().forEach((actor) => candidates.push({ kind: "npc", target: actor, x: actor.x, y: actor.y, label: `Speak with ${Data.ACTORS[actor.getData("actorId")].name}` })); - this.world.interactions.forEach((object) => candidates.push({ kind: object.type === "secret" ? "secret" : "interaction", target: object, x: object.x, y: object.y, label: readable(object.name) })); - this.world.transitions.forEach((object) => candidates.push({ kind: "transition", target: object, x: object.x + object.width / 2, y: object.y + object.height / 2, label: readable(object.name) })); - candidates.forEach((candidate) => { candidate.distance = Phaser.Math.Distance.Between(this.player.x, this.player.y, candidate.x, candidate.y); }); - this.interactionTarget = candidates.filter((candidate) => candidate.distance < (candidate.kind === "transition" ? 72 : 62)).sort((a, b) => a.distance - b.distance)[0] || null; - controller.prompt(this.interactionTarget ? `E · ${this.interactionTarget.label}` : ""); - } - interact() { - const candidate = this.interactionTarget; - if (!candidate) return; - if (candidate.kind === "npc") { - const id = candidate.target.getData("dialogue"); - controller.ui.startDialogue(id, { - target: candidate.target, - done: () => { - if (id === "elder" && controller.state.quests.village_defence.status === "locked") { - controller.setState(State.startQuest(controller.state, "village_defence"), "The Second Raid has begun."); - this.world.enemies.forEach((object) => this.spawnEnemy(object)); - } - if (id === "tovin") controller.setState(State.progressQuest(controller.state, "find_guide", 1)); - if (id === "elowen" && this.regionId === "camp") { - controller.setState(State.startQuest(controller.state, "rally_resistance")); - this.world.enemies.forEach((object) => this.spawnEnemy(object)); - } - if (id === "prisoner") controller.setState(State.startQuest(controller.state, "break_wards")); - } - }); - return; - } - if (candidate.kind === "transition") return this.transition(candidate.target); - const props = Maps.properties(candidate.target); - const action = props.action || props.observation; - if (candidate.kind === "secret") { - if (!controller.state.discoveredSecrets.includes(candidate.target.name)) { - controller.state.discoveredSecrets.push(candidate.target.name); - controller.setState(State.addItem(controller.state, "moon_coin", 1), props.observation || "A secret waits here."); - } else controller.status("You have already found this secret."); - return; - } - this.handleInteraction(candidate.target.name, action); - } - handleInteraction(name, action) { - if (action === "puzzle") { - const quest = this.regionId === "ruins" ? "ruins_light" : this.regionId === "mountain" ? "repair_bridge" : this.regionId === "fortressInterior" ? "break_wards" : "find_guide"; - if (controller.state.quests[quest].status === "locked") controller.state = State.startQuest(controller.state, quest); - const key = `${this.regionId}:${name}`; - if (!controller.state.solvedPuzzles.includes(key)) { - controller.state.solvedPuzzles.push(key); - controller.setState(State.progressQuest(controller.state, quest, 1), `${readable(name)} answers with light.`); - controller.audio.play("puzzle"); - if (quest === "repair_bridge" && controller.state.quests.repair_bridge.status === "complete") { - this.world.enemies.forEach((object) => this.spawnEnemy(object)); - } - } else controller.status("This mechanism is already awake."); - return; - } - if (action === "free-prisoner") { - if (!controller.state.flags[`freed_${name}`]) { - controller.state.flags[`freed_${name}`] = true; - controller.setState(State.progressQuest(controller.state, "free_prisoners", 1), "A prisoner joins the resistance."); - } - return; - } - if (action === "disable-defence") { - if (!controller.state.flags[`disabled_${name}`]) { - controller.state.flags[`disabled_${name}`] = true; - controller.setState(State.progressQuest(controller.state, "disable_defences", 1), `${readable(name)} disabled.`); - } - return; - } - if (action === "route-choice") return controller.ui.startDialogue("elowen", { target: this.findActor("elowen") }); - if (action === "chest") { - if (!controller.state.openedChests.includes(name)) { - controller.state.openedChests.push(name); - controller.setState(State.addItem(controller.state, "healing_tonic", 1), "Found a Healing Tonic."); - controller.audio.play("pickup"); - } - return; - } - if (action === "boss-mechanic") { - if (this.sunAidUsed) return controller.status("The Sun Crystal is gathering its light again."); - const malrec = this.enemies.getChildren().find((enemy) => enemy.active && enemy.getData("actorId") === "malrec"); - if (!malrec) return controller.status("The Sun Crystal is warm, but its moment has not come."); - this.sunAidUsed = true; - controller.state.flags.sun_veil_broken = true; - controller.state.health = Math.min(controller.state.maxHealth, controller.state.health + 25); - malrec.setData("health", Math.max(1, malrec.getData("health") - 12)); - malrec.setData("stunnedUntil", this.time.now + 2100); - malrec.setData("state", "hurt"); - malrec.setVelocity(0).setTint(0xffe39a).setTintMode(Phaser.TintModes.FILL); - this.projectiles.forEach((projectile) => projectile.active && projectile.destroy()); - this.projectiles = []; - this.time.delayedCall(350, () => malrec.active && malrec.clearTint()); - controller.save(); - controller.updateHud(); - this.cameras.main.flash(200, 255, 230, 150); - controller.status("Lima channels the Sun Crystal: Malrec's veil breaks, and your strength returns."); - return; - } - if (action === "block-tutorial") return controller.status("Hold Shift to block. Release and strike during an enemy's recovery."); - controller.status(action || readable(name)); - } - transition(object) { - const props = Maps.properties(object); - if (props.requirement && !controller.state.flags[props.requirement]) { - controller.status(`The route is not yet open · ${readable(props.requirement)}`); - return; - } - controller.travel(props.target, props.spawn); - } - startAttack(kind) { - if (this.attack || this.blocking || controller.inputLock.locked()) return; - const spec = Systems.ATTACKS[kind]; - this.attack = { kind, spec, started: this.time.now, serial: ++this.attackSerial, active: false }; - this.combo = kind === "light1" ? 1 : 0; - this.attackHits.clear(); - this.player.setVelocity(0).setTint(kind === "charged" ? 0xffd47a : 0xffffff); - controller.audio.play("attack"); - } - updateAttack(time) { - if (!this.attack) return; - const phase = Systems.attackPhase(time - this.attack.started, this.attack.kind); - if (phase === "active" && !this.attack.active) { - this.attack.active = true; - this.performHit(this.attack); - this.swingEffect(this.attack.kind); - } - if (phase === "complete") { - this.player.clearTint(); - this.lastAttackEnd = time; - this.attack = null; - } - } - performHit(attack) { - const box = Systems.attackHitbox(this.facing, this.player.x, this.player.y, attack.kind); - const hitbox = this.add.rectangle(box.x + box.width / 2, box.y + box.height / 2, box.width, box.height, 0xffd66d, 0); - this.physics.add.existing(hitbox); - this.physics.overlap(hitbox, this.enemies, (_hit, enemy) => this.hitEnemy(enemy, attack)); - this.time.delayedCall(20, () => hitbox.destroy()); - } - swingEffect(kind) { - if (!controller.state.settings.particles) return; - const vector = Systems.facingVector(this.facing); - const arc = this.add.arc(this.player.x + vector.x * 30, this.player.y + vector.y * 26, kind === "charged" ? 42 : 31, 200, 340, false, kind === "charged" ? 0xffd77c : 0xeaf3ff, 0.72).setDepth(this.player.depth + 2); - arc.setRotation(Math.atan2(vector.y, vector.x) + Math.PI / 2); - this.tweens.add({ targets: arc, alpha: 0, scale: 1.25, duration: 140, onComplete: () => arc.destroy() }); - } - hitEnemy(enemy, attack) { - if (!enemy.active || this.attackHits.has(enemy.getData("uid"))) return; - this.attackHits.add(enemy.getData("uid")); - const spec = enemy.getData("spec"); - const blocking = spec.role === "shield" && enemy.getData("state") !== "recover" && attack.kind !== "charged"; - const damage = blocking ? 0 : (controller.state.attack + attack.spec.damage); - if (!damage) { - enemy.setTint(0x9fb4cb); - this.time.delayedCall(100, () => enemy.active && enemy.clearTint()); - controller.status("The guard blocks the strike. Charge or counter after an attack."); - return; - } - enemy.setData("health", enemy.getData("health") - damage); - enemy.setData("stunnedUntil", this.time.now + 220); - enemy.setData("state", "hurt"); - enemy.setTint(0xffe1ad).setTintMode(Phaser.TintModes.FILL); - const vector = Systems.facingVector(this.facing); - enemy.setVelocity(vector.x * attack.spec.knockback * 4, vector.y * attack.spec.knockback * 4); - controller.audio.play("hit", spec.boss ? 1 : 0.72); - this.time.delayedCall(75, () => { if (enemy.active) enemy.clearTint(); }); - this.time.delayedCall(120, () => { if (enemy.active) enemy.setVelocity(0); }); - if (controller.state.settings.screenShake && !controller.reducedMotion()) this.cameras.main.shake(spec.boss ? 80 : 45, spec.boss ? 0.004 : 0.0018); - if (enemy.getData("health") <= 0) this.defeatEnemy(enemy); - } - defeatEnemy(enemy) { - const id = enemy.getData("actorId"); - const spec = enemy.getData("spec"); - enemy.setData("state", "dead"); - this.tweens.add({ targets: enemy, alpha: 0, y: enemy.y - 10, duration: controller.reducedMotion() ? 1 : 280, onComplete: () => enemy.destroy() }); - if (this.regionId === "village" && controller.state.quests.village_defence.status === "active") controller.setState(State.progressQuest(controller.state, "village_defence", 1)); - if (id === "briar_wolf") this.completeBoss(id, "wolf_miniboss"); - if (id === "stone_guardian") this.completeBoss(id, "stone_guardian"); - if (id === "captain") { - controller.state = State.progressQuest(controller.state, "rally_resistance", 2); - this.completeBoss(id, "rally_resistance"); - } - if (id === "malrec") { - this.completeBoss(id, "defeat_malrec"); - this.cameras.main.flash(900, 255, 232, 176); - this.time.delayedCall(1100, () => controller.travel("chamber", "door")); - } - if (spec.boss) controller.boss(null); - } - completeBoss(id, quest) { - if (!controller.state.defeatedBosses.includes(id)) controller.state.defeatedBosses.push(id); - controller.setState(State.completeQuest(controller.state, quest), `${Data.ACTORS[id].name} defeated.`); - controller.audio.play("victory"); - } - updateEnemies(time) { - this.updateAttack(time); - this.enemies.getChildren().forEach((enemy) => { - if (!enemy.active) return; - const spec = enemy.getData("spec"); - const distance = Phaser.Math.Distance.Between(enemy.x, enemy.y, this.player.x, this.player.y); - const homeDistance = Phaser.Math.Distance.Between(enemy.x, enemy.y, enemy.getData("homeX"), enemy.getData("homeY")); - const state = Systems.nextEnemyState(enemy.getData("state"), { - distance, homeDistance, spec, health: enemy.getData("health"), leash: enemy.getData("leash"), - stunned: time < enemy.getData("stunnedUntil"), telegraphDone: time >= enemy.getData("telegraphUntil"), - attackDone: time >= enemy.getData("attackUntil"), cooldownDone: time >= enemy.getData("recoverUntil") - }); - if (state !== enemy.getData("state")) this.enterEnemyState(enemy, state, time); - this.runEnemyState(enemy, state, time, distance); - enemy.setDepth(enemy.y + 100); - const phase = Systems.bossPhase(enemy.getData("health"), enemy.getData("maxHealth"), spec.phases || 1); - if (phase !== enemy.getData("phase")) { - enemy.setData("phase", phase); - this.bossPhaseTransition(enemy, phase); - } - if (spec.boss) controller.boss(Data.ACTORS[enemy.getData("actorId")].name, enemy.getData("health"), enemy.getData("maxHealth"), phase); - }); - } - enterEnemyState(enemy, state, time) { - enemy.setData("state", state); - const spec = enemy.getData("spec"); - if (state === "telegraph") { - enemy.setVelocity(0).setTint(spec.role === "caster" ? 0xc887ff : 0xffc07b); - enemy.setData("telegraphUntil", time + spec.telegraph); - } - if (state === "attack") { - enemy.clearTint(); - enemy.setData("attackUntil", time + 180); - this.enemyAttack(enemy); - } - if (state === "recover") { - enemy.setVelocity(0).setTint(0x9aa6b5); - enemy.setData("recoverUntil", time + spec.cooldown); - } - if (state === "patrol") enemy.clearTint(); - if (state === "pursue" && spec.role === "ambush") enemy.setAlpha(1); - } - runEnemyState(enemy, state, time) { - const spec = enemy.getData("spec"); - if (state === "hurt" || state === "telegraph" || state === "recover" || state === "dead") { - if (state === "telegraph" && time >= enemy.getData("telegraphUntil")) this.enterEnemyState(enemy, "attack", time); - if (state === "attack" && time >= enemy.getData("attackUntil")) this.enterEnemyState(enemy, "recover", time); - return; - } - if (state === "attack") { - if (time >= enemy.getData("attackUntil")) this.enterEnemyState(enemy, "recover", time); - return; - } - if (state === "return") return this.moveEnemy(enemy, enemy.getData("homeX"), enemy.getData("homeY"), spec.speed); - if (state === "pursue") return this.moveEnemy(enemy, this.player.x, this.player.y, spec.speed); - if (state === "patrol" && time >= enemy.getData("nextAction")) { - enemy.setData("nextAction", time + 1100); - const angle = ((enemy.getData("uid").length * 37 + Math.floor(time / 1000)) % 8) * Math.PI / 4; - enemy.setVelocity(Math.cos(angle) * spec.speed * 0.35, Math.sin(angle) * spec.speed * 0.35); - this.time.delayedCall(420, () => enemy.active && enemy.getData("state") === "patrol" && enemy.setVelocity(0)); - } - } - moveEnemy(enemy, x, y, speed) { - if (this.pathfinder && this.time.now - enemy.getData("lastPathAt") > 650) { - enemy.setData("lastPathAt", this.time.now); - const sx = Phaser.Math.Clamp(Math.floor(enemy.x / 32), 0, this.world.map.width - 1); - const sy = Phaser.Math.Clamp(Math.floor(enemy.y / 32), 0, this.world.map.height - 1); - const tx = Phaser.Math.Clamp(Math.floor(x / 32), 0, this.world.map.width - 1); - const ty = Phaser.Math.Clamp(Math.floor(y / 32), 0, this.world.map.height - 1); - this.pathfinder.findPath(sx, sy, tx, ty, (path) => { if (enemy.active && path && path.length > 1) enemy.setData("path", path.slice(1)); }); - } - const path = enemy.getData("path"); - const next = path && path[0]; - const target = next ? { x: next.x * 32 + 16, y: next.y * 32 + 16 } : { x, y }; - const vector = Systems.normalizedVector(target.x - enemy.x, target.y - enemy.y, speed); - enemy.setVelocity(vector.x, vector.y); - if (next && Phaser.Math.Distance.Between(enemy.x, enemy.y, target.x, target.y) < 10) path.shift(); - const facing = Math.abs(vector.x) > Math.abs(vector.y) ? (vector.x > 0 ? "east" : "west") : (vector.y > 0 ? "south" : "north"); - enemy.anims.play(`walk-${Data.ACTORS[enemy.getData("actorId")].row}-${facing}`, true); - } - enemyAttack(enemy) { - const spec = enemy.getData("spec"); - const id = enemy.getData("actorId"); - const phase = enemy.getData("phase"); - if (["ranged", "caster", "support"].includes(spec.role) || id === "malrec") { - const count = id === "malrec" ? phase + 1 : 1; - const preparedReduction = id === "malrec" - ? (controller.state.flags.defences_disabled ? 2 : 0) + (controller.state.flags.prisoners_freed ? 2 : 0) - : 0; - const damage = Math.max(8, spec.damage - preparedReduction); - for (let index = 0; index < count; index += 1) { - const base = Phaser.Math.Angle.Between(enemy.x, enemy.y, this.player.x, this.player.y); - const angle = base + (index - (count - 1) / 2) * (id === "malrec" ? 0.3 : 0.22); - this.spawnProjectile(enemy.x, enemy.y, angle, damage, id === "malrec" ? 150 : 145); - } - return; - } - if (!Systems.canDamageThroughWall(this, enemy, this.player)) return; - const distance = Phaser.Math.Distance.Between(enemy.x, enemy.y, this.player.x, this.player.y); - if (distance <= spec.attackRange + 20) this.hurtPlayer(spec.damage, enemy.x, enemy.y); - else { - const vector = Systems.normalizedVector(this.player.x - enemy.x, this.player.y - enemy.y, spec.speed * (spec.role === "fast" ? 2.8 : 2)); - enemy.setVelocity(vector.x, vector.y); - } - } - spawnProjectile(x, y, angle, damage, speed) { - const projectile = this.add.circle(x, y, 7, 0x9e5ad1, 0.92).setStrokeStyle(2, 0xe7c5ff).setDepth(8000); - this.physics.add.existing(projectile); - projectile.body.setCircle(7).setVelocity(Math.cos(angle) * speed, Math.sin(angle) * speed); - projectile.setData({ damage, born: this.time.now }); - this.projectiles.push(projectile); - } - updateProjectiles(time) { - this.projectiles = this.projectiles.filter((projectile) => { - if (!projectile.active) return false; - if (time - projectile.getData("born") > 3200) { projectile.destroy(); return false; } - if (Phaser.Math.Distance.Between(projectile.x, projectile.y, this.player.x, this.player.y) < 24) { - this.hurtPlayer(projectile.getData("damage"), projectile.x, projectile.y); - projectile.destroy(); - return false; - } - return true; - }); - } - hurtPlayer(amount, sourceX, sourceY) { - if (this.time.now - this.lastDamagedAt < 700) return; - this.lastDamagedAt = this.time.now; - const reduced = this.blocking ? Math.ceil(amount * 0.3) : Math.max(1, amount - controller.state.defence); - controller.state.health = Math.max(0, controller.state.health - reduced); - const vector = Systems.normalizedVector(this.player.x - sourceX, this.player.y - sourceY, this.blocking ? 80 : 180); - this.player.setVelocity(vector.x, vector.y).setTint(0xff7777).setTintMode(Phaser.TintModes.FILL); - controller.audio.play("damage"); - this.time.delayedCall(120, () => this.player.active && this.player.clearTint()); - controller.updateHud(); - controller.save(); - if (controller.state.health <= 0) { - this.player.setVelocity(0); - controller.audio.play("defeat"); - controller.ui.gameOver(); - } - } - bossPhaseTransition(enemy, phase) { - this.cameras.main.flash(controller.reducedMotion() ? 1 : 250, 105, 44, 126); - enemy.setScale(1 + phase * 0.04); - if (enemy.getData("actorId") === "malrec" && phase >= 2) { - this.world.tileLayers.forEach((layer) => layer.setTint(phase === 3 ? 0x9b719e : 0xb48db4)); - controller.status(phase === 3 ? "Lima's voice cuts through the shadow: use the Sun pedestal!" : "Malrec tears open the throne's second seal."); - } - } - updateCameraZones() { - if (controller.inputLock.locked()) return; - const zone = this.world.cameraZones.find((object) => this.player.x >= object.x && this.player.x <= object.x + object.width && this.player.y >= object.y && this.player.y <= object.y + object.height); - const targetZoom = zone ? Number(Maps.properties(zone).zoom) || 1.04 : 1.04; - if (Math.abs(this.cameras.main.zoom - targetZoom) > 0.015) this.cameras.main.zoom += (targetZoom - this.cameras.main.zoom) * 0.04; - const velocity = this.player.body.velocity; - if (velocity.lengthSq() > 16) this.cameras.main.setFollowOffset(-velocity.x * 0.12, -velocity.y * 0.08); - } - beginDialogue(target) { - this.dialogueSnapshot = { zoom: this.cameras.main.zoom, follow: this.player, scrollX: this.cameras.main.scrollX, scrollY: this.cameras.main.scrollY }; - this.player.setVelocity(0); - this.enemies.getChildren().forEach((enemy) => enemy.setVelocity(0)); - const focus = target || this.player; - this.cameras.main.stopFollow(); - this.cameras.main.pan(focus.x, focus.y, controller.reducedMotion() ? 1 : 500, "Sine.easeInOut"); - this.cameras.main.zoomTo(1.24, controller.reducedMotion() ? 1 : 500); - controller.root.classList.add(controller.state.settings.blur && controller.state.settings.effectsQuality === "full" ? "is-dialogue-blur" : "is-dialogue-depth"); - controller.audio.duck(true); - } - frameDialogue(node) { - if (!this.dialogueSnapshot) return; - const actor = this.findActor(node.speaker); - if (actor) this.cameras.main.pan(actor.x, actor.y, controller.reducedMotion() ? 1 : 280, "Sine.easeInOut"); - } - endDialogue() { - controller.root.classList.remove("is-dialogue-blur", "is-dialogue-depth"); - controller.audio.duck(false); - if (!this.dialogueSnapshot) return; - this.cameras.main.pan(this.player.x, this.player.y, controller.reducedMotion() ? 1 : 420, "Sine.easeInOut"); - this.cameras.main.zoomTo(this.dialogueSnapshot.zoom, controller.reducedMotion() ? 1 : 420); - this.time.delayedCall(controller.reducedMotion() ? 1 : 430, () => this.player.active && this.cameras.main.startFollow(this.player, true, 0.12, 0.12)); - this.dialogueSnapshot = null; - } - findActor(id) { - if (id === "player") return this.player; - return this.npcs.getChildren().find((actor) => actor.getData("actorId") === id) || - this.enemies.getChildren().find((actor) => actor.getData("actorId") === id); - } - cleanup() { - controller.prompt(""); - controller.boss(null); - controller.inputLock.clear(); - this.projectiles.forEach((projectile) => projectile.destroy()); - this.projectiles = []; - if (this.pathfinder) this.pathfinder = null; - controller.audio.duck(false); - } - } - - class EndingScene extends Phaser.Scene { - constructor() { super("LimaEnding"); } - create() { - this.add.image(Data.WIDTH / 2, Data.HEIGHT / 2, "lima-title").setDisplaySize(Data.WIDTH, Data.HEIGHT).setTint(0xf3dca3); - controller.ui.ending(); - } - } - - return [BootScene, PreloadScene, TitleScene, IntroScene, WorldScene, EndingScene]; - } - - function actorFrame(id, facing, phase) { - const row = Data.ACTORS[id] ? Data.ACTORS[id].row : 0; - const direction = { north: 0, east: 1, south: 2, west: 3 }[facing] || 2; - return row * 16 + direction * 4 + (phase || 0); - } - function createAnimations(scene) { - const rows = Array.from(new Set(Object.values(Data.ACTORS).map((actor) => actor.row))); - ["north", "east", "south", "west"].forEach((facing) => rows.forEach((row) => { - const start = row * 16 + ({ north: 0, east: 1, south: 2, west: 3 }[facing] * 4); - if (!scene.anims.exists(`idle-${row}-${facing}`)) scene.anims.create({ - key: `idle-${row}-${facing}`, frames: [{ key: "actors-v2", frame: start }], frameRate: 1, repeat: -1 - }); - if (!scene.anims.exists(`walk-${row}-${facing}`)) scene.anims.create({ - key: `walk-${row}-${facing}`, frames: scene.anims.generateFrameNumbers("actors-v2", { start, end: start + 3 }), - frameRate: 9, repeat: -1 - }); - })); - } - function readable(value) { - return String(value || "").replace(/[-_]/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase()); - } - - root.PrincessLimaV2Scenes = Object.freeze({ createSceneClasses, actorFrame }); -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/pages/princess-lima-v2-state.js b/assets/scripts/pages/princess-lima-v2-state.js deleted file mode 100755 index fe469c0..0000000 --- a/assets/scripts/pages/princess-lima-v2-state.js +++ /dev/null @@ -1,243 +0,0 @@ -(function (root, factory) { - "use strict"; - const data = root.PrincessLimaV2Data || (typeof require === "function" ? require("./princess-lima-v2-data.js") : null); - const api = factory(data); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaV2State = api; -}(typeof globalThis !== "undefined" ? globalThis : this, function (Data) { - "use strict"; - const VERSION = 2; - const STORAGE_KEY = "zxh_princess_lima_rpg_v2"; - const LEGACY_KEY = "zxh_princess_lima_rpg_v1"; - const APPEARANCES = Object.freeze(["azure", "ember", "pine"]); - const FACES = Object.freeze(["north", "east", "south", "west"]); - const SAFE_SPAWNS = Object.freeze({ - village: { start: [496, 624], square: [496, 400], forestRoad: [496, 80] }, - forest: { villagePath: [80, 400], ruinsPath: [784, 656], mountainPath: [784, 112] }, - ruins: { forestDoor: [496, 656] }, mountain: { forestTrail: [80, 592], campRoad: [880, 592] }, - camp: { mountainRoad: [80, 400], fortressRoad: [880, 400] }, - fortressExterior: { campGate: [80, 592], innerGate: [496, 240] }, - fortressInterior: { frontHall: [496, 656], throneDoor: [496, 80] }, - bossArena: { entrance: [496, 592] }, chamber: { door: [496, 592] } - }); - const LEGACY_REGION_BY_CHAPTER = Object.freeze({ 1: "village", 2: "forest", 3: "mountain", 4: "fortressInterior" }); - const LEGACY_QUEST_MAP = Object.freeze({ - aftermath: "aftermath", village_defence: "village_defence", healer_herbs: "healer_herbs", - find_guide: "find_guide", ruins_light: "ruins_light", wolf_miniboss: "wolf_miniboss", - repair_bridge: "repair_bridge", stone_guardian: "stone_guardian", free_scout: "rally_resistance", - free_prisoners: "free_prisoners", break_wards: "break_wards", defeat_malrec: "defeat_malrec" - }); - - function validName(value) { - const name = String(value || "").trim().replace(/\s+/g, " "); - return name.length >= 1 && name.length <= 20 ? name : null; - } - function finite(value, fallback, minimum, maximum) { - const number = Number(value); - return Number.isFinite(number) ? Math.max(minimum, Math.min(maximum, number)) : fallback; - } - function questDefaults() { - return Object.fromEntries(Object.keys(Data.QUESTS).map((id) => [id, { status: "locked", count: 0, rewarded: false }])); - } - function defaultSettings() { - return { - soundEnabled: false, master: 0.8, music: 0.48, effects: 0.75, voice: 0.8, - narrationEnabled: true, subtitles: true, reducedMotion: null, highContrast: false, - effectsQuality: "full", blur: true, particles: true, screenShake: true, lighting: true, - textSpeed: "normal" - }; - } - function fresh(name, appearance) { - return { - version: VERSION, - player: { name: validName(name) || "Traveller", appearance: APPEARANCES.includes(appearance) ? appearance : "azure" }, - health: 100, maxHealth: 100, attack: 1, defence: 0, - region: "village", position: { spawn: "start", x: 496, y: 624, facing: "north" }, - checkpoint: { region: "village", spawn: "start", x: 496, y: 624 }, - chapter: 1, story: "arrival", quests: questDefaults(), - inventory: [{ id: "healing_tonic", quantity: 2 }], - equipment: { weapon: null, armour: null, boots: null, charm: null }, - flags: {}, solvedPuzzles: [], defeatedBosses: [], openedChests: [], discoveredSecrets: [], - unlockedRoutes: [], dialogueHistory: [], completedCutscenes: [], rescued: false, introSeen: false, - playTimeSeconds: 0, settings: defaultSettings() - }; - } - - function normalizeInventory(value) { - const quantities = new Map(); - (Array.isArray(value) ? value : []).forEach((entry) => { - const item = entry && Data.ITEMS[entry.id]; - if (!item) return; - const cap = item.stack || 1; - quantities.set(entry.id, Math.min(cap, (quantities.get(entry.id) || 0) + Math.max(1, Math.floor(Number(entry.quantity) || 1)))); - }); - return Array.from(quantities, ([id, quantity]) => ({ id, quantity })); - } - function normalizeQuests(value) { - const output = questDefaults(); - Object.keys(output).forEach((id) => { - const source = value && value[id]; - if (!source) return; - output[id] = { - status: ["locked", "active", "complete"].includes(source.status) ? source.status : "locked", - count: Math.floor(finite(source.count, 0, 0, Data.QUESTS[id].target)), - rewarded: source.rewarded === true - }; - }); - return output; - } - function safeSpawn(region, spawn) { - const regionId = Data.MAP_IDS.includes(region) ? region : "village"; - const entries = SAFE_SPAWNS[regionId]; - const spawnId = entries[spawn] ? spawn : Object.keys(entries)[0]; - return { region: regionId, spawn: spawnId, x: entries[spawnId][0], y: entries[spawnId][1] }; - } - function normalize(candidate) { - if (!candidate || candidate.version !== VERSION) return null; - const name = validName(candidate.player && candidate.player.name); - const appearance = candidate.player && APPEARANCES.includes(candidate.player.appearance) ? candidate.player.appearance : null; - if (!name || !appearance) return null; - const safe = safeSpawn(candidate.region, candidate.position && candidate.position.spawn); - const checkpoint = safeSpawn(candidate.checkpoint && candidate.checkpoint.region, candidate.checkpoint && candidate.checkpoint.spawn); - const inventory = normalizeInventory(candidate.inventory); - const has = (id) => inventory.some((entry) => entry.id === id); - const weapon = has("tempered_sword") ? "tempered_sword" : has("village_sword") ? "village_sword" : null; - const armour = has("reinforced_buckler") ? "reinforced_buckler" : has("buckler") ? "buckler" : null; - const settings = Object.assign(defaultSettings(), candidate.settings || {}); - settings.effectsQuality = ["full", "reduced", "minimal"].includes(settings.effectsQuality) ? settings.effectsQuality : "full"; - settings.textSpeed = ["slow", "normal", "fast", "instant"].includes(settings.textSpeed) ? settings.textSpeed : "normal"; - const maxHealth = finite(candidate.maxHealth, 100, 100, 160); - return { - version: VERSION, player: { name, appearance }, - health: finite(candidate.health, maxHealth, 0, maxHealth), maxHealth, - attack: weapon ? Data.ITEMS[weapon].attack : 1, defence: armour ? Data.ITEMS[armour].defence : 0, - region: safe.region, - position: { spawn: safe.spawn, x: finite(candidate.position && candidate.position.x, safe.x, 32, 928), y: finite(candidate.position && candidate.position.y, safe.y, 32, 672), facing: FACES.includes(candidate.position && candidate.position.facing) ? candidate.position.facing : "south" }, - checkpoint, - chapter: Math.floor(finite(candidate.chapter, 1, 1, 4)), - story: String(candidate.story || "arrival").slice(0, 64), - quests: normalizeQuests(candidate.quests), inventory, - equipment: { weapon, armour, boots: has("trail_boots") ? "trail_boots" : null, charm: has("forest_charm") ? "forest_charm" : null }, - flags: candidate.flags && typeof candidate.flags === "object" && !Array.isArray(candidate.flags) - ? Object.fromEntries(Object.entries(candidate.flags).filter(([key, value]) => /^[a-z0-9_-]{1,64}$/.test(key) && typeof value === "boolean").slice(0, 160)) : {}, - solvedPuzzles: cleanIds(candidate.solvedPuzzles, 32), defeatedBosses: cleanIds(candidate.defeatedBosses, 16), - openedChests: cleanIds(candidate.openedChests, 64), discoveredSecrets: cleanIds(candidate.discoveredSecrets, 64), - unlockedRoutes: cleanIds(candidate.unlockedRoutes, 64), dialogueHistory: cleanIds(candidate.dialogueHistory, 128), - completedCutscenes: cleanIds(candidate.completedCutscenes, 64), - rescued: candidate.rescued === true || Boolean(candidate.flags && candidate.flags.rescued), - introSeen: candidate.introSeen === true, playTimeSeconds: Math.floor(finite(candidate.playTimeSeconds, 0, 0, 999999)), - settings - }; - } - function cleanIds(value, cap) { - return Array.isArray(value) ? Array.from(new Set(value.filter((id) => typeof id === "string" && /^[a-z0-9_-]{1,64}$/.test(id)))).slice(0, cap) : []; - } - function parse(raw) { - try { return normalize(JSON.parse(raw)); } catch (_error) { return null; } - } - function addItem(state, id, amount) { - const next = normalize(state); - if (!next || !Data.ITEMS[id]) return next; - next.inventory = normalizeInventory(next.inventory.concat([{ id, quantity: amount || 1 }])); - return normalize(next); - } - function quantity(state, id) { - const entry = state.inventory.find((item) => item.id === id); - return entry ? entry.quantity : 0; - } - function startQuest(state, id) { - const next = normalize(state); - if (next && Data.QUESTS[id] && next.quests[id].status === "locked") next.quests[id].status = "active"; - return normalize(next); - } - function completeQuest(state, id) { - let next = normalize(state); - if (!next || !Data.QUESTS[id]) return next; - next.quests[id] = { status: "complete", count: Data.QUESTS[id].target, rewarded: true }; - Data.QUESTS[id].reward.forEach(([item, amount]) => { next = addItem(next, item, amount); }); - const consequences = { - aftermath: ["aftermath_complete"], village_defence: ["village_defended", "village_resolved"], - find_guide: ["guide_found"], ruins_light: ["ruins_complete", "ruins_resolved"], - wolf_miniboss: ["briar_defeated", "forest_resolved"], repair_bridge: ["bridge_repaired", "mountain_resolved"], - stone_guardian: ["guardian_defeated"], rally_resistance: ["emblem_found", "camp_resolved"], - disable_defences: ["defences_disabled", "fortressExterior_resolved"], free_prisoners: ["prisoners_freed"], - break_wards: ["wards_broken", "fortressInterior_resolved"], defeat_malrec: ["malrec_defeated", "bossArena_resolved"] - }; - (consequences[id] || []).forEach((flag) => { next.flags[flag] = true; }); - if (id === "village_defence") next.chapter = 2; - if (id === "stone_guardian") next.chapter = 3; - if (id === "rally_resistance") next.chapter = 4; - return normalize(next); - } - function progressQuest(state, id, amount) { - let next = normalize(state); - if (!next || !Data.QUESTS[id]) return next; - if (next.quests[id].status === "locked") next = startQuest(next, id); - if (next.quests[id].status === "complete") return next; - next.quests[id].count = Math.min(Data.QUESTS[id].target, next.quests[id].count + Math.max(1, amount || 1)); - return next.quests[id].count >= Data.QUESTS[id].target ? completeQuest(next, id) : normalize(next); - } - function applyEffects(state, effects) { - let next = normalize(state); - (effects || []).forEach((effect) => { - if (effect.type === "startQuest") next = startQuest(next, effect.id); - if (effect.type === "completeQuest") next = completeQuest(next, effect.id); - if (effect.type === "progressQuest") next = progressQuest(next, effect.id, effect.amount); - if (effect.type === "item") next = addItem(next, effect.id, effect.amount); - if (effect.type === "flag" && /^[a-z0-9_-]+$/.test(effect.id)) next.flags[effect.id] = effect.value !== false; - }); - return normalize(next); - } - function useTonic(state) { - let next = normalize(state); - if (!next || next.health >= next.maxHealth || quantity(next, "healing_tonic") < 1) return { state: next, used: false }; - next.health = Math.min(next.maxHealth, next.health + Data.ITEMS.healing_tonic.heal); - next.inventory = next.inventory.map((item) => item.id === "healing_tonic" ? { id: item.id, quantity: item.quantity - 1 } : item).filter((item) => item.quantity > 0); - return { state: normalize(next), used: true }; - } - function migrateLegacy(candidate) { - if (!candidate || candidate.version !== 1) return null; - const next = fresh(validName(candidate.player && candidate.player.name) || "Traveller", - candidate.player && APPEARANCES.includes(candidate.player.appearance) ? candidate.player.appearance : "azure"); - next.chapter = Math.floor(finite(candidate.chapter, 1, 1, 4)); - const region = Data.MAP_IDS.includes(candidate.region) ? candidate.region : LEGACY_REGION_BY_CHAPTER[next.chapter]; - const safe = safeSpawn(region, Object.keys(SAFE_SPAWNS[region])[0]); - next.region = region; - next.position = Object.assign(safe, { facing: "south" }); - next.checkpoint = safe; - Object.entries(LEGACY_QUEST_MAP).forEach(([oldId, newId]) => { - const source = candidate.quests && candidate.quests[oldId]; - if (source) next.quests[newId] = { - status: ["locked", "active", "complete"].includes(source.status) ? source.status : "locked", - count: Math.min(Data.QUESTS[newId].target, Math.max(0, Number(source.count) || 0)), - rewarded: source.rewarded === true - }; - }); - next.inventory = normalizeInventory(candidate.inventory); - next.defeatedBosses = cleanIds(candidate.defeatedBosses, 16); - next.flags = Object.assign({}, candidate.flags || {}, { legacy_imported: true }); - next.introSeen = candidate.introSeen !== false; - next.rescued = candidate.rescued === true; - next.settings = Object.assign(defaultSettings(), candidate.settings || {}); - return normalize(next); - } - function load(storage) { - const current = parse(storage.getItem(STORAGE_KEY)); - if (current) return { state: current, migrated: false }; - try { - const legacy = JSON.parse(storage.getItem(LEGACY_KEY) || "null"); - const migrated = migrateLegacy(legacy); - if (migrated) { - storage.setItem(STORAGE_KEY, JSON.stringify(migrated)); - return { state: migrated, migrated: true }; - } - } catch (_error) { /* invalid legacy data is intentionally ignored */ } - return { state: null, migrated: false }; - } - - return Object.freeze({ - VERSION, STORAGE_KEY, LEGACY_KEY, APPEARANCES, FACES, SAFE_SPAWNS, - validName, fresh, normalize, parse, migrateLegacy, load, safeSpawn, - addItem, quantity, startQuest, progressQuest, completeQuest, applyEffects, useTonic - }); -})); diff --git a/assets/scripts/pages/princess-lima-v2-systems.js b/assets/scripts/pages/princess-lima-v2-systems.js deleted file mode 100755 index 94289ed..0000000 --- a/assets/scripts/pages/princess-lima-v2-systems.js +++ /dev/null @@ -1,217 +0,0 @@ -(function (root, factory) { - "use strict"; - const data = root.PrincessLimaV2Data || (typeof require === "function" ? require("./princess-lima-v2-data.js") : null); - const state = root.PrincessLimaV2State || (typeof require === "function" ? require("./princess-lima-v2-state.js") : null); - const api = factory(data, state); - if (typeof module === "object" && module.exports) module.exports = api; - root.PrincessLimaV2Systems = api; -}(typeof globalThis !== "undefined" ? globalThis : this, function (Data, State) { - "use strict"; - const REQUIRED_MAP_LAYERS = Object.freeze([ - "Base terrain", "Terrain variation", "Paths", "Water", "Cliffs and buildings", "Props", - "Objects behind actors", "Actor layer", "Objects above actors", "Shadows", "Lighting", - "Collision", "Interaction zones", "Dialogue triggers", "Quest triggers", "Enemy zones", - "Camera zones", "Scene transitions", "Named safe spawns", "Audio zones", "Optional secrets" - ]); - const ATTACKS = Object.freeze({ - light1: { windup: 90, active: 100, recovery: 145, reach: 44, width: 36, damage: 1, knockback: 34 }, - light2: { windup: 80, active: 110, recovery: 170, reach: 52, width: 44, damage: 1, knockback: 46 }, - charged: { windup: 520, active: 150, recovery: 260, reach: 64, width: 58, damage: 3, knockback: 72 } - }); - - function createInputLock(onChange) { - const reasons = new Map(); - return Object.freeze({ - acquire(reason) { - const token = Symbol(reason); - reasons.set(token, reason || "unknown"); - if (onChange) onChange(true, Array.from(reasons.values())); - return token; - }, - release(token) { - reasons.delete(token); - if (onChange) onChange(reasons.size > 0, Array.from(reasons.values())); - }, - releaseReason(reason) { - Array.from(reasons).forEach(([token, value]) => { if (value === reason) reasons.delete(token); }); - if (onChange) onChange(reasons.size > 0, Array.from(reasons.values())); - }, - clear() { - reasons.clear(); - if (onChange) onChange(false, []); - }, - locked: () => reasons.size > 0, - reasons: () => Array.from(reasons.values()) - }); - } - - function normalizedVector(x, y, speed) { - const length = Math.hypot(x, y); - return length ? { x: x / length * speed, y: y / length * speed } : { x: 0, y: 0 }; - } - function approach(current, target, amount) { - return current < target ? Math.min(target, current + amount) : Math.max(target, current - amount); - } - function movementVelocity(currentX, currentY, inputX, inputY, delta, speed, accelerated) { - const target = normalizedVector(inputX, inputY, speed); - const rate = (accelerated ? 780 : 610) * Math.min(0.05, delta / 1000); - return { x: approach(currentX, target.x, rate), y: approach(currentY, target.y, rate) }; - } - function attackPhase(elapsed, attack) { - const spec = ATTACKS[attack] || ATTACKS.light1; - if (elapsed < spec.windup) return "windup"; - if (elapsed < spec.windup + spec.active) return "active"; - if (elapsed < spec.windup + spec.active + spec.recovery) return "recovery"; - return "complete"; - } - function facingVector(facing) { - return { north: { x: 0, y: -1 }, east: { x: 1, y: 0 }, south: { x: 0, y: 1 }, west: { x: -1, y: 0 } }[facing] || { x: 0, y: 1 }; - } - function attackHitbox(facing, x, y, attack) { - const spec = ATTACKS[attack] || ATTACKS.light1; - const vector = facingVector(facing); - const horizontal = vector.x !== 0; - return { - x: x + vector.x * spec.reach - (horizontal ? spec.reach / 2 : spec.width / 2), - y: y + vector.y * spec.reach - (horizontal ? spec.width / 2 : spec.reach / 2), - width: horizontal ? spec.reach : spec.width, - height: horizontal ? spec.width : spec.reach - }; - } - function bossPhase(health, maximum, phases) { - const count = Math.max(1, phases || 1); - return Math.min(count, Math.floor((1 - Math.max(0, health) / maximum) * count) + 1); - } - function nextEnemyState(current, context) { - const distance = context.distance; - const homeDistance = context.homeDistance; - const spec = context.spec; - if (context.health <= 0) return "dead"; - if (context.stunned) return "hurt"; - if (homeDistance > context.leash) return "return"; - if (current === "return" && homeDistance > 12) return "return"; - if (current === "telegraph" && !context.telegraphDone) return "telegraph"; - if (current === "attack" && !context.attackDone) return "attack"; - if (current === "recover" && !context.cooldownDone) return "recover"; - if (distance <= spec.attackRange && context.cooldownDone) return "telegraph"; - if (distance <= spec.awareness) return spec.role === "ambush" && distance > 90 ? "hidden" : "pursue"; - return "patrol"; - } - function canDamageThroughWall(scene, source, target) { - if (!scene || !scene.collisionLayer || !scene.collisionLayer.getRayCastTiles) return true; - const line = new Phaser.Geom.Line(source.x, source.y, target.x, target.y); - return scene.collisionLayer.getRayCastTiles(line, 4, true).length === 0; - } - function propertyMap(object) { - return Object.fromEntries((object && object.properties || []).map((property) => [property.name, property.value])); - } - function mapLayer(map, name) { - return map.layers.find((layer) => layer.name === name); - } - function validateMap(map, knownMaps) { - const errors = []; - if (!map || map.type !== "map" || map.tilewidth !== Data.TILE || map.tileheight !== Data.TILE) return ["invalid-header"]; - REQUIRED_MAP_LAYERS.forEach((name) => { if (!mapLayer(map, name)) errors.push(`missing-layer:${name}`); }); - const layerNames = new Set(); - map.layers.forEach((layer) => { - if (layerNames.has(layer.name)) errors.push(`duplicate-layer:${layer.name}`); - layerNames.add(layer.name); - }); - const ids = new Set(); - map.layers.filter((layer) => layer.objects).forEach((layer) => layer.objects.forEach((object) => { - if (ids.has(object.id)) errors.push(`duplicate-object:${object.id}`); - ids.add(object.id); - })); - const collisions = (mapLayer(map, "Collision") || { objects: [] }).objects; - const points = ["Named safe spawns", "Dialogue triggers", "Enemy zones"].flatMap((name) => (mapLayer(map, name) || { objects: [] }).objects); - points.forEach((point) => { - const inside = collisions.some((solid) => point.x >= solid.x && point.x <= solid.x + solid.width && point.y >= solid.y && point.y <= solid.y + solid.height); - if (inside) errors.push(`point-in-collision:${point.name}`); - }); - (mapLayer(map, "Scene transitions") || { objects: [] }).objects.forEach((transition) => { - const props = propertyMap(transition); - if (!knownMaps.includes(props.target)) errors.push(`invalid-transition:${transition.name}`); - if (!State.SAFE_SPAWNS[props.target] || !State.SAFE_SPAWNS[props.target][props.spawn]) errors.push(`invalid-spawn:${transition.name}`); - }); - validateReachability(map, collisions, errors); - return errors; - } - function validateReachability(map, collisions, errors) { - const width = map.width; - const height = map.height; - const blocked = Array.from({ length: height }, () => Array(width).fill(false)); - collisions.forEach((solid) => { - const left = Math.max(0, Math.floor(solid.x / Data.TILE)); - const top = Math.max(0, Math.floor(solid.y / Data.TILE)); - const right = Math.min(width, Math.ceil((solid.x + solid.width) / Data.TILE)); - const bottom = Math.min(height, Math.ceil((solid.y + solid.height) / Data.TILE)); - for (let y = top; y < bottom; y += 1) for (let x = left; x < right; x += 1) blocked[y][x] = true; - }); - const spawns = (mapLayer(map, "Named safe spawns") || { objects: [] }).objects; - if (!spawns.length) { - errors.push("missing-safe-spawn"); - return; - } - const origin = tileFor(spawns[0], width, height); - if (blocked[origin.y][origin.x]) { - errors.push(`unreachable-safe-spawn:${spawns[0].name}`); - return; - } - const reached = new Set([`${origin.x}:${origin.y}`]); - const queue = [origin]; - while (queue.length) { - const current = queue.shift(); - [[1, 0], [-1, 0], [0, 1], [0, -1]].forEach(([dx, dy]) => { - const x = current.x + dx, y = current.y + dy, key = `${x}:${y}`; - if (x < 0 || y < 0 || x >= width || y >= height || blocked[y][x] || reached.has(key)) return; - reached.add(key); - queue.push({ x, y }); - }); - } - const required = ["Named safe spawns", "Dialogue triggers", "Quest triggers", "Scene transitions"] - .flatMap((name) => (mapLayer(map, name) || { objects: [] }).objects); - required.forEach((object) => { - const tile = tileFor(object, width, height); - const candidates = [[0, 0], [1, 0], [-1, 0], [0, 1], [0, -1]] - .map(([dx, dy]) => `${tile.x + dx}:${tile.y + dy}`); - if (!candidates.some((key) => reached.has(key))) errors.push(`unreachable-object:${object.name}`); - }); - } - function tileFor(object, width, height) { - const x = object.width ? object.x + object.width / 2 : object.x; - const y = object.height ? object.y + object.height / 2 : object.y; - return { - x: Math.max(0, Math.min(width - 1, Math.floor(x / Data.TILE))), - y: Math.max(0, Math.min(height - 1, Math.floor(y / Data.TILE))) - }; - } - function dialogueNode(dialogueId, nodeId, state) { - const dialogue = Data.DIALOGUES[dialogueId]; - const node = dialogue && dialogue.nodes[nodeId || dialogue.start]; - if (!node) return null; - if (node.condition && !state.flags[node.condition]) return null; - return node; - } - function dialogueChoice(dialogueId, nodeId, choiceIndex, state) { - const node = dialogueNode(dialogueId, nodeId, state); - const choice = node && node.choices && node.choices[choiceIndex]; - if (!choice) return null; - return { next: choice.next, state: State.applyEffects(state, choice.effects) }; - } - function currentObjective(state) { - const active = Object.keys(Data.QUESTS).find((id) => Data.QUESTS[id].main && state.quests[id].status === "active"); - if (active) { - const progress = state.quests[active]; - return `${Data.QUESTS[active].title} · ${progress.count}/${Data.QUESTS[active].target}`; - } - const next = Object.keys(Data.QUESTS).find((id) => Data.QUESTS[id].main && state.quests[id].status === "locked" && Data.QUESTS[id].chapter <= state.chapter); - return next ? Data.QUESTS[next].title : state.rescued ? "The kingdom is free." : "Explore and speak with the people nearby."; - } - - return Object.freeze({ - REQUIRED_MAP_LAYERS, ATTACKS, createInputLock, normalizedVector, movementVelocity, - attackPhase, attackHitbox, facingVector, bossPhase, nextEnemyState, - canDamageThroughWall, propertyMap, mapLayer, validateMap, dialogueNode, dialogueChoice, - currentObjective - }); -})); diff --git a/assets/scripts/pages/princess-lima-v2-ui.js b/assets/scripts/pages/princess-lima-v2-ui.js deleted file mode 100755 index a602d90..0000000 --- a/assets/scripts/pages/princess-lima-v2-ui.js +++ /dev/null @@ -1,239 +0,0 @@ -(function (root) { - "use strict"; - const Data = root.PrincessLimaV2Data; - const State = root.PrincessLimaV2State; - const Systems = root.PrincessLimaV2Systems; - - function create(container, actions) { - const overlay = container.querySelector("[data-lima-overlay]"); - const panel = container.querySelector("[data-lima-panel]"); - const heading = container.querySelector("[data-lima-panel-title]"); - const body = container.querySelector("[data-lima-panel-body]"); - const closeButton = container.querySelector("[data-lima-panel-close]"); - const live = container.querySelector("[data-lima-screenreader]"); - let previousFocus = null; - let dialogue = null; - let typingTimer = null; - let displayed = ""; - let fullText = ""; - - function portraitPosition(speaker, expression) { - const index = Data.PORTRAITS[speaker] && Data.PORTRAITS[speaker][expression] !== undefined - ? Data.PORTRAITS[speaker][expression] : 14; - return `${(index % 4) * 33.333}% ${Math.floor(index / 4) * 33.333}%`; - } - function open(kind, title, html, closable = true) { - previousFocus = document.activeElement; - overlay.hidden = false; - panel.dataset.kind = kind; - heading.textContent = title; - body.innerHTML = html; - closeButton.hidden = !closable; - requestAnimationFrame(() => (body.querySelector("button, input, [tabindex]") || closeButton).focus()); - } - function close() { - if (dialogue) return advance(); - overlay.hidden = true; - panel.dataset.kind = ""; - body.innerHTML = ""; - actions.lock(false, "menu"); - if (previousFocus && previousFocus.focus) previousFocus.focus(); - else actions.focusGame(); - } - function stopTyping() { - if (typingTimer) clearInterval(typingTimer); - typingTimer = null; - } - function typeLine(target, text) { - stopTyping(); - fullText = text; - displayed = ""; - const settings = actions.getState().settings; - const speed = { slow: 42, normal: 27, fast: 12, instant: 0 }[settings.textSpeed]; - if (!speed || settings.reducedMotion) { - target.textContent = text; - displayed = text; - return; - } - let index = 0; - typingTimer = setInterval(() => { - index += 1; - displayed = text.slice(0, index); - target.textContent = displayed; - if (index >= text.length) stopTyping(); - }, speed); - } - function startDialogue(id, options = {}) { - const definition = Data.DIALOGUES[id]; - if (!definition) return; - actions.lock(true, "dialogue"); - actions.beginDialogue(id, options.target); - dialogue = { id, node: definition.start, history: [], done: options.done || null, essential: definition.essential }; - renderDialogue(); - } - function renderDialogue() { - const definition = Data.DIALOGUES[dialogue.id]; - const node = Systems.dialogueNode(dialogue.id, dialogue.node, actions.getState()); - if (!node) return finishDialogue(); - const speaker = Data.ACTORS[node.speaker] ? Data.ACTORS[node.speaker].name : node.speaker; - dialogue.history.push({ speaker, text: node.text }); - live.textContent = `${speaker}: ${node.text}`; - open("dialogue", speaker, ` -${escapeHtml(speaker)} ${escapeHtml(node.expression || "")}
- - -${escapeHtml(entry.text)}
A locally hosted storybook RPG built for this site.
-All game data, maps, images, code, and audio are served from this website.
`); - } else if (kind === "quests") { - const quests = Object.entries(Data.QUESTS).filter(([id]) => state.quests[id].status !== "locked").map(([id, quest]) => { - const progress = state.quests[id]; - return `${escapeHtml(Systems.currentObjective(state))}
${escapeHtml(Data.MAP_NAMES[state.region])}
- `); - body.querySelector("[data-close-panel]").addEventListener("click", close); - body.querySelectorAll("[data-open-panel]").forEach((button) => button.addEventListener("click", () => openPanel(button.dataset.openPanel))); - body.querySelector("[data-replay-intro]").addEventListener("click", actions.replayIntro); - } - } - function gameOver() { - actions.lock(true, "defeat"); - open("gameover", "The Road Grows Quiet", `You wake at the last safe fire. Your story progress and important items remain.
`, false); - body.querySelector("[data-respawn]").addEventListener("click", () => { overlay.hidden = true; actions.lock(false, "defeat"); actions.respawn(); }); - } - function ending() { - actions.lock(true, "ending"); - const allies = ["promised_village", "defences_disabled", "prisoners_freed"].filter((flag) => actions.getState().flags[flag]).length; - open("ending", "Dawn Over Lima", `At dawn the roads reopen. Village bells answer the resistance fires, and the fortress windows shine with ordinary sunlight.
${allies >= 2 ? "The people you helped arrive together; no one returns home alone." : "The kingdom begins the slower work of finding one another again."}
Princess Lima is free.
`, false); - body.querySelector("[data-ending-menu]").addEventListener("click", actions.returnToMenu); - } - - closeButton.addEventListener("click", close); - overlay.addEventListener("click", (event) => { if (event.target === overlay && !dialogue) close(); }); - document.addEventListener("keydown", (event) => { - if (dialogue && (event.key === "Enter" || event.key === " ")) { event.preventDefault(); advance(); } - if (!dialogue && !overlay.hidden && event.key === "Escape") { event.preventDefault(); close(); } - }); - return Object.freeze({ openPanel, startDialogue, gameOver, ending, close, finishDialogue }); - } - function escapeHtml(value) { - return String(value || "").replace(/[&<>"']/g, (character) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[character])); - } - root.PrincessLimaV2UI = Object.freeze({ create }); -}(typeof globalThis !== "undefined" ? globalThis : this)); diff --git a/assets/scripts/vendor/easystar-0.4.4.min.js b/assets/scripts/vendor/easystar-0.4.4.min.js deleted file mode 100755 index 281537c..0000000 --- a/assets/scripts/vendor/easystar-0.4.4.min.js +++ /dev/null @@ -1,25 +0,0 @@ -/*! - * @license - * The MIT License (MIT) - * - * Copyright (c) 2012-2020 Bryce Neal - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -var EasyStar=function(e){var o={};function r(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=o,r.d=function(t,n,e){r.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:e})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(n,t){if(1&t&&(n=r(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var e=Object.create(null);if(r.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)r.d(e,o,function(t){return n[t]}.bind(null,o));return e},r.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(n,"a",n),n},r.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},r.p="/bin/",r(r.s=0)}([function(t,n,e){var P={},M=e(1),_=e(2),A=e(3);t.exports=P;var E=1;P.js=function(){var c,i,f,s=1.4,p=!1,u={},o={},r={},l={},a=!0,h={},d=[],y=Number.MAX_VALUE,v=!1;this.setAcceptableTiles=function(t){t instanceof Array?f=t:!isNaN(parseFloat(t))&&isFinite(t)&&(f=[t])},this.enableSync=function(){p=!0},this.disableSync=function(){p=!1},this.enableDiagonals=function(){v=!0},this.disableDiagonals=function(){v=!1},this.setGrid=function(t){c=t;for(var n=0;nd&&w*r+b*n 1&&(o[1]=Math.floor(l/3)%3-1,p>2&&(o[2]=Math.floor(l/9)%3-1,p>3&&(o[3]=Math.floor(l/27)%3-1))),s=c(p,n,o,e,i),h=f(p,o,a,s),u){case 0:ht?r.ORIENTATION.PORTRAIT:r.ORIENTATION.LANDSCAPE}},74403(t){t.exports=function(t){var e;return""!==t&&("string"==typeof t?e=document.getElementById(t):t&&1===t.nodeType&&(e=t)),e||(e=document.body),e}},56836(t){t.exports=function(t){var e="";try{if(window.DOMParser)e=(new DOMParser).parseFromString(t,"text/xml");else(e=new ActiveXObject("Microsoft.XMLDOM")).loadXML(t)}catch(t){e=null}return e&&e.documentElement&&!e.getElementsByTagName("parsererror").length?e:null}},35846(t){t.exports=function(t){t.parentNode&&t.parentNode.removeChild(t)}},43092(t,e,i){var r=i(83419),s=i(29747),n=new r({initialize:function(){this.isRunning=!1,this.callback=s,this.isSetTimeOut=!1,this.timeOutID=null,this.delay=0;var t=this;this.step=function e(i){t.callback(i),t.isRunning&&(t.timeOutID=window.requestAnimationFrame(e))},this.stepTimeout=function e(){t.isRunning&&(t.timeOutID=window.setTimeout(e,t.delay)),t.callback(window.performance.now())}},start:function(t,e,i){this.isRunning||(this.callback=t,this.isSetTimeOut=e,this.delay=i,this.isRunning=!0,this.timeOutID=e?window.setTimeout(this.stepTimeout,0):window.requestAnimationFrame(this.step))},stop:function(){this.isRunning=!1,this.isSetTimeOut?clearTimeout(this.timeOutID):window.cancelAnimationFrame(this.timeOutID)},destroy:function(){this.stop(),this.callback=s}});t.exports=n},84902(t,e,i){var r={AddToDOM:i(40366),DOMContentLoaded:i(57264),GetInnerHeight:i(57811),GetScreenOrientation:i(45818),GetTarget:i(74403),ParseXML:i(56836),RemoveFromDOM:i(35846),RequestAnimationFrame:i(43092)};t.exports=r},47565(t,e,i){var r=i(83419),s=i(50792),n=i(37277),a=new r({Extends:s,initialize:function(){s.call(this)},shutdown:function(){this.removeAllListeners()},destroy:function(){this.removeAllListeners()}});n.register("EventEmitter",a,"events"),t.exports=a},93055(t,e,i){t.exports={EventEmitter:i(47565)}},10189(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e){void 0===e&&(e=1),s.call(this,t,"FilterBarrel"),this.amount=e}});t.exports=n},16762(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r,n){void 0===e&&(e="__WHITE"),void 0===i&&(i=0),void 0===r&&(r=1),void 0===n&&(n=[1,1,1,1]),s.call(this,t,"FilterBlend"),this.glTexture,this.blendMode=i,this.amount=r,this.color=n,this.setTexture(e)},setTexture:function(t){var e=this.camera.scene.sys.textures.getFrame(t);return e&&(this.glTexture=e.glTexture),this}});t.exports=n},37597(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e){s.call(this,t,"FilterBlocky"),this.size={x:4,y:4},this.offset={x:0,y:0},e&&(void 0!==e.size&&("number"==typeof e.size?(this.size.x=e.size,this.size.y=e.size):(this.size.x=e.size.x,this.size.y=e.size.y)),void 0!==e.offset&&("number"==typeof e.offset?(this.offset.x=e.offset,this.offset.y=e.offset):(this.offset.x=e.offset.x,this.offset.y=e.offset.y)))}});t.exports=n},88344(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r,n,a,o){void 0===e&&(e=0),void 0===i&&(i=2),void 0===r&&(r=2),void 0===n&&(n=1),void 0===o&&(o=4),s.call(this,t,"FilterBlur"),this.quality=e,this.x=i,this.y=r,this.strength=n,this.glcolor=[1,1,1],null!=a&&(this.color=a),this.steps=o},color:{get:function(){var t=this.glcolor;return(255*t[0]<<16)+(255*t[1]<<8)+(255*t[2]|0)},set:function(t){var e=this.glcolor;e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255}},getPadding:function(){var t=this.paddingOverride;if(t)return this.currentPadding.setTo(t.x,t.y,t.width,t.height),t;var e=this.quality,i=0===e?1.333:1===e?3.2307692308:5.176470588235294,r=this.steps*this.strength*i,s=Math.ceil(this.x*r),n=Math.ceil(this.y*r);return this.currentPadding.setTo(-s,-n,2*s,2*n),this.currentPadding}});t.exports=n},47564(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r,n,a,o,h){void 0===e&&(e=.5),void 0===i&&(i=1),void 0===r&&(r=.2),void 0===n&&(n=!1),void 0===a&&(a=1),void 0===o&&(o=1),void 0===h&&(h=1),s.call(this,t,"FilterBokeh"),this.radius=e,this.amount=i,this.contrast=r,this.isTiltShift=n,this.blurX=a,this.blurY=o,this.strength=h},getPadding:function(){var t=this.paddingOverride;if(t)return this.currentPadding.setTo(t.x,t.y,t.width,t.height),t;var e=Math.ceil(this.camera.height*this.radius*.021426096060426905);return this.currentPadding.setTo(-e,-e,2*e,2*e),this.currentPadding}});t.exports=n},77011(t,e,i){var r=i(83419),s=i(13045),n=i(89422),a=new r({Extends:s,initialize:function(t){s.call(this,t,"FilterColorMatrix"),this.colorMatrix=new n},destroy:function(){this.colorMatrix=null,s.prototype.destroy.call(this)}});t.exports=a},95200(t,e,i){var r=i(83419),s=i(13045),n=i(89422),a=new r({Extends:s,initialize:function(t,e){s.call(this,t,"FilterCombineColorMatrix"),this.glTexture,this.colorMatrixSelf=new n,this.colorMatrixTransfer=new n,this.additions=[1,1,1,0],this.multiplications=[0,0,0,1],this.setTexture(e||"__WHITE")},setTexture:function(t){var e=t instanceof Phaser.Textures.Texture?t:this.camera.scene.sys.textures.getFrame(t);return e&&(this.glTexture=e.glTexture),this},setupAlphaTransfer:function(t,e,i,r,s,n){var a=this.colorMatrixSelf,o=this.colorMatrixTransfer;a.reset(),o.reset(),this.additions=[1,1,1,0],this.multiplications=[0,0,0,1],t||a.black(),e||o.black(),s?a.brightnessToAlphaInverse(!0):i&&a.brightnessToAlpha(!0),n?o.brightnessToAlphaInverse(!0):r&&o.brightnessToAlpha(!0)},destroy:function(){this.colorMatrixSelf=null,this.colorMatrixTransfer=null,s.prototype.destroy.call(this)}});t.exports=a},13045(t,e,i){var r=i(83419),s=i(87841),n=new r({initialize:function(t,e){this.active=!0,this.camera=t,this.renderNode=e,this.paddingOverride=new s,this.currentPadding=new s,this.allowBaseDraw=!0,this.ignoreDestroy=!1},getPadding:function(){return this.paddingOverride||this.currentPadding},getPaddingCeil:function(){var t=this.getPadding(),e=new s(Math.ceil(t.x),Math.ceil(t.y),Math.ceil(t.width),Math.ceil(t.height));return this.currentPadding.setTo(e.x,e.y,e.width,e.height),e},setPaddingOverride:function(t,e,i,r){return null===t?(this.paddingOverride=null,this):(void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===r&&(r=0),this.paddingOverride=new s(t,e,i-t,r-e),this)},setActive:function(t){return this.active=t,this},destroy:function(){this.active=!1,this.renderNode=null,this.camera=null}});t.exports=n},16898(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r){void 0===e&&(e="__WHITE"),void 0===i&&(i=.005),void 0===r&&(r=.005),s.call(this,t,"FilterDisplacement"),this.x=i,this.y=r,this.glTexture,this.setTexture(e)},setTexture:function(t){var e=this.camera.scene.sys.textures.getFrame(t);return e&&(this.glTexture=e.glTexture),this},getPadding:function(){var t=this.paddingOverride;if(t)return this.currentPadding.setTo(t.x,t.y,t.width,t.height),t;var e=this.camera,i=Math.ceil(e.width*this.x*.5),r=Math.ceil(e.height*this.y*.5);return this.currentPadding.setTo(-i,-r,2*i,2*r),this.currentPadding}});t.exports=n},42652(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r,n,a,o,h){void 0===i&&(i=4),void 0===r&&(r=0),void 0===n&&(n=1),void 0===a&&(a=!1),void 0===o&&(o=t.scene.sys.game.config.glowQuality),void 0===h&&(h=t.scene.sys.game.config.glowDistance),s.call(this,t,"FilterGlow"),this.outerStrength=i,this.innerStrength=r,this.scale=n,this.knockout=a,this._quality=Math.max(Math.round(o),1),this._distance=Math.max(Math.round(h),1),this.glcolor=[1,1,1,1],void 0!==e&&(this.color=e)},color:{get:function(){var t=this.glcolor;return(255*t[0]<<16)+(255*t[1]<<8)+(255*t[2]|0)},set:function(t){var e=this.glcolor;e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255}},distance:{get:function(){return this._distance}},quality:{get:function(){return this._quality}},getPadding:function(){var t=this.paddingOverride;if(t)return this.currentPadding.setTo(t.x,t.y,t.width,t.height),t;var e=this.currentPadding,i=Math.ceil(this.distance*this.scale);return e.left=-i,e.top=-i,e.right=i,e.bottom=i,e}});t.exports=n},43927(t,e,i){var r=i(83419),s=i(13045),n=i(73043),a=new r({Extends:s,initialize:function(t,e){e||(e={});var i=t.scene;s.call(this,t,"FilterGradientMap");var r=e.ramp;r||(r={colorStart:0,colorEnd:16777215}),r instanceof n||(r=new n(i,r,!0)),this.ramp=r,this.dither=!!e.dither,this.color=[0,0,0,0],e.color&&(this.color[0]=e.color[0]||0,this.color[1]=e.color[1]||0,this.color[2]=e.color[2]||0,this.color[3]=e.color[3]||0),this.colorFactor=[.3,.6,.1,0],e.colorFactor&&(this.colorFactor[0]=e.colorFactor[0]||0,this.colorFactor[1]=e.colorFactor[1]||0,this.colorFactor[2]=e.colorFactor[2]||0,this.colorFactor[3]=e.colorFactor[3]||0),this.unpremultiply=void 0===e.unpremultiply||e.unpremultiply,this.alpha=void 0===e.alpha?1:e.alpha}});t.exports=a},84714(t,e,i){var r=i(83419),s=i(13045),n=i(37867),a=i(61340),o=new r({Extends:s,initialize:function(t,e){s.call(this,t,"FilterImageLight"),this.normalGlTexture,this.environmentGlTexture,this.viewMatrix=new n,this.modelRotation=e.modelRotation||0,this.modelRotationSource=e.modelRotationSource||null,this.bulge=e.bulge||0,this.colorFactor=e.colorFactor||[1,1,1],this._tempMatrix=new a,this._tempParentMatrix=new a,this.setEnvironmentMap(e.environmentMap||"__WHITE"),this.setNormalMap(e.normalMap||"__NORMAL"),e.viewMatrix&&this.viewMatrix.set(e.viewMatrix)},setEnvironmentMap:function(t){var e=t instanceof Phaser.Textures.Texture?t:this.camera.scene.sys.textures.getFrame(t);return e&&(this.environmentGlTexture=e.glTexture),this},setNormalMap:function(t){var e=t instanceof Phaser.Textures.Texture?t:this.camera.scene.sys.textures.getFrame(t);return e&&(this.normalGlTexture=e.glTexture),this},setNormalMapFromGameObject:function(t){var e=t.texture.dataSource[0];return e&&(this.normalGlTexture=e.glTexture),this},getModelRotation:function(){return this.modelRotationSource?"function"==typeof this.modelRotationSource?this.modelRotationSource():this.modelRotationSource.hasTransformComponent?this.modelRotationSource.getWorldTransformMatrix(this._tempMatrix,this._tempParentMatrix).rotationNormalized:this.modelRotation:this.modelRotation}});t.exports=o},51890(t,e,i){var r=i(83419),s=i(13045),n=i(40987),a=new r({Extends:s,initialize:function(t,e){void 0===e&&(e={}),s.call(this,t,"FilterKey"),this.color=[1,1,1,1],void 0!==e.color&&this.setColor(e.color),void 0!==e.alpha&&this.setAlpha(e.alpha),this.isolate=!1,void 0!==e.isolate&&(this.isolate=e.isolate),this.threshold=.0625,void 0!==e.threshold&&(this.threshold=e.threshold),this.feather=0,void 0!==e.feather&&(this.feather=e.feather)},setAlpha:function(t){return this.color[3]=t,this},setColor:function(t){var e=this.color[3];if("number"==typeof t){var i=n.IntegerToRGB(t);this.color=[i.r/255,i.g/255,i.b/255,e]}else if("string"==typeof t){var r=n.HexStringToColor(t);this.color=[r.redGL,r.greenGL,r.blueGL,e]}else Array.isArray(t)?this.color=[t[0],t[1],t[2],e]:t instanceof n&&(this.color=[t.redGL,t.greenGL,t.blueGL,e]);return this}});t.exports=a},97797(t,e,i){var r=i(83419),s=i(45650),n=i(13045),a=new r({Extends:n,initialize:function(t,e,i,r,s,a){void 0===e&&(e="__WHITE"),void 0===i&&(i=!1),void 0===a&&(a=1),n.call(this,t,"FilterMask"),this.glTexture,this._dynamicTexture=null,this.maskGameObject=null,this.invert=i,this.autoUpdate=!0,this.needsUpdate=!1,this.viewTransform=s||"world",this.viewCamera=r,this.scaleFactor=a,"string"==typeof e?this.setTexture(e):this.setGameObject(e)},updateDynamicTexture:function(t,e){var i=this.scaleFactor,r=t*i,n=e*i,a=this.maskGameObject;if(a){if(this._dynamicTexture)this._dynamicTexture.width!==r||this._dynamicTexture.height!==n?this._dynamicTexture.setSize(r,n,!1):this._dynamicTexture.clear();else{var o=this.camera.scene.sys.textures;this._dynamicTexture=o.addDynamicTexture(s(),r,n,!1)}this.glTexture=this._dynamicTexture.get().glTexture;var h=this.viewCamera||a.scene.renderer.currentViewCamera;this._dynamicTexture.capture(a,{transform:this.viewTransform,camera:h}),this._dynamicTexture.render(),this.needsUpdate=!1}},setGameObject:function(t){return this.maskGameObject=t,this.needsUpdate=!0,this},setTexture:function(t){var e=this.camera.scene.sys.textures.getFrame(t);return e&&(this.maskGameObject=null,this.glTexture=e.glTexture),this},destroy:function(){this._dynamicTexture&&this._dynamicTexture.destroy(),this.maskGameObject=null,this._dynamicTexture=null,n.prototype.destroy.call(this)}});t.exports=a},37911(t,e,i){var r=i(83419),s=i(13045),n=i(37867),a=i(25836),o=new r({Extends:s,initialize:function(t,e){e=e||{},s.call(this,t,"FilterNormalTools"),this._rotation=0,this.viewMatrix=new n,this.setRotation(e.rotation||0),this.rotationSource=e.rotationSource||null,this.facingPower=e.facingPower||1,this.outputRatio=e.outputRatio||!1,this.ratioVector=new a(0,0,1),e.ratioVector&&this.ratioVector.set(e.ratioVector[0],e.ratioVector[1],e.ratioVector[2]),this.ratioRadius=e.ratioRadius||1},getRotation:function(){if(this.rotationSource){if("function"==typeof this.rotationSource)return this.rotationSource();if(this.rotationSource.hasTransformComponent)return this.rotationSource.getWorldTransformMatrix().rotationNormalized}return this._rotation},setRotation:function(t){return this.viewMatrix.identity().rotateZ(t),this._rotation=t,this},updateRotation:function(){if(this.rotationSource){var t=this.getRotation();this.viewMatrix.identity().rotateZ(t),this._rotation=t}return this}});t.exports=o},6379(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e){void 0===e&&(e={}),s.call(this,t,"FilterPanoramaBlur"),this.radius=e.radius||1,this.samplesX=e.samplesX||32,this.samplesY=e.samplesY||16,this.power=e.power||1}});t.exports=n},2195(t,e,i){var r=i(83419),s=i(53427),n=i(13045),a=i(16762),o=new r({Extends:n,initialize:function(t){n.call(this,t,"FilterParallelFilters"),this.top=new s(t),this.bottom=new s(t),this.blend=new a(t)}});s.prototype.addParallelFilters=function(){return this.add(new o(this.camera))},t.exports=o},29861(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e){void 0===e&&(e=1),s.call(this,t,"FilterPixelate"),this.amount=e}});t.exports=n},14366(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e){e||(e={}),s.call(this,t,"FilterQuantize"),this.steps=[8,8,8,8],e.steps&&(this.steps[0]=e.steps[0],this.steps[1]=e.steps[1],this.steps[2]=e.steps[2],this.steps[3]=e.steps[3]),this.gamma=[1,1,1,1],e.gamma&&(this.gamma[0]=e.gamma[0],this.gamma[1]=e.gamma[1],this.gamma[2]=e.gamma[2],this.gamma[3]=e.gamma[3]),this.offset=[0,0,0,0],e.offset&&(this.offset[0]=e.offset[0],this.offset[1]=e.offset[1],this.offset[2]=e.offset[2],this.offset[3]=e.offset[3]),this.mode=e.mode||0,this.dither=!!e.dither}});t.exports=n},63785(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i){void 0===i&&(i=null),s.call(this,t,"FilterSampler"),this.allowBaseDraw=!1,this.callback=e,this.region=i}});t.exports=n},62229(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r,n,a,o,h){void 0===e&&(e=0),void 0===i&&(i=0),void 0===r&&(r=.1),void 0===n&&(n=1),void 0===o&&(o=6),void 0===h&&(h=1),s.call(this,t,"FilterShadow"),this.x=e,this.y=i,this.decay=r,this.power=n,this.glcolor=[0,0,0,1],this.samples=o,this.intensity=h,void 0!==a&&(this.color=a)},color:{get:function(){var t=this.glcolor;return(255*t[0]<<16)+(255*t[1]<<8)+(255*t[2]|0)},set:function(t){var e=this.glcolor;e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255}},getPadding:function(){var t=this.paddingOverride;if(t)return this.currentPadding.setTo(t.x,t.y,t.width,t.height),t;var e=this.camera,i=this.decay*this.intensity,r=Math.ceil(Math.abs(this.x)*e.width*i),s=Math.ceil(Math.abs(this.y)*e.height*i);return this.currentPadding.setTo(-r,-s,2*r,2*s),this.currentPadding}});t.exports=n},99534(t,e,i){var r=i(83419),s=i(13045),n=new r({Extends:s,initialize:function(t,e,i,r){s.call(this,t,"FilterThreshold"),this.edge1=[.5,.5,.5,.5],this.edge2=[.5,.5,.5,.5],this.invert=[!1,!1,!1,!1],this.setEdge(e,i),this.setInvert(r)},setEdge:function(t,e){void 0===t&&(t=.5),"number"==typeof t&&(t=[t,t,t,t]),this.edge1[0]=t[0],this.edge1[1]=t[1],this.edge1[2]=t[2],this.edge1[3]=t[3],void 0===e&&(e=t),"number"==typeof e&&(e=[e,e,e,e]),this.edge2[0]=e[0],this.edge2[1]=e[1],this.edge2[2]=e[2],this.edge2[3]=e[3];for(var i=0;i<4;i++)if(this.edge1[i]>this.edge2[i]){var r=this.edge1[i];this.edge1[i]=this.edge2[i],this.edge2[i]=r}return this},setInvert:function(t){return void 0===t&&(t=!1),"boolean"==typeof t&&(t=[t,t,t,t]),this.invert[0]=t[0],this.invert[1]=t[1],this.invert[2]=t[2],this.invert[3]=t[3],this}});t.exports=n},20263(t,e,i){var r=i(83419),s=i(13045),n=i(40987),a=new r({Extends:s,initialize:function(t,e,i,r,a,o,h){void 0===e&&(e=.5),void 0===i&&(i=.5),void 0===r&&(r=.5),void 0===a&&(a=.5),void 0===o&&(o=0),void 0===h&&(h=0),s.call(this,t,"FilterVignette"),this.x=e,this.y=i,this.radius=r,this.strength=a,this.color=new n,this.blendMode=h,this.setColor(o)},setColor:function(t){return"number"==typeof t?n.IntegerToColor(t,this.color):"string"==typeof t?n.HexStringToColor(t,this.color):t.setTo?this.color.setTo(t.red,t.green,t.blue,t.alpha):t?this.color.setTo(t.r||0,t.g||0,t.b||0,t.a||255):this.color.setTo(0,0,0,255),this}});t.exports=a},90002(t,e,i){var r=i(83419),s=i(13045),n=i(79237),a=new r({Extends:s,initialize:function(t,e,i,r,n,a){void 0===e&&(e=.1),s.call(this,t,"FilterWipe"),this.progress=0,this.wipeWidth=e,this.direction=i||0,this.axis=r||0,this.reveal=n||0,this.wipeTexture=null,this.setTexture(a)},setWipeWidth:function(t){return void 0===t&&(t=.1),this.wipeWidth=t,this},setLeftToRight:function(){return this.direction=0,this.axis=0,this},setRightToLeft:function(){return this.direction=1,this.axis=0,this},setTopToBottom:function(){return this.direction=1,this.axis=1,this},setBottomToTop:function(){return this.direction=0,this.axis=1,this},setWipeEffect:function(){return this.reveal=0,this.progress=0,this},setRevealEffect:function(){return this.setTexture(),this.reveal=1,this.progress=0,this},setTexture:function(t){return void 0===t&&(t="__DEFAULT"),this.wipeTexture=t instanceof n?t:this.camera.scene.sys.textures.get(t)||this.camera.scene.sys.textures.get("__DEFAULT"),this},setProgress:function(t){return this.progress=t,this}});t.exports=a},11889(t,e,i){var r={Controller:i(13045),Barrel:i(10189),Blend:i(16762),Blocky:i(37597),Blur:i(88344),Bokeh:i(47564),ColorMatrix:i(77011),CombineColorMatrix:i(95200),Displacement:i(16898),Glow:i(42652),GradientMap:i(43927),ImageLight:i(84714),Key:i(51890),Mask:i(97797),NormalTools:i(37911),PanoramaBlur:i(6379),ParallelFilters:i(2195),Pixelate:i(29861),Quantize:i(14366),Sampler:i(63785),Shadow:i(62229),Threshold:i(99534),Vignette:i(20263),Wipe:i(90002)};t.exports=r},25305(t,e,i){var r=i(10312),s=i(23568);t.exports=function(t,e,i){e.x=s(i,"x",0),e.y=s(i,"y",0),e.depth=s(i,"depth",0),e.flipX=s(i,"flipX",!1),e.flipY=s(i,"flipY",!1);var n=s(i,"scale",null);"number"==typeof n?e.setScale(n):null!==n&&(e.scaleX=s(n,"x",1),e.scaleY=s(n,"y",1));var a=s(i,"scrollFactor",null);"number"==typeof a?e.setScrollFactor(a):null!==a&&(e.scrollFactorX=s(a,"x",1),e.scrollFactorY=s(a,"y",1)),e.rotation=s(i,"rotation",0);var o=s(i,"angle",null);null!==o&&(e.angle=o),e.alpha=s(i,"alpha",1);var h=s(i,"origin",null);if("number"==typeof h)e.setOrigin(h);else if(null!==h){var l=s(h,"x",.5),u=s(h,"y",.5);e.setOrigin(l,u)}return e.blendMode=s(i,"blendMode",r.NORMAL),e.visible=s(i,"visible",!0),s(i,"add",!0)&&t.sys.displayList.add(e),e.preUpdate&&t.sys.updateList.add(e),e}},13059(t,e,i){var r=i(23568);t.exports=function(t,e){var i=r(e,"anims",null);if(null===i)return t;if("string"==typeof i)t.anims.play(i);else if("object"==typeof i){var s=t.anims,n=r(i,"key",void 0);if(n){var a=r(i,"startFrame",void 0),o=r(i,"delay",0),h=r(i,"repeat",0),l=r(i,"repeatDelay",0),u=r(i,"yoyo",!1),d=r(i,"play",!1),c=r(i,"delayedPlay",0),f={key:n,delay:o,repeat:h,repeatDelay:l,yoyo:u,startFrame:a};d?s.play(f):c>0?s.playAfterDelay(f,c):s.load(f)}}return t}},8050(t,e,i){var r=i(83419),s=i(73162),n=i(37277),a=i(51708),o=i(44594),h=i(19186),l=new r({Extends:s,initialize:function(t){s.call(this,t),this.sortChildrenFlag=!1,this.scene=t,this.systems=t.sys,this.events=t.sys.events,this.addCallback=this.addChildCallback,this.removeCallback=this.removeChildCallback,this.events.once(o.BOOT,this.boot,this),this.events.on(o.START,this.start,this)},boot:function(){this.events.once(o.DESTROY,this.destroy,this)},addChildCallback:function(t){t.displayList&&t.displayList!==this&&t.removeFromDisplayList(),t.parentContainer&&t.parentContainer.remove(t),t.displayList||(this.queueDepthSort(),t.displayList=this,t.emit(a.ADDED_TO_SCENE,t,this.scene),this.events.emit(o.ADDED_TO_SCENE,t,this.scene))},removeChildCallback:function(t){this.queueDepthSort(),t.displayList=null,t.emit(a.REMOVED_FROM_SCENE,t,this.scene),this.events.emit(o.REMOVED_FROM_SCENE,t,this.scene)},start:function(){this.events.once(o.SHUTDOWN,this.shutdown,this)},queueDepthSort:function(){this.sortChildrenFlag=!0},depthSort:function(){this.sortChildrenFlag&&(h(this.list,this.sortByDepth),this.sortChildrenFlag=!1)},sortByDepth:function(t,e){return t._depth-e._depth},getChildren:function(){return this.list},shutdown:function(){for(var t=this.list,e=t.length;e--;)t[e]&&t[e].destroy(!0);t.length=0,this.events.off(o.SHUTDOWN,this.shutdown,this)},destroy:function(){this.shutdown(),this.events.off(o.START,this.start,this),this.scene=null,this.systems=null,this.events=null}});n.register("DisplayList",l,"displayList"),t.exports=l},95643(t,e,i){var r=i(83419),s=i(31401),n=i(53774),a=i(45893),o=i(50792),h=i(51708),l=i(44594),u=new r({Extends:o,Mixins:[s.Filters,s.RenderSteps],initialize:function(t,e){o.call(this),this.scene=t,this.displayList=null,this.type=e,this.state=0,this.parentContainer=null,this.name="",this.active=!0,this.tabIndex=-1,this.data=null,this.renderFlags=15,this.cameraFilter=0,this.vertexRoundMode="safeAuto",this.input=null,this.body=null,this.ignoreDestroy=!1,this.isDestroyed=!1,this.addRenderStep&&this.addRenderStep(this.renderWebGL),this.on(h.ADDED_TO_SCENE,this.addedToScene,this),this.on(h.REMOVED_FROM_SCENE,this.removedFromScene,this),t.sys.queueDepthSort()},setActive:function(t){return this.active=t,this},setName:function(t){return this.name=t,this},setState:function(t){return this.state=t,this},setDataEnabled:function(){return this.data||(this.data=new a(this)),this},setData:function(t,e){return this.data||(this.data=new a(this)),this.data.set(t,e),this},incData:function(t,e){return this.data||(this.data=new a(this)),this.data.inc(t,e),this},toggleData:function(t){return this.data||(this.data=new a(this)),this.data.toggle(t),this},getData:function(t){return this.data||(this.data=new a(this)),this.data.get(t)},setInteractive:function(t,e,i){return this.scene.sys.input.enable(this,t,e,i),this},disableInteractive:function(t){return void 0===t&&(t=!1),this.scene.sys.input.disable(this,t),this},removeInteractive:function(t){return void 0===t&&(t=!1),this.scene.sys.input.clear(this),t&&this.scene.sys.input.resetCursor(),this.input=void 0,this},addedToScene:function(){},removedFromScene:function(){},update:function(){},toJSON:function(){return n(this)},willRender:function(t){return!(!(!this.displayList||!this.displayList.active||this.displayList.willRender(t))||u.RENDER_MASK!==this.renderFlags||0!==this.cameraFilter&&this.cameraFilter&t.id)},willRoundVertices:function(t,e){switch(this.vertexRoundMode){case"safe":return e;case"safeAuto":return e&&t.roundPixels;case"full":return!0;case"fullAuto":return t.roundPixels;default:return!1}},setVertexRoundMode:function(t){return this.vertexRoundMode=t,this},getIndexList:function(){for(var t=this,e=this.parentContainer,i=[];e&&(i.unshift(e.getIndex(t)),t=e,e.parentContainer);)e=e.parentContainer;return this.displayList?i.unshift(this.displayList.getIndex(t)):i.unshift(this.scene.sys.displayList.getIndex(t)),i},addToDisplayList:function(t){return void 0===t&&(t=this.scene.sys.displayList),this.displayList&&this.displayList!==t&&this.removeFromDisplayList(),t.exists(this)||(this.displayList=t,t.add(this,!0),t.queueDepthSort(),this.emit(h.ADDED_TO_SCENE,this,this.scene),t.events.emit(l.ADDED_TO_SCENE,this,this.scene)),this},addToUpdateList:function(){return this.scene&&this.preUpdate&&this.scene.sys.updateList.add(this),this},removeFromDisplayList:function(){var t=this.displayList||this.scene.sys.displayList;return t&&t.exists(this)&&(t.remove(this,!0),t.queueDepthSort(),this.displayList=null,this.emit(h.REMOVED_FROM_SCENE,this,this.scene),t.events.emit(l.REMOVED_FROM_SCENE,this,this.scene)),this},removeFromUpdateList:function(){return this.scene&&this.preUpdate&&this.scene.sys.updateList.remove(this),this},getDisplayList:function(){var t=null;return this.parentContainer?t=this.parentContainer.list:this.displayList&&(t=this.displayList.list),t},destroy:function(t){this.scene&&!this.ignoreDestroy&&(void 0===t&&(t=!1),this.isDestroyed=!0,this.preDestroy&&this.preDestroy.call(this),this.emit(h.DESTROY,this,t),this.removeAllListeners(),this.removeFromDisplayList(),this.removeFromUpdateList(),this.input&&(this.scene.sys.input.clear(this),this.input=void 0),this.data&&(this.data.destroy(),this.data=void 0),this.body&&(this.body.destroy(),this.body=void 0),this.filterCamera&&(this.filterCamera.destroy(),this.filterCamera=void 0),this.active=!1,this.visible=!1,this.scene=void 0,this.parentContainer=void 0)}});u.RENDER_MASK=15,t.exports=u},44603(t,e,i){var r=i(83419),s=i(37277),n=i(44594),a=new r({initialize:function(t){this.scene=t,this.systems=t.sys,this.events=t.sys.events,this.displayList,this.updateList,this.events.once(n.BOOT,this.boot,this),this.events.on(n.START,this.start,this)},boot:function(){this.displayList=this.systems.displayList,this.updateList=this.systems.updateList,this.events.once(n.DESTROY,this.destroy,this)},start:function(){this.events.once(n.SHUTDOWN,this.shutdown,this)},shutdown:function(){this.events.off(n.SHUTDOWN,this.shutdown,this)},destroy:function(){this.shutdown(),this.events.off(n.START,this.start,this),this.scene=null,this.systems=null,this.events=null,this.displayList=null,this.updateList=null}});a.register=function(t,e){a.prototype.hasOwnProperty(t)||(a.prototype[t]=e)},a.remove=function(t){a.prototype.hasOwnProperty(t)&&delete a.prototype[t]},s.register("GameObjectCreator",a,"make"),t.exports=a},39429(t,e,i){var r=i(83419),s=i(37277),n=i(44594),a=new r({initialize:function(t){this.scene=t,this.systems=t.sys,this.events=t.sys.events,this.displayList,this.updateList,this.events.once(n.BOOT,this.boot,this),this.events.on(n.START,this.start,this)},boot:function(){this.displayList=this.systems.displayList,this.updateList=this.systems.updateList,this.events.once(n.DESTROY,this.destroy,this)},start:function(){this.events.once(n.SHUTDOWN,this.shutdown,this)},existing:function(t){return(t.renderCanvas||t.renderWebGL)&&this.displayList.add(t),t.preUpdate&&this.updateList.add(t),t},shutdown:function(){this.events.off(n.SHUTDOWN,this.shutdown,this)},destroy:function(){this.shutdown(),this.events.off(n.START,this.start,this),this.scene=null,this.systems=null,this.events=null,this.displayList=null,this.updateList=null}});a.register=function(t,e){a.prototype.hasOwnProperty(t)||(a.prototype[t]=e)},a.remove=function(t){a.prototype.hasOwnProperty(t)&&delete a.prototype[t]},s.register("GameObjectFactory",a,"add"),t.exports=a},91296(t,e,i){var r=i(61340),s=new r,n=new r,a=new r,o=new r,h={camera:s,sprite:n,calc:a,cameraExternal:o};t.exports=function(t,e,i,r){return r?o.loadIdentity():o.copyFrom(e.matrixExternal),s.copyWithScrollFactorFrom(r?e.matrix:e.matrixCombined,e.scrollX,e.scrollY,t.scrollFactorX,t.scrollFactorY),a.copyFrom(s),i&&a.multiply(i),n.applyITRS(t.x,t.y,t.rotation,t.scaleX,t.scaleY),a.multiply(n),h}},45027(t,e,i){var r=i(83419),s=i(25774),n=i(37277),a=i(44594),o=new r({Extends:s,initialize:function(t){s.call(this),this.checkQueue=!0,this.scene=t,this.systems=t.sys,t.sys.events.once(a.BOOT,this.boot,this),t.sys.events.on(a.START,this.start,this)},boot:function(){this.systems.events.once(a.DESTROY,this.destroy,this)},start:function(){var t=this.systems.events;t.on(a.PRE_UPDATE,this.update,this),t.on(a.UPDATE,this.sceneUpdate,this),t.once(a.SHUTDOWN,this.shutdown,this)},sceneUpdate:function(t,e){for(var i=this._active,r=i.length,s=0;sF&&(F=I),I
h&&(o=l,h=u)}h>n&&(o-e>1&&r(t,e,o,n,a),a.push(t[o]),s-o>1&&r(t,o,s,n,a))}function s(t,e){var i=t.length-1,s=[t[0]];return r(t,0,i,e,s),s.push(t[i]),s}t.exports=function(t,i,r){void 0===i&&(i=1),void 0===r&&(r=!1);var n=t.points;if(n.length>2){var a=i*i;r||(n=function(t,i){for(var r,s=t[0],n=[s],a=1,o=t.length;an&&(n=h.y),h.y>>0)+2891336453,s=277803737*(r>>>(r>>>28)+4^r),n=(s>>>22^s)>>>0;return n/=f};t.exports=function(t,e){switch("number"==typeof t&&(t=[t]),e){case 2:return p(t,!0);case 1:return p(t);default:return c(t)}}},84854(t,e,i){var r=i(72958),s=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],n=Array(4),a=Array(4),o=Array(4),h=Array(4),l=Array(4),u=Array(4),d=function(t,e,i){var r,s,h,l,u=e.noiseMode||0,d=void 0===e.noiseSmoothing?1:e.noiseSmoothing,p=Math.max(1,Math.min(t.length,4)),g=e.noiseCells||[32,32,32,32].slice(0,p);for(r=0;r0&&u&&t.checkCollision.down&&h&&t.bottom>i&&(o=t.bottom-i)>n&&(o=0),0!==o&&(t.customSeparateY?t.overlapY=o:r(t,o)),o}},2483(t){t.exports=function(t,e){return!(e.right<=t.left||e.bottom<=t.top||e.position.x>=t.right||e.position.y>=t.bottom)}},55173(t,e,i){var r={ProcessTileCallbacks:i(96602),ProcessTileSeparationX:i(36294),ProcessTileSeparationY:i(67013),SeparateTile:i(40012),TileCheckX:i(21329),TileCheckY:i(53442),TileIntersectsBody:i(2483)};t.exports=r},44563(t,e,i){t.exports={Arcade:i(27064),Matter:i(3875)}},68174(t,e,i){var r=i(83419),s=i(26099),n=new r({initialize:function(){this.boundsCenter=new s,this.centerDiff=new s},parseBody:function(t){if(!(t=t.hasOwnProperty("body")?t.body:t).hasOwnProperty("bounds")||!t.hasOwnProperty("centerOfMass"))return!1;var e=this.boundsCenter,i=this.centerDiff,r=t.bounds.max.x-t.bounds.min.x,s=t.bounds.max.y-t.bounds.min.y,n=r*t.centerOfMass.x,a=s*t.centerOfMass.y;return e.set(r/2,s/2),i.set(n-e.x,a-e.y),!0},getTopLeft:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e+r.x+n.x,i+r.y+n.y)}return!1},getTopCenter:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e+n.x,i+r.y+n.y)}return!1},getTopRight:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e-(r.x-n.x),i+r.y+n.y)}return!1},getLeftCenter:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e+r.x+n.x,i+n.y)}return!1},getCenter:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.centerDiff;return new s(e+r.x,i+r.y)}return!1},getRightCenter:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e-(r.x-n.x),i+n.y)}return!1},getBottomLeft:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e+r.x+n.x,i-(r.y-n.y))}return!1},getBottomCenter:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e+n.x,i-(r.y-n.y))}return!1},getBottomRight:function(t,e,i){if(void 0===e&&(e=0),void 0===i&&(i=0),this.parseBody(t)){var r=this.boundsCenter,n=this.centerDiff;return new s(e-(r.x-n.x),i-(r.y-n.y))}return!1}});t.exports=n},19933(t,e,i){var r=i(6790);r.Body=i(22562),r.Composite=i(69351),r.World=i(4372),r.Collision=i(52284),r.Detector=i(81388),r.Pairs=i(99561),r.Pair=i(4506),r.Query=i(73296),r.Resolver=i(66272),r.Constraint=i(48140),r.Common=i(53402),r.Engine=i(48413),r.Events=i(35810),r.Sleeping=i(53614),r.Plugin=i(73832),r.Bodies=i(66280),r.Composites=i(74116),r.Axes=i(66615),r.Bounds=i(15647),r.Svg=i(74058),r.Vector=i(31725),r.Vertices=i(41598),r.World.add=r.Composite.add,r.World.remove=r.Composite.remove,r.World.addComposite=r.Composite.addComposite,r.World.addBody=r.Composite.addBody,r.World.addConstraint=r.Composite.addConstraint,r.World.clear=r.Composite.clear,t.exports=r},28137(t,e,i){var r=i(66280),s=i(83419),n=i(74116),a=i(48140),o=i(74058),h=i(75803),l=i(23181),u=i(34803),d=i(73834),c=i(19496),f=i(85791),p=i(98713),g=i(41598),m=new s({initialize:function(t){this.world=t,this.scene=t.scene,this.sys=t.scene.sys},rectangle:function(t,e,i,s,n){var a=r.rectangle(t,e,i,s,n);return this.world.add(a),a},trapezoid:function(t,e,i,s,n,a){var o=r.trapezoid(t,e,i,s,n,a);return this.world.add(o),o},circle:function(t,e,i,s,n){var a=r.circle(t,e,i,s,n);return this.world.add(a),a},polygon:function(t,e,i,s,n){var a=r.polygon(t,e,i,s,n);return this.world.add(a),a},fromVertices:function(t,e,i,s,n,a,o){"string"==typeof i&&(i=g.fromPath(i));var h=r.fromVertices(t,e,i,s,n,a,o);return this.world.add(h),h},fromPhysicsEditor:function(t,e,i,r,s){void 0===s&&(s=!0);var n=c.parseBody(t,e,i,r);return s&&!this.world.has(n)&&this.world.add(n),n},fromSVG:function(t,e,i,s,n,a){void 0===s&&(s=1),void 0===n&&(n={}),void 0===a&&(a=!0);for(var h=i.getElementsByTagName("path"),l=[],u=0;up)break;if(!(g