diff --git a/examples/assets/maps/CybernoidMap3BG.png b/examples/assets/maps/CybernoidMap3BG.png index 1248fb4d..997b8dfc 100644 Binary files a/examples/assets/maps/CybernoidMap3BG.png and b/examples/assets/maps/CybernoidMap3BG.png differ diff --git a/examples/assets/maps/CybernoidMap3BG_bank.png b/examples/assets/maps/CybernoidMap3BG_bank.png new file mode 100644 index 00000000..8f49737c Binary files /dev/null and b/examples/assets/maps/CybernoidMap3BG_bank.png differ diff --git a/examples/assets/maps/CybernoidMap3BG_map.tmx b/examples/assets/maps/CybernoidMap3BG_map.tmx new file mode 100644 index 00000000..6d1b444f --- /dev/null +++ b/examples/assets/maps/CybernoidMap3BG_map.tmx @@ -0,0 +1,7050 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/assets/maps/cybernoid.json b/examples/assets/maps/cybernoid.json new file mode 100644 index 00000000..10bad91a --- /dev/null +++ b/examples/assets/maps/cybernoid.json @@ -0,0 +1,39 @@ +{ "height":44, + "layers":[ + { + "data":[1, 2, 3, 4, 1, 4, 3, 4, 1, 2, 5, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 1, 2, 3, 6, 1, 2, 3, 6, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 8, 8, 8, 8, 8, 8, 8, 5, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 1, 2, 1, 2, 3, 6, 1, 2, 3, 6, 11, 1, 1, 12, 9, 4, 9, 4, 9, 4, 9, 10, 13, 14, 15, 14, 14, 15, 14, 15, 16, 17, 14, 14, 16, 17, 15, 14, 15, 14, 15, 14, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 12, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 9, 9, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 19, 20, 7, 7, 16, 17, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 10, 9, 10, 9, 10, 9, 22, 1, 1, 12, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 2, 2, 5, 7, 23, 7, 4, 7, 4, 7, 16, 17, 7, 7, 7, 7, 7, 7, 7, 23, 7, 7, 7, 23, 7, 7, 7, 7, 7, 7, 7, 5, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 18, 19, 20, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 23, 23, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 2, 5, 7, 27, 28, 7, 27, 28, 7, 27, 28, 7, 27, 28, 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, 18, 19, 20, 7, 11, 3, 3, 5, 7, 7, 7, 23, 7, 4, 7, 27, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 32, 5, 3, 3, 5, 7, 23, 7, 7, 23, 7, 7, 23, 7, 7, 23, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 22, 7, 7, 7, 7, 7, 24, 25, 26, 7, 11, 6, 6, 5, 7, 7, 7, 7, 7, 23, 7, 33, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 7, 7, 7, 7, 7, 29, 30, 31, 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, 32, 32, 5, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 29, 30, 31, 7, 11, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 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, 32, 32, 32, 5, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 2, 2, 5, 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, 5, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 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, 32, 32, 32, 32, 5, 2, 2, 21, 9, 9, 9, 9, 9, 22, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 3, 3, 5, 7, 7, 7, 7, 37, 38, 39, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 9, 9, 9, 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 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, 40, 7, 7, 7, 7, 7, 32, 32, 32, 32, 32, 5, 3, 1, 2, 3, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 6, 6, 5, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 7, 7, 7, 40, 7, 7, 7, 5, 1, 2, 3, 6, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 9, 9, 9, 9, 22, 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, 40, 16, 17, 40, 7, 7, 32, 32, 32, 32, 32, 32, 5, 6, 6, 12, 9, 9, 9, 9, 9, 13, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 1, 1, 5, 7, 7, 7, 7, 41, 42, 43, 44, 45, 44, 45, 44, 45, 44, 45, 44, 16, 17, 44, 45, 16, 17, 45, 44, 5, 1, 2, 3, 6, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 45, 44, 45, 44, 45, 44, 45, 44, 45, 44, 12, 9, 9, 10, 9, 10, 9, 10, 9, 10, 22, 32, 5, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 2, 2, 5, 7, 7, 7, 12, 9, 9, 22, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 5, 6, 1, 2, 3, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 5, 8, 8, 8, 8, 8, 8, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 5, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 32, 5, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 3, 1, 5, 7, 7, 7, 5, 2, 2, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 4, 6, 4, 2, 4, 6, 4, 2, 5, 6, 1, 2, 3, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 1, 8, 46, 46, 46, 46, 46, 46, 46, 46, 46, 5, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 1, 2, 4, 6, 5, 2, 2, 5, 7, 5, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 1, 2, 5, 7, 7, 7, 5, 3, 3, 5, 15, 14, 15, 14, 15, 14, 15, 14, 14, 4, 14, 4, 14, 4, 14, 4, 14, 5, 1, 2, 3, 6, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 9, 9, 9, 9, 9, 10, 9, 10, 8, 8, 8, 8, 9, 9, 22, 2, 2, 2, 2, 2, 2, 2, 2, 5, 14, 15, 14, 4, 14, 5, 3, 3, 5, 7, 5, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 5, 7, 47, 7, 7, 7, 7, 7, 47, 7, 11, 2, 3, 5, 7, 7, 7, 21, 9, 9, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 7, 4, 7, 4, 7, 4, 7, 5, 1, 2, 3, 6, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 3, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 7, 7, 4, 7, 21, 9, 9, 13, 7, 5, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 5, 47, 47, 47, 7, 7, 7, 47, 47, 47, 11, 3, 6, 5, 7, 7, 7, 7, 18, 19, 20, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 7, 4, 7, 4, 7, 5, 1, 2, 3, 6, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 7, 7, 37, 38, 39, 7, 7, 7, 7, 7, 7, 7, 7, 8, 6, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6, 6, 6, 6, 6, 5, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 5, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 8, 7, 47, 7, 7, 7, 7, 7, 47, 7, 11, 6, 1, 5, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 7, 4, 7, 21, 9, 9, 9, 22, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 7, 7, 8, 1, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 5, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 1, 2, 5, 7, 7, 7, 7, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 7, 7, 7, 7, 7, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 41, 42, 43, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 9, 9, 9, 9, 9, 9, 9, 9, 13, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 5, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 2, 3, 5, 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, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 21, 10, 8, 8, 8, 8, 9, 22, 7, 7, 7, 7, 7, 7, 8, 3, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 11, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 50, 7, 7, 7, 4, 7, 7, 7, 7, 5, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 3, 6, 5, 7, 51, 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, 5, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 1, 2, 3, 6, 5, 7, 7, 7, 12, 9, 9, 9, 6, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 11, 7, 7, 7, 4, 7, 7, 7, 7, 7, 52, 7, 52, 7, 52, 7, 52, 7, 52, 7, 7, 53, 54, 4, 7, 4, 7, 7, 7, 7, 5, 6, 6, 5, 7, 40, 7, 7, 7, 40, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 6, 1, 5, 7, 55, 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, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 12, 10, 8, 8, 8, 8, 9, 13, 7, 7, 7, 5, 1, 1, 1, 1, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 11, 7, 7, 7, 4, 7, 7, 7, 7, 7, 5, 46, 5, 46, 5, 46, 5, 46, 5, 7, 7, 56, 57, 4, 7, 4, 7, 7, 7, 7, 5, 1, 1, 5, 7, 16, 17, 7, 16, 17, 7, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 1, 2, 21, 10, 9, 10, 9, 10, 9, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 2, 2, 2, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 9, 9, 9, 9, 9, 10, 9, 10, 8, 8, 8, 8, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 8, 8, 8, 8, 22, 7, 4, 58, 59, 12, 9, 13, 2, 2, 21, 10, 9, 10, 9, 10, 9, 22, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 2, 1, 2, 3, 6, 1, 2, 3, 6, 5, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 3, 3, 3, 3, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 1, 2, 3, 6, 5, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 3, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 2, 5, 6, 1, 1, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 1, 2, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 5, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 1, 1, 1, 12, 9, 9, 9, 9, 9, 13, 14, 15, 5, 2, 2, 2, 2, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 3, 2, 3, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 1, 2, 3, 6, 5, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 14, 15, 14, 15, 14, 15, 14, 15, 14, 21, 9, 8, 8, 8, 8, 10, 9, 8, 8, 8, 8, 8, 8, 10, 13, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 5, 3, 3, 3, 3, 3, 3, 3, 5, 47, 7, 47, 7, 47, 7, 47, 7, 47, 7, 5, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 3, 2, 3, 5, 32, 32, 32, 32, 32, 32, 32, 32, 32, 5, 1, 2, 3, 6, 1, 2, 3, 6, 5, 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, 33, 34, 7, 7, 7, 18, 19, 20, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 3, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6, 6, 6, 6, 5, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 3, 6, 3, 6, 5, 47, 47, 47, 47, 47, 47, 47, 47, 47, 5, 1, 2, 3, 6, 1, 2, 3, 6, 5, 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, 35, 36, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 7, 7, 7, 50, 7, 7, 7, 7, 7, 8, 6, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 1, 1, 1, 1, 1, 1, 5, 7, 47, 7, 47, 7, 47, 7, 47, 7, 47, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 6, 1, 6, 1, 5, 7, 32, 7, 7, 32, 7, 7, 32, 7, 21, 9, 9, 9, 9, 9, 9, 9, 9, 13, 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, 29, 30, 31, 7, 7, 7, 7, 7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 5, 7, 60, 7, 53, 54, 7, 7, 7, 7, 8, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 21, 9, 9, 9, 9, 9, 9, 9, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 1, 2, 1, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 19, 20, 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, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 5, 7, 61, 7, 56, 57, 7, 7, 7, 7, 8, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 32, 32, 32, 32, 32, 32, 32, 7, 7, 7, 62, 63, 7, 7, 5, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 50, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 3, 2, 3, 5, 7, 7, 7, 7, 40, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 50, 7, 7, 7, 7, 7, 7, 7, 7, 37, 38, 39, 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, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 21, 9, 10, 9, 10, 9, 22, 7, 7, 7, 8, 3, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 52, 7, 52, 7, 52, 32, 32, 7, 7, 7, 5, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 53, 54, 7, 51, 7, 7, 7, 7, 7, 7, 5, 3, 6, 3, 6, 5, 7, 7, 7, 40, 16, 17, 40, 7, 7, 7, 29, 30, 31, 7, 7, 7, 7, 53, 54, 7, 7, 40, 7, 7, 7, 40, 24, 25, 26, 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, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 7, 7, 7, 8, 6, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 40, 40, 7, 7, 7, 7, 5, 46, 5, 46, 5, 32, 32, 7, 7, 7, 5, 7, 7, 7, 5, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 5, 56, 57, 7, 55, 7, 7, 7, 7, 7, 7, 5, 6, 1, 6, 1, 5, 7, 7, 40, 8, 8, 8, 8, 40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 56, 57, 7, 40, 16, 17, 40, 16, 17, 41, 42, 43, 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, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 12, 9, 10, 9, 10, 9, 13, 7, 7, 7, 8, 1, 1, 1, 5, 7, 7, 7, 7, 7, 12, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 13, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 21, 10, 9, 10, 9, 10, 9, 22, 7, 7, 7, 5, 1, 2, 1, 2, 21, 9, 8, 8, 8, 8, 8, 8, 8, 8, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 22, 45, 44, 45, 12, 9, 8, 8, 9, 9, 10, 8, 8, 8, 8, 9, 10, 22, 44, 45, 44, 45, 44, 45, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 2, 2, 5, 7, 7, 7, 7, 7, 5, 1, 2, 3, 6, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 1, 2, 3, 6, 5, 7, 7, 7, 5, 2, 3, 2, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 5, 1, 2, 3, 5, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 2, 3, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 3, 1, 1, 5, 7, 7, 7, 7, 7, 5, 1, 2, 3, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 4, 2, 4, 6, 1, 2, 3, 4, 1, 4, 3, 4, 5, 7, 7, 7, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 6, 1, 2, 4, 6, 1, 2, 3, 6, 1, 4, 3, 4, 1, 4, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 1, 2, 2, 5, 7, 7, 7, 7, 7, 21, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 9, 10, 9, 10, 9, 10, 8, 8, 9, 8, 8, 10, 9, 10, 4, 10, 4, 10, 9, 10, 9, 4, 9, 4, 9, 4, 13, 7, 7, 7, 5, 2, 2, 2, 2, 2, 2, 2, 12, 10, 9, 10, 9, 10, 4, 10, 9, 10, 9, 10, 9, 4, 9, 4, 9, 4, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 64, 65, 66, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 13, 14, 15, 14, 15, 14, 15, 14, 14, 15, 14, 15, 14, 15, 14, 15, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 2, 3, 3, 5, 7, 7, 7, 7, 7, 7, 7, 7, 18, 19, 20, 7, 7, 7, 7, 7, 7, 67, 68, 7, 67, 68, 7, 67, 68, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 19, 20, 14, 15, 7, 7, 4, 7, 4, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 7, 7, 5, 3, 3, 3, 3, 3, 3, 3, 5, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 7, 7, 7, 67, 68, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 33, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 21, 9, 9, 22, 7, 7, 47, 47, 7, 7, 5, 3, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 69, 70, 7, 69, 70, 7, 69, 70, 7, 7, 7, 7, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 4, 7, 4, 7, 47, 7, 7, 7, 7, 5, 6, 6, 6, 6, 6, 6, 6, 5, 32, 32, 32, 32, 7, 4, 7, 7, 7, 7, 7, 7, 32, 7, 4, 7, 4, 7, 7, 7, 7, 7, 69, 70, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 2, 3, 6, 5, 47, 47, 47, 47, 47, 47, 8, 6, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29, 30, 31, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 47, 7, 4, 7, 47, 7, 7, 7, 7, 5, 1, 1, 1, 1, 1, 1, 1, 5, 32, 32, 32, 32, 7, 4, 7, 7, 7, 7, 7, 7, 4, 7, 4, 7, 32, 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, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 6, 5, 47, 47, 47, 47, 47, 47, 8, 1, 9, 9, 13, 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, 4, 7, 7, 7, 7, 47, 7, 4, 7, 4, 7, 7, 7, 7, 5, 2, 2, 2, 2, 2, 2, 2, 5, 52, 71, 72, 52, 7, 4, 50, 7, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 50, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 37, 38, 39, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 10, 9, 10, 9, 10, 9, 10, 9, 10, 8, 8, 8, 8, 9, 13, 47, 47, 47, 47, 47, 47, 8, 2, 11, 7, 7, 7, 50, 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, 4, 7, 7, 7, 7, 4, 7, 47, 7, 4, 7, 7, 7, 7, 5, 3, 3, 3, 3, 3, 3, 3, 5, 5, 7, 7, 73, 7, 32, 53, 54, 7, 7, 7, 7, 4, 7, 32, 7, 4, 7, 7, 37, 38, 39, 12, 9, 9, 9, 9, 9, 9, 9, 9, 22, 53, 54, 7, 7, 51, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 24, 25, 26, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 62, 63, 7, 7, 8, 3, 11, 7, 7, 7, 53, 54, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 7, 4, 7, 7, 7, 7, 4, 7, 47, 7, 4, 7, 7, 7, 7, 5, 6, 6, 6, 6, 6, 6, 6, 5, 74, 7, 7, 5, 7, 4, 56, 57, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 24, 25, 26, 5, 1, 2, 3, 6, 1, 2, 3, 6, 5, 56, 57, 7, 7, 55, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 41, 42, 43, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 52, 7, 7, 7, 7, 7, 52, 7, 7, 52, 7, 52, 7, 52, 7, 52, 7, 52, 7, 52, 7, 7, 7, 4, 7, 7, 7, 5, 6, 11, 7, 7, 7, 56, 57, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 16, 17, 40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 7, 4, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 7, 7, 5, 1, 1, 1, 1, 1, 1, 1, 5, 75, 7, 7, 76, 7, 4, 46, 46, 7, 7, 7, 7, 4, 7, 4, 7, 4, 7, 7, 41, 42, 43, 5, 1, 2, 3, 6, 1, 2, 3, 6, 21, 10, 9, 8, 8, 8, 8, 8, 8, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 22, 44, 45, 44, 45, 44, 45, 44, 45, 44, 45, 5, 45, 58, 59, 44, 45, 5, 45, 44, 5, 44, 5, 44, 5, 46, 5, 46, 5, 46, 5, 7, 7, 7, 4, 7, 7, 7, 5, 1, 9, 10, 9, 8, 8, 8, 8, 10, 9, 10, 8, 8, 8, 8, 9, 10, 9, 10, 9, 10, 8, 8, 8, 8, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 4, 10, 4, 10, 9, 9, 9, 4, 45, 4, 45, 4, 45, 44, 45, 44, 5, 2, 2, 2, 2, 2, 2, 2, 21, 77, 78, 79, 77, 10, 4, 10, 9, 10, 9, 10, 9, 4, 9, 4, 9, 4, 9, 10, 9, 10, 9, 13, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 13, 2, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 4, 2, 4, 6, 1, 2, 3, 4, 1, 4, 3, 4, 1, 2, 3, 6, 5, 3, 3, 3, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 4, 6, 1, 2, 3, 6, 1, 4, 3, 4, 1, 4, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 5, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6, 1, 2, 3, 6], + "height":44, + "name":"ShoeBox Tile Grab", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":160, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + + }, + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "image":"CybernoidMap3BG_bank.png", + "imageheight":128, + "imagewidth":176, + "margin":0, + "name":"CybernoidMap3BG_bank.png", + "properties": + { + + }, + "spacing":0, + "tileheight":16, + "tilewidth":16 + }], + "tilewidth":16, + "version":1, + "width":160 +} \ No newline at end of file diff --git a/examples/assets/maps/cybernoid.png.png b/examples/assets/maps/cybernoid.png.png new file mode 100644 index 00000000..8f49737c Binary files /dev/null and b/examples/assets/maps/cybernoid.png.png differ diff --git a/examples/tilemaps/wip1.php b/examples/tilemaps/wip1.php index 2b429fb0..731ba5c9 100644 --- a/examples/tilemaps/wip1.php +++ b/examples/tilemaps/wip1.php @@ -10,18 +10,8 @@ function preload() { - // game.load.image('snes', 'assets/maps/smb_tiles.png'); - // game.load.tilemap('nes', 'assets/maps/mario1.png', 'assets/maps/mario1.json', null, Phaser.Tilemap.JSON); - // game.load.tilemap('snes', 'assets/maps/smb_tiles.png', 'assets/maps/smb_level1.json', null, Phaser.Tilemap.JSON); - - // Just loads the level data and specifies the format - // game.load.tilemap('marioLevel1', 'assets/maps/smb_level1.json', Phaser.Tilemap.JSON); - - // What about passing in a JSON object though? Need that too. But a CSV would look like a 'string', not an object - how to tell apart from URL? - // game.load.tilemap('marioLevel1', SMB_LEVEL_JSON, Phaser.Tilemap.JSON); - - // Exactly the same as loading a sprite sheet :) - game.load.tileset('marioLevel1', 'assets/maps/smb_tiles.png', 32, 32); + game.load.tilemap('cybernoidLevel3', 'assets/maps/cybernoid.json', null, Phaser.Tilemap.JSON); + game.load.tileset('cybernoidTiles', 'assets/maps/cybernoid.png', 16, 16); } @@ -33,28 +23,32 @@ - layer = new Phaser.TilemapLayer(game, 0, 0, 500, 500, [], 'snes'); + // layer = new Phaser.TilemapLayer(game, 0, 0, 500, 500, [], 'snes'); // layer = new Phaser.TilemapLayer(game, 0, 0, 500, 500); // layer.load(mapData, tileset); // layer.create(mapWidth, mapHeight, [tileset]); - // layer.updateTileset(key); // can change on the fly - layer.context.fillStyle = 'rgb(255,0,0)'; - layer.context.fillRect(0, 0, 200, 300); + // layer.updateTileset('cybernoidTiles'); // can change on the fly + + + // layer.context.fillStyle = 'rgb(255,0,0)'; + // layer.context.fillRect(0, 0, 200, 300); + + /* game.world._container.addChild(layer.sprite); layer.create(10, 10); - layer.putTile(2, 2, 1); - layer.putTile(3, 2, 1); - layer.putTile(4, 2, 1); - layer.putTile(5, 2, 1); - layer.putTile(4, 6, 1); + layer.putTile(0, 0, 3); + layer.putTile(0, 1, 4); + + layer.render(); layer.dump(); + */ } function update() { diff --git a/src/loader/Cache.js b/src/loader/Cache.js index b350718e..ebcda117 100644 --- a/src/loader/Cache.js +++ b/src/loader/Cache.js @@ -151,16 +151,14 @@ Phaser.Cache.prototype = { * @method Phaser.Cache#addTilemap * @param {string} key - The unique key by which you will reference this object. * @param {string} url - URL of the tilemap image. - * @param {object} data - Tilemap data. * @param {object} mapData - The tilemap data object. * @param {number} format - The format of the tilemap data. */ - addTilemap: function (key, url, data, mapData, format) { + addTilemap: function (key, url, mapData, format) { - this._tilemaps[key] = { url: url, data: data, spriteSheet: true, mapData: mapData, format: format }; + this._tilemaps[key] = { url: url, mapData: mapData, format: format }; - PIXI.BaseTextureCache[key] = new PIXI.BaseTexture(data); - PIXI.TextureCache[key] = new PIXI.Texture(PIXI.BaseTextureCache[key]); + this._tilemaps[key].mapData = Phaser.TilemapParser.parse(this.game, mapData, format); }, @@ -443,7 +441,7 @@ Phaser.Cache.prototype = { if (this._tilesets[key]) { - return this._tilesets[key]; + return this._tilesets[key].tileData; } return null; diff --git a/src/loader/Loader.js b/src/loader/Loader.js index 33ec4920..1c496073 100644 --- a/src/loader/Loader.js +++ b/src/loader/Loader.js @@ -343,18 +343,24 @@ Phaser.Loader.prototype = { * @param {object} [mapData] - An optional JSON data object (can be given in place of a URL). * @param {string} [format] - The format of the map data. */ - tilemap: function (key, tilesetURL, mapDataURL, mapData, format) { + tilemap: function (key, mapDataURL, mapData, format) { if (typeof mapDataURL === "undefined") { mapDataURL = null; } if (typeof mapData === "undefined") { mapData = null; } if (typeof format === "undefined") { format = Phaser.Tilemap.CSV; } + if (mapDataURL == null && mapData == null) + { + console.warn('Phaser.Loader.tilemap - Both mapDataURL and mapData are null. One must be set.'); + return; + } + if (this.checkKeyExists(key) === false) { // A URL to a json/csv file has been given if (mapDataURL) { - this.addToFileList('tilemap', key, tilesetURL, { mapDataURL: mapDataURL, format: format }); + this.addToFileList('tilemap', key, mapDataURL, { format: format }); } else { @@ -374,7 +380,7 @@ Phaser.Loader.prototype = { break; } - this.addToFileList('tilemap', key, tilesetURL, { mapDataURL: null, mapData: mapData, format: format }); + this.game.cache.addTilemap(key, null, mapData, format); } } @@ -637,7 +643,6 @@ Phaser.Loader.prototype = { case 'spritesheet': case 'textureatlas': case 'bitmapfont': - case 'tilemap': case 'tileset': file.data = new Image(); file.data.name = file.key; @@ -701,6 +706,29 @@ Phaser.Loader.prototype = { break; + case 'tilemap': + this._xhr.open("GET", this.baseURL + file.url, true); + this._xhr.responseType = "text"; + + if (file.format == Phaser.Tilemap.JSON) + { + this._xhr.onload = function () { + return _this.jsonLoadComplete(file.key); + }; + } + else if (file.format == Phaser.Tilemap.CSV) + { + this._xhr.onload = function () { + return _this.csvLoadComplete(file.key); + }; + } + + this._xhr.onerror = function () { + return _this.dataLoadError(file.key); + }; + this._xhr.send(); + break; + case 'text': this._xhr.open("GET", this.baseURL + file.url, true); this._xhr.responseType = "text"; @@ -798,8 +826,12 @@ Phaser.Loader.prototype = { this.game.cache.addTileset(file.key, file.url, file.data, file.tileWidth, file.tileHeight, file.tileMax); break; + /* case 'tilemap': + file.data = this._xhr.response; + this.game.cache.addTilemap(file.key, file.url, file.data, file.format); + if (file.mapDataURL == null) { this.game.cache.addTilemap(file.key, file.url, file.data, file.mapData, file.format); @@ -830,6 +862,7 @@ Phaser.Loader.prototype = { this._xhr.send(); } break; + */ case 'textureatlas': @@ -944,7 +977,7 @@ Phaser.Loader.prototype = { if (file.type == 'tilemap') { - this.game.cache.addTilemap(file.key, file.url, file.data, data, file.format); + this.game.cache.addTilemap(file.key, file.url, data, file.format); } else { @@ -966,7 +999,7 @@ Phaser.Loader.prototype = { var data = this._xhr.response; var file = this._fileList[key]; - this.game.cache.addTilemap(file.key, file.url, file.data, data, file.format); + this.game.cache.addTilemap(file.key, file.url, data, file.format); this.nextFile(key, true); diff --git a/src/tilemap/Tile.js b/src/tilemap/Tile.js index b55e23fa..230b2246 100644 --- a/src/tilemap/Tile.js +++ b/src/tilemap/Tile.js @@ -109,7 +109,9 @@ Phaser.Tile.prototype = { * @method destroy */ destroy: function () { - this.tilemap = null; + + this.tileset = null; + }, /** diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 146f9041..6eae2601 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -44,7 +44,10 @@ Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, mapData, /** * @property {Description} tileset - Description. */ - this.tileset = tileset; + this.tileset = null; + + this.tileWidth = 0; + this.tileHeight = 0; this.widthInTiles = 0; this.heightInTiles = 0; @@ -52,6 +55,78 @@ Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, mapData, this.renderWidth = renderWidth; this.renderHeight = renderHeight; + /** + * @property {number} _ga - Local render loop var to help avoid gc spikes. + * @private + */ + this._ga = 1; + + /** + * @property {number} _dx - Local render loop var to help avoid gc spikes. + * @private + */ + this._dx = 0; + + /** + * @property {number} _dy - Local render loop var to help avoid gc spikes. + * @private + */ + this._dy = 0; + + /** + * @property {number} _dw - Local render loop var to help avoid gc spikes. + * @private + */ + this._dw = 0; + + /** + * @property {number} _dh - Local render loop var to help avoid gc spikes. + * @private + */ + this._dh = 0; + + /** + * @property {number} _tx - Local render loop var to help avoid gc spikes. + * @private + */ + this._tx = 0; + + /** + * @property {number} _ty - Local render loop var to help avoid gc spikes. + * @private + */ + this._ty = 0; + + /** + * @property {number} _tl - Local render loop var to help avoid gc spikes. + * @private + */ + this._tl = 0; + + /** + * @property {number} _maxX - Local render loop var to help avoid gc spikes. + * @private + */ + this._maxX = 0; + + /** + * @property {number} _maxY - Local render loop var to help avoid gc spikes. + * @private + */ + this._maxY = 0; + + /** + * @property {number} _startX - Local render loop var to help avoid gc spikes. + * @private + */ + this._startX = 0; + + /** + * @property {number} _startY - Local render loop var to help avoid gc spikes. + * @private + */ + this._startY = 0; + }; Phaser.TilemapLayer.prototype = { @@ -96,6 +171,109 @@ Phaser.TilemapLayer.prototype = { }, + updateTileset: function (tileset) { + + this.tileset = this.game.cache.getTileset(tileset); + this.tileWidth = this.tileset.tileWidth; + this.tileHeight = this.tileset.tileHeight; + + }, + + render: function () { + + if (this.visible == false) + { + return; + } + + // Work out how many tiles we can fit into our canvas and round it up for the edges + this._maxX = this.game.math.ceil(this.canvas.width / this.tileWidth) + 1; + this._maxY = this.game.math.ceil(this.canvas.height / this.tileHeight) + 1; + + // And now work out where in the tilemap the camera actually is + this._startX = this.game.math.floor(this.game.camera.x / this.tileWidth); + this._startY = this.game.math.floor(this.game.camera.y / this.tileHeight); + + // Tilemap bounds check + if (this._startX < 0) + { + this._startX = 0; + } + + if (this._startY < 0) + { + this._startY = 0; + } + + if (this._maxX > this.widthInTiles) + { + this._maxX = this.widthInTiles; + } + + if (this._maxY > this.heightInTiles) + { + this._maxY = this.heightInTiles; + } + + if (this._startX + this._maxX > this.widthInTiles) + { + this._startX = this.widthInTiles - this._maxX; + } + + if (this._startY + this._maxY > this.heightInTiles) + { + this._startY = this.heightInTiles - this._maxY; + } + + // Finally get the offset to avoid the blocky movement + this._dx = -(this.game.camera.x - (this._startX * this.tileWidth)); + this._dy = -(this.game.camera.y - (this._startY * this.tileHeight)); + + this._tx = this._dx; + this._ty = this._dy; + + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + + for (var row = this._startY; row < this._startY + this._maxY; row++) + { + this._columnData = this.mapData[row]; + + for (var tile = this._startX; tile < this._startX + this._maxX; tile++) + { + if (this.tileset.checkTileIndex(this._columnData[tile])) + { + this.context.drawImage( + this.tileset.image, + this.tileset.tiles[this._columnData[tile]].x, + this.tileset.tiles[this._columnData[tile]].y, + this.tileWidth, + this.tileHeight, + this._tx, + this._ty, + this.tileWidth, + this.tileHeight + ); + } + + this._tx += this.tileWidth; + + } + + this._tx = this._dx; + this._ty += this.tileHeight; + } + + // Only needed if running in WebGL, otherwise this array will never get cleared down I don't think! + if (this.game.renderType == Phaser.WEBGL) + { + PIXI.texturesToUpdate.push(this.baseTexture); + } + + return true; + + }, + + dump: function () { var txt = ''; diff --git a/src/tilemap/TilemapParser.js b/src/tilemap/TilemapParser.js index ecb076bb..1ac34209 100644 --- a/src/tilemap/TilemapParser.js +++ b/src/tilemap/TilemapParser.js @@ -1,16 +1,5 @@ Phaser.TilemapParser = { - /** - * Parse a Sprite Sheet and extract the animation frame data from it. - * - * @method Phaser.AnimationParser.spriteSheet - * @param {Phaser.Game} game - A reference to the currently running game. - * @param {string} key - The Game.Cache asset key of the Sprite Sheet image. - * @param {number} frameWidth - The fixed width of each frame of the animation. - * @param {number} frameHeight - The fixed height of each frame of the animation. - * @param {number} [frameMax=-1] - The total number of animation frames to extact from the Sprite Sheet. The default value of -1 means "extract all frames". - * @return {Phaser.FrameData} A FrameData object containing the parsed frames. - */ tileset: function (game, key, tileWidth, tileHeight, tileMax) { // How big is our image? @@ -54,7 +43,7 @@ Phaser.TilemapParser = { var x = 0; var y = 0; - var tileset = new Phaser.Tileset(key, tileWidth, tileHeight); + var tileset = new Phaser.Tileset(img, key, tileWidth, tileHeight); for (var i = 0; i < total; i++) { @@ -73,47 +62,110 @@ Phaser.TilemapParser = { }, + parse: function (game, data, format) { + + if (format == Phaser.Tilemap.CSV) + { + return this.parseCSV(data); + } + else if (format == Phaser.Tilemap.TILED_JSON) + { + return this.parseTiledJSON(data); + } + + }, + /** * Parse csv map data and generate tiles. * * @method Phaser.Tilemap.prototype.parseCSV * @param {string} data - CSV map data. - * @param {string} key - Asset key for tileset image. - * @param {number} tileWidth - Width of its tile. - * @param {number} tileHeight - Height of its tile. */ - parseCSV: function (data, key, tileWidth, tileHeight) { - - // var layer = new Phaser.TilemapLayer(this, 0, key, Phaser.Tilemap.CSV, 'TileLayerCSV' + this.layers.length.toString(), tileWidth, tileHeight); + parseCSV: function (data) { // Trim any rogue whitespace from the data data = data.trim(); + var output = []; + var rows = data.split("\n"); for (var i = 0; i < rows.length; i++) { + output[i] = []; + var column = rows[i].split(","); - if (column.length > 0) + for (var c = 0; c < column.length; c++) { - // layer.addColumn(column); + output[i][c] = parseInt(column[c]); } } - // layer.updateBounds(); - // layer.createCanvas(); + return [{ name: 'csv', alpha: 1, visible: true, tileMargin: 0, tileSpacing: 0, data: output }]; - // var tileQuantity = layer.parseTileOffsets(); + }, - // this.currentLayer = layer; - // this.collisionLayer = layer; - // this.layers.push(layer); + /** + * Parse JSON map data and generate tiles. + * + * @method Phaser.Tilemap.prototype.parseTiledJSON + * @param {string} data - JSON map data. + * @param {string} key - Asset key for tileset image. + */ + parseTiledJSON: function (json) { - // this.width = this.currentLayer.widthInPixels; - // this.height = this.currentLayer.heightInPixels; + var layers = []; - // this.generateTiles(tileQuantity); + for (var i = 0; i < json.layers.length; i++) + { + // Check it's a data layer + if (!json.layers[i].data) + { + continue; + } + + // json.tilewidth + // json.tileheight + + var layer = { + + name: json.layers[i].name, + alpha: json.layers[i].opacity, + visible: json.layers[i].visible, + tileMargin: json.tilesets[0].margin, + tileSpacing: json.tilesets[0].spacing + + }; + + var output = []; + var c = 0; + var row; + + for (var t = 0; t < json.layers[i].data.length; t++) + { + if (c == 0) + { + row = []; + } + + row.push(json.layers[i].data[t]); + c++; + + if (c == json.layers[i].width) + { + output.push(row); + // layer.addColumn(row); + c = 0; + } + } + + layers.data = output; + this.layers.push(layer); + + } + + return layers; } diff --git a/src/tilemap/Tileset.js b/src/tilemap/Tileset.js index 2116bea3..522edbdd 100644 --- a/src/tilemap/Tileset.js +++ b/src/tilemap/Tileset.js @@ -1,15 +1,17 @@ -Phaser.Tileset = function (key, tileWidth, tileHeight) { +Phaser.Tileset = function (image, key, tileWidth, tileHeight) { /** * @property {string} key - The cache ID. */ this.key = key; - this.tilewidth = tileWidth; + this.image = image; + + this.tileWidth = tileWidth; this.tileHeight = tileHeight; - this._tiles = []; + this.tiles = []; } @@ -17,7 +19,7 @@ Phaser.Tileset.prototype = { addTile: function (tile) { - this._tiles.push(tile); + this.tiles.push(tile); return tile; @@ -25,13 +27,21 @@ Phaser.Tileset.prototype = { getTile: function (index) { - if (this._tiles[index]) + if (this.tiles[index]) { - return this._tiles[index]; + return this.tiles[index]; } return null; + }, + + checkTileIndex: function (index) { + + console.log('checking tile', index); + + return (this.tiles[index]); + } } @@ -44,7 +54,7 @@ Phaser.Tileset.prototype = { Object.defineProperty(Phaser.Tileset.prototype, "total", { get: function () { - return this._ties.length; + return this.tiles.length; } });