diff --git a/.gitignore b/.gitignore
index 86148ec..d6037ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.import/
-build/
\ No newline at end of file
+build/
+ngio.ini
+scoreboard_host.txt
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml.disabled
similarity index 100%
rename from .gitlab-ci.yml
rename to .gitlab-ci.yml.disabled
diff --git a/.import/.gdignore b/.import/.gdignore
deleted file mode 100644
index 8b13789..0000000
--- a/.import/.gdignore
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.md5 b/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.md5
deleted file mode 100644
index fe9cd78..0000000
--- a/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="594555e2c22caa9c1b92e03613253660"
-dest_md5="e35df6dc7b881ee34e3fe4ae7fd3ee6e"
-
diff --git a/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.stex b/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.stex
deleted file mode 100644
index 2b41a4a..0000000
Binary files a/.import/16color_uv_map.png-df63502cb1f1e075959c28e0cfc8f23e.stex and /dev/null differ
diff --git a/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.md5 b/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.md5
deleted file mode 100644
index c79a876..0000000
--- a/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="7b4e98ed7fdbd47d496d1542223b3061"
-dest_md5="ddc3228c927c9a31507b6b89ee41301a"
-
diff --git a/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.stex b/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.stex
deleted file mode 100644
index 9ed69db..0000000
Binary files a/.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.stex and /dev/null differ
diff --git a/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.md5 b/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.md5
deleted file mode 100644
index 055875c..0000000
--- a/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="aae4d9080cda2af11aae2b25993aac03"
-dest_md5="2412ee1c23b047e2192d7cc8f095add3"
-
diff --git a/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.oggstr b/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.oggstr
deleted file mode 100644
index d2625ad..0000000
Binary files a/.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.oggstr and /dev/null differ
diff --git a/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.md5 b/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.md5
deleted file mode 100644
index 1a7f8fa..0000000
--- a/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="f054210203aa705ec9b4b5b4e53b13f0"
-dest_md5="2306656825af0907fd3c08c11a03f630"
-
diff --git a/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.sample b/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.sample
deleted file mode 100644
index d81d5e0..0000000
Binary files a/.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.sample and /dev/null differ
diff --git a/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.md5 b/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.md5
deleted file mode 100644
index 40dbc7a..0000000
--- a/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="c779d6ac7cad1bad668c4dcb61365e3f"
-dest_md5="8d95d1281197e9da0a9f59a0b213469e"
-
diff --git a/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.oggstr b/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.oggstr
deleted file mode 100644
index 042f548..0000000
Binary files a/.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.oggstr and /dev/null differ
diff --git a/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.md5 b/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.md5
deleted file mode 100644
index 15f4b97..0000000
--- a/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="cefcc262207f6a82b9fe087e6c00c834"
-dest_md5="9602c94358d82f97c04cdccd20c0fcbc"
-
diff --git a/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.oggstr b/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.oggstr
deleted file mode 100644
index 755d19c..0000000
Binary files a/.import/a_egg_collect.ogg-7a1c2c7d5367f0237f278d4b2cb750fc.oggstr and /dev/null differ
diff --git a/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.md5 b/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.md5
deleted file mode 100644
index 724b85d..0000000
--- a/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="445ece771f313ea59f896c5971a9de9e"
-dest_md5="a6e4165a03954c5d6c14282809b1cfdc"
-
diff --git a/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.oggstr b/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.oggstr
deleted file mode 100644
index 9a54197..0000000
Binary files a/.import/a_egg_shoot.ogg-a189d93f991049e0cd06f6e0d7340395.oggstr and /dev/null differ
diff --git a/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.md5 b/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.md5
deleted file mode 100644
index 2477438..0000000
--- a/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0837cb6ec551daab4fa5f117ec3033f4"
-dest_md5="42ebf02c3d91547961debd02d9710063"
-
diff --git a/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.oggstr b/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.oggstr
deleted file mode 100644
index 94fdc0e..0000000
Binary files a/.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.oggstr and /dev/null differ
diff --git a/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.md5 b/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.md5
deleted file mode 100644
index e3806fd..0000000
--- a/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0400e19a2fa485f9c0d8b833a79e396b"
-dest_md5="408862312b7ffba0f4e428ab61158f59"
-
diff --git a/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.oggstr b/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.oggstr
deleted file mode 100644
index 7d69cc2..0000000
Binary files a/.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.oggstr and /dev/null differ
diff --git a/.import/arrow.png-11415057882cccf873402d42cfed3df7.md5 b/.import/arrow.png-11415057882cccf873402d42cfed3df7.md5
deleted file mode 100644
index a76c926..0000000
--- a/.import/arrow.png-11415057882cccf873402d42cfed3df7.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="589e927fe81ba35082a1f5602752fc65"
-dest_md5="9ae7ca9045ade117b152945398b6fc11"
-
diff --git a/.import/arrow.png-11415057882cccf873402d42cfed3df7.stex b/.import/arrow.png-11415057882cccf873402d42cfed3df7.stex
deleted file mode 100644
index 372cb19..0000000
Binary files a/.import/arrow.png-11415057882cccf873402d42cfed3df7.stex and /dev/null differ
diff --git a/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.md5 b/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.md5
deleted file mode 100644
index fe534ca..0000000
--- a/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="b423e4409c04e8f40536057bdb6ebacb"
-dest_md5="62a265ebfd47231e608953dd0d270de7"
-
diff --git a/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.stex b/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.stex
deleted file mode 100644
index 15b4e11..0000000
Binary files a/.import/barrier.png-fbbb67e21c4c49b8e2ff2b05beaf4f67.stex and /dev/null differ
diff --git a/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.md5 b/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.md5
deleted file mode 100644
index f8f302f..0000000
--- a/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ad86b83e2fd56ca2374f293cbcb17853"
-dest_md5="a7728af58a624b5da2e618b0c71442f4"
-
diff --git a/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.stex b/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.stex
deleted file mode 100644
index 01240ee..0000000
Binary files a/.import/barrier_2px.png-471522c3a6235b97f30314aef2b04619.stex and /dev/null differ
diff --git a/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.md5 b/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.md5
deleted file mode 100644
index 090f510..0000000
--- a/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="fa3285b3a224412bc02b4acaa1db6629"
-dest_md5="bc83e400e402b2929634eca9658dbca3"
-
diff --git a/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.stex b/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.stex
deleted file mode 100644
index 69f27fb..0000000
Binary files a/.import/bat.png-736f06aa9f4565db6a04c3fc0d0ebab3.stex and /dev/null differ
diff --git a/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.md5 b/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.md5
deleted file mode 100644
index 74a2fda..0000000
--- a/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a3b3cf438c4ab4d9c656c86f5239d0dd"
-dest_md5="48c09d999caeb12e4d5d8ea57cc76a72"
-
diff --git a/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.stex b/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.stex
deleted file mode 100644
index 848f8a1..0000000
Binary files a/.import/block.png-6c3011ecb25b7007af8a33748dd77d74.stex and /dev/null differ
diff --git a/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.md5 b/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.md5
deleted file mode 100644
index 74a2fda..0000000
--- a/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a3b3cf438c4ab4d9c656c86f5239d0dd"
-dest_md5="48c09d999caeb12e4d5d8ea57cc76a72"
-
diff --git a/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.stex b/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.stex
deleted file mode 100644
index 848f8a1..0000000
Binary files a/.import/block_text.png-33d1b26072b03aec254213ead1bd7b44.stex and /dev/null differ
diff --git a/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.md5 b/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.md5
deleted file mode 100644
index 57eb386..0000000
--- a/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="cfaa6a7e072c87c21abf404db7a7b458"
-dest_md5="eb1b07fa62e8eaef545f4a11998740f3"
-
diff --git a/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.stex b/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.stex
deleted file mode 100644
index 6f474e1..0000000
Binary files a/.import/blue_sky.png-5fabec06a64b73d7d6811ca494f5ae58.stex and /dev/null differ
diff --git a/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.md5 b/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.md5
deleted file mode 100644
index 091d2af..0000000
--- a/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="43e86f36af66b60a97c5bc72b3ccdde0"
-dest_md5="64ae32fc889df051b035c0114ce55022"
-
diff --git a/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.stex b/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.stex
deleted file mode 100644
index 15b19f6..0000000
Binary files a/.import/cave.png-453d1492f7a12007a61b71cc1e5f2b93.stex and /dev/null differ
diff --git a/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.md5 b/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.md5
deleted file mode 100644
index 7737ada..0000000
--- a/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="62dd9327155d5a04e8362c66e985126f"
-dest_md5="a5f7a9c5e5276b0c84ae7dbb423ab864"
-
diff --git a/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.stex b/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.stex
deleted file mode 100644
index 0a6dbad..0000000
Binary files a/.import/cave.png-b16f6dab3533202eb4820e5dc612ba6f.stex and /dev/null differ
diff --git a/.import/coin.png-7383acb180f9a15659a35c039ad60022.md5 b/.import/coin.png-7383acb180f9a15659a35c039ad60022.md5
deleted file mode 100644
index 2581980..0000000
--- a/.import/coin.png-7383acb180f9a15659a35c039ad60022.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="41109662beddb955f3ab039efe629451"
-dest_md5="829f0b1cc31df685cda8bac4820bc8b9"
-
diff --git a/.import/coin.png-7383acb180f9a15659a35c039ad60022.stex b/.import/coin.png-7383acb180f9a15659a35c039ad60022.stex
deleted file mode 100644
index f61e385..0000000
Binary files a/.import/coin.png-7383acb180f9a15659a35c039ad60022.stex and /dev/null differ
diff --git a/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.md5 b/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.md5
deleted file mode 100644
index 6d7599f..0000000
--- a/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="53eae53c845ca81da656334b40f6ed43"
-dest_md5="0a529cf5ba7482e509a961ed81c55abd"
-
diff --git a/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.stex b/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.stex
deleted file mode 100644
index a1a033f..0000000
Binary files a/.import/exit.png-5434234d068c5cc7b377eff51dc629c9.stex and /dev/null differ
diff --git a/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.md5 b/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.md5
deleted file mode 100644
index aa8754d..0000000
--- a/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="4de648abb772dd3fb3dbe1f8e48f6efa"
-dest_md5="eddab9bfc554f2cac9d4f7deee59d744"
-
diff --git a/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.stex b/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.stex
deleted file mode 100644
index f877b74..0000000
Binary files a/.import/grass.png-4e90a4e3fdfeb91bdade83e0d1eb7d47.stex and /dev/null differ
diff --git a/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.md5 b/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.md5
deleted file mode 100644
index b6988a3..0000000
--- a/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="f63c0b618e4029ab7db46130a39050bc"
-dest_md5="5ae15f7f93ebb7667d6cf1268987bb99"
-
diff --git a/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.stex b/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.stex
deleted file mode 100644
index e39c5ca..0000000
Binary files a/.import/hud.png-d633f5249ccc091a7e592fabc835a18c.stex and /dev/null differ
diff --git a/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.md5 b/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.md5
deleted file mode 100644
index 10feeaa..0000000
--- a/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="c8db8b1c88764e5a7f5a5a1f7fb47a41"
-dest_md5="7620ce6045a282839caeaf946382dd77"
-
diff --git a/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.stex b/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.stex
deleted file mode 100644
index 0e4502c..0000000
Binary files a/.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.stex and /dev/null differ
diff --git a/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 b/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5
deleted file mode 100644
index 13deb8b..0000000
--- a/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="bb52594ca1df00f873ba285f25caa7fa"
-dest_md5="1544aad5fd52648e6dbddf38d4219520"
-
diff --git a/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex b/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex
deleted file mode 100644
index bd57c06..0000000
Binary files a/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex and /dev/null differ
diff --git a/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.md5 b/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.md5
deleted file mode 100644
index 67b3fcf..0000000
--- a/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="2f722d590000bcd4105c435d63c56d62"
-dest_md5="468e5c7dc047d4c3f4a5678e109654c7"
-
diff --git a/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.oggstr b/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.oggstr
deleted file mode 100644
index f8258d4..0000000
Binary files a/.import/jump.ogg-3d03825ba28b5d65e7ecc96d371fc49a.oggstr and /dev/null differ
diff --git a/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.md5 b/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.md5
deleted file mode 100644
index 1b1a7aa..0000000
--- a/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="1b85070293b719f90ff15fcdc27a9962"
-dest_md5="d013488aed16c9f4964b962857331fa7"
-
diff --git a/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.stex b/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.stex
deleted file mode 100644
index e8c80b2..0000000
Binary files a/.import/jump.png-1685d5a7192aa1095a0402ec08744a1b.stex and /dev/null differ
diff --git a/.import/jump.png-695d33639e35e024c8003771673e09df.md5 b/.import/jump.png-695d33639e35e024c8003771673e09df.md5
deleted file mode 100644
index 56f59d1..0000000
--- a/.import/jump.png-695d33639e35e024c8003771673e09df.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="7ef8fdbdf0c335ff21028efb745976a0"
-dest_md5="61d8df76b946c9d135b8855bf8074db7"
-
diff --git a/.import/jump.png-695d33639e35e024c8003771673e09df.stex b/.import/jump.png-695d33639e35e024c8003771673e09df.stex
deleted file mode 100644
index 84ccc55..0000000
Binary files a/.import/jump.png-695d33639e35e024c8003771673e09df.stex and /dev/null differ
diff --git a/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.md5 b/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.md5
deleted file mode 100644
index 56f59d1..0000000
--- a/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="7ef8fdbdf0c335ff21028efb745976a0"
-dest_md5="61d8df76b946c9d135b8855bf8074db7"
-
diff --git a/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.stex b/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.stex
deleted file mode 100644
index 84ccc55..0000000
Binary files a/.import/jump.png-f758f12e4e782ceb59529e4c0b409edb.stex and /dev/null differ
diff --git a/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.md5 b/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.md5
deleted file mode 100644
index a84d45f..0000000
--- a/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="5df0186c7efc418aab4bbbb4a607225e"
-dest_md5="8a5ed461e0767c5bdc12db58e6743e05"
-
diff --git a/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.stex b/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.stex
deleted file mode 100644
index 3bc7b76..0000000
Binary files a/.import/levelselect_arrow.png-6a165a1051a0c8d94781310f1fd64758.stex and /dev/null differ
diff --git a/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.md5 b/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.md5
deleted file mode 100644
index a33c002..0000000
--- a/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="5d11ec7621772ba701c050f01d67583a"
-dest_md5="39fa25b6bddfa7660a03f438684583ae"
-
diff --git a/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.stex b/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.stex
deleted file mode 100644
index 79f83d0..0000000
Binary files a/.import/levelselect_border.png-11192234a11b3fa8b5fde8905419f955.stex and /dev/null differ
diff --git a/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.md5 b/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.md5
deleted file mode 100644
index beb64fc..0000000
--- a/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="34535b07495be808914a380f90fd87e7"
-dest_md5="79a7df7ae2329a369be13218be8e7abb"
-
diff --git a/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.stex b/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.stex
deleted file mode 100644
index fced77a..0000000
Binary files a/.import/levelselect_nexlevel.png-7b5414d44097edee437881d0f20be3ce.stex and /dev/null differ
diff --git a/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.md5 b/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.md5
deleted file mode 100644
index 4e3a002..0000000
--- a/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="4a206b00361f66dc7845f8f9e20bd5ec"
-dest_md5="356e43465cb5da46d2a444b98dbecea8"
-
diff --git a/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.stex b/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.stex
deleted file mode 100644
index fda8cbd..0000000
Binary files a/.import/mockup hud.png-692bec9bf3259505e14bde69f0cdea49.stex and /dev/null differ
diff --git a/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.md5 b/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.md5
deleted file mode 100644
index a4451e6..0000000
--- a/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="5f9377352fdc775917fc6d76e60bf6ee"
-dest_md5="c4426b0fb075f9c0c4f1f6562b87d2e3"
-
diff --git a/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.stex b/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.stex
deleted file mode 100644
index 850b81a..0000000
Binary files a/.import/monopoly.png-910643831d67dfa2bec184b1ef67b679.stex and /dev/null differ
diff --git a/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.md5 b/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.md5
deleted file mode 100644
index 6dd3384..0000000
--- a/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="c47290ad5f1e139acea4a8ee34bb5272"
-dest_md5="8beccdb709117e357df62a869effa143"
-
diff --git a/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.stex b/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.stex
deleted file mode 100644
index 3e9fcac..0000000
Binary files a/.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.stex and /dev/null differ
diff --git a/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.md5 b/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.md5
deleted file mode 100644
index 48bdef0..0000000
--- a/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="795eac72790ee88d49beddf832b3097a"
-dest_md5="13de4e60f76f93b85e3985d202d230fa"
-
diff --git a/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.stex b/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.stex
deleted file mode 100644
index 442ab5e..0000000
Binary files a/.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.stex and /dev/null differ
diff --git a/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.md5 b/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.md5
deleted file mode 100644
index 42903c0..0000000
--- a/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="1c29c7c981140e33a1f098dced089402"
-dest_md5="12c36ec724f1dfc72bc17c966aba579d"
-
diff --git a/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.stex b/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.stex
deleted file mode 100644
index 5f13a13..0000000
Binary files a/.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.stex and /dev/null differ
diff --git a/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.md5 b/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.md5
deleted file mode 100644
index 294eec9..0000000
--- a/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="bae264ef795216ac097995eb4a8318a0"
-dest_md5="510dc415ac2b127f72435cbd356bb19b"
-
diff --git a/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.stex b/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.stex
deleted file mode 100644
index 106af54..0000000
Binary files a/.import/pal_purplearmor.png-0894c7036499faf14d872d56dba1c18a.stex and /dev/null differ
diff --git a/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.md5 b/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.md5
deleted file mode 100644
index 5b5e1fc..0000000
--- a/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="8fc881edcb39ccf0758b9ec711989795"
-dest_md5="7f140056d488b97e7bef07fd1560499a"
-
diff --git a/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.stex b/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.stex
deleted file mode 100644
index 75b9783..0000000
Binary files a/.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.stex and /dev/null differ
diff --git a/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.md5 b/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.md5
deleted file mode 100644
index c795f98..0000000
--- a/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="56ae6e64964f891d076b81a50fe9aef7"
-dest_md5="14dafb6deeb75df28ddbbe8373dce40c"
-
diff --git a/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.stex b/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.stex
deleted file mode 100644
index 56306d0..0000000
Binary files a/.import/pal_star_blue.png-05c550b35365c1382fa23df6191e0d97.stex and /dev/null differ
diff --git a/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.md5 b/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.md5
deleted file mode 100644
index 44ee5e6..0000000
--- a/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="b6928f2db9789ed42603a4c32893bdf5"
-dest_md5="466db3be455e4ba0692a11540345cb7c"
-
diff --git a/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.stex b/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.stex
deleted file mode 100644
index ca8b64c..0000000
Binary files a/.import/pal_star_green.png-6e4c05d470736059c575abbe1a12e5aa.stex and /dev/null differ
diff --git a/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.md5 b/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.md5
deleted file mode 100644
index 82f0b44..0000000
--- a/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0b1148b46c0c5d4f4402b83c0d0cf829"
-dest_md5="0810406e3450eb15a7801181db267f29"
-
diff --git a/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.stex b/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.stex
deleted file mode 100644
index 7ff07a4..0000000
Binary files a/.import/pal_star_magenta.png-c275db529d4c14e60a30ae71c4a2151f.stex and /dev/null differ
diff --git a/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.md5 b/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.md5
deleted file mode 100644
index 9ca9faa..0000000
--- a/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="2de71ad66f0f37037ffb0e6d617e31db"
-dest_md5="f81645a4b165156d9c03d110f43e2b06"
-
diff --git a/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.stex b/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.stex
deleted file mode 100644
index 1ad3ad2..0000000
Binary files a/.import/pal_star_red.png-3b2ed35cf01dc5449f63a3d3dc992bd9.stex and /dev/null differ
diff --git a/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.md5 b/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.md5
deleted file mode 100644
index fd0dd9b..0000000
--- a/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="5b5532afc5f9a1e1e3691fed210a7da7"
-dest_md5="0264983583fb9ad0432eb1b2ae0c8c61"
-
diff --git a/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.stex b/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.stex
deleted file mode 100644
index e276617..0000000
Binary files a/.import/pal_star_yellow.png-30f9452933ab0b4210c1dd8088f9774b.stex and /dev/null differ
diff --git a/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.md5 b/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.md5
deleted file mode 100644
index 6c97514..0000000
--- a/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="fc014eac57868dbc17501306da02c110"
-dest_md5="569811ac7a9fb601453c764606458755"
-
diff --git a/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.stex b/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.stex
deleted file mode 100644
index 95b42e4..0000000
Binary files a/.import/pal_sword.png-829182fcc48f6b898083bac5a32184d4.stex and /dev/null differ
diff --git a/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.md5 b/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.md5
deleted file mode 100644
index 6c97514..0000000
--- a/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="fc014eac57868dbc17501306da02c110"
-dest_md5="569811ac7a9fb601453c764606458755"
-
diff --git a/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.stex b/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.stex
deleted file mode 100644
index 95b42e4..0000000
Binary files a/.import/pal_sword.png-ff520d50820aeef50dd3db489d55677f.stex and /dev/null differ
diff --git a/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.md5 b/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.md5
deleted file mode 100644
index 8dcd040..0000000
--- a/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="16511dc5b35e1f6de7b6ec1048631f08"
-dest_md5="68acc4f761458e3d4bd419729579dfe7"
-
diff --git a/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.stex b/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.stex
deleted file mode 100644
index b5f3f35..0000000
Binary files a/.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.stex and /dev/null differ
diff --git a/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.md5 b/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.md5
deleted file mode 100644
index 8dcd040..0000000
--- a/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="16511dc5b35e1f6de7b6ec1048631f08"
-dest_md5="68acc4f761458e3d4bd419729579dfe7"
-
diff --git a/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.stex b/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.stex
deleted file mode 100644
index b5f3f35..0000000
Binary files a/.import/pal_sword_gold.png-4dfff1cfa17ec4773c16496398de6e0a.stex and /dev/null differ
diff --git a/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.md5 b/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.md5
deleted file mode 100644
index 47576c5..0000000
--- a/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="d0ebfa88420545cde135bfe068b51d53"
-dest_md5="b99d58c481d8fa242bfbb87dd4c7ee32"
-
diff --git a/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.stex b/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.stex
deleted file mode 100644
index 879bcce..0000000
Binary files a/.import/pal_sword_red.png-2f6f5e5d4e6d7df25310a4e7290dbe25.stex and /dev/null differ
diff --git a/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.md5 b/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.md5
deleted file mode 100644
index 47576c5..0000000
--- a/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="d0ebfa88420545cde135bfe068b51d53"
-dest_md5="b99d58c481d8fa242bfbb87dd4c7ee32"
-
diff --git a/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.stex b/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.stex
deleted file mode 100644
index 879bcce..0000000
Binary files a/.import/pal_sword_red.png-86f2457050c742d98eba3504866e4f34.stex and /dev/null differ
diff --git a/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.md5 b/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.md5
deleted file mode 100644
index cda3785..0000000
--- a/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="da59cbe5b061022e62f28cd040582193"
-dest_md5="11c7e9a26e8b710c1fd8a389a87014a0"
-
diff --git a/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.stex b/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.stex
deleted file mode 100644
index 06192a1..0000000
Binary files a/.import/pal_sword_teal.png-7b86a22ab3268aada8bbe3001555234b.stex and /dev/null differ
diff --git a/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.md5 b/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.md5
deleted file mode 100644
index cda3785..0000000
--- a/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="da59cbe5b061022e62f28cd040582193"
-dest_md5="11c7e9a26e8b710c1fd8a389a87014a0"
-
diff --git a/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.stex b/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.stex
deleted file mode 100644
index 06192a1..0000000
Binary files a/.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.stex and /dev/null differ
diff --git a/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.md5 b/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.md5
deleted file mode 100644
index 938c87a..0000000
--- a/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="eab90ddf35ac42be79c7583b9b65e772"
-dest_md5="b78c955e2b4d9a4a58d780d9d5d62d3c"
-
diff --git a/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.stex b/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.stex
deleted file mode 100644
index a7c3c22..0000000
Binary files a/.import/prideborder.png-e0e635543455b3cf3c1ea3172eb9680f.stex and /dev/null differ
diff --git a/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.md5 b/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.md5
deleted file mode 100644
index 47b553c..0000000
--- a/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="7bcd36780f76f0c50bff145b7fde4cd2"
-dest_md5="657821031052c221b81185e83cd39b2a"
-
diff --git a/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.stex b/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.stex
deleted file mode 100644
index ccb60e0..0000000
Binary files a/.import/rock.png-6def0d8c73ec8719627db8ce621bfd5d.stex and /dev/null differ
diff --git a/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.md5 b/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.md5
deleted file mode 100644
index 3e2aa44..0000000
--- a/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0057c515a9b9d7768894647b74c442d5"
-dest_md5="be2b65eec0ac8ff7e78507d4877e826c"
-
diff --git a/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.mp3str b/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.mp3str
deleted file mode 100644
index a1777e7..0000000
Binary files a/.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.mp3str and /dev/null differ
diff --git a/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.md5 b/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.md5
deleted file mode 100644
index 290fc85..0000000
--- a/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="dd4f9fb6fe826116c3ac7053da03e403"
-dest_md5="999dd5d6e313f8c56f7645b191174805"
-
diff --git a/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.stex b/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.stex
deleted file mode 100644
index 0b43e23..0000000
Binary files a/.import/sg_bow.png-92bf7dc68fff558d09a1bb7dc4c97add.stex and /dev/null differ
diff --git a/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.md5 b/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.md5
deleted file mode 100644
index 79f9146..0000000
--- a/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ff2cf769b8bf9c83adad05febc54e6df"
-dest_md5="aca159542683eb470f06d11f93b054d9"
-
diff --git a/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.stex b/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.stex
deleted file mode 100644
index 316b30e..0000000
Binary files a/.import/sg_climb.png-188516c6a7bba12faa74d1f49265cde9.stex and /dev/null differ
diff --git a/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.md5 b/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.md5
deleted file mode 100644
index 79f9146..0000000
--- a/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ff2cf769b8bf9c83adad05febc54e6df"
-dest_md5="aca159542683eb470f06d11f93b054d9"
-
diff --git a/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.stex b/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.stex
deleted file mode 100644
index 316b30e..0000000
Binary files a/.import/sg_climb.png-8481f55c7b86b92a370ef711ff86d307.stex and /dev/null differ
diff --git a/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.md5 b/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.md5
deleted file mode 100644
index 900fd4e..0000000
--- a/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="8a9e7a46d5e15ed3c094a631969ad605"
-dest_md5="2b98f6f5502f4657455d0e8833d2bb9b"
-
diff --git a/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.stex b/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.stex
deleted file mode 100644
index 9a74f5b..0000000
Binary files a/.import/sg_doublejump.png-dd8c75624dec8df436835e183d040f72.stex and /dev/null differ
diff --git a/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.md5 b/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.md5
deleted file mode 100644
index c045f57..0000000
--- a/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="63bdcf4415dc2b4ffd6ffb0721d52a52"
-dest_md5="0d25a39fb8e5e0c45d893c9792359026"
-
diff --git a/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.stex b/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.stex
deleted file mode 100644
index f6c75c5..0000000
Binary files a/.import/sg_idle.png-416a1cdaa9fb227b4bd1025276714825.stex and /dev/null differ
diff --git a/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.md5 b/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.md5
deleted file mode 100644
index c045f57..0000000
--- a/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="63bdcf4415dc2b4ffd6ffb0721d52a52"
-dest_md5="0d25a39fb8e5e0c45d893c9792359026"
-
diff --git a/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.stex b/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.stex
deleted file mode 100644
index f6c75c5..0000000
Binary files a/.import/sg_idle.png-e430586add9b01ef30bb5a237681b412.stex and /dev/null differ
diff --git a/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.md5 b/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.md5
deleted file mode 100644
index 806f7a8..0000000
--- a/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0ad7490d0f79fade9aac088a17ebd8e1"
-dest_md5="80fea78d9db0e43476a30349a98cd087"
-
diff --git a/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.stex b/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.stex
deleted file mode 100644
index 884de3f..0000000
Binary files a/.import/sg_idle.png-f5ea6aa2a00d45cfe27b9b4900243e25.stex and /dev/null differ
diff --git a/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.md5 b/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.md5
deleted file mode 100644
index 806f7a8..0000000
--- a/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0ad7490d0f79fade9aac088a17ebd8e1"
-dest_md5="80fea78d9db0e43476a30349a98cd087"
-
diff --git a/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.stex b/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.stex
deleted file mode 100644
index 884de3f..0000000
Binary files a/.import/sg_idle_color.png-013b1031a65df35c4a25c95f81fa59de.stex and /dev/null differ
diff --git a/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.md5 b/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.md5
deleted file mode 100644
index 806f7a8..0000000
--- a/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0ad7490d0f79fade9aac088a17ebd8e1"
-dest_md5="80fea78d9db0e43476a30349a98cd087"
-
diff --git a/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.stex b/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.stex
deleted file mode 100644
index 884de3f..0000000
Binary files a/.import/sg_idle_color.png-1b8029ceac109f4228f5782b75db144d.stex and /dev/null differ
diff --git a/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.md5 b/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.md5
deleted file mode 100644
index 4dd9554..0000000
--- a/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="758b41709b69d664033afb5aac90836f"
-dest_md5="5773a8b2288da67e975c37279176802f"
-
diff --git a/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.stex b/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.stex
deleted file mode 100644
index b53713a..0000000
Binary files a/.import/sg_outline.png-d83bd4211370f1ca4f13854b52bba784.stex and /dev/null differ
diff --git a/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.md5 b/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.md5
deleted file mode 100644
index d1aab00..0000000
--- a/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="6f9f2cee0dbc9668f922adf18955131e"
-dest_md5="f653b2119d0873a52a2f9d176c577ebf"
-
diff --git a/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.stex b/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.stex
deleted file mode 100644
index 2e9043c..0000000
Binary files a/.import/sg_shoot.png-223ce6d7d994249f3cb61d6c2acca3e4.stex and /dev/null differ
diff --git a/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.md5 b/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.md5
deleted file mode 100644
index 3c54042..0000000
--- a/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="eb9124d9635714f5f75ebde43a34d500"
-dest_md5="67786600ab9901e6eae9cb41dc4e3fe8"
-
diff --git a/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.stex b/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.stex
deleted file mode 100644
index b23ec30..0000000
Binary files a/.import/sg_shoot_air.png-eaed2f177e6addedcd0fd98ca682e602.stex and /dev/null differ
diff --git a/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.md5 b/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.md5
deleted file mode 100644
index c8be368..0000000
--- a/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="77b59f61726f60517f6b47e28ec5a8d4"
-dest_md5="d8648a4deb976a1b8ede2630af6ba5ca"
-
diff --git a/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.stex b/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.stex
deleted file mode 100644
index 4c3112b..0000000
Binary files a/.import/sg_shoot_grounded.png-f5fd264dea518c0aedffd9ce0d2e3ddb.stex and /dev/null differ
diff --git a/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.md5 b/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.md5
deleted file mode 100644
index 98d9939..0000000
--- a/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="c0ec8bb4327c0f5aca344d9ddeb36f9e"
-dest_md5="ae630ba4b2e4202f68611d1595151e28"
-
diff --git a/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.stex b/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.stex
deleted file mode 100644
index b6d8d32..0000000
Binary files a/.import/sg_slash.png-50c50a2a7ac9eb40d041fcf4306674d2.stex and /dev/null differ
diff --git a/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.md5 b/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.md5
deleted file mode 100644
index 98d9939..0000000
--- a/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="c0ec8bb4327c0f5aca344d9ddeb36f9e"
-dest_md5="ae630ba4b2e4202f68611d1595151e28"
-
diff --git a/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.stex b/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.stex
deleted file mode 100644
index b6d8d32..0000000
Binary files a/.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.stex and /dev/null differ
diff --git a/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.md5 b/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.md5
deleted file mode 100644
index 692a4cd..0000000
--- a/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="55e6f3920f723054c1dac825ebf97480"
-dest_md5="dc49f01617a07a91c66156a27f71fbaa"
-
diff --git a/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.stex b/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.stex
deleted file mode 100644
index 0d06be9..0000000
Binary files a/.import/sg_stab.png-20e3c67d443548a3072e792fd6e4dcaf.stex and /dev/null differ
diff --git a/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.md5 b/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.md5
deleted file mode 100644
index 692a4cd..0000000
--- a/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="55e6f3920f723054c1dac825ebf97480"
-dest_md5="dc49f01617a07a91c66156a27f71fbaa"
-
diff --git a/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.stex b/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.stex
deleted file mode 100644
index 0d06be9..0000000
Binary files a/.import/sg_stab.png-fee5d74996b642f29297d4fcc66beea9.stex and /dev/null differ
diff --git a/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.md5 b/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.md5
deleted file mode 100644
index 9c5648c..0000000
--- a/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ed7ac09d30503b8dd46684d1fc4c295f"
-dest_md5="54277aaf03348f2c79f2b3c80bab5d6f"
-
diff --git a/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.stex b/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.stex
deleted file mode 100644
index 3c98ff3..0000000
Binary files a/.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.stex and /dev/null differ
diff --git a/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.md5 b/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.md5
deleted file mode 100644
index 9c5648c..0000000
--- a/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ed7ac09d30503b8dd46684d1fc4c295f"
-dest_md5="54277aaf03348f2c79f2b3c80bab5d6f"
-
diff --git a/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.stex b/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.stex
deleted file mode 100644
index 3c98ff3..0000000
Binary files a/.import/sg_swing.png-bbcb50621a0606ef1fd457870ab15063.stex and /dev/null differ
diff --git a/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.md5 b/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.md5
deleted file mode 100644
index 456fc1f..0000000
--- a/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="2a82019fa356fd8250ab860b06e110a9"
-dest_md5="b540eea6fd7eeea10d1b9f72afe16e44"
-
diff --git a/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.stex b/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.stex
deleted file mode 100644
index f6d4a2b..0000000
Binary files a/.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.stex and /dev/null differ
diff --git a/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.md5 b/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.md5
deleted file mode 100644
index 456fc1f..0000000
--- a/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="2a82019fa356fd8250ab860b06e110a9"
-dest_md5="b540eea6fd7eeea10d1b9f72afe16e44"
-
diff --git a/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.stex b/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.stex
deleted file mode 100644
index f6d4a2b..0000000
Binary files a/.import/sg_sword.png-5e524e815619ee089b0ece41b202a028.stex and /dev/null differ
diff --git a/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.md5 b/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.md5
deleted file mode 100644
index 4311795..0000000
--- a/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a9d517fccc4667baafbd519332c3be28"
-dest_md5="327b5b4e919b5b91ed5ce08ac3bc0edb"
-
diff --git a/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.stex b/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.stex
deleted file mode 100644
index 61d6285..0000000
Binary files a/.import/sg_walk.png-2dbe58b396665ac1554c9b3b839f8a82.stex and /dev/null differ
diff --git a/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.md5 b/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.md5
deleted file mode 100644
index 8eea986..0000000
--- a/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="94a19f9ae468d05d12ff716c33907bc0"
-dest_md5="cdbebed63e60558783a49912739c531a"
-
diff --git a/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.stex b/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.stex
deleted file mode 100644
index ae9d2f5..0000000
Binary files a/.import/sg_walk.png-b20b1f6fcfa2d179f1538669ec32d61e.stex and /dev/null differ
diff --git a/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.md5 b/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.md5
deleted file mode 100644
index 8eea986..0000000
--- a/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="94a19f9ae468d05d12ff716c33907bc0"
-dest_md5="cdbebed63e60558783a49912739c531a"
-
diff --git a/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.stex b/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.stex
deleted file mode 100644
index ae9d2f5..0000000
Binary files a/.import/sg_walk.png-f13d3e850616859ae31d64b9786dd6a2.stex and /dev/null differ
diff --git a/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.md5 b/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.md5
deleted file mode 100644
index b739ee0..0000000
--- a/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="9302f81a1690d87289a43a2a8b447e79"
-dest_md5="31524169a1208a42229db85c819bbade"
-
diff --git a/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.stex b/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.stex
deleted file mode 100644
index ae05fb7..0000000
Binary files a/.import/shard.png-5cd72fd45ca56dace96a166a5ce4756c.stex and /dev/null differ
diff --git a/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.md5 b/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.md5
deleted file mode 100644
index 0862fc7..0000000
--- a/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="234b7948dfce0e2acd7cadd00f04daa1"
-dest_md5="21956716b623996381004ca0e06ba1ef"
-
diff --git a/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.stex b/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.stex
deleted file mode 100644
index 6b6c7ed..0000000
Binary files a/.import/slime.png-62fa29b1c63ec21bc37f2348e6ccfbe5.stex and /dev/null differ
diff --git a/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.md5 b/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.md5
deleted file mode 100644
index 6e6a0a3..0000000
--- a/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a5c6df9c446162e7c3e6560baabb9f95"
-dest_md5="ff409da6499c3c058d1f2a62a98392e3"
-
diff --git a/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.stex b/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.stex
deleted file mode 100644
index 0c617cd..0000000
Binary files a/.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.stex and /dev/null differ
diff --git a/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.md5 b/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.md5
deleted file mode 100644
index 90f20e8..0000000
--- a/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="168c71bb7a1c3cae99438d1a10ae8d01"
-dest_md5="afcee443a9c8c9389884fd7d6c9d5913"
-
diff --git a/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.stex b/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.stex
deleted file mode 100644
index dd300ba..0000000
Binary files a/.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.stex and /dev/null differ
diff --git a/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.md5 b/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.md5
deleted file mode 100644
index 4415e08..0000000
--- a/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="1aaaecc5633498ee20ee4dab9b2d2cd0"
-dest_md5="ada2bdf36982a737b77f46d7848a65ab"
-
diff --git a/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.stex b/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.stex
deleted file mode 100644
index 97347fb..0000000
Binary files a/.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.stex and /dev/null differ
diff --git a/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.md5 b/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.md5
deleted file mode 100644
index 22da990..0000000
--- a/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="1771a21a6b8409378f2c52aaf535f670"
-dest_md5="58eed7ee61fb42886dc28383cf6521a8"
-
diff --git a/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.mp3str b/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.mp3str
deleted file mode 100644
index 6541c82..0000000
Binary files a/.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.mp3str and /dev/null differ
diff --git a/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.md5 b/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.md5
deleted file mode 100644
index be279ac..0000000
--- a/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="fa736e12b5ad6e0b506c142da949c609"
-dest_md5="7fb8e0d80191df521d68f774ae8d550d"
-
diff --git a/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.stex b/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.stex
deleted file mode 100644
index 0f8d4ca..0000000
Binary files a/.import/snail.png-665b03ca99f23d92830cd36201ff3f05.stex and /dev/null differ
diff --git a/.import/snake.png-927d590dcffa73c624300c783be11559.md5 b/.import/snake.png-927d590dcffa73c624300c783be11559.md5
deleted file mode 100644
index a529d78..0000000
--- a/.import/snake.png-927d590dcffa73c624300c783be11559.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="2d2acae605e232cdf9fbd3d65995bed4"
-dest_md5="250f8c089c23ae01557033b998275464"
-
diff --git a/.import/snake.png-927d590dcffa73c624300c783be11559.stex b/.import/snake.png-927d590dcffa73c624300c783be11559.stex
deleted file mode 100644
index bb45779..0000000
Binary files a/.import/snake.png-927d590dcffa73c624300c783be11559.stex and /dev/null differ
diff --git a/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.md5 b/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.md5
deleted file mode 100644
index f18b2a5..0000000
--- a/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ae4d82d1cc3cbfcc26e3138508e61969"
-dest_md5="af4ba30a0295d4e1f52be810adb0656c"
-
diff --git a/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.oggstr b/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.oggstr
deleted file mode 100644
index edb4fa6..0000000
Binary files a/.import/snd_coin.ogg-e43af4b2a5fcdba9e9309ebc8f191147.oggstr and /dev/null differ
diff --git a/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.md5 b/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.md5
deleted file mode 100644
index 6c82197..0000000
--- a/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a600e425906c5df72955d9359438f454"
-dest_md5="38480d5a86d4c34138941ec5c6cb2261"
-
diff --git a/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.stex b/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.stex
deleted file mode 100644
index bf9507b..0000000
Binary files a/.import/spike.png-a608aa67f6e0f5dc30513729727656ff.stex and /dev/null differ
diff --git a/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.md5 b/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.md5
deleted file mode 100644
index 505a932..0000000
--- a/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="699579f90ee274df8c5a40d80448090e"
-dest_md5="4c2e9c8e2abce739692e926bdc5e56cf"
-
diff --git a/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.stex b/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.stex
deleted file mode 100644
index bf2ec48..0000000
Binary files a/.import/star.png-bbd05430ac53c14d61c89cec8bc04e18.stex and /dev/null differ
diff --git a/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.md5 b/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.md5
deleted file mode 100644
index d808385..0000000
--- a/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="50c7ca428388380b4e3371e36bac6590"
-dest_md5="4cb7c8a33151d997fb2b64616489f751"
-
diff --git a/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.stex b/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.stex
deleted file mode 100644
index 393da4a..0000000
Binary files a/.import/star_blue.png-e5bcc7604832ad6c1269fea136d51c5d.stex and /dev/null differ
diff --git a/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.md5 b/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.md5
deleted file mode 100644
index 2a2eb91..0000000
--- a/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ed666ac4ec5b3efcd3db6c36a786ba6c"
-dest_md5="1a0e86b5951f0b5d1122adaca79678fc"
-
diff --git a/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.stex b/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.stex
deleted file mode 100644
index e166f75..0000000
Binary files a/.import/star_green.png-c7fbc1322c67118272cc12bb63499b0b.stex and /dev/null differ
diff --git a/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.md5 b/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.md5
deleted file mode 100644
index bb88d00..0000000
--- a/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="8a65efa898267c8c69299db9cc40c37f"
-dest_md5="5547e1a82c8f3a2d89746cf6bf70f8d5"
-
diff --git a/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.stex b/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.stex
deleted file mode 100644
index b6a2c32..0000000
Binary files a/.import/star_magenta.png-53e023c3de5374393ea55d0dc97fc43a.stex and /dev/null differ
diff --git a/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.md5 b/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.md5
deleted file mode 100644
index 8157537..0000000
--- a/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="1a8ad796076d3ea33646c9ff925b0e25"
-dest_md5="5ecb10cac189aed82e4e5c85883cc1d2"
-
diff --git a/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.stex b/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.stex
deleted file mode 100644
index 84e92eb..0000000
Binary files a/.import/star_red.png-e442fe3e282bb73f7112258f82eb8d77.stex and /dev/null differ
diff --git a/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.md5 b/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.md5
deleted file mode 100644
index 18ef7be..0000000
--- a/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="ccde49efd86bb41470bac3530c6eef55"
-dest_md5="789972e26b13ed624f234f796699bce7"
-
diff --git a/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.stex b/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.stex
deleted file mode 100644
index f8b10ba..0000000
Binary files a/.import/star_yellow.png-cda8dd67e017975111fa237e374da125.stex and /dev/null differ
diff --git a/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.md5 b/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.md5
deleted file mode 100644
index 5fa4ea3..0000000
--- a/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="fe2bd66edb79cdea2a04031a4d4e5da8"
-dest_md5="77965935ebf840b8c8251b2ffa77cb23"
-
diff --git a/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.stex b/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.stex
deleted file mode 100644
index a193f92..0000000
Binary files a/.import/stars_hud.png-8d3be9176bacfd7093743651807c1fb5.stex and /dev/null differ
diff --git a/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.md5 b/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.md5
deleted file mode 100644
index 7fdc73d..0000000
--- a/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="f31a92be6a8af2815005a45cc6be9a9a"
-dest_md5="e117672c35c8fdd1ee6b1ba743880361"
-
diff --git a/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.oggstr b/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.oggstr
deleted file mode 100644
index bc0cc3c..0000000
Binary files a/.import/sword.ogg-dba4b3e0868285d6316b38990f0d353e.oggstr and /dev/null differ
diff --git a/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.md5 b/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.md5
deleted file mode 100644
index 32e2671..0000000
--- a/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="e1eba5206bc911f0ff9776597ce64982"
-dest_md5="594da4be1241e61ea466cbd79dffce51"
-
diff --git a/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.stex b/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.stex
deleted file mode 100644
index 3cbba6c..0000000
Binary files a/.import/sword.png-448e9f82471c46e888b12306fabd3d5e.stex and /dev/null differ
diff --git a/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.md5 b/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.md5
deleted file mode 100644
index 32e2671..0000000
--- a/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="e1eba5206bc911f0ff9776597ce64982"
-dest_md5="594da4be1241e61ea466cbd79dffce51"
-
diff --git a/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.stex b/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.stex
deleted file mode 100644
index 3cbba6c..0000000
Binary files a/.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.stex and /dev/null differ
diff --git a/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.md5 b/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.md5
deleted file mode 100644
index f6838c5..0000000
--- a/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="80559bd08ffe9b9ed941d5db16cf3f52"
-dest_md5="1947c3e8dffda706956d614edf7dce05"
-
diff --git a/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.stex b/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.stex
deleted file mode 100644
index 6d4924c..0000000
Binary files a/.import/sword_slash.png-7ae24b9b2e8c603200a94ffa56542cdb.stex and /dev/null differ
diff --git a/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.md5 b/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.md5
deleted file mode 100644
index f6838c5..0000000
--- a/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="80559bd08ffe9b9ed941d5db16cf3f52"
-dest_md5="1947c3e8dffda706956d614edf7dce05"
-
diff --git a/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.stex b/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.stex
deleted file mode 100644
index 6d4924c..0000000
Binary files a/.import/sword_slash.png-a734a066e481c52863aafde60d35a027.stex and /dev/null differ
diff --git a/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.md5 b/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.md5
deleted file mode 100644
index 5e17516..0000000
--- a/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a59d8a95903c590aa716de5f2609b2df"
-dest_md5="b863f056b9c45e5e88c28d64b2eda2c8"
-
diff --git a/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.stex b/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.stex
deleted file mode 100644
index cea1168..0000000
Binary files a/.import/sword_stab.png-a93c38f977c9d8495ec7363dce3c2c96.stex and /dev/null differ
diff --git a/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.md5 b/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.md5
deleted file mode 100644
index 5e17516..0000000
--- a/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="a59d8a95903c590aa716de5f2609b2df"
-dest_md5="b863f056b9c45e5e88c28d64b2eda2c8"
-
diff --git a/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.stex b/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.stex
deleted file mode 100644
index cea1168..0000000
Binary files a/.import/sword_stab.png-d1937244db309c23d2bac78a7a7c1c8a.stex and /dev/null differ
diff --git a/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.md5 b/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.md5
deleted file mode 100644
index 2f44b28..0000000
--- a/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="43e6a7803608fe322bf2c6428855cd99"
-dest_md5="574de6c65b1c2d3864a411d8d12b8591"
-
diff --git a/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.stex b/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.stex
deleted file mode 100644
index c9ba6e4..0000000
Binary files a/.import/t_grass.png-9e25ede26c6dbc5c40964014b2e0e471.stex and /dev/null differ
diff --git a/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.md5 b/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.md5
deleted file mode 100644
index efbb51e..0000000
--- a/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="0e3b1f3cb3e8c06798d3400b9a36cbc6"
-dest_md5="bb72c5db654c687ac04b6604279d44eb"
-
diff --git a/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.sample b/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.sample
deleted file mode 100644
index effb635..0000000
Binary files a/.import/tempjingle.wav-bb9c1796b8de81e98ac7272cbb1283ae.sample and /dev/null differ
diff --git a/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.md5 b/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.md5
deleted file mode 100644
index dd93fbb..0000000
--- a/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="37cfb2d69f359d95aaaa9f69ac24576d"
-dest_md5="0e8e89f5c1568a5b86d4eb3a3c7ce197"
-
diff --git a/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.stex b/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.stex
deleted file mode 100644
index 612c1b1..0000000
Binary files a/.import/test_outline.png-718b593a40e1eb1f19a87019e56a4b0b.stex and /dev/null differ
diff --git a/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.md5 b/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.md5
deleted file mode 100644
index 4cf1c0b..0000000
--- a/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="9903ee48c3f91adebb26f59e53f00467"
-dest_md5="416e355f9219e54fe7fb939c1432e5b4"
-
diff --git a/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.stex b/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.stex
deleted file mode 100644
index 67f5f78..0000000
Binary files a/.import/turniwood.png-129c22553b3d66b3252dfc2c7ecbb083.stex and /dev/null differ
diff --git a/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.md5 b/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.md5
deleted file mode 100644
index 0712c2d..0000000
--- a/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="f525d445e4ed5980188f7ea6b568dd05"
-dest_md5="f5d17549b4206c565ccce1e105ecba3c"
-
diff --git a/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.stex b/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.stex
deleted file mode 100644
index a2ee26d..0000000
Binary files a/.import/turniwood_yellow.png-daf009113c5daf504d58a9354a706f88.stex and /dev/null differ
diff --git a/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.md5 b/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.md5
deleted file mode 100644
index 6d85772..0000000
--- a/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="9b78ccef1ede55ca3c29a27bcb177c99"
-dest_md5="be81cf02379faafbaf8053455787be47"
-
diff --git a/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.stex b/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.stex
deleted file mode 100644
index 87cc041..0000000
Binary files a/.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.stex and /dev/null differ
diff --git a/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.md5 b/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.md5
deleted file mode 100644
index eae0629..0000000
--- a/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="12655b0b7f98c143b2ae9faf30eaa73f"
-dest_md5="2bf60d6f13a5f393f76634e153d31902"
-
diff --git a/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.stex b/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.stex
deleted file mode 100644
index 65a34db..0000000
Binary files a/.import/water.png-3f22d65cf4ccd9c99d494e6c91686667.stex and /dev/null differ
diff --git a/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.md5 b/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.md5
deleted file mode 100644
index 70e4100..0000000
--- a/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="52dd0d98fbbd1da58f7566955dd1a06e"
-dest_md5="68712ae8e9eeec897c4cffc1a64484a6"
-
diff --git a/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.stex b/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.stex
deleted file mode 100644
index d815804..0000000
Binary files a/.import/water_1.png-3529478b8ebf3662cc2788fa678aa1be.stex and /dev/null differ
diff --git a/.import/water_2.png-d3a4257c90beef83847be898e108acb3.md5 b/.import/water_2.png-d3a4257c90beef83847be898e108acb3.md5
deleted file mode 100644
index edb64fd..0000000
--- a/.import/water_2.png-d3a4257c90beef83847be898e108acb3.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="3c48e646b90ec6bb1441d7f446e82370"
-dest_md5="bf4a0c3888bc16e7f013a84817ae6fdc"
-
diff --git a/.import/water_2.png-d3a4257c90beef83847be898e108acb3.stex b/.import/water_2.png-d3a4257c90beef83847be898e108acb3.stex
deleted file mode 100644
index e085bf9..0000000
Binary files a/.import/water_2.png-d3a4257c90beef83847be898e108acb3.stex and /dev/null differ
diff --git a/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.md5 b/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.md5
deleted file mode 100644
index 0a8e899..0000000
--- a/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="8d7d48ebd84024179c58b5718a151e8f"
-dest_md5="699fd00994fc39018d79634074c80a54"
-
diff --git a/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.stex b/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.stex
deleted file mode 100644
index f5f3cf0..0000000
Binary files a/.import/water_3.png-5e9524ae85dce7bc5ffd28531546dc61.stex and /dev/null differ
diff --git a/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.md5 b/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.md5
deleted file mode 100644
index 4a44807..0000000
--- a/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-source_md5="9411656496cf29e49efeb3416b7f0766"
-dest_md5="c373833324a7add86a57455f2d1f93b0"
-
diff --git a/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.stex b/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.stex
deleted file mode 100644
index d6595ae..0000000
Binary files a/.import/water_bottom.png-e393cffcc7d5d462a9452f73af8184eb.stex and /dev/null differ
diff --git a/LICENSE-ASSETS b/LICENSE-ASSETS
new file mode 100644
index 0000000..4ea99c2
--- /dev/null
+++ b/LICENSE-ASSETS
@@ -0,0 +1,395 @@
+Attribution 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution 4.0 International Public License ("Public License"). To the
+extent this Public License may be interpreted as a contract, You are
+granted the Licensed Rights in consideration of Your acceptance of
+these terms and conditions, and the Licensor grants You such rights in
+consideration of benefits the Licensor receives from making the
+Licensed Material available under these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ d. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ g. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ i. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's
+ License You apply must not prevent recipients of the Adapted
+ Material from complying with this Public License.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/LICENSE-CODE b/LICENSE-CODE
new file mode 100644
index 0000000..5dba822
--- /dev/null
+++ b/LICENSE-CODE
@@ -0,0 +1,7 @@
+Copyright © 2024 Haze Weathers and Penny Rigate
+
+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.
diff --git a/Main.tscn b/Main.tscn
deleted file mode 100644
index 80d3180..0000000
--- a/Main.tscn
+++ /dev/null
@@ -1,7 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://control.tscn" type="PackedScene" id=1]
-
-[node name="Main" type="Node2D"]
-
-[node name="Control" parent="." instance=ExtResource( 1 )]
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4ff031d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,20 @@
+# Revolution 2083
+Published source code of [Revolution 2083](https://pennyrigate.itch.io/revolution-2083).
+
+Feel free to use this to make mods, fangames, whatever you like! It would make
+us extra happy to be credited in and/or told about whatever you use this for.
+
+Apologies in advance for the messy code :)
+— Haze
+
+## License
+
+Music is by [Scarlett Sylvistrix](https://ivsnyd.bandcamp.com/) and licensed under
+the [CC-BY license](LICENSE-ASSETS) except for end credits
+cover of "You're Wondering Now".
+"You're Wondering Now" is not licensed for re-use.
+
+All textures and sound effects are by Haze Weathers and Penny Rigate.
+They are also licensed under the [CC-BY license](LICENSE-ASSETS).
+
+All other code and data is licensed under the [MIT license](LICENSE-CODE).
diff --git a/addons/godot_state_charts/animation_tree_state.svg b/addons/godot_state_charts/animation_tree_state.svg
new file mode 100644
index 0000000..432dac9
--- /dev/null
+++ b/addons/godot_state_charts/animation_tree_state.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/addons/godot_state_charts/animation_tree_state.svg.import b/addons/godot_state_charts/animation_tree_state.svg.import
new file mode 100644
index 0000000..6d03cb5
--- /dev/null
+++ b/addons/godot_state_charts/animation_tree_state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/animation_tree_state.svg-b99077fc178cfa1e23b2c854c7735c4a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/animation_tree_state.svg"
+dest_files=[ "res://.import/animation_tree_state.svg-b99077fc178cfa1e23b2c854c7735c4a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/atomic_state.gd b/addons/godot_state_charts/atomic_state.gd
new file mode 100644
index 0000000..4344a31
--- /dev/null
+++ b/addons/godot_state_charts/atomic_state.gd
@@ -0,0 +1,23 @@
+tool
+class_name AtomicState, "atomic_state.svg"
+extends State
+
+func _handle_transition(transition: Transition, source: State) -> void:
+ # resolve target state
+ var target = transition.resolve_target()
+ if not target is State:
+ push_error("the target state: %s of transition from state: %s is not a state" % [str(transition.to), source.name])
+ return
+ # atomic states can't transition, gotta ask mommy
+ get_parent()._handle_transition(transition, source)
+
+func _get_configuration_warning() -> String:
+ var warning := ._get_configuration_warning()
+ if not warning.empty():
+ return warning
+
+ for child in get_children():
+ if not child is Transition:
+ return "atomic states cannot have children other than transitions"
+
+ return ""
diff --git a/addons/godot_state_charts/atomic_state.svg b/addons/godot_state_charts/atomic_state.svg
new file mode 100644
index 0000000..85aba01
--- /dev/null
+++ b/addons/godot_state_charts/atomic_state.svg
@@ -0,0 +1,17 @@
+
+
+
diff --git a/addons/godot_state_charts/atomic_state.svg.import b/addons/godot_state_charts/atomic_state.svg.import
new file mode 100644
index 0000000..3121bfc
--- /dev/null
+++ b/addons/godot_state_charts/atomic_state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/atomic_state.svg-5ab16e5747cef5b5980c4bf84ef9b1af.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/atomic_state.svg"
+dest_files=[ "res://.import/atomic_state.svg-5ab16e5747cef5b5980c4bf84ef9b1af.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/compound_state.gd b/addons/godot_state_charts/compound_state.gd
new file mode 100644
index 0000000..9f20f5e
--- /dev/null
+++ b/addons/godot_state_charts/compound_state.gd
@@ -0,0 +1,107 @@
+tool
+class_name CompoundState, "compound_state.svg"
+extends State
+
+## initial state to activate when state is activated
+export var initial_state: NodePath setget _set_initial_state
+
+var _active_state: State = null
+
+onready var _initial_state: State = get_node_or_null(initial_state)
+
+func _set_initial_state(value: NodePath) -> void:
+ initial_state = value
+ update_configuration_warning()
+
+func _state_init() -> void:
+ ._state_init()
+
+ for child in get_children():
+ if child is State:
+ child._state_init()
+
+func _state_enter() -> void:
+ ._state_enter()
+
+ # activate initial state
+ if _initial_state != null:
+ _active_state = _initial_state
+ _active_state._state_enter()
+ else:
+ push_error("no initial state set for state %s" % name)
+
+func _state_exit() -> void:
+ # deactivate current state
+ if _active_state != null:
+ _active_state._state_exit()
+ _active_state = null
+ ._state_exit()
+
+func _state_event(event: String) -> bool:
+ if not active:
+ return false
+
+ # forward event to active state
+ if is_instance_valid(_active_state):
+ if _active_state._state_event(event):
+ emit_signal("event_received", event)
+ return true
+
+ # if event not handled by active state, handle here
+ return ._state_event(event)
+
+func _handle_transition(transition: Transition, source: State) -> void:
+ var target: State = transition.resolve_target()
+ if not target is State:
+ push_error("the target state: %s of transition from state: %s is not a state" % [str(transition.to), source.name])
+ return
+
+ if target.active:
+ return
+
+ # if direct child, just switch active state
+ if target in get_children():
+ # deactivate current state
+ if is_instance_valid(_active_state):
+ _active_state._state_exit()
+ # activate target state
+ _active_state = target
+ _active_state._state_enter()
+ return
+
+ # if ancestor, activate next state down and let it handle transition further
+ if self.is_a_parent_of(target):
+ # find which child is also ancestor
+ for child in get_children():
+ if child.is_a_parent_of(target):
+ # change state if necessary
+ if _active_state != child:
+ if is_instance_valid(_active_state):
+ _active_state._state_exit()
+ _active_state = child
+ _active_state._state_enter()
+ child._handle_transition(transition, source)
+ return
+ return
+
+ # target is a cousin, defer to mommy
+ get_parent()._handle_transition(transition, source)
+
+func _get_configuration_warning() -> String:
+ var warning := ._get_configuration_warning()
+ if not warning.empty():
+ return warning
+
+ if get_child_count() == 0:
+ return "compound states must have at least one child state"
+
+ var child_state = get_node_or_null(initial_state)
+
+ if not is_instance_valid(child_state):
+ return "initial state not found, is the path correct?"
+ if child_state.get_parent() != self:
+ return "initial state must be a direct child of this compound state"
+ if not child_state is State:
+ return "initial state must be a State"
+
+ return ""
diff --git a/addons/godot_state_charts/compound_state.svg b/addons/godot_state_charts/compound_state.svg
new file mode 100644
index 0000000..5a3c507
--- /dev/null
+++ b/addons/godot_state_charts/compound_state.svg
@@ -0,0 +1,24 @@
+
+
+
diff --git a/addons/godot_state_charts/compound_state.svg.import b/addons/godot_state_charts/compound_state.svg.import
new file mode 100644
index 0000000..14d57d6
--- /dev/null
+++ b/addons/godot_state_charts/compound_state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/compound_state.svg-84780d78ec1f15e1cbb9d20f4df031a7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/compound_state.svg"
+dest_files=[ "res://.import/compound_state.svg-84780d78ec1f15e1cbb9d20f4df031a7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/godot_state_charts.gd b/addons/godot_state_charts/godot_state_charts.gd
new file mode 100644
index 0000000..5e8aeaa
--- /dev/null
+++ b/addons/godot_state_charts/godot_state_charts.gd
@@ -0,0 +1,10 @@
+tool
+extends EditorPlugin
+
+# plugin initialization
+func _enter_tree() -> void:
+ pass
+
+# plugin cleanup
+func _exit_tree() -> void:
+ pass
diff --git a/addons/godot_state_charts/history_state.svg b/addons/godot_state_charts/history_state.svg
new file mode 100644
index 0000000..5bc1314
--- /dev/null
+++ b/addons/godot_state_charts/history_state.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/addons/godot_state_charts/history_state.svg.import b/addons/godot_state_charts/history_state.svg.import
new file mode 100644
index 0000000..2617264
--- /dev/null
+++ b/addons/godot_state_charts/history_state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/history_state.svg-7ed355ddc4d844fa3139e70c23187edd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/history_state.svg"
+dest_files=[ "res://.import/history_state.svg-7ed355ddc4d844fa3139e70c23187edd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/parallel_state.gd b/addons/godot_state_charts/parallel_state.gd
new file mode 100644
index 0000000..2b8d4df
--- /dev/null
+++ b/addons/godot_state_charts/parallel_state.gd
@@ -0,0 +1,53 @@
+tool
+class_name ParallelState, "parallel_state.svg"
+extends State
+
+var _sub_states: Array = []
+
+func _state_init() -> void:
+ ._state_init()
+
+ for child in get_children():
+ if child is State:
+ _sub_states.append(child)
+ child._state_init()
+
+func _state_enter() -> void:
+ ._state_enter()
+ # enter all children
+ for child in _sub_states:
+ child._state_enter()
+
+func _state_exit() -> void:
+ # exit all children
+ for child in _sub_states:
+ child._state_exit()
+ ._state_exit()
+
+func _state_event(event: String) -> bool:
+ if not active:
+ return false
+
+ # forward to all children
+ var handled := false
+ for child in _sub_states:
+ var child_handled = child._state_event(event)
+ handled = handled or child_handled
+
+ # if child handled event, no more touchy
+ if handled:
+ emit_signal("event_received", event)
+ return true
+
+ # otherwise handle ourselves
+ return ._state_event(event)
+
+func _get_configuration_warning() -> String:
+ var warning := ._get_configuration_warning()
+ if not warning.empty():
+ return warning
+
+ if get_child_count() == 0:
+ return "parallel states should have at least one child state"
+
+ return ""
diff --git a/addons/godot_state_charts/parallel_state.svg b/addons/godot_state_charts/parallel_state.svg
new file mode 100644
index 0000000..1f5e220
--- /dev/null
+++ b/addons/godot_state_charts/parallel_state.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/addons/godot_state_charts/parallel_state.svg.import b/addons/godot_state_charts/parallel_state.svg.import
new file mode 100644
index 0000000..f24030c
--- /dev/null
+++ b/addons/godot_state_charts/parallel_state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/parallel_state.svg-33f40e94bafae79f072d67563e0adcd3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/parallel_state.svg"
+dest_files=[ "res://.import/parallel_state.svg-33f40e94bafae79f072d67563e0adcd3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/plugin.cfg b/addons/godot_state_charts/plugin.cfg
new file mode 100644
index 0000000..b2ad71a
--- /dev/null
+++ b/addons/godot_state_charts/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="Godot State Charts"
+description="A simple, yet powerful state charts library for Godot"
+author="derkork"
+version="0.0.1"
+script="godot_state_charts.gd"
diff --git a/addons/godot_state_charts/state.gd b/addons/godot_state_charts/state.gd
new file mode 100644
index 0000000..83b09b3
--- /dev/null
+++ b/addons/godot_state_charts/state.gd
@@ -0,0 +1,132 @@
+tool
+class_name State, "state.svg"
+extends Node
+
+## called when state is entered
+signal state_entered()
+
+## called when state is exited
+signal state_exited()
+
+## called when state recieves an event while active
+signal event_received(event)
+
+## called when the state is processing
+signal state_processing(delta)
+
+## called when the state is physics_processing
+signal state_physics_processing(delta)
+
+## processing mode
+enum ProcessMode {IDLE, PHYSICS}
+
+## whether to process transition delays during physics or idle frames
+export (ProcessMode) var transition_process_mode: int = ProcessMode.PHYSICS
+## events to consume so that parent state can not
+export (Array, String) var consumed_events: Array = []
+
+## whether the current state is active
+var active: bool setget _set_active
+func _set_active(value: bool):
+ active = value
+ set_process(value)
+ set_physics_process(value)
+
+## all of the state's transitions
+var _transitions: Array = []
+## queued transition to take
+var _queued_transition: Transition = null
+## time until queued transition is taken
+var _queued_transition_time: float = 0.0
+
+## called when building the state chart
+func _state_init() -> void:
+ _set_active(false)
+
+ # get references to transitions
+ _transitions.clear()
+ for child in get_children():
+ if child is Transition:
+ _transitions.append(child as Transition)
+
+## called when state is entered
+func _state_enter() -> void:
+ _set_active(true)
+ emit_signal("state_entered")
+
+ # check eventless transitions
+ for transition in _transitions:
+ if not transition.has_event() and transition.evaluate_guard():
+ # first match is taken
+ _queue_transition(transition)
+
+## called when state is exited
+func _state_exit() -> void:
+ _set_active(false)
+ emit_signal("state_exited")
+
+## handles given event. returns true if it is consumed
+func _state_event(event: String) -> bool:
+ if not active:
+ return false
+
+ # emit event received signal
+ emit_signal("event_received", event)
+
+ #check for transitions reacting to event
+ for transition in _transitions:
+ if transition.event == event and transition.evaluate_guard():
+ # first match is taken
+ _queue_transition(transition)
+ return true
+
+ if event in consumed_events:
+ return true
+
+ return false
+
+func _process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+
+ # emit processing signal
+ emit_signal("state_processing", delta)
+
+ # process transitions if mode is IDLE
+ if transition_process_mode == ProcessMode.IDLE:
+ _process_transition(delta)
+
+func _physics_process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+
+ # emit physics processing signal
+ emit_signal("state_physics_processing", delta)
+
+ # process transitions if mode is PHYSICS
+ if transition_process_mode == ProcessMode.PHYSICS:
+ _process_transition(delta)
+
+## queues a transition to be taken
+func _queue_transition(transition: Transition) -> void:
+ _queued_transition = transition
+ _queued_transition_time = transition.delay
+
+## checks for and processes queued transition
+func _process_transition(delta: float) -> void:
+ # check for queued transition
+ if _queued_transition != null:
+ _queued_transition_time -= delta
+ # if ready, handle transition and clear queue
+ if _queued_transition_time <= 0.0:
+ var transition = _queued_transition
+ _queued_transition = null
+ _queued_transition_time = 0.0
+ _handle_transition(transition, self)
+
+## attempts to take transition
+func _handle_transition(transition: Transition, source: State) -> void:
+ push_error("state %s cannot handle transitions" % name)
+
+func _get_configuration_warning() -> String:
+ return ""
diff --git a/addons/godot_state_charts/state.svg b/addons/godot_state_charts/state.svg
new file mode 100644
index 0000000..d2a9d95
--- /dev/null
+++ b/addons/godot_state_charts/state.svg
@@ -0,0 +1,92 @@
+
+
diff --git a/addons/godot_state_charts/state.svg.import b/addons/godot_state_charts/state.svg.import
new file mode 100644
index 0000000..97f5e64
--- /dev/null
+++ b/addons/godot_state_charts/state.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/state.svg-282f80c2b8fcf2d526aa3e32719babaf.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/state.svg"
+dest_files=[ "res://.import/state.svg-282f80c2b8fcf2d526aa3e32719babaf.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/state_chart.gd b/addons/godot_state_charts/state_chart.gd
new file mode 100644
index 0000000..857259a
--- /dev/null
+++ b/addons/godot_state_charts/state_chart.gd
@@ -0,0 +1,69 @@
+tool
+class_name StateChart, "state_chart.svg"
+extends Node
+
+## whether chart should initialize on its own or be done manually
+export var auto_initialize: bool = true
+## whether chart should propagate processing events every frame
+export var idle_frame_event: bool = false
+export var physics_frame_event: bool = false
+
+# root state of the state chart
+var _state: State = null
+
+# values available to expression guards
+var _guard_properties: Dictionary = {}
+
+func _ready() -> void:
+ if Engine.editor_hint:
+ return
+ if auto_initialize:
+ initialize()
+
+func initialize() -> void:
+ # make sure only one child exists
+ if get_child_count() != 1:
+ push_error("StateChart must have exactly one child")
+ return
+
+ # verify child is a State
+ var child = get_child(0)
+ if not child is State:
+ push_error("StateChart's child must be a State")
+ return
+
+ # initialize states
+ _state = child as State
+ _state._state_init()
+
+ # enter root state
+ _state._state_enter()
+
+## sends an event to be propagated through the states
+func send_event(event: String) -> void:
+ if not is_instance_valid(_state):
+ push_error("StateChart is not initialized properly")
+ return
+
+ _state._state_event(event)
+
+## sets a property available to guard expressions in transitions
+func set_guard_property(property: String, value) -> void:
+ _guard_properties[property] = value
+
+func _get_configuration_warning() -> String:
+ if get_child_count() != 1:
+ return "StateChart must have exactly one child"
+ if not get_child(0) is State:
+ return "StateChart's child must be a State"
+ return ""
+
+# send frame events that transition can listen to if it should evaluate
+# its guard every frame
+func _process(delta: float) -> void:
+ if idle_frame_event:
+ send_event("idle_frame")
+
+func _physics_process(delta: float) -> void:
+ if physics_frame_event:
+ send_event("physics_frame")
diff --git a/addons/godot_state_charts/state_chart.svg b/addons/godot_state_charts/state_chart.svg
new file mode 100644
index 0000000..ea66f90
--- /dev/null
+++ b/addons/godot_state_charts/state_chart.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/addons/godot_state_charts/state_chart.svg.import b/addons/godot_state_charts/state_chart.svg.import
new file mode 100644
index 0000000..37cf872
--- /dev/null
+++ b/addons/godot_state_charts/state_chart.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/state_chart.svg-5c268dd045b20d73dfacd5cdf7606676.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/state_chart.svg"
+dest_files=[ "res://.import/state_chart.svg-5c268dd045b20d73dfacd5cdf7606676.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/addons/godot_state_charts/state_chart_debug.gd b/addons/godot_state_charts/state_chart_debug.gd
new file mode 100644
index 0000000..9873cfa
--- /dev/null
+++ b/addons/godot_state_charts/state_chart_debug.gd
@@ -0,0 +1,24 @@
+class_name StateChartDebug
+extends Tree
+
+var target: StateChart = null
+
+func _init() -> void:
+ set("custom_styles/bg", StyleBoxEmpty.new())
+
+func _physics_process(delta: float) -> void:
+ if target is StateChart and visible:
+ clear()
+ var root_state = target.get_child(0)
+ if root_state is State:
+ var item = create_item(null)
+ item.set_text(0, root_state.name)
+ _find_active_states(root_state, item)
+
+func _find_active_states(state: State, state_item: TreeItem):
+ for child in state.get_children():
+ if child is State:
+ if child.active:
+ var item := create_item(state_item)
+ item.set_text(0, child.name)
+ _find_active_states(child, item)
diff --git a/addons/godot_state_charts/transition.gd b/addons/godot_state_charts/transition.gd
new file mode 100644
index 0000000..0329da8
--- /dev/null
+++ b/addons/godot_state_charts/transition.gd
@@ -0,0 +1,88 @@
+tool
+class_name Transition, "transition.svg"
+extends Node
+
+## cyclic reference workarounds :/
+var _State = load("res://addons/godot_state_charts/state.gd")
+var _StateChart = load("res://addons/godot_state_charts/state_chart.gd")
+
+## state to transition to
+export var to: NodePath
+
+## event to react to for transition
+export var event: String
+
+## delay before taking transition
+export var delay: float = 0.0
+
+## expression to determine whether to take transition
+## if it returns true the transition will be taken
+## expression properties added via the StateChart are available here
+## if states are listed in `monitored_states`, they will be available as
+## boolean properties named "[state]_active"
+export (String, MULTILINE) var guard_expression: String
+
+## states to check if active
+## they are available in the guard expression as bools named "[state]_active"
+export (Array, NodePath) var checked_states: Array = []
+
+## returns true if the transition has an event to react to
+func has_event() -> bool:
+ return event != null and not event.empty()
+
+## returns the target state
+func resolve_target():
+ if to == null or to.is_empty():
+ return null
+
+ var target = get_node_or_null(to)
+ if target is _State:
+ return target
+
+ return null
+
+## returns true if the transition should be taken at this time
+func evaluate_guard() -> bool:
+ # return true if there is no guard
+ if guard_expression == null or guard_expression.empty():
+ return true
+
+ # find root StateChart
+ var root = get_parent()
+ while is_instance_valid(root) and not root is _StateChart:
+ root = root.get_parent()
+ if not is_instance_valid(root):
+ push_error("could not find root StateChart, cannot evaluate expression")
+ return false
+
+ # combine monitored states with expression properties
+ var properties: Dictionary = root._guard_properties.duplicate()
+ for node in checked_states:
+ var state = get_node_or_null(node)
+ if is_instance_valid(state) and state is _State:
+ properties["in_" + state.name] = state.active
+
+ # construct expression and set up properties
+ var expression := Expression.new()
+ var input_names = properties.keys()
+
+ # attempt to parse expression
+ var parse_result = expression.parse(guard_expression, input_names)
+ if parse_result != OK:
+ push_error("error parsing expression: " + expression.get_error_text())
+ return false
+
+ # create array of input values
+ var input_values = []
+ for input_name in input_names:
+ input_values.append(properties[input_name])
+
+ # execute expression and validate result
+ var result = expression.execute(input_values)
+ if expression.has_execute_failed():
+ push_error("failed to execute expression: " + expression.get_error_text())
+ return false
+ if typeof(result) != TYPE_BOOL:
+ push_error("result is not a boolean value. returning false")
+ return false
+ return result
diff --git a/addons/godot_state_charts/transition.svg b/addons/godot_state_charts/transition.svg
new file mode 100644
index 0000000..4843d61
--- /dev/null
+++ b/addons/godot_state_charts/transition.svg
@@ -0,0 +1,93 @@
+
+
diff --git a/addons/godot_state_charts/transition.svg.import b/addons/godot_state_charts/transition.svg.import
new file mode 100644
index 0000000..c829b74
--- /dev/null
+++ b/addons/godot_state_charts/transition.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/transition.svg-20a1a52a85a71c731b2386952d47b2f7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/godot_state_charts/transition.svg"
+dest_files=[ "res://.import/transition.svg-20a1a52a85a71c731b2386952d47b2f7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/audio/glass_break.ogg b/audio/glass_break.ogg
new file mode 100644
index 0000000..ecafeb9
Binary files /dev/null and b/audio/glass_break.ogg differ
diff --git a/audio/glass_break.ogg.import b/audio/glass_break.ogg.import
new file mode 100644
index 0000000..a3f5987
--- /dev/null
+++ b/audio/glass_break.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/glass_break.ogg-90d29d1196efeaa1b90b121f831dc311.oggstr"
+
+[deps]
+
+source_file="res://audio/glass_break.ogg"
+dest_files=[ "res://.import/glass_break.ogg-90d29d1196efeaa1b90b121f831dc311.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/glass_crack.ogg b/audio/glass_crack.ogg
new file mode 100644
index 0000000..443b833
Binary files /dev/null and b/audio/glass_crack.ogg differ
diff --git a/audio/glass_crack.ogg.import b/audio/glass_crack.ogg.import
new file mode 100644
index 0000000..f7188f6
--- /dev/null
+++ b/audio/glass_crack.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/glass_crack.ogg-f61a203463634593b8f657b7bd6c8959.oggstr"
+
+[deps]
+
+source_file="res://audio/glass_crack.ogg"
+dest_files=[ "res://.import/glass_crack.ogg-f61a203463634593b8f657b7bd6c8959.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/glass_crack.wav b/audio/glass_crack.wav
new file mode 100644
index 0000000..46115e6
Binary files /dev/null and b/audio/glass_crack.wav differ
diff --git a/audio/glass_crack.wav.import b/audio/glass_crack.wav.import
new file mode 100644
index 0000000..9a2cc79
--- /dev/null
+++ b/audio/glass_crack.wav.import
@@ -0,0 +1,23 @@
+[remap]
+
+importer="wav"
+type="AudioStreamSample"
+path="res://.import/glass_crack.wav-e7bba5d7d195585aae47530d080ae6b3.sample"
+
+[deps]
+
+source_file="res://audio/glass_crack.wav"
+dest_files=[ "res://.import/glass_crack.wav-e7bba5d7d195585aae47530d080ae6b3.sample" ]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/audio/music/74(game_over).ogg b/audio/music/74(game_over).ogg
new file mode 100644
index 0000000..50922db
Binary files /dev/null and b/audio/music/74(game_over).ogg differ
diff --git a/audio/music/74(game_over).ogg.import b/audio/music/74(game_over).ogg.import
new file mode 100644
index 0000000..178af66
--- /dev/null
+++ b/audio/music/74(game_over).ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/74(game_over).ogg-c8daa270fc6254ebdb545c9163121582.oggstr"
+
+[deps]
+
+source_file="res://audio/music/74(game_over).ogg"
+dest_files=[ "res://.import/74(game_over).ogg-c8daa270fc6254ebdb545c9163121582.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/BBBBBBBB.ogg b/audio/music/BBBBBBBB.ogg
new file mode 100644
index 0000000..5272a3b
Binary files /dev/null and b/audio/music/BBBBBBBB.ogg differ
diff --git a/audio/music/BBBBBBBB.ogg.import b/audio/music/BBBBBBBB.ogg.import
new file mode 100644
index 0000000..73adf81
--- /dev/null
+++ b/audio/music/BBBBBBBB.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/BBBBBBBB.ogg-cc9e6a4bb1b385b89207987440a19675.oggstr"
+
+[deps]
+
+source_file="res://audio/music/BBBBBBBB.ogg"
+dest_files=[ "res://.import/BBBBBBBB.ogg-cc9e6a4bb1b385b89207987440a19675.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=12.091
diff --git a/audio/music/burnt_out.ogg b/audio/music/burnt_out.ogg
new file mode 100644
index 0000000..7d79f71
Binary files /dev/null and b/audio/music/burnt_out.ogg differ
diff --git a/audio/music/burnt_out.ogg.import b/audio/music/burnt_out.ogg.import
new file mode 100644
index 0000000..d216c73
--- /dev/null
+++ b/audio/music/burnt_out.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/burnt_out.ogg-330f5bc87b626c0f8fed84e8c4c6a359.oggstr"
+
+[deps]
+
+source_file="res://audio/music/burnt_out.ogg"
+dest_files=[ "res://.import/burnt_out.ogg-330f5bc87b626c0f8fed84e8c4c6a359.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=42.507
diff --git a/audio/music/cryokiller.ogg b/audio/music/cryokiller.ogg
new file mode 100644
index 0000000..15a7e18
Binary files /dev/null and b/audio/music/cryokiller.ogg differ
diff --git a/audio/music/cryokiller.ogg.import b/audio/music/cryokiller.ogg.import
new file mode 100644
index 0000000..b630930
--- /dev/null
+++ b/audio/music/cryokiller.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/cryokiller.ogg-d287a2f5c24b6c8114a93e405fe3c292.oggstr"
+
+[deps]
+
+source_file="res://audio/music/cryokiller.ogg"
+dest_files=[ "res://.import/cryokiller.ogg-d287a2f5c24b6c8114a93e405fe3c292.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=71.924
diff --git a/audio/music/dusk_park.mp3 b/audio/music/dusk_park.mp3
deleted file mode 100644
index 233199d..0000000
Binary files a/audio/music/dusk_park.mp3 and /dev/null differ
diff --git a/audio/music/dusk_park.mp3.import b/audio/music/dusk_park.mp3.import
deleted file mode 100644
index 63392a3..0000000
--- a/audio/music/dusk_park.mp3.import
+++ /dev/null
@@ -1,15 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-path="res://.import/dusk_park.mp3-4f32391dd5241853bbe02a0e983b8702.mp3str"
-
-[deps]
-
-source_file="res://audio/music/dusk_park.mp3"
-dest_files=[ "res://.import/dusk_park.mp3-4f32391dd5241853bbe02a0e983b8702.mp3str" ]
-
-[params]
-
-loop=true
-loop_offset=0
diff --git a/audio/music/dusk_park.ogg b/audio/music/dusk_park.ogg
new file mode 100644
index 0000000..92a5dea
Binary files /dev/null and b/audio/music/dusk_park.ogg differ
diff --git a/audio/music/dusk_park.ogg.import b/audio/music/dusk_park.ogg.import
new file mode 100644
index 0000000..d17042e
--- /dev/null
+++ b/audio/music/dusk_park.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/dusk_park.ogg-66b2f58b4fbcb15fb39169e2ef3dc572.oggstr"
+
+[deps]
+
+source_file="res://audio/music/dusk_park.ogg"
+dest_files=[ "res://.import/dusk_park.ogg-66b2f58b4fbcb15fb39169e2ef3dc572.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=14.25
diff --git a/audio/music/empty_motel.ogg b/audio/music/empty_motel.ogg
new file mode 100644
index 0000000..a003762
Binary files /dev/null and b/audio/music/empty_motel.ogg differ
diff --git a/audio/music/empty_motel.ogg.import b/audio/music/empty_motel.ogg.import
new file mode 100644
index 0000000..9efb447
--- /dev/null
+++ b/audio/music/empty_motel.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/empty_motel.ogg-1334b9d142536ba1f2d1ff346aa90c0f.oggstr"
+
+[deps]
+
+source_file="res://audio/music/empty_motel.ogg"
+dest_files=[ "res://.import/empty_motel.ogg-1334b9d142536ba1f2d1ff346aa90c0f.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/intro.ogg b/audio/music/intro.ogg
new file mode 100644
index 0000000..78492ef
Binary files /dev/null and b/audio/music/intro.ogg differ
diff --git a/audio/music/intro.ogg.import b/audio/music/intro.ogg.import
new file mode 100644
index 0000000..65d48c4
--- /dev/null
+++ b/audio/music/intro.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/intro.ogg-a141f549457bc6a41bef73e129d9f7b6.oggstr"
+
+[deps]
+
+source_file="res://audio/music/intro.ogg"
+dest_files=[ "res://.import/intro.ogg-a141f549457bc6a41bef73e129d9f7b6.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/klystron.ogg b/audio/music/klystron.ogg
new file mode 100644
index 0000000..190cc6d
Binary files /dev/null and b/audio/music/klystron.ogg differ
diff --git a/audio/music/klystron.ogg.import b/audio/music/klystron.ogg.import
new file mode 100644
index 0000000..90dc0bb
--- /dev/null
+++ b/audio/music/klystron.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/klystron.ogg-2dce5b1690502308cf909f0b9eda8d99.oggstr"
+
+[deps]
+
+source_file="res://audio/music/klystron.ogg"
+dest_files=[ "res://.import/klystron.ogg-2dce5b1690502308cf909f0b9eda8d99.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=6.775
diff --git a/audio/music/klystron_vip.ogg b/audio/music/klystron_vip.ogg
new file mode 100644
index 0000000..ffcd393
Binary files /dev/null and b/audio/music/klystron_vip.ogg differ
diff --git a/audio/music/klystron_vip.ogg.import b/audio/music/klystron_vip.ogg.import
new file mode 100644
index 0000000..64a3c79
--- /dev/null
+++ b/audio/music/klystron_vip.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/klystron_vip.ogg-fb327691a1b5cc895d2d8258fd374fdb.oggstr"
+
+[deps]
+
+source_file="res://audio/music/klystron_vip.ogg"
+dest_files=[ "res://.import/klystron_vip.ogg-fb327691a1b5cc895d2d8258fd374fdb.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/mitten.ogg b/audio/music/mitten.ogg
new file mode 100644
index 0000000..12652c0
Binary files /dev/null and b/audio/music/mitten.ogg differ
diff --git a/audio/music/mitten.ogg.import b/audio/music/mitten.ogg.import
new file mode 100644
index 0000000..68d3125
--- /dev/null
+++ b/audio/music/mitten.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mitten.ogg-ca50efac016b8bf1022a91f574ac6ca6.oggstr"
+
+[deps]
+
+source_file="res://audio/music/mitten.ogg"
+dest_files=[ "res://.import/mitten.ogg-ca50efac016b8bf1022a91f574ac6ca6.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/moon_trail.ogg b/audio/music/moon_trail.ogg
new file mode 100644
index 0000000..5e211af
Binary files /dev/null and b/audio/music/moon_trail.ogg differ
diff --git a/audio/music/moon_trail.ogg.import b/audio/music/moon_trail.ogg.import
new file mode 100644
index 0000000..7bb348a
--- /dev/null
+++ b/audio/music/moon_trail.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/moon_trail.ogg-8108eb4067344b396b1f232ad37111d0.oggstr"
+
+[deps]
+
+source_file="res://audio/music/moon_trail.ogg"
+dest_files=[ "res://.import/moon_trail.ogg-8108eb4067344b396b1f232ad37111d0.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/pause.ogg b/audio/music/pause.ogg
new file mode 100644
index 0000000..0840ddf
Binary files /dev/null and b/audio/music/pause.ogg differ
diff --git a/audio/music/pause.ogg.import b/audio/music/pause.ogg.import
new file mode 100644
index 0000000..de675f7
--- /dev/null
+++ b/audio/music/pause.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/pause.ogg-e880bf592ac2065d4f2c443ae1e801bb.oggstr"
+
+[deps]
+
+source_file="res://audio/music/pause.ogg"
+dest_files=[ "res://.import/pause.ogg-e880bf592ac2065d4f2c443ae1e801bb.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/precision_parasite.ogg b/audio/music/precision_parasite.ogg
new file mode 100644
index 0000000..387ac24
Binary files /dev/null and b/audio/music/precision_parasite.ogg differ
diff --git a/audio/music/precision_parasite.ogg.import b/audio/music/precision_parasite.ogg.import
new file mode 100644
index 0000000..f6c1480
--- /dev/null
+++ b/audio/music/precision_parasite.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/precision_parasite.ogg-48c1edc2a47c76aa62b0460e1c85582d.oggstr"
+
+[deps]
+
+source_file="res://audio/music/precision_parasite.ogg"
+dest_files=[ "res://.import/precision_parasite.ogg-48c1edc2a47c76aa62b0460e1c85582d.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=16.684
diff --git a/audio/music/rev83-wondering-now-short.ogg b/audio/music/rev83-wondering-now-short.ogg
new file mode 100644
index 0000000..72c4f2f
Binary files /dev/null and b/audio/music/rev83-wondering-now-short.ogg differ
diff --git a/audio/music/rev83-wondering-now-short.ogg.import b/audio/music/rev83-wondering-now-short.ogg.import
new file mode 100644
index 0000000..f469318
--- /dev/null
+++ b/audio/music/rev83-wondering-now-short.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/rev83-wondering-now-short.ogg-6a06f237d6afb85ca00721c00a48a0ef.oggstr"
+
+[deps]
+
+source_file="res://audio/music/rev83-wondering-now-short.ogg"
+dest_files=[ "res://.import/rev83-wondering-now-short.ogg-6a06f237d6afb85ca00721c00a48a0ef.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/rumble_loop.mp3 b/audio/music/rumble_loop.mp3
deleted file mode 100644
index 1523b2a..0000000
Binary files a/audio/music/rumble_loop.mp3 and /dev/null differ
diff --git a/audio/music/rumble_loop.mp3.import b/audio/music/rumble_loop.mp3.import
deleted file mode 100644
index 1597ad0..0000000
--- a/audio/music/rumble_loop.mp3.import
+++ /dev/null
@@ -1,15 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-path="res://.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.mp3str"
-
-[deps]
-
-source_file="res://audio/music/rumble_loop.mp3"
-dest_files=[ "res://.import/rumble_loop.mp3-8296079a496312740d286c71cb69f818.mp3str" ]
-
-[params]
-
-loop=true
-loop_offset=0
diff --git a/audio/music/rumble_loop.ogg b/audio/music/rumble_loop.ogg
new file mode 100644
index 0000000..60cd41c
Binary files /dev/null and b/audio/music/rumble_loop.ogg differ
diff --git a/audio/music/rumble_loop.ogg.import b/audio/music/rumble_loop.ogg.import
new file mode 100644
index 0000000..3691484
--- /dev/null
+++ b/audio/music/rumble_loop.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/rumble_loop.ogg-75748d2cd32c4c0b3bc7d4e36971e0ce.oggstr"
+
+[deps]
+
+source_file="res://audio/music/rumble_loop.ogg"
+dest_files=[ "res://.import/rumble_loop.ogg-75748d2cd32c4c0b3bc7d4e36971e0ce.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/rumble_revolution.ogg b/audio/music/rumble_revolution.ogg
new file mode 100644
index 0000000..a1aa951
Binary files /dev/null and b/audio/music/rumble_revolution.ogg differ
diff --git a/audio/music/rumble_revolution.ogg.import b/audio/music/rumble_revolution.ogg.import
new file mode 100644
index 0000000..5cea268
--- /dev/null
+++ b/audio/music/rumble_revolution.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/rumble_revolution.ogg-f4caaf13c218d7e4e59d5ae9bc9b9d8a.oggstr"
+
+[deps]
+
+source_file="res://audio/music/rumble_revolution.ogg"
+dest_files=[ "res://.import/rumble_revolution.ogg-f4caaf13c218d7e4e59d5ae9bc9b9d8a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/rumble_revolution_intro.ogg b/audio/music/rumble_revolution_intro.ogg
new file mode 100644
index 0000000..e03b86d
Binary files /dev/null and b/audio/music/rumble_revolution_intro.ogg differ
diff --git a/audio/music/rumble_revolution_intro.ogg.import b/audio/music/rumble_revolution_intro.ogg.import
new file mode 100644
index 0000000..6a48b5b
--- /dev/null
+++ b/audio/music/rumble_revolution_intro.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/rumble_revolution_intro.ogg-cb37ff1dd71c64fd16566b212babca20.oggstr"
+
+[deps]
+
+source_file="res://audio/music/rumble_revolution_intro.ogg"
+dest_files=[ "res://.import/rumble_revolution_intro.ogg-cb37ff1dd71c64fd16566b212babca20.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/sleet.ogg b/audio/music/sleet.ogg
new file mode 100644
index 0000000..0a40398
Binary files /dev/null and b/audio/music/sleet.ogg differ
diff --git a/audio/music/sleet.ogg.import b/audio/music/sleet.ogg.import
new file mode 100644
index 0000000..203cd8a
--- /dev/null
+++ b/audio/music/sleet.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/sleet.ogg-dfb9adcbe69bd6791c93c0f86b073746.oggstr"
+
+[deps]
+
+source_file="res://audio/music/sleet.ogg"
+dest_files=[ "res://.import/sleet.ogg-dfb9adcbe69bd6791c93c0f86b073746.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/sleet0.ogg.import b/audio/music/sleet0.ogg.import
new file mode 100644
index 0000000..b987856
--- /dev/null
+++ b/audio/music/sleet0.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/sleet0.ogg-89329c21f9cd934500ba65a259d96b96.oggstr"
+
+[deps]
+
+source_file="res://audio/music/sleet0.ogg"
+dest_files=[ "res://.import/sleet0.ogg-89329c21f9cd934500ba65a259d96b96.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/smokestack.mp3 b/audio/music/smokestack.mp3
deleted file mode 100644
index ae6efd0..0000000
Binary files a/audio/music/smokestack.mp3 and /dev/null differ
diff --git a/audio/music/smokestack.mp3.import b/audio/music/smokestack.mp3.import
deleted file mode 100644
index 3123980..0000000
--- a/audio/music/smokestack.mp3.import
+++ /dev/null
@@ -1,15 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-path="res://.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.mp3str"
-
-[deps]
-
-source_file="res://audio/music/smokestack.mp3"
-dest_files=[ "res://.import/smokestack.mp3-27e96096ab30e2a396e177e479e12ab9.mp3str" ]
-
-[params]
-
-loop=true
-loop_offset=0
diff --git a/audio/music/smokestack.ogg b/audio/music/smokestack.ogg
new file mode 100644
index 0000000..c0b7b21
Binary files /dev/null and b/audio/music/smokestack.ogg differ
diff --git a/audio/music/smokestack.ogg.import b/audio/music/smokestack.ogg.import
new file mode 100644
index 0000000..959bbe7
--- /dev/null
+++ b/audio/music/smokestack.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/smokestack.ogg-e5ff6f583a64a996a107e20d41fd576d.oggstr"
+
+[deps]
+
+source_file="res://audio/music/smokestack.ogg"
+dest_files=[ "res://.import/smokestack.ogg-e5ff6f583a64a996a107e20d41fd576d.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=10.519
diff --git a/audio/music/spine_v2.ogg b/audio/music/spine_v2.ogg
new file mode 100644
index 0000000..ef37551
Binary files /dev/null and b/audio/music/spine_v2.ogg differ
diff --git a/audio/music/spine_v2.ogg.import b/audio/music/spine_v2.ogg.import
new file mode 100644
index 0000000..6d79c5a
--- /dev/null
+++ b/audio/music/spine_v2.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/spine_v2.ogg-015bf0c6c191c0ae9ad018801a433c92.oggstr"
+
+[deps]
+
+source_file="res://audio/music/spine_v2.ogg"
+dest_files=[ "res://.import/spine_v2.ogg-015bf0c6c191c0ae9ad018801a433c92.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/music/the_dirt_under_the_meadow.ogg b/audio/music/the_dirt_under_the_meadow.ogg
new file mode 100644
index 0000000..54f5589
Binary files /dev/null and b/audio/music/the_dirt_under_the_meadow.ogg differ
diff --git a/audio/music/the_dirt_under_the_meadow.ogg.import b/audio/music/the_dirt_under_the_meadow.ogg.import
new file mode 100644
index 0000000..ec30542
--- /dev/null
+++ b/audio/music/the_dirt_under_the_meadow.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/the_dirt_under_the_meadow.ogg-ec40b1fe83041819a74174d557b9a8a2.oggstr"
+
+[deps]
+
+source_file="res://audio/music/the_dirt_under_the_meadow.ogg"
+dest_files=[ "res://.import/the_dirt_under_the_meadow.ogg-ec40b1fe83041819a74174d557b9a8a2.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/music/vitreous_squares.ogg b/audio/music/vitreous_squares.ogg
new file mode 100644
index 0000000..bbbe63c
Binary files /dev/null and b/audio/music/vitreous_squares.ogg differ
diff --git a/audio/music/vitreous_squares.ogg.import b/audio/music/vitreous_squares.ogg.import
new file mode 100644
index 0000000..773e0e1
--- /dev/null
+++ b/audio/music/vitreous_squares.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/vitreous_squares.ogg-524c15223b7d282c1532fe2fa5032ad4.oggstr"
+
+[deps]
+
+source_file="res://audio/music/vitreous_squares.ogg"
+dest_files=[ "res://.import/vitreous_squares.ogg-524c15223b7d282c1532fe2fa5032ad4.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/sounds/2600_charge.ogg b/audio/sounds/2600_charge.ogg
new file mode 100644
index 0000000..fbbd272
Binary files /dev/null and b/audio/sounds/2600_charge.ogg differ
diff --git a/audio/sounds/2600_charge.ogg.import b/audio/sounds/2600_charge.ogg.import
new file mode 100644
index 0000000..2d0a434
--- /dev/null
+++ b/audio/sounds/2600_charge.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/2600_charge.ogg-552c059b733cc8184b757ad5155adbff.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/2600_charge.ogg"
+dest_files=[ "res://.import/2600_charge.ogg-552c059b733cc8184b757ad5155adbff.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/a_bmilc.ogg b/audio/sounds/a_bmilc.ogg
index 583673e..3837a1c 100644
Binary files a/audio/sounds/a_bmilc.ogg and b/audio/sounds/a_bmilc.ogg differ
diff --git a/audio/sounds/a_bmilc.ogg.import b/audio/sounds/a_bmilc.ogg.import
index 207bbdd..de42cb9 100644
--- a/audio/sounds/a_bmilc.ogg.import
+++ b/audio/sounds/a_bmilc.ogg.import
@@ -11,5 +11,5 @@ dest_files=[ "res://.import/a_bmilc.ogg-cb786a4aec8fbf031b4e9635d452a4a8.oggstr"
[params]
-loop=true
+loop=false
loop_offset=0
diff --git a/audio/sounds/a_bree.wav b/audio/sounds/a_bree.wav
deleted file mode 100644
index 9934ee5..0000000
Binary files a/audio/sounds/a_bree.wav and /dev/null differ
diff --git a/audio/sounds/a_bree.wav.import b/audio/sounds/a_bree.wav.import
deleted file mode 100644
index c7fc368..0000000
--- a/audio/sounds/a_bree.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.sample"
-
-[deps]
-
-source_file="res://audio/sounds/a_bree.wav"
-dest_files=[ "res://.import/a_bree.wav-6a217455eb3593edcc27ac957b5c6218.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/a_climb.ogg b/audio/sounds/a_climb.ogg
index 6cb953e..57d6533 100644
Binary files a/audio/sounds/a_climb.ogg and b/audio/sounds/a_climb.ogg differ
diff --git a/audio/sounds/a_climb.ogg.import b/audio/sounds/a_climb.ogg.import
index ec6bf9d..df33597 100644
--- a/audio/sounds/a_climb.ogg.import
+++ b/audio/sounds/a_climb.ogg.import
@@ -11,5 +11,5 @@ dest_files=[ "res://.import/a_climb.ogg-478222e5725714de088f1c4b609997c5.oggstr"
[params]
-loop=true
+loop=false
loop_offset=0
diff --git a/audio/sounds/a_egg_collect.ogg b/audio/sounds/a_egg_collect.ogg
index ef77f6e..4dbd68d 100644
Binary files a/audio/sounds/a_egg_collect.ogg and b/audio/sounds/a_egg_collect.ogg differ
diff --git a/audio/sounds/a_egg_shoot.ogg b/audio/sounds/a_egg_shoot.ogg
deleted file mode 100644
index 9d36c0b..0000000
Binary files a/audio/sounds/a_egg_shoot.ogg and /dev/null differ
diff --git a/audio/sounds/a_hurt.ogg b/audio/sounds/a_hurt.ogg
deleted file mode 100644
index fc50d2d..0000000
Binary files a/audio/sounds/a_hurt.ogg and /dev/null differ
diff --git a/audio/sounds/a_hurt.ogg.import b/audio/sounds/a_hurt.ogg.import
deleted file mode 100644
index b009f5c..0000000
--- a/audio/sounds/a_hurt.ogg.import
+++ /dev/null
@@ -1,15 +0,0 @@
-[remap]
-
-importer="ogg_vorbis"
-type="AudioStreamOGGVorbis"
-path="res://.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.oggstr"
-
-[deps]
-
-source_file="res://audio/sounds/a_hurt.ogg"
-dest_files=[ "res://.import/a_hurt.ogg-a562e9409cf963b74445d6ea13ce9354.oggstr" ]
-
-[params]
-
-loop=false
-loop_offset=0
diff --git a/audio/sounds/a_jinjo.ogg b/audio/sounds/a_jinjo.ogg
deleted file mode 100644
index 6bcae76..0000000
Binary files a/audio/sounds/a_jinjo.ogg and /dev/null differ
diff --git a/audio/sounds/a_jinjo.ogg.import b/audio/sounds/a_jinjo.ogg.import
deleted file mode 100644
index 128d757..0000000
--- a/audio/sounds/a_jinjo.ogg.import
+++ /dev/null
@@ -1,15 +0,0 @@
-[remap]
-
-importer="ogg_vorbis"
-type="AudioStreamOGGVorbis"
-path="res://.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.oggstr"
-
-[deps]
-
-source_file="res://audio/sounds/a_jinjo.ogg"
-dest_files=[ "res://.import/a_jinjo.ogg-4b16bf4d913dc9acb601fc4cd65887c1.oggstr" ]
-
-[params]
-
-loop=false
-loop_offset=0
diff --git a/audio/sounds/absorb_shard.ogg b/audio/sounds/absorb_shard.ogg
new file mode 100644
index 0000000..6082d1a
Binary files /dev/null and b/audio/sounds/absorb_shard.ogg differ
diff --git a/audio/sounds/absorb_shard.ogg.import b/audio/sounds/absorb_shard.ogg.import
new file mode 100644
index 0000000..2782995
--- /dev/null
+++ b/audio/sounds/absorb_shard.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/absorb_shard.ogg-eb69c32cbec975404891eab572731b58.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/absorb_shard.ogg"
+dest_files=[ "res://.import/absorb_shard.ogg-eb69c32cbec975404891eab572731b58.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/arrow_collect.ogg b/audio/sounds/arrow_collect.ogg
new file mode 100644
index 0000000..1bb3880
Binary files /dev/null and b/audio/sounds/arrow_collect.ogg differ
diff --git a/audio/sounds/arrow_collect.ogg.import b/audio/sounds/arrow_collect.ogg.import
new file mode 100644
index 0000000..f54d402
--- /dev/null
+++ b/audio/sounds/arrow_collect.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/arrow_collect.ogg-a6db24e54d6e61908a36726a5df41128.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/arrow_collect.ogg"
+dest_files=[ "res://.import/arrow_collect.ogg-a6db24e54d6e61908a36726a5df41128.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/arrow_pickup.ogg.import b/audio/sounds/arrow_pickup.ogg.import
new file mode 100644
index 0000000..50906a7
--- /dev/null
+++ b/audio/sounds/arrow_pickup.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/arrow_pickup.ogg-dd3468a026da10a508aafd753182197f.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/arrow_pickup.ogg"
+dest_files=[ "res://.import/arrow_pickup.ogg-dd3468a026da10a508aafd753182197f.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/bone_rattle.ogg.import b/audio/sounds/bone_rattle.ogg.import
new file mode 100644
index 0000000..d0e5a5e
--- /dev/null
+++ b/audio/sounds/bone_rattle.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/bone_rattle.ogg-1b9b692b16f9996980feab0fd8c6899b.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/bone_rattle.ogg"
+dest_files=[ "res://.import/bone_rattle.ogg-1b9b692b16f9996980feab0fd8c6899b.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/boss_hurt.ogg.import b/audio/sounds/boss_hurt.ogg.import
new file mode 100644
index 0000000..c6a1258
--- /dev/null
+++ b/audio/sounds/boss_hurt.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/boss_hurt.ogg-aff6332a4546cc6c13d1adec8be22161.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/boss_hurt.ogg"
+dest_files=[ "res://.import/boss_hurt.ogg-aff6332a4546cc6c13d1adec8be22161.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/bubble.ogg b/audio/sounds/bubble.ogg
new file mode 100644
index 0000000..bab5803
Binary files /dev/null and b/audio/sounds/bubble.ogg differ
diff --git a/audio/sounds/bubble.ogg.import b/audio/sounds/bubble.ogg.import
new file mode 100644
index 0000000..fdd6860
--- /dev/null
+++ b/audio/sounds/bubble.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/bubble.ogg-3cff0ff1f116f556089f132bc827c01b.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/bubble.ogg"
+dest_files=[ "res://.import/bubble.ogg-3cff0ff1f116f556089f132bc827c01b.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/bullet_barrage.ogg b/audio/sounds/bullet_barrage.ogg
new file mode 100644
index 0000000..5d0b2a4
Binary files /dev/null and b/audio/sounds/bullet_barrage.ogg differ
diff --git a/audio/sounds/bullet_barrage.ogg.import b/audio/sounds/bullet_barrage.ogg.import
new file mode 100644
index 0000000..14697d0
--- /dev/null
+++ b/audio/sounds/bullet_barrage.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/bullet_barrage.ogg-cecd7e8158fd71975520f9b40ca8b8e8.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/bullet_barrage.ogg"
+dest_files=[ "res://.import/bullet_barrage.ogg-cecd7e8158fd71975520f9b40ca8b8e8.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/bullet_barrage0.ogg.import b/audio/sounds/bullet_barrage0.ogg.import
new file mode 100644
index 0000000..94ba3ac
--- /dev/null
+++ b/audio/sounds/bullet_barrage0.ogg.import
@@ -0,0 +1,13 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+valid=false
+
+[deps]
+
+source_file="res://audio/sounds/bullet_barrage0.ogg"
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/button.ogg b/audio/sounds/button.ogg
new file mode 100644
index 0000000..073a0cb
Binary files /dev/null and b/audio/sounds/button.ogg differ
diff --git a/audio/sounds/button.ogg.import b/audio/sounds/button.ogg.import
new file mode 100644
index 0000000..11bdda1
--- /dev/null
+++ b/audio/sounds/button.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/button.ogg-c5f23a6f7088dd5f53927529b8710876.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/button.ogg"
+dest_files=[ "res://.import/button.ogg-c5f23a6f7088dd5f53927529b8710876.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/coin.wav b/audio/sounds/coin.wav
new file mode 100644
index 0000000..c258b39
Binary files /dev/null and b/audio/sounds/coin.wav differ
diff --git a/audio/sounds/coin.wav.import b/audio/sounds/coin.wav.import
new file mode 100644
index 0000000..24f1394
--- /dev/null
+++ b/audio/sounds/coin.wav.import
@@ -0,0 +1,23 @@
+[remap]
+
+importer="wav"
+type="AudioStreamSample"
+path="res://.import/coin.wav-684b22528021c5adcd535ba4ddcbd887.sample"
+
+[deps]
+
+source_file="res://audio/sounds/coin.wav"
+dest_files=[ "res://.import/coin.wav-684b22528021c5adcd535ba4ddcbd887.sample" ]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/audio/sounds/collapse_block_fall.ogg b/audio/sounds/collapse_block_fall.ogg
new file mode 100644
index 0000000..ce84ee0
Binary files /dev/null and b/audio/sounds/collapse_block_fall.ogg differ
diff --git a/audio/sounds/collapse_block_fall.ogg.import b/audio/sounds/collapse_block_fall.ogg.import
new file mode 100644
index 0000000..c137810
--- /dev/null
+++ b/audio/sounds/collapse_block_fall.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/collapse_block_fall.ogg-19fc12e4158496504199681c63b367f9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/collapse_block_fall.ogg"
+dest_files=[ "res://.import/collapse_block_fall.ogg-19fc12e4158496504199681c63b367f9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/confirm.ogg b/audio/sounds/confirm.ogg
new file mode 100644
index 0000000..7f85b68
Binary files /dev/null and b/audio/sounds/confirm.ogg differ
diff --git a/audio/sounds/confirm.ogg.import b/audio/sounds/confirm.ogg.import
new file mode 100644
index 0000000..d49e766
--- /dev/null
+++ b/audio/sounds/confirm.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/confirm.ogg-74399903930640aa54bc9194bf595362.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/confirm.ogg"
+dest_files=[ "res://.import/confirm.ogg-74399903930640aa54bc9194bf595362.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/cop_shoot.ogg b/audio/sounds/cop_shoot.ogg
new file mode 100644
index 0000000..ff5a124
Binary files /dev/null and b/audio/sounds/cop_shoot.ogg differ
diff --git a/audio/sounds/cop_shoot.ogg.import b/audio/sounds/cop_shoot.ogg.import
new file mode 100644
index 0000000..4096abd
--- /dev/null
+++ b/audio/sounds/cop_shoot.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/cop_shoot.ogg-9b313ebb8fdaa01b18fd3850d015564e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/cop_shoot.ogg"
+dest_files=[ "res://.import/cop_shoot.ogg-9b313ebb8fdaa01b18fd3850d015564e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/cop_splat.ogg b/audio/sounds/cop_splat.ogg
new file mode 100644
index 0000000..20d6aaa
Binary files /dev/null and b/audio/sounds/cop_splat.ogg differ
diff --git a/audio/sounds/cop_splat.ogg.import b/audio/sounds/cop_splat.ogg.import
new file mode 100644
index 0000000..71550bd
--- /dev/null
+++ b/audio/sounds/cop_splat.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/cop_splat.ogg-5903ad8999d95a4ef126279b8e808331.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/cop_splat.ogg"
+dest_files=[ "res://.import/cop_splat.ogg-5903ad8999d95a4ef126279b8e808331.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/copsquash.ogg b/audio/sounds/copsquash.ogg
new file mode 100644
index 0000000..b688b4f
Binary files /dev/null and b/audio/sounds/copsquash.ogg differ
diff --git a/audio/sounds/copsquash.ogg.import b/audio/sounds/copsquash.ogg.import
new file mode 100644
index 0000000..c8139b9
--- /dev/null
+++ b/audio/sounds/copsquash.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/copsquash.ogg-a2a63a7fc30ae2fd8b3edcf426e02f2a.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/copsquash.ogg"
+dest_files=[ "res://.import/copsquash.ogg-a2a63a7fc30ae2fd8b3edcf426e02f2a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/critical_heat.ogg b/audio/sounds/critical_heat.ogg
new file mode 100644
index 0000000..de97809
Binary files /dev/null and b/audio/sounds/critical_heat.ogg differ
diff --git a/audio/sounds/critical_heat.ogg.import b/audio/sounds/critical_heat.ogg.import
new file mode 100644
index 0000000..5f18653
--- /dev/null
+++ b/audio/sounds/critical_heat.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/critical_heat.ogg-c4d74947cf30c204bc7abcc93d69d8d3.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/critical_heat.ogg"
+dest_files=[ "res://.import/critical_heat.ogg-c4d74947cf30c204bc7abcc93d69d8d3.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/die.ogg b/audio/sounds/die.ogg
new file mode 100644
index 0000000..ced82de
Binary files /dev/null and b/audio/sounds/die.ogg differ
diff --git a/audio/sounds/die.ogg.import b/audio/sounds/die.ogg.import
new file mode 100644
index 0000000..bc71efb
--- /dev/null
+++ b/audio/sounds/die.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/die.ogg-7c9b7bae34312e63da8e060aed19e984.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/die.ogg"
+dest_files=[ "res://.import/die.ogg-7c9b7bae34312e63da8e060aed19e984.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/die.wav b/audio/sounds/die.wav
deleted file mode 100644
index e0d3233..0000000
Binary files a/audio/sounds/die.wav and /dev/null differ
diff --git a/audio/sounds/die.wav.import b/audio/sounds/die.wav.import
deleted file mode 100644
index 83c6a8f..0000000
--- a/audio/sounds/die.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/die.wav-bed4faf3cb9c725fe22ee38040ba1e8d.sample"
-
-[deps]
-
-source_file="res://audio/sounds/die.wav"
-dest_files=[ "res://.import/die.wav-bed4faf3cb9c725fe22ee38040ba1e8d.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/die_skeleton.ogg b/audio/sounds/die_skeleton.ogg
new file mode 100644
index 0000000..43054f0
Binary files /dev/null and b/audio/sounds/die_skeleton.ogg differ
diff --git a/audio/sounds/die_skeleton.ogg.import b/audio/sounds/die_skeleton.ogg.import
new file mode 100644
index 0000000..154ac05
--- /dev/null
+++ b/audio/sounds/die_skeleton.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/die_skeleton.ogg-b5f6dc4a23c68bf3a4e3144ce631922a.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/die_skeleton.ogg"
+dest_files=[ "res://.import/die_skeleton.ogg-b5f6dc4a23c68bf3a4e3144ce631922a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/die_skeleton.wav b/audio/sounds/die_skeleton.wav
deleted file mode 100644
index f9df5ff..0000000
Binary files a/audio/sounds/die_skeleton.wav and /dev/null differ
diff --git a/audio/sounds/die_skeleton.wav.import b/audio/sounds/die_skeleton.wav.import
deleted file mode 100644
index 06c0e7a..0000000
--- a/audio/sounds/die_skeleton.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/die_skeleton.wav-5ebafbb57bab56e76a09d94d4eb83665.sample"
-
-[deps]
-
-source_file="res://audio/sounds/die_skeleton.wav"
-dest_files=[ "res://.import/die_skeleton.wav-5ebafbb57bab56e76a09d94d4eb83665.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/die_skeleton0.wav.import b/audio/sounds/die_skeleton0.wav.import
deleted file mode 100644
index ebb2b98..0000000
--- a/audio/sounds/die_skeleton0.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/die_skeleton0.wav-eab6b1776a44d2159a1e34d3f8ac0cdf.sample"
-
-[deps]
-
-source_file="res://audio/sounds/die_skeleton0.wav"
-dest_files=[ "res://.import/die_skeleton0.wav-eab6b1776a44d2159a1e34d3f8ac0cdf.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/double_jump.ogg b/audio/sounds/double_jump.ogg
new file mode 100644
index 0000000..f8a661a
Binary files /dev/null and b/audio/sounds/double_jump.ogg differ
diff --git a/audio/sounds/double_jump.ogg.import b/audio/sounds/double_jump.ogg.import
new file mode 100644
index 0000000..aeef054
--- /dev/null
+++ b/audio/sounds/double_jump.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/double_jump.ogg-267703e555e75324b81d37d5d92308da.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/double_jump.ogg"
+dest_files=[ "res://.import/double_jump.ogg-267703e555e75324b81d37d5d92308da.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/explosion.ogg b/audio/sounds/explosion.ogg
new file mode 100644
index 0000000..d1c2303
Binary files /dev/null and b/audio/sounds/explosion.ogg differ
diff --git a/audio/sounds/explosion.ogg.import b/audio/sounds/explosion.ogg.import
new file mode 100644
index 0000000..cb20a51
--- /dev/null
+++ b/audio/sounds/explosion.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/explosion.ogg-390c0c53733d8d0ae861fc04f953f471.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/explosion.ogg"
+dest_files=[ "res://.import/explosion.ogg-390c0c53733d8d0ae861fc04f953f471.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/explosion_small.ogg b/audio/sounds/explosion_small.ogg
new file mode 100644
index 0000000..6c72b24
Binary files /dev/null and b/audio/sounds/explosion_small.ogg differ
diff --git a/audio/sounds/explosion_small.ogg.import b/audio/sounds/explosion_small.ogg.import
new file mode 100644
index 0000000..015f8ed
--- /dev/null
+++ b/audio/sounds/explosion_small.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/explosion_small.ogg-5216335c53e96b9f065c97dbab493900.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/explosion_small.ogg"
+dest_files=[ "res://.import/explosion_small.ogg-5216335c53e96b9f065c97dbab493900.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fail_shard.ogg b/audio/sounds/fail_shard.ogg
new file mode 100644
index 0000000..0feb89d
Binary files /dev/null and b/audio/sounds/fail_shard.ogg differ
diff --git a/audio/sounds/fail_shard.ogg.import b/audio/sounds/fail_shard.ogg.import
new file mode 100644
index 0000000..4920d06
--- /dev/null
+++ b/audio/sounds/fail_shard.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fail_shard.ogg-f4a17a606ec4c8e07282fd39330025e8.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fail_shard.ogg"
+dest_files=[ "res://.import/fail_shard.ogg-f4a17a606ec4c8e07282fd39330025e8.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fami_fire.ogg b/audio/sounds/fami_fire.ogg
new file mode 100644
index 0000000..1feea51
Binary files /dev/null and b/audio/sounds/fami_fire.ogg differ
diff --git a/audio/sounds/fami_fire.ogg.import b/audio/sounds/fami_fire.ogg.import
new file mode 100644
index 0000000..e9ff0ca
--- /dev/null
+++ b/audio/sounds/fami_fire.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fami_fire.ogg-7d48246f6888726a31873eea08f70a0e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fami_fire.ogg"
+dest_files=[ "res://.import/fami_fire.ogg-7d48246f6888726a31873eea08f70a0e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fami_grumble.ogg b/audio/sounds/fami_grumble.ogg
new file mode 100644
index 0000000..ff70c8a
Binary files /dev/null and b/audio/sounds/fami_grumble.ogg differ
diff --git a/audio/sounds/fami_grumble.ogg.import b/audio/sounds/fami_grumble.ogg.import
new file mode 100644
index 0000000..6894907
--- /dev/null
+++ b/audio/sounds/fami_grumble.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fami_grumble.ogg-cabbe16ca489c6f315bf9a64fc367c42.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fami_grumble.ogg"
+dest_files=[ "res://.import/fami_grumble.ogg-cabbe16ca489c6f315bf9a64fc367c42.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fami_hurt.ogg b/audio/sounds/fami_hurt.ogg
new file mode 100644
index 0000000..5570b42
Binary files /dev/null and b/audio/sounds/fami_hurt.ogg differ
diff --git a/audio/sounds/fami_hurt.ogg.import b/audio/sounds/fami_hurt.ogg.import
new file mode 100644
index 0000000..2fb9551
--- /dev/null
+++ b/audio/sounds/fami_hurt.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fami_hurt.ogg-adfce286ee95d8c964b46278ec8ff44c.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fami_hurt.ogg"
+dest_files=[ "res://.import/fami_hurt.ogg-adfce286ee95d8c964b46278ec8ff44c.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fami_transform.ogg b/audio/sounds/fami_transform.ogg
new file mode 100644
index 0000000..0832586
Binary files /dev/null and b/audio/sounds/fami_transform.ogg differ
diff --git a/audio/sounds/fami_transform.ogg.import b/audio/sounds/fami_transform.ogg.import
new file mode 100644
index 0000000..08a7e4f
--- /dev/null
+++ b/audio/sounds/fami_transform.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fami_transform.ogg-36f9a31db915a5c7f08d6eca0c6987e2.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fami_transform.ogg"
+dest_files=[ "res://.import/fami_transform.ogg-36f9a31db915a5c7f08d6eca0c6987e2.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/fami_voice.ogg b/audio/sounds/fami_voice.ogg
new file mode 100644
index 0000000..b0e3991
Binary files /dev/null and b/audio/sounds/fami_voice.ogg differ
diff --git a/audio/sounds/fami_voice.ogg.import b/audio/sounds/fami_voice.ogg.import
new file mode 100644
index 0000000..d955920
--- /dev/null
+++ b/audio/sounds/fami_voice.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/fami_voice.ogg-db460be518287a913514bed855116c82.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/fami_voice.ogg"
+dest_files=[ "res://.import/fami_voice.ogg-db460be518287a913514bed855116c82.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/famira.ogg b/audio/sounds/famira.ogg
new file mode 100644
index 0000000..14cf6fa
Binary files /dev/null and b/audio/sounds/famira.ogg differ
diff --git a/audio/sounds/famira.ogg.import b/audio/sounds/famira.ogg.import
new file mode 100644
index 0000000..094f6ee
--- /dev/null
+++ b/audio/sounds/famira.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/famira.ogg-a36a49df38f219f1404994bb084b014e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/famira.ogg"
+dest_files=[ "res://.import/famira.ogg-a36a49df38f219f1404994bb084b014e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/famira_die.ogg b/audio/sounds/famira_die.ogg
new file mode 100644
index 0000000..7d20e07
Binary files /dev/null and b/audio/sounds/famira_die.ogg differ
diff --git a/audio/sounds/famira_die.ogg.import b/audio/sounds/famira_die.ogg.import
new file mode 100644
index 0000000..75afbd9
--- /dev/null
+++ b/audio/sounds/famira_die.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/famira_die.ogg-5e8656416f24ec451fe959394c386838.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/famira_die.ogg"
+dest_files=[ "res://.import/famira_die.ogg-5e8656416f24ec451fe959394c386838.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/final_score.ogg b/audio/sounds/final_score.ogg
new file mode 100644
index 0000000..6465fc7
Binary files /dev/null and b/audio/sounds/final_score.ogg differ
diff --git a/audio/sounds/final_score.ogg.import b/audio/sounds/final_score.ogg.import
new file mode 100644
index 0000000..7f307f3
--- /dev/null
+++ b/audio/sounds/final_score.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/final_score.ogg-698b546c7ff0383c5d1646709110ec0f.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/final_score.ogg"
+dest_files=[ "res://.import/final_score.ogg-698b546c7ff0383c5d1646709110ec0f.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/gold.wav b/audio/sounds/gold.wav
deleted file mode 100644
index 940b6e6..0000000
Binary files a/audio/sounds/gold.wav and /dev/null differ
diff --git a/audio/sounds/gold.wav.import b/audio/sounds/gold.wav.import
deleted file mode 100644
index 06ab71e..0000000
--- a/audio/sounds/gold.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/gold.wav-ee775767e0e2dcf9ee22b6f2f5807414.sample"
-
-[deps]
-
-source_file="res://audio/sounds/gold.wav"
-dest_files=[ "res://.import/gold.wav-ee775767e0e2dcf9ee22b6f2f5807414.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/good_job.ogg b/audio/sounds/good_job.ogg
new file mode 100644
index 0000000..8eba71b
Binary files /dev/null and b/audio/sounds/good_job.ogg differ
diff --git a/audio/sounds/good_job.ogg.import b/audio/sounds/good_job.ogg.import
new file mode 100644
index 0000000..920a207
--- /dev/null
+++ b/audio/sounds/good_job.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/good_job.ogg-9be33b7ca519dfdba26ae8eadb366548.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/good_job.ogg"
+dest_files=[ "res://.import/good_job.ogg-9be33b7ca519dfdba26ae8eadb366548.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/good_job_dog.ogg b/audio/sounds/good_job_dog.ogg
new file mode 100644
index 0000000..9d427ba
Binary files /dev/null and b/audio/sounds/good_job_dog.ogg differ
diff --git a/audio/sounds/good_job_dog.ogg.import b/audio/sounds/good_job_dog.ogg.import
new file mode 100644
index 0000000..f720b72
--- /dev/null
+++ b/audio/sounds/good_job_dog.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/good_job_dog.ogg-fdb26580734a51638687bb48a878a321.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/good_job_dog.ogg"
+dest_files=[ "res://.import/good_job_dog.ogg-fdb26580734a51638687bb48a878a321.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/good_job_haze.ogg b/audio/sounds/good_job_haze.ogg
new file mode 100644
index 0000000..e17bcf1
Binary files /dev/null and b/audio/sounds/good_job_haze.ogg differ
diff --git a/audio/sounds/good_job_haze.ogg.import b/audio/sounds/good_job_haze.ogg.import
new file mode 100644
index 0000000..3327955
--- /dev/null
+++ b/audio/sounds/good_job_haze.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/good_job_haze.ogg-e620bfd972c99200170ee2de1faaefb9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/good_job_haze.ogg"
+dest_files=[ "res://.import/good_job_haze.ogg-e620bfd972c99200170ee2de1faaefb9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/good_job_ivy.ogg b/audio/sounds/good_job_ivy.ogg
new file mode 100644
index 0000000..2706f0d
Binary files /dev/null and b/audio/sounds/good_job_ivy.ogg differ
diff --git a/audio/sounds/good_job_ivy.ogg.import b/audio/sounds/good_job_ivy.ogg.import
new file mode 100644
index 0000000..1ab002c
--- /dev/null
+++ b/audio/sounds/good_job_ivy.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/good_job_ivy.ogg-980b3aa2dc9efcf1175aaa1cce605655.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/good_job_ivy.ogg"
+dest_files=[ "res://.import/good_job_ivy.ogg-980b3aa2dc9efcf1175aaa1cce605655.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/good_job_penny.ogg b/audio/sounds/good_job_penny.ogg
new file mode 100644
index 0000000..d296f03
Binary files /dev/null and b/audio/sounds/good_job_penny.ogg differ
diff --git a/audio/sounds/good_job_penny.ogg.import b/audio/sounds/good_job_penny.ogg.import
new file mode 100644
index 0000000..6299116
--- /dev/null
+++ b/audio/sounds/good_job_penny.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/good_job_penny.ogg-70bcb6e36cc4455c814fcf94355f30c9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/good_job_penny.ogg"
+dest_files=[ "res://.import/good_job_penny.ogg-70bcb6e36cc4455c814fcf94355f30c9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/gover.ogg b/audio/sounds/gover.ogg
new file mode 100644
index 0000000..476c3ba
Binary files /dev/null and b/audio/sounds/gover.ogg differ
diff --git a/audio/sounds/gover.ogg.import b/audio/sounds/gover.ogg.import
new file mode 100644
index 0000000..87a4a9f
--- /dev/null
+++ b/audio/sounds/gover.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/gover.ogg-71eb4d076c82a3c9c030a4b6d2063858.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/gover.ogg"
+dest_files=[ "res://.import/gover.ogg-71eb4d076c82a3c9c030a4b6d2063858.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/gover.wav b/audio/sounds/gover.wav
deleted file mode 100644
index f0b5ae3..0000000
Binary files a/audio/sounds/gover.wav and /dev/null differ
diff --git a/audio/sounds/gover.wav.import b/audio/sounds/gover.wav.import
deleted file mode 100644
index c6270d2..0000000
--- a/audio/sounds/gover.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/gover.wav-fb994db7cb276d7598aad5c659b45fb3.sample"
-
-[deps]
-
-source_file="res://audio/sounds/gover.wav"
-dest_files=[ "res://.import/gover.wav-fb994db7cb276d7598aad5c659b45fb3.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/great_job_dog.ogg b/audio/sounds/great_job_dog.ogg
new file mode 100644
index 0000000..1fbf8ed
Binary files /dev/null and b/audio/sounds/great_job_dog.ogg differ
diff --git a/audio/sounds/great_job_dog.ogg.import b/audio/sounds/great_job_dog.ogg.import
new file mode 100644
index 0000000..7fb2ccc
--- /dev/null
+++ b/audio/sounds/great_job_dog.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/great_job_dog.ogg-d5861f1eb79f2944ff1fb57a2a380d61.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/great_job_dog.ogg"
+dest_files=[ "res://.import/great_job_dog.ogg-d5861f1eb79f2944ff1fb57a2a380d61.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/great_job_haze.ogg b/audio/sounds/great_job_haze.ogg
new file mode 100644
index 0000000..ccfa959
Binary files /dev/null and b/audio/sounds/great_job_haze.ogg differ
diff --git a/audio/sounds/great_job_haze.ogg.import b/audio/sounds/great_job_haze.ogg.import
new file mode 100644
index 0000000..c458b28
--- /dev/null
+++ b/audio/sounds/great_job_haze.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/great_job_haze.ogg-eff3cbdd6900d16b1973d95c847b8ff1.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/great_job_haze.ogg"
+dest_files=[ "res://.import/great_job_haze.ogg-eff3cbdd6900d16b1973d95c847b8ff1.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/great_job_ivy.ogg b/audio/sounds/great_job_ivy.ogg
new file mode 100644
index 0000000..1ec125e
Binary files /dev/null and b/audio/sounds/great_job_ivy.ogg differ
diff --git a/audio/sounds/great_job_ivy.ogg.import b/audio/sounds/great_job_ivy.ogg.import
new file mode 100644
index 0000000..ddfe82d
--- /dev/null
+++ b/audio/sounds/great_job_ivy.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/great_job_ivy.ogg-c2aefb6f69bb89df5bc185341129b6ca.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/great_job_ivy.ogg"
+dest_files=[ "res://.import/great_job_ivy.ogg-c2aefb6f69bb89df5bc185341129b6ca.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/great_job_penny.ogg b/audio/sounds/great_job_penny.ogg
new file mode 100644
index 0000000..10a27a4
Binary files /dev/null and b/audio/sounds/great_job_penny.ogg differ
diff --git a/audio/sounds/great_job_penny.ogg.import b/audio/sounds/great_job_penny.ogg.import
new file mode 100644
index 0000000..98ad084
--- /dev/null
+++ b/audio/sounds/great_job_penny.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/great_job_penny.ogg-a9b4c1b6050a8b63442cbfaca9f9b776.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/great_job_penny.ogg"
+dest_files=[ "res://.import/great_job_penny.ogg-a9b4c1b6050a8b63442cbfaca9f9b776.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/gun_cock.ogg b/audio/sounds/gun_cock.ogg
new file mode 100644
index 0000000..ad55e43
Binary files /dev/null and b/audio/sounds/gun_cock.ogg differ
diff --git a/audio/sounds/gun_cock.ogg.import b/audio/sounds/gun_cock.ogg.import
new file mode 100644
index 0000000..8e19965
--- /dev/null
+++ b/audio/sounds/gun_cock.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/gun_cock.ogg-e3270054d952c50d489fc1e0bd7a71d1.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/gun_cock.ogg"
+dest_files=[ "res://.import/gun_cock.ogg-e3270054d952c50d489fc1e0bd7a71d1.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/intro_voiceover.ogg b/audio/sounds/intro_voiceover.ogg
new file mode 100644
index 0000000..eb0ab22
Binary files /dev/null and b/audio/sounds/intro_voiceover.ogg differ
diff --git a/audio/sounds/intro_voiceover.ogg.import b/audio/sounds/intro_voiceover.ogg.import
new file mode 100644
index 0000000..4dc6847
--- /dev/null
+++ b/audio/sounds/intro_voiceover.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/intro_voiceover.ogg-394307c1c86e42f9b1d6a08f865fda1d.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/intro_voiceover.ogg"
+dest_files=[ "res://.import/intro_voiceover.ogg-394307c1c86e42f9b1d6a08f865fda1d.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/jump.ogg b/audio/sounds/jump.ogg
index 8a4c658..7ce2828 100644
Binary files a/audio/sounds/jump.ogg and b/audio/sounds/jump.ogg differ
diff --git a/audio/sounds/key.ogg b/audio/sounds/key.ogg
new file mode 100644
index 0000000..e0cac37
Binary files /dev/null and b/audio/sounds/key.ogg differ
diff --git a/audio/sounds/key.ogg.import b/audio/sounds/key.ogg.import
new file mode 100644
index 0000000..3c2826d
--- /dev/null
+++ b/audio/sounds/key.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/key.ogg-abe49d91e24cd920d0fd05a7c445ad92.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/key.ogg"
+dest_files=[ "res://.import/key.ogg-abe49d91e24cd920d0fd05a7c445ad92.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/land.ogg b/audio/sounds/land.ogg
new file mode 100644
index 0000000..eb17d83
Binary files /dev/null and b/audio/sounds/land.ogg differ
diff --git a/audio/sounds/land.ogg.import b/audio/sounds/land.ogg.import
new file mode 100644
index 0000000..a02cb51
--- /dev/null
+++ b/audio/sounds/land.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/land.ogg-9d95e8534632340414024141bf32590e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/land.ogg"
+dest_files=[ "res://.import/land.ogg-9d95e8534632340414024141bf32590e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/laser_charge.ogg.import b/audio/sounds/laser_charge.ogg.import
new file mode 100644
index 0000000..9eb79a1
--- /dev/null
+++ b/audio/sounds/laser_charge.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/laser_charge.ogg-3dd55e9655eb311b462e45b101329c49.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/laser_charge.ogg"
+dest_files=[ "res://.import/laser_charge.ogg-3dd55e9655eb311b462e45b101329c49.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/laser_ready.ogg b/audio/sounds/laser_ready.ogg
new file mode 100644
index 0000000..e6af735
Binary files /dev/null and b/audio/sounds/laser_ready.ogg differ
diff --git a/audio/sounds/laser_ready.ogg.import b/audio/sounds/laser_ready.ogg.import
new file mode 100644
index 0000000..8f179ce
--- /dev/null
+++ b/audio/sounds/laser_ready.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/laser_ready.ogg-31781bea44cd48185c1814586386ce52.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/laser_ready.ogg"
+dest_files=[ "res://.import/laser_ready.ogg-31781bea44cd48185c1814586386ce52.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_creak.ogg b/audio/sounds/mech_creak.ogg
new file mode 100644
index 0000000..87e82e8
Binary files /dev/null and b/audio/sounds/mech_creak.ogg differ
diff --git a/audio/sounds/mech_creak.ogg.import b/audio/sounds/mech_creak.ogg.import
new file mode 100644
index 0000000..acb4acb
--- /dev/null
+++ b/audio/sounds/mech_creak.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_creak.ogg-79fbe143f3146fc7febbee874f944d6c.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_creak.ogg"
+dest_files=[ "res://.import/mech_creak.ogg-79fbe143f3146fc7febbee874f944d6c.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_duck.ogg b/audio/sounds/mech_duck.ogg
new file mode 100644
index 0000000..2225181
Binary files /dev/null and b/audio/sounds/mech_duck.ogg differ
diff --git a/audio/sounds/mech_duck.ogg.import b/audio/sounds/mech_duck.ogg.import
new file mode 100644
index 0000000..66f42dc
--- /dev/null
+++ b/audio/sounds/mech_duck.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_duck.ogg-f872dbebd84ac9158569244ca28688d9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_duck.ogg"
+dest_files=[ "res://.import/mech_duck.ogg-f872dbebd84ac9158569244ca28688d9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_hurt_1.ogg b/audio/sounds/mech_hurt_1.ogg
new file mode 100644
index 0000000..1aefc37
Binary files /dev/null and b/audio/sounds/mech_hurt_1.ogg differ
diff --git a/audio/sounds/mech_hurt_1.ogg.import b/audio/sounds/mech_hurt_1.ogg.import
new file mode 100644
index 0000000..5e9c36e
--- /dev/null
+++ b/audio/sounds/mech_hurt_1.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_hurt_1.ogg-3613187863d4f98f3a9f22e47b611f8f.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_hurt_1.ogg"
+dest_files=[ "res://.import/mech_hurt_1.ogg-3613187863d4f98f3a9f22e47b611f8f.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_hurt_2.ogg b/audio/sounds/mech_hurt_2.ogg
new file mode 100644
index 0000000..db7565b
Binary files /dev/null and b/audio/sounds/mech_hurt_2.ogg differ
diff --git a/audio/sounds/mech_hurt_2.ogg.import b/audio/sounds/mech_hurt_2.ogg.import
new file mode 100644
index 0000000..23bbed1
--- /dev/null
+++ b/audio/sounds/mech_hurt_2.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_hurt_2.ogg-06f2bf8e9e2a35bc165865b277728bc9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_hurt_2.ogg"
+dest_files=[ "res://.import/mech_hurt_2.ogg-06f2bf8e9e2a35bc165865b277728bc9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_hurt_3.ogg b/audio/sounds/mech_hurt_3.ogg
new file mode 100644
index 0000000..0fcb6e5
Binary files /dev/null and b/audio/sounds/mech_hurt_3.ogg differ
diff --git a/audio/sounds/mech_hurt_3.ogg.import b/audio/sounds/mech_hurt_3.ogg.import
new file mode 100644
index 0000000..e18a670
--- /dev/null
+++ b/audio/sounds/mech_hurt_3.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_hurt_3.ogg-a99c2a508a217f16aaa34167044be027.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_hurt_3.ogg"
+dest_files=[ "res://.import/mech_hurt_3.ogg-a99c2a508a217f16aaa34167044be027.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_unduck.ogg b/audio/sounds/mech_unduck.ogg
new file mode 100644
index 0000000..d4d6eee
Binary files /dev/null and b/audio/sounds/mech_unduck.ogg differ
diff --git a/audio/sounds/mech_unduck.ogg.import b/audio/sounds/mech_unduck.ogg.import
new file mode 100644
index 0000000..a758b94
--- /dev/null
+++ b/audio/sounds/mech_unduck.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_unduck.ogg-b986ec111e294ac0b230f17881a5765d.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_unduck.ogg"
+dest_files=[ "res://.import/mech_unduck.ogg-b986ec111e294ac0b230f17881a5765d.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_walk.ogg b/audio/sounds/mech_walk.ogg
new file mode 100644
index 0000000..2d044ef
Binary files /dev/null and b/audio/sounds/mech_walk.ogg differ
diff --git a/audio/sounds/mech_walk.ogg.import b/audio/sounds/mech_walk.ogg.import
new file mode 100644
index 0000000..c6d3239
--- /dev/null
+++ b/audio/sounds/mech_walk.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_walk.ogg-13e00915dfb31c8d2d1b15a28b1f75cd.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_walk.ogg"
+dest_files=[ "res://.import/mech_walk.ogg-13e00915dfb31c8d2d1b15a28b1f75cd.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/audio/sounds/mech_walk_1.ogg b/audio/sounds/mech_walk_1.ogg
new file mode 100644
index 0000000..f1d41e9
Binary files /dev/null and b/audio/sounds/mech_walk_1.ogg differ
diff --git a/audio/sounds/mech_walk_1.ogg.import b/audio/sounds/mech_walk_1.ogg.import
new file mode 100644
index 0000000..3f20404
--- /dev/null
+++ b/audio/sounds/mech_walk_1.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_walk_1.ogg-6dd72afbb891524efea9f536bdc85d49.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_walk_1.ogg"
+dest_files=[ "res://.import/mech_walk_1.ogg-6dd72afbb891524efea9f536bdc85d49.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mech_walk_2.ogg b/audio/sounds/mech_walk_2.ogg
new file mode 100644
index 0000000..0829543
Binary files /dev/null and b/audio/sounds/mech_walk_2.ogg differ
diff --git a/audio/sounds/mech_walk_2.ogg.import b/audio/sounds/mech_walk_2.ogg.import
new file mode 100644
index 0000000..15d2bb3
--- /dev/null
+++ b/audio/sounds/mech_walk_2.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mech_walk_2.ogg-227b24128e178813bb6e6b045d76ba8a.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mech_walk_2.ogg"
+dest_files=[ "res://.import/mech_walk_2.ogg-227b24128e178813bb6e6b045d76ba8a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/mkey.ogg b/audio/sounds/mkey.ogg
new file mode 100644
index 0000000..caf32e3
Binary files /dev/null and b/audio/sounds/mkey.ogg differ
diff --git a/audio/sounds/mkey.ogg.import b/audio/sounds/mkey.ogg.import
new file mode 100644
index 0000000..d42e7bc
--- /dev/null
+++ b/audio/sounds/mkey.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/mkey.ogg-7944854b21b3d16eba279472b4dd6c34.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/mkey.ogg"
+dest_files=[ "res://.import/mkey.ogg-7944854b21b3d16eba279472b4dd6c34.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_come_here.ogg b/audio/sounds/msx_come_here.ogg
new file mode 100644
index 0000000..cc67b80
Binary files /dev/null and b/audio/sounds/msx_come_here.ogg differ
diff --git a/audio/sounds/msx_come_here.ogg.import b/audio/sounds/msx_come_here.ogg.import
new file mode 100644
index 0000000..629729e
--- /dev/null
+++ b/audio/sounds/msx_come_here.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_come_here.ogg-10fac8d8cfd4cbcf7be954fa7cb4bb10.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_come_here.ogg"
+dest_files=[ "res://.import/msx_come_here.ogg-10fac8d8cfd4cbcf7be954fa7cb4bb10.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_die.ogg b/audio/sounds/msx_die.ogg
new file mode 100644
index 0000000..daef6e4
Binary files /dev/null and b/audio/sounds/msx_die.ogg differ
diff --git a/audio/sounds/msx_die.ogg.import b/audio/sounds/msx_die.ogg.import
new file mode 100644
index 0000000..2997c2e
--- /dev/null
+++ b/audio/sounds/msx_die.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_die.ogg-a9422a670490dccce30fe923839a3e49.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_die.ogg"
+dest_files=[ "res://.import/msx_die.ogg-a9422a670490dccce30fe923839a3e49.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_fuck.ogg b/audio/sounds/msx_fuck.ogg
new file mode 100644
index 0000000..181ef9b
Binary files /dev/null and b/audio/sounds/msx_fuck.ogg differ
diff --git a/audio/sounds/msx_fuck.ogg.import b/audio/sounds/msx_fuck.ogg.import
new file mode 100644
index 0000000..0fd793c
--- /dev/null
+++ b/audio/sounds/msx_fuck.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_fuck.ogg-b937a7a23918372fa013f112150257cc.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_fuck.ogg"
+dest_files=[ "res://.import/msx_fuck.ogg-b937a7a23918372fa013f112150257cc.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_fucking_cop.ogg b/audio/sounds/msx_fucking_cop.ogg
new file mode 100644
index 0000000..b4b2e75
Binary files /dev/null and b/audio/sounds/msx_fucking_cop.ogg differ
diff --git a/audio/sounds/msx_fucking_cop.ogg.import b/audio/sounds/msx_fucking_cop.ogg.import
new file mode 100644
index 0000000..3d67423
--- /dev/null
+++ b/audio/sounds/msx_fucking_cop.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_fucking_cop.ogg-c49ee106151ffaa154ca9906a47e988e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_fucking_cop.ogg"
+dest_files=[ "res://.import/msx_fucking_cop.ogg-c49ee106151ffaa154ca9906a47e988e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_goddammit.ogg b/audio/sounds/msx_goddammit.ogg
new file mode 100644
index 0000000..455538d
Binary files /dev/null and b/audio/sounds/msx_goddammit.ogg differ
diff --git a/audio/sounds/msx_goddammit.ogg.import b/audio/sounds/msx_goddammit.ogg.import
new file mode 100644
index 0000000..cd09e60
--- /dev/null
+++ b/audio/sounds/msx_goddammit.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_goddammit.ogg-c739df3b80e1e6f3d11b4b46346a1e24.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_goddammit.ogg"
+dest_files=[ "res://.import/msx_goddammit.ogg-c739df3b80e1e6f3d11b4b46346a1e24.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_help_me_get_outta_here.ogg b/audio/sounds/msx_help_me_get_outta_here.ogg
new file mode 100644
index 0000000..0b57cb1
Binary files /dev/null and b/audio/sounds/msx_help_me_get_outta_here.ogg differ
diff --git a/audio/sounds/msx_help_me_get_outta_here.ogg.import b/audio/sounds/msx_help_me_get_outta_here.ogg.import
new file mode 100644
index 0000000..0a3829a
--- /dev/null
+++ b/audio/sounds/msx_help_me_get_outta_here.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_help_me_get_outta_here.ogg-270d862b9b5346afeb970c07d6c8a47b.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_help_me_get_outta_here.ogg"
+dest_files=[ "res://.import/msx_help_me_get_outta_here.ogg-270d862b9b5346afeb970c07d6c8a47b.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_here_take_this.wav b/audio/sounds/msx_here_take_this.wav
new file mode 100644
index 0000000..8129d20
Binary files /dev/null and b/audio/sounds/msx_here_take_this.wav differ
diff --git a/audio/sounds/msx_here_take_this.wav.import b/audio/sounds/msx_here_take_this.wav.import
new file mode 100644
index 0000000..89ac8a8
--- /dev/null
+++ b/audio/sounds/msx_here_take_this.wav.import
@@ -0,0 +1,23 @@
+[remap]
+
+importer="wav"
+type="AudioStreamSample"
+path="res://.import/msx_here_take_this.wav-44c3d77c989b2c235758f53cf50ab9d1.sample"
+
+[deps]
+
+source_file="res://audio/sounds/msx_here_take_this.wav"
+dest_files=[ "res://.import/msx_here_take_this.wav-44c3d77c989b2c235758f53cf50ab9d1.sample" ]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/audio/sounds/msx_motherfucker.ogg b/audio/sounds/msx_motherfucker.ogg
new file mode 100644
index 0000000..9282a83
Binary files /dev/null and b/audio/sounds/msx_motherfucker.ogg differ
diff --git a/audio/sounds/msx_motherfucker.ogg.import b/audio/sounds/msx_motherfucker.ogg.import
new file mode 100644
index 0000000..6b08d5d
--- /dev/null
+++ b/audio/sounds/msx_motherfucker.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_motherfucker.ogg-5f106872c86ed2489eea974b997c9324.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_motherfucker.ogg"
+dest_files=[ "res://.import/msx_motherfucker.ogg-5f106872c86ed2489eea974b997c9324.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/msx_shit.ogg b/audio/sounds/msx_shit.ogg
new file mode 100644
index 0000000..858e52f
Binary files /dev/null and b/audio/sounds/msx_shit.ogg differ
diff --git a/audio/sounds/msx_shit.ogg.import b/audio/sounds/msx_shit.ogg.import
new file mode 100644
index 0000000..b8f02c3
--- /dev/null
+++ b/audio/sounds/msx_shit.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/msx_shit.ogg-3239485c047eb643ccb45ddde6c48e74.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/msx_shit.ogg"
+dest_files=[ "res://.import/msx_shit.ogg-3239485c047eb643ccb45ddde6c48e74.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/new_glass_break.ogg b/audio/sounds/new_glass_break.ogg
new file mode 100644
index 0000000..67d43e5
Binary files /dev/null and b/audio/sounds/new_glass_break.ogg differ
diff --git a/audio/sounds/new_glass_break.ogg.import b/audio/sounds/new_glass_break.ogg.import
new file mode 100644
index 0000000..174c833
--- /dev/null
+++ b/audio/sounds/new_glass_break.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/new_glass_break.ogg-fbd6d1bed95228de08fb65aac302483f.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/new_glass_break.ogg"
+dest_files=[ "res://.import/new_glass_break.ogg-fbd6d1bed95228de08fb65aac302483f.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/oi_sg.ogg b/audio/sounds/oi_sg.ogg
new file mode 100644
index 0000000..76265fb
Binary files /dev/null and b/audio/sounds/oi_sg.ogg differ
diff --git a/audio/sounds/oi_sg.ogg.import b/audio/sounds/oi_sg.ogg.import
new file mode 100644
index 0000000..0d0afe5
--- /dev/null
+++ b/audio/sounds/oi_sg.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/oi_sg.ogg-ab72b502c36749cb6d98be5482c583fc.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/oi_sg.ogg"
+dest_files=[ "res://.import/oi_sg.ogg-ab72b502c36749cb6d98be5482c583fc.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/ominous.ogg b/audio/sounds/ominous.ogg
new file mode 100644
index 0000000..bdad3d2
Binary files /dev/null and b/audio/sounds/ominous.ogg differ
diff --git a/audio/sounds/ominous.ogg.import b/audio/sounds/ominous.ogg.import
new file mode 100644
index 0000000..98dea53
--- /dev/null
+++ b/audio/sounds/ominous.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/ominous.ogg-2cb3fd446cacd9e83817a015cfcd0bdc.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/ominous.ogg"
+dest_files=[ "res://.import/ominous.ogg-2cb3fd446cacd9e83817a015cfcd0bdc.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/peaks/good_job_ivy.ogg.reapeaks b/audio/sounds/peaks/good_job_ivy.ogg.reapeaks
new file mode 100644
index 0000000..ea58dda
Binary files /dev/null and b/audio/sounds/peaks/good_job_ivy.ogg.reapeaks differ
diff --git a/audio/sounds/rainbow_laser.ogg b/audio/sounds/rainbow_laser.ogg
new file mode 100644
index 0000000..65d037f
Binary files /dev/null and b/audio/sounds/rainbow_laser.ogg differ
diff --git a/audio/sounds/rainbow_laser.ogg.import b/audio/sounds/rainbow_laser.ogg.import
new file mode 100644
index 0000000..6f94e6d
--- /dev/null
+++ b/audio/sounds/rainbow_laser.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/rainbow_laser.ogg-7d2683f3b74c09ae5cb1bcff7c94d244.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/rainbow_laser.ogg"
+dest_files=[ "res://.import/rainbow_laser.ogg-7d2683f3b74c09ae5cb1bcff7c94d244.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/resolve.ogg b/audio/sounds/resolve.ogg
new file mode 100644
index 0000000..3901ddc
Binary files /dev/null and b/audio/sounds/resolve.ogg differ
diff --git a/audio/sounds/resolve.ogg.import b/audio/sounds/resolve.ogg.import
new file mode 100644
index 0000000..8948903
--- /dev/null
+++ b/audio/sounds/resolve.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/resolve.ogg-36be71144d2911079a46c9c668920ec6.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/resolve.ogg"
+dest_files=[ "res://.import/resolve.ogg-36be71144d2911079a46c9c668920ec6.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revo83haze.ogg.import b/audio/sounds/revo83haze.ogg.import
new file mode 100644
index 0000000..9548233
--- /dev/null
+++ b/audio/sounds/revo83haze.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revo83haze.ogg-1cf485529c66b9ff34f0e10dd1ce5d91.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revo83haze.ogg"
+dest_files=[ "res://.import/revo83haze.ogg-1cf485529c66b9ff34f0e10dd1ce5d91.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revo83penny.ogg.import b/audio/sounds/revo83penny.ogg.import
new file mode 100644
index 0000000..85bb9a3
--- /dev/null
+++ b/audio/sounds/revo83penny.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revo83penny.ogg-7bf73d02017da5795744a50fb3733d1e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revo83penny.ogg"
+dest_files=[ "res://.import/revo83penny.ogg-7bf73d02017da5795744a50fb3733d1e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revolution2083.ogg b/audio/sounds/revolution2083.ogg
new file mode 100644
index 0000000..2f8dfd9
Binary files /dev/null and b/audio/sounds/revolution2083.ogg differ
diff --git a/audio/sounds/revolution2083.ogg.import b/audio/sounds/revolution2083.ogg.import
new file mode 100644
index 0000000..5989783
--- /dev/null
+++ b/audio/sounds/revolution2083.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revolution2083.ogg-d47e8251a75748ee057f8c0968c8ab80.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revolution2083.ogg"
+dest_files=[ "res://.import/revolution2083.ogg-d47e8251a75748ee057f8c0968c8ab80.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revolution2083_dog.ogg b/audio/sounds/revolution2083_dog.ogg
new file mode 100644
index 0000000..4c662df
Binary files /dev/null and b/audio/sounds/revolution2083_dog.ogg differ
diff --git a/audio/sounds/revolution2083_dog.ogg.import b/audio/sounds/revolution2083_dog.ogg.import
new file mode 100644
index 0000000..1dcf6b1
--- /dev/null
+++ b/audio/sounds/revolution2083_dog.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revolution2083_dog.ogg-4110fb770d11e4388608404992b040bf.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revolution2083_dog.ogg"
+dest_files=[ "res://.import/revolution2083_dog.ogg-4110fb770d11e4388608404992b040bf.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revolution2083_haze.ogg b/audio/sounds/revolution2083_haze.ogg
new file mode 100644
index 0000000..1f7b881
Binary files /dev/null and b/audio/sounds/revolution2083_haze.ogg differ
diff --git a/audio/sounds/revolution2083_haze.ogg.import b/audio/sounds/revolution2083_haze.ogg.import
new file mode 100644
index 0000000..5b3f33a
--- /dev/null
+++ b/audio/sounds/revolution2083_haze.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revolution2083_haze.ogg-247473aee090b187f949b1e5c093f822.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revolution2083_haze.ogg"
+dest_files=[ "res://.import/revolution2083_haze.ogg-247473aee090b187f949b1e5c093f822.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revolution2083_ivy.ogg b/audio/sounds/revolution2083_ivy.ogg
new file mode 100644
index 0000000..b6c691a
Binary files /dev/null and b/audio/sounds/revolution2083_ivy.ogg differ
diff --git a/audio/sounds/revolution2083_ivy.ogg.import b/audio/sounds/revolution2083_ivy.ogg.import
new file mode 100644
index 0000000..f564dd0
--- /dev/null
+++ b/audio/sounds/revolution2083_ivy.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revolution2083_ivy.ogg-2a69fc8e172b84075408eaaea361e6d0.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revolution2083_ivy.ogg"
+dest_files=[ "res://.import/revolution2083_ivy.ogg-2a69fc8e172b84075408eaaea361e6d0.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/revolution2083_penny.ogg b/audio/sounds/revolution2083_penny.ogg
new file mode 100644
index 0000000..5a9f9d4
Binary files /dev/null and b/audio/sounds/revolution2083_penny.ogg differ
diff --git a/audio/sounds/revolution2083_penny.ogg.import b/audio/sounds/revolution2083_penny.ogg.import
new file mode 100644
index 0000000..5b34435
--- /dev/null
+++ b/audio/sounds/revolution2083_penny.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/revolution2083_penny.ogg-8b34787bef0f21de0eca352023586915.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/revolution2083_penny.ogg"
+dest_files=[ "res://.import/revolution2083_penny.ogg-8b34787bef0f21de0eca352023586915.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/scrump_die.ogg b/audio/sounds/scrump_die.ogg
new file mode 100644
index 0000000..524d5c9
Binary files /dev/null and b/audio/sounds/scrump_die.ogg differ
diff --git a/audio/sounds/scrump_die.ogg.import b/audio/sounds/scrump_die.ogg.import
new file mode 100644
index 0000000..ab882d0
--- /dev/null
+++ b/audio/sounds/scrump_die.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/scrump_die.ogg-425a95c5992a12c9f1281ba34b4cd7ab.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/scrump_die.ogg"
+dest_files=[ "res://.import/scrump_die.ogg-425a95c5992a12c9f1281ba34b4cd7ab.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/scrump_hurt.ogg b/audio/sounds/scrump_hurt.ogg
new file mode 100644
index 0000000..255d171
Binary files /dev/null and b/audio/sounds/scrump_hurt.ogg differ
diff --git a/audio/sounds/scrump_hurt.ogg.import b/audio/sounds/scrump_hurt.ogg.import
new file mode 100644
index 0000000..8bdc818
--- /dev/null
+++ b/audio/sounds/scrump_hurt.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/scrump_hurt.ogg-d92e1294569fcd24edb105aac58b82ae.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/scrump_hurt.ogg"
+dest_files=[ "res://.import/scrump_hurt.ogg-d92e1294569fcd24edb105aac58b82ae.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/scrump_shot.ogg b/audio/sounds/scrump_shot.ogg
new file mode 100644
index 0000000..824d346
Binary files /dev/null and b/audio/sounds/scrump_shot.ogg differ
diff --git a/audio/sounds/scrump_shot.ogg.import b/audio/sounds/scrump_shot.ogg.import
new file mode 100644
index 0000000..7135eb3
--- /dev/null
+++ b/audio/sounds/scrump_shot.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/scrump_shot.ogg-2121233fd7311b12322d43621754312b.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/scrump_shot.ogg"
+dest_files=[ "res://.import/scrump_shot.ogg-2121233fd7311b12322d43621754312b.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/scrump_shot0.ogg.import b/audio/sounds/scrump_shot0.ogg.import
new file mode 100644
index 0000000..fe71fde
--- /dev/null
+++ b/audio/sounds/scrump_shot0.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/scrump_shot0.ogg-32f9f0aede5e72eee38db4d875309816.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/scrump_shot0.ogg"
+dest_files=[ "res://.import/scrump_shot0.ogg-32f9f0aede5e72eee38db4d875309816.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/se_g2.ogg b/audio/sounds/se_g2.ogg
new file mode 100644
index 0000000..111a1c0
Binary files /dev/null and b/audio/sounds/se_g2.ogg differ
diff --git a/audio/sounds/se_g2.ogg.import b/audio/sounds/se_g2.ogg.import
new file mode 100644
index 0000000..6c32623
--- /dev/null
+++ b/audio/sounds/se_g2.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/se_g2.ogg-647fc6e2344b491f0492d582ece43c0c.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/se_g2.ogg"
+dest_files=[ "res://.import/se_g2.ogg-647fc6e2344b491f0492d582ece43c0c.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/se_g2.wav b/audio/sounds/se_g2.wav
new file mode 100644
index 0000000..55ad44b
Binary files /dev/null and b/audio/sounds/se_g2.wav differ
diff --git a/audio/sounds/se_g2.wav.import b/audio/sounds/se_g2.wav.import
new file mode 100644
index 0000000..16491e1
--- /dev/null
+++ b/audio/sounds/se_g2.wav.import
@@ -0,0 +1,23 @@
+[remap]
+
+importer="wav"
+type="AudioStreamSample"
+path="res://.import/se_g2.wav-2200ac432f464093b1975ff4500900fb.sample"
+
+[deps]
+
+source_file="res://audio/sounds/se_g2.wav"
+dest_files=[ "res://.import/se_g2.wav-2200ac432f464093b1975ff4500900fb.sample" ]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/audio/sounds/select.ogg b/audio/sounds/select.ogg
new file mode 100644
index 0000000..22b98b7
Binary files /dev/null and b/audio/sounds/select.ogg differ
diff --git a/audio/sounds/select.ogg.import b/audio/sounds/select.ogg.import
new file mode 100644
index 0000000..4996483
--- /dev/null
+++ b/audio/sounds/select.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/select.ogg-55c0c25b1ed1eb06fe4396684087acc9.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/select.ogg"
+dest_files=[ "res://.import/select.ogg-55c0c25b1ed1eb06fe4396684087acc9.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shard.ogg b/audio/sounds/shard.ogg
new file mode 100644
index 0000000..6ce41c5
Binary files /dev/null and b/audio/sounds/shard.ogg differ
diff --git a/audio/sounds/shard.ogg.import b/audio/sounds/shard.ogg.import
new file mode 100644
index 0000000..d5173d4
--- /dev/null
+++ b/audio/sounds/shard.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shard.ogg-4d6798bd7bde9aa4a9982bb512a37701.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shard.ogg"
+dest_files=[ "res://.import/shard.ogg-4d6798bd7bde9aa4a9982bb512a37701.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shard.wav b/audio/sounds/shard.wav
deleted file mode 100644
index 75d2cfa..0000000
Binary files a/audio/sounds/shard.wav and /dev/null differ
diff --git a/audio/sounds/shard.wav.import b/audio/sounds/shard.wav.import
deleted file mode 100644
index 61b3dd6..0000000
--- a/audio/sounds/shard.wav.import
+++ /dev/null
@@ -1,23 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamSample"
-path="res://.import/shard.wav-cf382615000aa13776497b1971c06315.sample"
-
-[deps]
-
-source_file="res://audio/sounds/shard.wav"
-dest_files=[ "res://.import/shard.wav-cf382615000aa13776497b1971c06315.sample" ]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=0
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/audio/sounds/shard_expel.ogg b/audio/sounds/shard_expel.ogg
new file mode 100644
index 0000000..976d37a
Binary files /dev/null and b/audio/sounds/shard_expel.ogg differ
diff --git a/audio/sounds/shard_expel.ogg.import b/audio/sounds/shard_expel.ogg.import
new file mode 100644
index 0000000..37983b5
--- /dev/null
+++ b/audio/sounds/shard_expel.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shard_expel.ogg-ed7f06e69f820e9cc0d8ac8352dd7410.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shard_expel.ogg"
+dest_files=[ "res://.import/shard_expel.ogg-ed7f06e69f820e9cc0d8ac8352dd7410.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shard_float.ogg b/audio/sounds/shard_float.ogg
new file mode 100644
index 0000000..c07daa5
Binary files /dev/null and b/audio/sounds/shard_float.ogg differ
diff --git a/audio/sounds/shard_float.ogg.import b/audio/sounds/shard_float.ogg.import
new file mode 100644
index 0000000..dbbab8f
--- /dev/null
+++ b/audio/sounds/shard_float.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shard_float.ogg-7af3a7d7ee37bae26e0091ca3a291b05.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shard_float.ogg"
+dest_files=[ "res://.import/shard_float.ogg-7af3a7d7ee37bae26e0091ca3a291b05.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shard_get.ogg b/audio/sounds/shard_get.ogg
new file mode 100644
index 0000000..3e6bb47
Binary files /dev/null and b/audio/sounds/shard_get.ogg differ
diff --git a/audio/sounds/shard_get.ogg.import b/audio/sounds/shard_get.ogg.import
new file mode 100644
index 0000000..d5eaabd
--- /dev/null
+++ b/audio/sounds/shard_get.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shard_get.ogg-a18bec7b7dd395a2d36d41bfd5cbbacd.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shard_get.ogg"
+dest_files=[ "res://.import/shard_get.ogg-a18bec7b7dd395a2d36d41bfd5cbbacd.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shard_results.ogg b/audio/sounds/shard_results.ogg
new file mode 100644
index 0000000..5719577
Binary files /dev/null and b/audio/sounds/shard_results.ogg differ
diff --git a/audio/sounds/shard_results.ogg.import b/audio/sounds/shard_results.ogg.import
new file mode 100644
index 0000000..8d964a6
--- /dev/null
+++ b/audio/sounds/shard_results.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shard_results.ogg-e4052319e009d469e906bde9026be412.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shard_results.ogg"
+dest_files=[ "res://.import/shard_results.ogg-e4052319e009d469e906bde9026be412.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shell.ogg b/audio/sounds/shell.ogg
new file mode 100644
index 0000000..a1aa6ae
Binary files /dev/null and b/audio/sounds/shell.ogg differ
diff --git a/audio/sounds/shell.ogg.import b/audio/sounds/shell.ogg.import
new file mode 100644
index 0000000..90fbd66
--- /dev/null
+++ b/audio/sounds/shell.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shell.ogg-33573c264b05fde91faa4b27d4763823.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shell.ogg"
+dest_files=[ "res://.import/shell.ogg-33573c264b05fde91faa4b27d4763823.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/shoot_arrow.ogg b/audio/sounds/shoot_arrow.ogg
new file mode 100644
index 0000000..8de0d72
Binary files /dev/null and b/audio/sounds/shoot_arrow.ogg differ
diff --git a/audio/sounds/shoot_arrow.ogg.import b/audio/sounds/shoot_arrow.ogg.import
new file mode 100644
index 0000000..04c825f
--- /dev/null
+++ b/audio/sounds/shoot_arrow.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/shoot_arrow.ogg-ba808bde18beb6a17914b29392aff543.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/shoot_arrow.ogg"
+dest_files=[ "res://.import/shoot_arrow.ogg-ba808bde18beb6a17914b29392aff543.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/spaghetti.ogg b/audio/sounds/spaghetti.ogg
new file mode 100644
index 0000000..8ff6906
Binary files /dev/null and b/audio/sounds/spaghetti.ogg differ
diff --git a/audio/sounds/spaghetti.ogg.import b/audio/sounds/spaghetti.ogg.import
new file mode 100644
index 0000000..cc6e0f6
--- /dev/null
+++ b/audio/sounds/spaghetti.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/spaghetti.ogg-0dfe2ae68627ff9bd860326d9e7db1b5.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/spaghetti.ogg"
+dest_files=[ "res://.import/spaghetti.ogg-0dfe2ae68627ff9bd860326d9e7db1b5.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/spark.ogg b/audio/sounds/spark.ogg
new file mode 100644
index 0000000..633da5b
Binary files /dev/null and b/audio/sounds/spark.ogg differ
diff --git a/audio/sounds/spark.ogg.import b/audio/sounds/spark.ogg.import
new file mode 100644
index 0000000..00eb7b5
--- /dev/null
+++ b/audio/sounds/spark.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/spark.ogg-b7b98b79b91c05a5d1dee21f4057c115.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/spark.ogg"
+dest_files=[ "res://.import/spark.ogg-b7b98b79b91c05a5d1dee21f4057c115.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/splash.ogg b/audio/sounds/splash.ogg
new file mode 100644
index 0000000..cb21ee0
Binary files /dev/null and b/audio/sounds/splash.ogg differ
diff --git a/audio/sounds/splash.ogg.import b/audio/sounds/splash.ogg.import
new file mode 100644
index 0000000..0882f3e
--- /dev/null
+++ b/audio/sounds/splash.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/splash.ogg-610acd136c9f7a4784c72cb5bafa1983.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/splash.ogg"
+dest_files=[ "res://.import/splash.ogg-610acd136c9f7a4784c72cb5bafa1983.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/stab.wav b/audio/sounds/stab.wav
new file mode 100644
index 0000000..665e7e2
Binary files /dev/null and b/audio/sounds/stab.wav differ
diff --git a/audio/sounds/stab.wav.import b/audio/sounds/stab.wav.import
new file mode 100644
index 0000000..c019167
--- /dev/null
+++ b/audio/sounds/stab.wav.import
@@ -0,0 +1,23 @@
+[remap]
+
+importer="wav"
+type="AudioStreamSample"
+path="res://.import/stab.wav-c201d15cc0a56178959694372eb53d41.sample"
+
+[deps]
+
+source_file="res://audio/sounds/stab.wav"
+dest_files=[ "res://.import/stab.wav-c201d15cc0a56178959694372eb53d41.sample" ]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/audio/sounds/star.ogg b/audio/sounds/star.ogg
new file mode 100644
index 0000000..f1a2582
Binary files /dev/null and b/audio/sounds/star.ogg differ
diff --git a/audio/sounds/star.ogg.import b/audio/sounds/star.ogg.import
new file mode 100644
index 0000000..e8f618d
--- /dev/null
+++ b/audio/sounds/star.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/star.ogg-3c40a7e30baf45a40bf911884791334e.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/star.ogg"
+dest_files=[ "res://.import/star.ogg-3c40a7e30baf45a40bf911884791334e.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/sword.ogg b/audio/sounds/sword.ogg
index ee8eec6..b393549 100644
Binary files a/audio/sounds/sword.ogg and b/audio/sounds/sword.ogg differ
diff --git a/audio/sounds/talking.ogg b/audio/sounds/talking.ogg
new file mode 100644
index 0000000..247bdc9
Binary files /dev/null and b/audio/sounds/talking.ogg differ
diff --git a/audio/sounds/talking.ogg.import b/audio/sounds/talking.ogg.import
new file mode 100644
index 0000000..aac63c1
--- /dev/null
+++ b/audio/sounds/talking.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/talking.ogg-fc3a33c101799175c752c54065877385.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/talking.ogg"
+dest_files=[ "res://.import/talking.ogg-fc3a33c101799175c752c54065877385.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/teleport.ogg b/audio/sounds/teleport.ogg
new file mode 100644
index 0000000..6da5159
Binary files /dev/null and b/audio/sounds/teleport.ogg differ
diff --git a/audio/sounds/teleport.ogg.import b/audio/sounds/teleport.ogg.import
new file mode 100644
index 0000000..a0199d8
--- /dev/null
+++ b/audio/sounds/teleport.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/teleport.ogg-50cf00eaef258b8003f9ab9ed6265018.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/teleport.ogg"
+dest_files=[ "res://.import/teleport.ogg-50cf00eaef258b8003f9ab9ed6265018.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory.ogg b/audio/sounds/victory.ogg
new file mode 100644
index 0000000..22fa7af
Binary files /dev/null and b/audio/sounds/victory.ogg differ
diff --git a/audio/sounds/victory.ogg.import b/audio/sounds/victory.ogg.import
new file mode 100644
index 0000000..6cf7f31
--- /dev/null
+++ b/audio/sounds/victory.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory.ogg-ae7a84262871a5770722a95b21a7cb57.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory.ogg"
+dest_files=[ "res://.import/victory.ogg-ae7a84262871a5770722a95b21a7cb57.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory_dog.ogg b/audio/sounds/victory_dog.ogg
new file mode 100644
index 0000000..07b2627
Binary files /dev/null and b/audio/sounds/victory_dog.ogg differ
diff --git a/audio/sounds/victory_dog.ogg.import b/audio/sounds/victory_dog.ogg.import
new file mode 100644
index 0000000..9ac2372
--- /dev/null
+++ b/audio/sounds/victory_dog.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory_dog.ogg-8fc11c95546e6908c2b2cec0ace6c1df.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory_dog.ogg"
+dest_files=[ "res://.import/victory_dog.ogg-8fc11c95546e6908c2b2cec0ace6c1df.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory_haze.ogg b/audio/sounds/victory_haze.ogg
new file mode 100644
index 0000000..d4f074b
Binary files /dev/null and b/audio/sounds/victory_haze.ogg differ
diff --git a/audio/sounds/victory_haze.ogg.import b/audio/sounds/victory_haze.ogg.import
new file mode 100644
index 0000000..06c0d28
--- /dev/null
+++ b/audio/sounds/victory_haze.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory_haze.ogg-027025335f41e37625eab4e085744640.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory_haze.ogg"
+dest_files=[ "res://.import/victory_haze.ogg-027025335f41e37625eab4e085744640.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory_ivy.ogg b/audio/sounds/victory_ivy.ogg
new file mode 100644
index 0000000..5523fa6
Binary files /dev/null and b/audio/sounds/victory_ivy.ogg differ
diff --git a/audio/sounds/victory_ivy.ogg.import b/audio/sounds/victory_ivy.ogg.import
new file mode 100644
index 0000000..4ceb344
--- /dev/null
+++ b/audio/sounds/victory_ivy.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory_ivy.ogg-90d79b449a26224d7ebee3d1a8729882.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory_ivy.ogg"
+dest_files=[ "res://.import/victory_ivy.ogg-90d79b449a26224d7ebee3d1a8729882.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory_nobonus.ogg b/audio/sounds/victory_nobonus.ogg
new file mode 100644
index 0000000..7a09090
Binary files /dev/null and b/audio/sounds/victory_nobonus.ogg differ
diff --git a/audio/sounds/victory_nobonus.ogg.import b/audio/sounds/victory_nobonus.ogg.import
new file mode 100644
index 0000000..a32c7af
--- /dev/null
+++ b/audio/sounds/victory_nobonus.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory_nobonus.ogg-13f05df78c075383aaddddec05e2dada.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory_nobonus.ogg"
+dest_files=[ "res://.import/victory_nobonus.ogg-13f05df78c075383aaddddec05e2dada.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/victory_penny.ogg b/audio/sounds/victory_penny.ogg
new file mode 100644
index 0000000..4932824
Binary files /dev/null and b/audio/sounds/victory_penny.ogg differ
diff --git a/audio/sounds/victory_penny.ogg.import b/audio/sounds/victory_penny.ogg.import
new file mode 100644
index 0000000..03db62b
--- /dev/null
+++ b/audio/sounds/victory_penny.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/victory_penny.ogg-1bf363727ea69db0c09326ac2a97f43a.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/victory_penny.ogg"
+dest_files=[ "res://.import/victory_penny.ogg-1bf363727ea69db0c09326ac2a97f43a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/vulcan.ogg b/audio/sounds/vulcan.ogg
new file mode 100644
index 0000000..a037ec6
Binary files /dev/null and b/audio/sounds/vulcan.ogg differ
diff --git a/audio/sounds/vulcan.ogg.import b/audio/sounds/vulcan.ogg.import
new file mode 100644
index 0000000..7771e65
--- /dev/null
+++ b/audio/sounds/vulcan.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/vulcan.ogg-3f1fcecf4fe0d3cd99da6f19e4e3f50a.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/vulcan.ogg"
+dest_files=[ "res://.import/vulcan.ogg-3f1fcecf4fe0d3cd99da6f19e4e3f50a.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/audio/sounds/zap_wip.ogg b/audio/sounds/zap_wip.ogg
new file mode 100644
index 0000000..259e173
Binary files /dev/null and b/audio/sounds/zap_wip.ogg differ
diff --git a/audio/sounds/zap_wip.ogg.import b/audio/sounds/zap_wip.ogg.import
new file mode 100644
index 0000000..c28ec25
--- /dev/null
+++ b/audio/sounds/zap_wip.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/zap_wip.ogg-51e4569934565cf93f128910a5e31bee.oggstr"
+
+[deps]
+
+source_file="res://audio/sounds/zap_wip.ogg"
+dest_files=[ "res://.import/zap_wip.ogg-51e4569934565cf93f128910a5e31bee.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/autoloads/audio.gd b/autoloads/audio.gd
new file mode 100644
index 0000000..f7314a9
--- /dev/null
+++ b/autoloads/audio.gd
@@ -0,0 +1,141 @@
+extends Node
+
+#Audio Channels
+onready var ac_jump = $JumpSound
+onready var ac_collectible = $CollectibleSound
+onready var ac_climb = $ClimbSound
+onready var ac_die = $DieSound
+onready var ac_music = $Music
+onready var ac_cheat = $CodeEntrySound
+onready var ac_boss = $BossSound
+onready var ac_shard = $ShardSound
+onready var ac_pause_music = $PauseMusic
+onready var ac_menu = $MenuSound
+onready var ac_land = $LandSound
+onready var ac_voice = $Voice
+onready var ac_small_explosion = $SmallExplosion
+onready var ac_mech_hurt = $MechHurt
+onready var ac_mech_shoot = $MechShoot
+#Sounds
+const a_key = preload("res://audio/sounds/key.ogg")
+const a_arrow = preload("res://audio/sounds/arrow_collect.ogg")
+const a_jump = preload("res://audio/sounds/jump.ogg")
+const a_star = preload("res://audio/sounds/star.ogg")
+const a_shard = preload("res://audio/sounds/shard_get.ogg")
+const a_climb_up = preload("res://audio/sounds/a_climb.ogg")
+const a_climb_down = preload("res://audio/sounds/a_bmilc.ogg")
+const a_sword = preload("res://audio/sounds/sword.ogg")
+const a_doublejump = preload("res://audio/sounds/double_jump.ogg")
+const a_shoot = preload("res://audio/sounds/shoot_arrow.ogg")
+const a_die = preload("res://audio/sounds/die.ogg")
+const a_die_splash = preload("res://audio/sounds/splash.ogg")
+const a_die_zap = preload("res://audio/sounds/spark.ogg")
+const a_die_skeleton = preload("res://audio/sounds/die_skeleton.ogg")
+const a_scrump_die = preload("res://audio/sounds/scrump_die.ogg")
+const a_explosion = preload("res://audio/sounds/explosion.ogg")
+const a_game_over = preload("res://audio/sounds/gover.ogg")
+const a_scrump_hurt = preload("res://audio/sounds/scrump_hurt.ogg")
+const a_bubble = preload("res://audio/sounds/bubble.ogg")
+const a_select = preload("res://audio/sounds/select.ogg")
+const a_confirm = preload("res://audio/sounds/confirm.ogg")
+const a_bullet_barrage = preload("res://audio/sounds/bullet_barrage.ogg")
+const a_rainbow_laser = preload("res://audio/sounds/rainbow_laser.ogg")
+const a_spaghetti = preload("res://audio/sounds/spaghetti.ogg")
+const a_good_job_penny = preload("res://audio/sounds/good_job_penny.ogg")
+const a_good_job_haze = preload("res://audio/sounds/good_job_haze.ogg")
+const a_good_job_ivy = preload("res://audio/sounds/good_job_ivy.ogg")
+const a_good_job_dog = preload("res://audio/sounds/good_job_dog.ogg")
+const a_great_job_penny = preload("res://audio/sounds/great_job_penny.ogg")
+const a_great_job_haze = preload("res://audio/sounds/great_job_haze.ogg")
+const a_great_job_ivy = preload("res://audio/sounds/great_job_ivy.ogg")
+const a_great_job_dog = preload("res://audio/sounds/great_job_dog.ogg")
+const a_2600_charge = preload("res://audio/sounds/2600_charge.ogg")
+const a_victory = preload("res://audio/sounds/victory_nobonus.ogg")
+const a_time_bonus = preload("res://audio/sounds/victory_haze.ogg")
+const a_shard_results = preload("res://audio/sounds/shard_results.ogg")
+const a_fail_shard = preload("res://audio/sounds/fail_shard.ogg")
+const a_final_score = preload("res://audio/sounds/final_score.ogg")
+const a_land = preload("res://audio/sounds/land.ogg")
+const a_teleport = preload("res://audio/sounds/teleport.ogg")
+const a_mkey = preload("res://audio/sounds/mkey.ogg")
+const a_msx_die = preload("res://audio/sounds/msx_die.ogg")
+const a_famira = preload("res://audio/sounds/famira.ogg")
+const a_vulcan = preload("res://audio/sounds/vulcan.ogg")
+const a_grumble = preload("res://audio/sounds/fami_grumble.ogg")
+const a_laser_ready = preload("res://audio/sounds/laser_ready.ogg")
+const a_copsquash = preload("res://audio/sounds/copsquash.ogg")
+const a_copsquash2 = preload("res://audio/sounds/cop_splat.ogg")
+const a_fami_transform = preload("res://audio/sounds/fami_transform.ogg")
+const a_ominous = preload("res://audio/sounds/ominous.ogg")
+const a_bullet_casing = preload("res://audio/sounds/shell.ogg")
+const a_gun_cock = preload("res://audio/sounds/gun_cock.ogg")
+const a_famira_die = preload("res://audio/sounds/famira_die.ogg")
+const a_small_explosion = preload("res://audio/sounds/explosion_small.ogg")
+const a_mech_hurt_1 = preload("res://audio/sounds/mech_hurt_1.ogg")
+const a_mech_hurt_2 = preload("res://audio/sounds/mech_hurt_2.ogg")
+const a_mech_hurt_3 = preload("res://audio/sounds/mech_hurt_3.ogg")
+const a_critical_heat = preload("res://audio/sounds/critical_heat.ogg")
+const a_glass_crack = preload("res://audio/glass_crack.ogg")
+const a_glass_break = preload("res://audio/glass_break.ogg")
+const a_shield = preload("res://audio/sounds/stab.wav")
+const a_shield_cooldown = preload("res://audio/sounds/coin.wav")
+
+var loop_section = null
+var has_looped = false
+var r = 0
+
+#Plays a sound
+func play_sound(snd: AudioStream, player: AudioStreamPlayer, pitch: float = 1.0):
+ player.stream = snd
+ player.pitch_scale = pitch
+ player.play()
+
+#Play music, if same track is already playing do nothing
+func play_music(song):
+ if Audio.ac_music.stream != song or Audio.ac_music.playing == false:
+ play_sound(song,ac_music)
+
+#Play shard sound, this silences all other sounds including music until the sound ends
+func play_shard_sound():
+ var idx = AudioServer.get_bus_index("sound")
+ AudioServer.set_bus_mute(idx, true)
+ ac_music.set_stream_paused(true)
+ ac_pause_music.set_stream_paused(true)
+ var r = 0
+ if Game.deaths == 0:
+ if Game.shards == 4:
+ r = 40
+ else:
+ r = 40
+ if r <= 30: play_sound(a_good_job_penny,ac_shard)
+ if r > 30 && r <= 60: play_sound(a_good_job_haze,ac_shard)
+ if r > 60 && r <= 90: play_sound(a_good_job_ivy,ac_shard)
+ if r > 90: play_sound(a_good_job_dog,ac_shard)
+
+
+ else:
+ play_sound(a_shard,ac_shard)
+
+func _on_ShardSound_finished():
+ var idx = AudioServer.get_bus_index("sound")
+ AudioServer.set_bus_mute(idx, false)
+ if !get_tree().paused: ac_music.set_stream_paused(false)
+ ac_pause_music.set_stream_paused(false)
+
+func great_job():
+ var idx = AudioServer.get_bus_index("sound")
+ AudioServer.set_bus_mute(idx, true)
+ ac_music.set_stream_paused(true)
+ ac_pause_music.set_stream_paused(true)
+ if Game.deaths == 0:
+ r = 40
+ else:
+ r = 40
+ if r <= 30: play_sound(a_great_job_penny,ac_shard)
+ if r > 30 && r <= 60: play_sound(a_great_job_haze,ac_shard)
+ if r > 60 && r <= 90: play_sound(a_great_job_ivy,ac_shard)
+ if r > 90: play_sound(a_great_job_dog,ac_shard)
+
+func pause_all(paused: bool) -> void:
+ for player in get_children():
+ player.stream_paused = paused
diff --git a/autoloads/audio.tscn b/autoloads/audio.tscn
new file mode 100644
index 0000000..eab6342
--- /dev/null
+++ b/autoloads/audio.tscn
@@ -0,0 +1,65 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://autoloads/audio.gd" type="Script" id=1]
+[ext_resource path="res://audio/sounds/shard.ogg" type="AudioStream" id=2]
+[ext_resource path="res://audio/music/pause.ogg" type="AudioStream" id=3]
+
+[node name="Audio" type="Node"]
+pause_mode = 2
+script = ExtResource( 1 )
+
+[node name="Music" type="AudioStreamPlayer" parent="."]
+volume_db = -13.5
+bus = "music"
+
+[node name="CollectibleSound" type="AudioStreamPlayer" parent="."]
+volume_db = -8.0
+bus = "sound"
+
+[node name="ShardSound" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 2 )
+volume_db = -8.0
+
+[node name="JumpSound" type="AudioStreamPlayer" parent="."]
+volume_db = -12.0
+bus = "sound"
+
+[node name="ClimbSound" type="AudioStreamPlayer" parent="."]
+volume_db = -12.0
+bus = "sound"
+
+[node name="DieSound" type="AudioStreamPlayer" parent="."]
+volume_db = -12.0
+bus = "sound"
+
+[node name="CodeEntrySound" type="AudioStreamPlayer" parent="."]
+volume_db = -12.0
+bus = "sound"
+
+[node name="BossSound" type="AudioStreamPlayer" parent="."]
+volume_db = -12.0
+bus = "sound"
+
+[node name="PauseMusic" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 3 )
+volume_db = -12.0
+bus = "music"
+
+[node name="MenuSound" type="AudioStreamPlayer" parent="."]
+volume_db = -15.0
+
+[node name="LandSound" type="AudioStreamPlayer" parent="."]
+
+[node name="Voice" type="AudioStreamPlayer" parent="."]
+volume_db = -5.0
+
+[node name="SmallExplosion" type="AudioStreamPlayer" parent="."]
+volume_db = -24.0
+
+[node name="MechHurt" type="AudioStreamPlayer" parent="."]
+volume_db = -10.0
+
+[node name="MechShoot" type="AudioStreamPlayer" parent="."]
+volume_db = -20.0
+
+[connection signal="finished" from="ShardSound" to="." method="_on_ShardSound_finished"]
diff --git a/autoloads/border.gd b/autoloads/border.gd
new file mode 100644
index 0000000..c0dcabb
--- /dev/null
+++ b/autoloads/border.gd
@@ -0,0 +1,22 @@
+extends TextureRect
+
+
+export (Array, Texture) var borders: Array = []
+export (Array, String) var names: Array = []
+
+
+var current_border: int = 0 setget _set_current_border
+
+
+func _ready() -> void:
+ texture = borders[current_border]
+ get_tree().connect("screen_resized", self, "_on_screen_resized")
+ _on_screen_resized()
+
+
+func _set_current_border(value: int) -> void:
+ current_border = posmod(value, borders.size())
+ texture = borders[current_border]
+
+func _on_screen_resized() -> void:
+ rect_size = OS.window_size
diff --git a/autoloads/border.tscn b/autoloads/border.tscn
new file mode 100644
index 0000000..5b8f39e
--- /dev/null
+++ b/autoloads/border.tscn
@@ -0,0 +1,25 @@
+[gd_scene load_steps=14 format=2]
+
+[ext_resource path="res://autoloads/border.gd" type="Script" id=1]
+[ext_resource path="res://graphics/borders/mosaic.png" type="Texture" id=2]
+[ext_resource path="res://graphics/borders/prideborder.png" type="Texture" id=3]
+[ext_resource path="res://graphics/borders/bodhi_sg_border.png" type="Texture" id=4]
+[ext_resource path="res://graphics/borders/enby_border.png" type="Texture" id=5]
+[ext_resource path="res://graphics/borders/the_gays_border.png" type="Texture" id=6]
+[ext_resource path="res://graphics/borders/revolution_border.png" type="Texture" id=7]
+[ext_resource path="res://graphics/borders/black_bars.png" type="Texture" id=8]
+[ext_resource path="res://graphics/borders/skaborder.png" type="Texture" id=9]
+[ext_resource path="res://graphics/borders/infiltration.png" type="Texture" id=10]
+[ext_resource path="res://graphics/borders/copper.png" type="Texture" id=11]
+[ext_resource path="res://graphics/borders/endless_revolution.png" type="Texture" id=12]
+[ext_resource path="res://graphics/borders/static.png" type="Texture" id=13]
+
+[node name="Border" type="TextureRect"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 7 )
+expand = true
+stretch_mode = 7
+script = ExtResource( 1 )
+borders = [ ExtResource( 8 ), ExtResource( 7 ), ExtResource( 10 ), ExtResource( 4 ), ExtResource( 3 ), ExtResource( 6 ), ExtResource( 5 ), ExtResource( 9 ), ExtResource( 2 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ) ]
+names = [ "None", "Change The Future", "Infiltration", "Got Shards?", "Trans Rights", "Here Come The Gays", "Fuck The Binary", "It's Ska Time", "Mosaic", "Copper", "Endless Revolution", "Static" ]
diff --git a/autoloads/console.gd b/autoloads/console.gd
new file mode 100644
index 0000000..0f090c0
--- /dev/null
+++ b/autoloads/console.gd
@@ -0,0 +1,29 @@
+extends CanvasLayer
+
+export var opacity: float = 0.5
+
+var lines: int = 0
+
+onready var label: Label = $Label
+
+func _ready() -> void:
+ label.visible = false
+ label.modulate.a = opacity
+ $Label/Panel.modulate.a = opacity
+
+func _physics_process(delta: float) -> void:
+ if Input.is_action_just_pressed("debug_show"):
+ label.visible = not label.visible
+
+func print(text) -> void:
+ lines += 1
+ if lines > 1:
+ label.text += "\n"
+ if lines > 10:
+ var n = label.text.find("\n")
+ var t = label.text
+ t.erase(0, n+1)
+ lines -= 1
+ label.text = t + str(text)
+ else:
+ label.text += str(text)
diff --git a/autoloads/console.tscn b/autoloads/console.tscn
new file mode 100644
index 0000000..20cf7ec
--- /dev/null
+++ b/autoloads/console.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://autoloads/console.gd" type="Script" id=1]
+
+[node name="Console" type="CanvasLayer"]
+layer = 128
+script = ExtResource( 1 )
+
+[node name="Label" type="Label" parent="."]
+anchor_right = 1.0
+margin_bottom = 14.0
+size_flags_vertical = 2
+
+[node name="Panel" type="Panel" parent="Label"]
+show_behind_parent = true
+anchor_right = 1.0
+anchor_bottom = 1.0
diff --git a/autoloads/controls.gd b/autoloads/controls.gd
new file mode 100644
index 0000000..c394522
--- /dev/null
+++ b/autoloads/controls.gd
@@ -0,0 +1,134 @@
+extends Node
+
+
+const CFG_PATH := "user://controls.pr"
+const ACTIONS := [
+ "move_left", "move_right",
+ "move_up", "move_down",
+ "jump", "shoot",
+ "ui_accept", "ui_cancel",
+]
+const LINKED_ACTIONS := {
+ move_left = "ui_left",
+ move_right = "ui_right",
+ move_up = "ui_up",
+ move_down = "ui_down",
+# jump = "ui_accept",
+# shoot = "ui_cancel",
+}
+
+
+var cfg := ConfigFile.new()
+
+
+func _init() -> void:
+ cfg.load(CFG_PATH)
+ _apply_saved_bindings()
+
+
+func get_key(action: String) -> int:
+ var scancode = cfg.get_value(action, "keyboard", -1)
+ if scancode == -1:
+ scancode = _get_default_key(action)
+ return scancode
+
+
+func get_button(action: String) -> int:
+ var button_index = cfg.get_value(action, "gamepad", -1)
+ if button_index == -1:
+ button_index = _get_default_button(action)
+ return button_index
+
+
+func set_key(action: String, scancode: int) -> void:
+ cfg.set_value(action, "keyboard", scancode)
+ _configure_action_key(action)
+ _save_bindings()
+
+
+func set_button(action: String, button_index: int) -> void:
+ cfg.set_value(action, "gamepad", button_index)
+ _configure_action_button(action)
+ _save_bindings()
+
+
+func default_controls() -> void:
+ for action in ACTIONS:
+ set_key(action, _get_default_key(action))
+ set_button(action, _get_default_button(action))
+ for button in get_tree().get_nodes_in_group("controls_buttons"):
+ button._update_text()
+
+
+func _save_bindings() -> void:
+ cfg.save(CFG_PATH)
+
+
+func _apply_saved_bindings() -> void:
+ for action in ACTIONS:
+ _configure_action_key(action)
+ _configure_action_button(action)
+
+
+func _configure_action_key(action: String) -> void:
+ var scancode = cfg.get_value(action, "keyboard", -1)
+ if scancode == -1:
+ scancode = _get_default_key(action)
+ _apply_action_key(action, scancode)
+ var linked_action = LINKED_ACTIONS.get(action)
+ if linked_action:
+ _apply_action_key(linked_action, scancode)
+
+
+func _configure_action_button(action: String) -> void:
+ var button_index = cfg.get_value(action, "gamepad", -1)
+ if button_index == -1:
+ button_index = _get_default_button(action)
+ _apply_action_button(action, button_index)
+ var linked_action = LINKED_ACTIONS.get(action)
+ if linked_action:
+ _apply_action_button(linked_action, button_index)
+
+
+## applies saved keyboard binding for action
+func _apply_action_key(action: String, scancode: int) -> void:
+ # erase key and button events
+ for event in InputMap.get_action_list(action):
+ if event is InputEventKey and event.physical_scancode != 0:
+ InputMap.action_erase_event(action, event)
+ # apply keyboard binding
+ var key := InputEventKey.new()
+ key.physical_scancode = scancode
+ key.pressed = true
+ InputMap.action_add_event(action, key)
+
+
+## applies saved gamepad binding for action
+func _apply_action_button(action: String, button_index: int) -> void:
+ # erase button events
+ for event in InputMap.get_action_list(action):
+ if event is InputEventJoypadButton:
+ InputMap.action_erase_event(action, event)
+ # apply gamepad binding
+ var button := InputEventJoypadButton.new()
+ button.button_index = button_index
+ button.pressed = true
+ InputMap.action_add_event(action, button)
+
+
+## get first key input from projectsettings
+func _get_default_key(action: String) -> int:
+ var events: Array = ProjectSettings.get("input/" + action).events
+ for event in events:
+ if event is InputEventKey:
+ return event.physical_scancode
+ return -1
+
+
+## get first button input from projectsettings
+func _get_default_button(action: String) -> int:
+ var events: Array = ProjectSettings.get("input/" + action).events
+ for event in events:
+ if event is InputEventJoypadButton:
+ return event.button_index
+ return -1
diff --git a/autoloads/debug.gd b/autoloads/debug.gd
new file mode 100644
index 0000000..2e9f962
--- /dev/null
+++ b/autoloads/debug.gd
@@ -0,0 +1,245 @@
+extends CanvasLayer
+
+#Console by hazel
+#Const
+const ENTRY_SEQUENCE = ["4", "1", "5"]
+#Export
+
+#Onready
+onready var code_label = $CheatLabel
+##Runtime
+var lines: int = 0
+var time: float = 0.0
+var n: int = 0
+var debug = false
+var is_cheating = false
+var reset_is_cheating = false
+
+var allow_sword = false
+var moon_jump = false
+var cfox_mode = false
+var infinite_arrows = false
+var prey_slaughtered = false
+var sus_monster = false
+var fast_punishment = 0
+# cheat code entry
+var entry_index = 0
+var entry = false
+var code = ""
+
+
+func _ready():
+ #Auto do debug when playtesting
+ if not OS.is_debug_build():
+ debug = false
+ else:
+ debug = true
+
+func _physics_process(delta):
+ #DEBUG
+ if debug == true && !entry && !entry_index > 0 && !Options.entry:
+ #Move player to mouse
+ if Input.is_action_just_pressed("debug_move_player"):
+ Audio.play_sound(Audio.a_mkey,Audio.ac_jump)
+ if Input.is_action_pressed("debug_move_player"):
+ var nodes = get_tree().get_nodes_in_group("player")
+ if not nodes.empty():
+ var player = nodes[0]
+ var mouse_position = SceneManager.viewport.get_mouse_position() / SceneManager.viewport_container.rect_scale
+ mouse_position.x = clamp(mouse_position.x, 8.0, Game.RESOLUTION.x - 8.0)
+ mouse_position.y = clamp(mouse_position.y, 8.0, Game.RESOLUTION.y - 8.0)
+ var world_position = mouse_position + Game.current_sector * Game.RESOLUTION
+ player.position = world_position
+
+# Game.get_map().get_node("Player").position = get_viewport().get_mouse_position()
+# Console.print(get_viewport().get_mouse_position())
+ #Test room
+ if Input.is_action_just_pressed("debug_testroom"):
+ Game.change_map(load("res://maps/test_room.tscn"))
+ #Debug 1
+ if Input.is_action_just_pressed("debug_1"):
+ if Game.can_pause:
+ Game.change_map(load("res://maps/level_select.tscn"))
+ #Debug 2
+ if Input.is_action_just_pressed("debug_2"):
+ Game.freeze_frame(1.0)
+ #Infinite arrows
+ if infinite_arrows: Game.arrows = 99
+
+func _input(event):
+ if Options.entry:
+ return
+
+ if event is InputEventKey && event.is_pressed():
+ var character = OS.get_scancode_string(event.scancode)
+ if character.length() > 1:
+ character = ""
+
+ if entry:
+ if event.scancode == KEY_ENTER:
+ _enter_code()
+ Game.set_deferred("can_pause",true)
+ entry = false
+ code = ""
+ elif event.scancode == KEY_BACKSPACE:
+ code.erase(code.length() - 1, 1)
+ else:
+ code += character
+ code_label.text = code
+ else:
+ if character == ENTRY_SEQUENCE[entry_index]:
+ entry_index += 1
+ if entry_index >= ENTRY_SEQUENCE.size():
+ entry = true
+ entry_index = 0
+ _on_entry()
+
+func _on_entry():
+ Audio.play_sound(Audio.a_star, Audio.ac_cheat)
+ Game.can_pause = false
+
+func _enter_code():
+ match code:
+ "30385":
+ for gold in get_tree().get_nodes_in_group("gold"):
+ var goldsprite = gold.get_node("AnimatedSprite")
+ goldsprite.play("30385")
+ goldsprite.position.y -= 1
+ goldsprite.light_mask = 0
+ #goldsprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_green.png"))
+ "1989":
+ for enemy in get_tree().get_nodes_in_group("enemy"):
+ enemy.die()
+ is_cheating = true
+ reset_is_cheating = true
+ "PEN":
+ debug = true
+ is_cheating = true
+ reset_is_cheating = false
+ "6DOUBLOONS":
+ Console.print(get_tree().get_nodes_in_group("gold").size())
+ #Doesnt work
+ "EVILSBANE":
+ allow_sword = true
+ Input.action_press("sword")
+ is_cheating = true
+ reset_is_cheating = false
+ "REDFEATHER":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null:
+ player.state_chart.set_guard_property("red_feather", true)
+ is_cheating = true
+ reset_is_cheating = false
+ "NIGHTCORE":
+ Engine.time_scale = 2
+ Audio.ac_music.pitch_scale = 2
+ "UPUPANDAWAY":
+ get_tree().call_group("mountain_easter_egg","play","liftoff")
+ "MACOSX":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null: Game.instance_node(load("res://objects/environment/beach_ball/beach_ball.tscn"),player.global_position.x,player.global_position.y - 8,Game.get_map())
+ "CANYOUDUNK":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null: Game.instance_node(preload("res://objects/environment/zball/zball.tscn"),player.global_position.x,player.global_position.y - 18.0,Game.get_map())
+ is_cheating = true
+ reset_is_cheating = true
+ "YUMMY":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null:
+ Game.instance_node(
+ preload("res://objects/environment/spaghetti/spaghetti.tscn"),
+ player.global_position.x, player.global_position.y - 12.0,
+ Game.get_map()
+ )
+ "YUCKY":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null:
+ var strand = preload("res://objects/environment/spaghetti/spaghetti.tscn").instance()
+ strand.global_position = player.global_position + Vector2(0.0, -12.0)
+ strand.get_node("Segment/Joint").disable_collision = false
+ strand.get_node("Segment/Line").default_color = Color(0xf53342ff)
+ Game.get_map().add_child(strand)
+ "JUSTE":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null: player.sprite.material.set_shader_param("border_color",Color.blue)
+ "BEESKNEES":
+ Game.get_map().rotation_degrees = -2
+ is_cheating = true
+ reset_is_cheating = true
+ #doesnt work
+ "CFOX":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ player.sprite.visible = false
+ player.cfox.visible = true
+ "BANDANA":
+ infinite_arrows = true
+ is_cheating = true
+ reset_is_cheating = false
+ "ESCARGOD":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ player.state_chart.send_event("become_invulnerable")
+ is_cheating = true
+ reset_is_cheating = false
+ "GILLS":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ player.underwater = false
+ is_cheating = true
+ reset_is_cheating = false
+ "CHORUS":
+ var music = AudioServer.get_bus_index("music")
+ AudioServer.set_bus_effect_enabled(music,0,true)
+ "HYDROCITY":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ player.oxygen_timer.start(0.001)
+ "FLUX":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ # set up tween
+ var tween = create_tween().set_loops()
+ # open palettes directory for listing
+ var dir = Directory.new()
+ if dir.open("res://graphics/player/palettes/") == OK:
+ # loop through files in directory
+ dir.list_dir_begin(true, true)
+ var file_name = dir.get_next()
+ while file_name != "":
+ # act on any pngs
+ if file_name.ends_with(".png"):
+ # load the texture
+ var texture = load("res://graphics/player/palettes/" + file_name)
+ # add step to the tween for that texture
+ tween.tween_property(player.sprite, "material:shader_param/palette", texture, 0.0)
+ tween.tween_property(player.cfox, "material:shader_param/palette", texture, 0.0)
+ tween.tween_interval(0.2)
+ file_name = dir.get_next()
+ dir.list_dir_end()
+ "SKELETON":
+ Game.keys = 50
+ is_cheating = true
+ reset_is_cheating = true
+ "WHATSTHATSMELL":
+ prey_slaughtered = true
+ "SUS":
+ var scrump = get_tree().get_nodes_in_group("scrump").pop_back()
+ if scrump != null: scrump.sus_monster()
+ sus_monster = true
+ "FASTPUNISHMENT":
+ fast_punishment = 1
+ "FASTERPUNISHMENT":
+ fast_punishment = 2
+ "LBUG":
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ player.sprite.material.set_shader_param("palette", load("res://graphics/player/palettes/costume_wriggle.tex"))
+ player.sprite.set_texture(load("res://graphics/player/costume_wriggle.png"))
+ "BLOOPER":
+ var silhouette = load("res://objects/hud/silhouette.tscn").instance()
+ Game.get_map().add_child(silhouette)
+ "IMPATIENT":
+ Game.change_map(load("res://menus/credits.tscn"))
+ "SLOWPOKE":
+ Game.time = 99999
+ "LASERTAG":
+ Game.can_use_shield = true
+ is_cheating = true
+ "INCREDIBLE":
+ var cat = load("res://objects/enemy/uncanny_cat.tscn").instance()
+ Game.get_map().add_child(cat)
diff --git a/autoloads/debug.tscn b/autoloads/debug.tscn
new file mode 100644
index 0000000..8ae9104
--- /dev/null
+++ b/autoloads/debug.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://autoloads/debug.gd" type="Script" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=3]
+
+[node name="Debug" type="CanvasLayer" groups=["viewport_autoload"]]
+layer = 128
+script = ExtResource( 1 )
+
+[node name="CheatLabel" type="Label" parent="."]
+material = ExtResource( 3 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+custom_fonts/font = ExtResource( 2 )
+align = 2
+valign = 2
diff --git a/autoloads/fade.gd b/autoloads/fade.gd
new file mode 100644
index 0000000..d49f379
--- /dev/null
+++ b/autoloads/fade.gd
@@ -0,0 +1,19 @@
+extends CanvasLayer
+
+signal fade_finished
+
+func fade_in(time: float = NAN, reverse: bool = false, color: Color = Color.black) -> void:
+ var rect = $TextureRect
+ rect.material.set_shader_param("color", color)
+ rect.material.set_shader_param("reverse", reverse)
+ $AnimationPlayer.play("FadeIn", -1, 1.0 / time)
+
+func fade_out(time: float = NAN, reverse: bool = false, color: Color = Color.black) -> void:
+ var rect = $TextureRect
+ rect.material.set_shader_param("color", color)
+ rect.material.set_shader_param("reverse", reverse)
+ $AnimationPlayer.play("FadeOut", -1, 1.0 / time)
+
+
+func _fade_finished(anim_name) -> void:
+ emit_signal("fade_finished")
diff --git a/autoloads/fade.tscn b/autoloads/fade.tscn
new file mode 100644
index 0000000..46eb839
--- /dev/null
+++ b/autoloads/fade.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://graphics/fade_patterns/diamonds2.png" type="Texture" id=1]
+[ext_resource path="res://autoloads/fade.gd" type="Script" id=2]
+[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=3]
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 3 )
+shader_param/color = Color( 0, 0, 0, 1 )
+shader_param/smooth_mode = false
+shader_param/reverse = false
+shader_param/opacity = 0.0
+
+[sub_resource type="Animation" id=7]
+resource_name = "FadeIn"
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextureRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 1.0, 0.0 ]
+}
+
+[sub_resource type="Animation" id=8]
+resource_name = "FadeOut"
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextureRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0 ]
+}
+
+[node name="Fade" type="CanvasLayer" groups=["viewport_autoload"]]
+pause_mode = 2
+layer = 125
+script = ExtResource( 2 )
+
+[node name="TextureRect" type="TextureRect" parent="."]
+material = SubResource( 6 )
+margin_right = 256.0
+margin_bottom = 192.0
+texture = ExtResource( 1 )
+expand = true
+stretch_mode = 6
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/FadeIn = SubResource( 7 )
+anims/FadeOut = SubResource( 8 )
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_fade_finished"]
diff --git a/autoloads/game.gd b/autoloads/game.gd
new file mode 100644
index 0000000..1f3e1c9
--- /dev/null
+++ b/autoloads/game.gd
@@ -0,0 +1,365 @@
+extends Node
+
+
+## difficulty levels
+enum Difficulty {
+ SWEET, # slower enemies, infinite lives
+ SALTY, # normal enemies, infinite lives
+ SPICY, # normal enemies, 3 lives, DEFAULT
+ PUNGENT, # faster enemies, 3 lives
+}
+
+# score multiplier for easy mode
+const EASY_DIFFICULTY_MODIFIER: float = 0.75
+
+
+## resolution the game renders at
+const RESOLUTION := Vector2(256,192)
+const DIFFICULTY_NAMES := ["Sweet","Salty","Spicy","Pungent"]
+
+
+#== collectibles ==#
+var keys: int = 0 # collected keys
+## which stars are collected
+var stars_collected := [false,false,false,false,false]
+var stars : int setget , _get_stars # total stars
+## which stars are collected
+var shards_collected := [false,false,false,false,false,false,false,false]
+## how many shards collected
+var shards: int setget , _get_shards # total shards
+var arrows: int = 0 # current arrows
+#== stats ==#
+var lives: int = 2
+var deaths: int = 0
+var time: float = 0.0
+#== score ==#
+var score: int = 0
+var arrows_bonus: int = 0
+var collection_bonus: int = 0
+var time_bonus: int = 0
+var life_bonus: int = 0
+var perfect_bonus: int = 0
+var final_score: int = 0
+var old_high_score: int = 0
+#== state ==#
+var current_sector := Vector2.ZERO
+var respawn_point := Vector2(32,166)
+var current_level: int = 0
+var difficulty: int = Difficulty.SPICY setget _set_difficulty
+var enemy_speed_factor: float = 1.0 # multiplier of enemy speed
+var is_easy_mode: bool = false # whether to do easy-specific behaviors
+var use_lives: bool = false
+var can_pause: bool = true
+var can_restart: bool = true
+var current_palette: String = "default"
+var still_playing: bool = false
+var last_mm_button = null
+var alternate_death = null
+var can_use_shield: bool = false
+#== marathon mode ==#
+var marathon_mode: bool = false
+var marathon_score: int = 0
+var marathon_lives: int = 0
+var marathon_shards: int = 0
+var marathon_deaths: int = 0
+
+
+func _get_stars() -> int:
+ return stars_collected.count(true)
+
+
+func _get_shards() -> int:
+ return shards_collected.count(true)
+
+
+# stuff to change when setting difficulty
+func _set_difficulty(value: int) -> void:
+ difficulty = value
+ match difficulty:
+ Difficulty.SWEET:
+ is_easy_mode = true
+ enemy_speed_factor = 0.75
+ use_lives = false
+ Difficulty.SALTY:
+ is_easy_mode = false
+ enemy_speed_factor = 1.0
+ use_lives = false
+ Difficulty.SPICY:
+ is_easy_mode = false
+ enemy_speed_factor = 1.0
+ use_lives = true
+ Difficulty.PUNGENT:
+ is_easy_mode = false
+ enemy_speed_factor = 1.25
+ use_lives = true
+
+#Instances a node
+func instance_node(node:PackedScene,x:float,y:float,parent):
+ var Instance = node.instance()
+ Instance.global_position = Vector2(x,y)
+ parent.call_deferred("add_child", Instance)
+
+#Get position in sectors
+func get_sector(pos):
+ return (pos / RESOLUTION).floor()
+
+#Return the current Map
+func get_map():
+ return get_tree().get_nodes_in_group("map").front()
+
+
+## tally up scores
+func tally_scores() -> void:
+ var map = get_map()
+ # arrows bonus
+ arrows_bonus = arrows * 100
+ # collection bonus
+ if keys >= 50:
+ collection_bonus += 500
+ if _get_shards() >= 5:
+ collection_bonus += 500
+ # 100% collection
+ if keys >= 50 and _get_shards() >= 5:
+ collection_bonus += 250
+ shards_collected[5] = true
+ # 100% time bonus
+ if time < map.target_time_100:
+ time_bonus = max(2500 - int(2500.0 * time / map.target_time_100), 0) as int
+ shards_collected[6] = true
+ else:
+ # any% time bonus
+ if time < map.target_time_any:
+ time_bonus = max(2500 - int(2500.0 * time / map.target_time_any), 0) as int
+ shards_collected[6] = true
+ # life bonus
+ if deaths == 0:
+ life_bonus = 1500
+ shards_collected[7] = true
+ elif deaths == 1:
+ life_bonus = 500
+ # perfect bonus
+ if shards_collected[5] and shards_collected[6] and shards_collected[7]:
+ perfect_bonus += 1000
+ # final score
+ final_score = score + arrows_bonus + collection_bonus + time_bonus + life_bonus + perfect_bonus
+ # easy mode modifier
+ if difficulty == Difficulty.SWEET:
+ final_score *= EASY_DIFFICULTY_MODIFIER
+ if marathon_mode:
+ marathon_shards += shards_collected.count(true)
+ marathon_score += final_score
+ else:
+ Game.save()
+
+
+#Go to new map
+func change_map(map: PackedScene) -> void:
+ get_tree().paused = true
+ can_pause = false
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ can_pause = true
+ # save deaths
+ if not marathon_mode:
+ var save_id = LevelData.levels[current_level].save_id
+ var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
+ save_data.deaths += deaths
+ Save.current_file.play_time += time
+ Save.current_file.save_to_file()
+ # clear
+ clear_collectibles()
+ StainLayer.reset()
+ #Loop is so no more than one level is loaded at a time
+ SceneManager.current_scene = map.instance()
+
+#Clear data
+func clear_collectibles() -> void:
+ # collectibles
+ keys = 0
+ stars_collected.fill(false)
+ shards_collected.fill(false)
+ arrows = 0
+ if not marathon_mode:
+ lives = 2
+ deaths = 0
+ # score
+ score = 0
+ collection_bonus = 0
+ time_bonus = 0
+ life_bonus = 0
+ perfect_bonus = 0
+ final_score = 0
+
+#Save
+func save():
+ if marathon_mode:
+ return
+
+ var new_super := Save.current_file.is_super_player()
+
+ # get level's save data object
+ var save_id = LevelData.levels[current_level].save_id
+ var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
+
+ old_high_score = max(save_data.score_100, save_data.score_any)
+
+ # save score and time depending on completion
+ if _get_shards() >= 5 && keys >= 50:
+ save_data.score_100 = max(save_data.score_100, final_score) as int
+ save_data.time_100 = min(save_data.time_100, time)
+ else:
+ save_data.score_any = max(save_data.score_any, final_score) as int
+ save_data.time_any = min(save_data.time_any, time)
+
+ # set shards
+ for i in 8:
+ if shards_collected[i]:
+ save_data.shards_collected[i] = true
+
+ # set keys
+ save_data.keys_collected = max(save_data.keys_collected, keys) as int
+
+ # mark as completed
+ save_data.completed = true
+
+ # add to playtime
+ Save.current_file.play_time += time
+
+ if new_super and Save.current_file.is_super_player():
+ Save.current_file.palette = "super_player"
+
+ # save the file
+ Save.current_file.save_to_file()
+
+
+# smaller save function for bosses
+func save_boss() -> void:
+ if marathon_mode:
+ return
+
+ var new_super := not Save.current_file.is_super_player()
+
+ var save_id = LevelData.levels[current_level].save_id
+ var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
+
+ save_data.time_any = min(save_data.time_any, time)
+ save_data.completed = true
+
+ Save.current_file.play_time += time
+
+ if new_super and Save.current_file.is_super_player():
+ Save.current_file.palette = "super_player"
+
+ Save.current_file.save_to_file()
+
+
+# !!DEPRECATED!! convert milliseconds into M:SS:MS
+func timeify(input):
+ if input <= 5999099:
+ var seconds = fmod(Game.time / 1000,60)
+ var minutes = floor((Game.time / 1000) / 60)
+ var centiseconds = fmod(floor(seconds * 100),100)
+ return ("%02d" % minutes) + ":" + ("%02d" % seconds) + "." + ("%02d" % centiseconds)
+ elif input == INF:
+ return "-:--.--"
+ else:
+ return "99:59.99"
+
+# convert seconds into M:SS.MS
+func format_time(seconds: float) -> String:
+ if is_inf(seconds) or is_nan(seconds): # infinite
+ return "--:--.--"
+ elif seconds >= 6000.0: # 10 minutes or greater
+ return "99:99.99"
+ else:
+ var minutes = floor(seconds / 60.0)
+ var centiseconds = fmod(floor(seconds * 100.0), 100.0)
+ return "%02d:%02d.%02d" % [minutes, fmod(seconds, 60.0), centiseconds]
+
+#Restart level
+func restart_level():
+ if can_restart:
+ Save.current_file.play_time += time
+ Save.current_file.levels[LevelData.levels[current_level].save_id].deaths += deaths
+ Save.current_file.save_to_file()
+ clear_collectibles()
+ Audio.ac_climb.stop()
+ Audio.ac_die.stop()
+ Engine.time_scale = 1.0
+ for tween in get_tree().get_processed_tweens():
+ tween.kill()
+ change_map(load(get_map().filename))
+ Audio.ac_music.stream_paused = false
+
+#Freeze frame
+func freeze_frame(freeze_time):
+ get_tree().paused = true
+ var timer = get_tree().create_timer(freeze_time, true)
+ timer.connect("timeout", get_tree(), "set_pause", [false])
+ return timer
+
+#Check if 100%ed
+func has_collection_bonus():
+ return _get_shards() == 5 && keys == 50
+
+# called when player dies
+func _on_player_died() -> void:
+ deaths += 1
+ if marathon_mode:
+ marathon_deaths += 1
+ if use_lives and lives <= 0:
+ still_playing = false
+ can_restart = false
+ can_pause = false
+ if not marathon_mode:
+ Save.current_file.play_time += time
+ Save.current_file.levels[LevelData.levels[current_level].save_id].deaths += deaths
+ Save.current_file.save_to_file()
+ clear_collectibles()
+ Audio.play_sound(Audio.a_game_over, Audio.ac_die)
+ get_tree().get_nodes_in_group("player")[0].queue_free()
+ var time_tween = create_tween()
+ time_tween.tween_property(Engine, "time_scale", 0.1, 0.3)
+ Audio.ac_music.stream_paused = true
+ yield(time_tween, "finished")
+ yield(get_tree().create_timer(1.0 * 0.1), "timeout")
+ Engine.time_scale = 1.0
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ if marathon_mode:
+ SceneManager.current_scene = load("res://menus/main_menu.tscn").instance()
+ else:
+ var map = get_map()
+ var gover = load("res://menus/game_over.tscn").instance()
+ map.add_child(gover)
+ can_restart = true
+ can_pause = true
+ else:
+ # count death
+ lives -= 1
+ # play death sound
+ if alternate_death:
+ Audio.play_sound(alternate_death, Audio.ac_die)
+ else:
+ Audio.play_sound(Audio.a_die, Audio.ac_die)
+ alternate_death = null
+ # death score penalty
+ if use_lives == false && lives < 0:
+ score = max(0, score - 500) as int
+ # freezeframe
+ Game.freeze_frame(0.3)
+
+func check_time_bonus():
+ var map = get_map()
+ if keys >= 50 and _get_shards() >= 5:
+ # 100% time bonus
+ if time < map.target_time_100:
+ return true
+ else:
+ return false
+ else:
+ # any% time bonus
+ if time < map.target_time_any:
+ return true
+ else:
+ return false
diff --git a/autoloads/level_data.gd b/autoloads/level_data.gd
new file mode 100644
index 0000000..67990f6
--- /dev/null
+++ b/autoloads/level_data.gd
@@ -0,0 +1,13 @@
+tool
+extends Node
+
+export var marathon_start: int = 0
+export var marathon_end: int = 11
+export var levels: Array = [] setget set_levels
+
+func set_levels(value):
+ levels = value
+ for i in levels.size():
+ if !levels[i]:
+ levels[i] = LevelEntry.new()
+ levels[i].resource_name = "New Entry"
diff --git a/autoloads/level_data.tscn b/autoloads/level_data.tscn
new file mode 100644
index 0000000..fe92a6f
--- /dev/null
+++ b/autoloads/level_data.tscn
@@ -0,0 +1,232 @@
+[gd_scene load_steps=31 format=2]
+
+[ext_resource path="res://autoloads/level_data.gd" type="Script" id=1]
+[ext_resource path="res://maps/hills_scholar.tscn" type="PackedScene" id=2]
+[ext_resource path="res://maps/canopy.tscn" type="PackedScene" id=3]
+[ext_resource path="res://maps/cave.tscn" type="PackedScene" id=4]
+[ext_resource path="res://scripts/level_entry.gd" type="Script" id=5]
+[ext_resource path="res://maps/mountain.tscn" type="PackedScene" id=6]
+[ext_resource path="res://maps/abyss_scholar.tscn" type="PackedScene" id=7]
+[ext_resource path="res://maps/boss/boss1_arena.tscn" type="PackedScene" id=8]
+[ext_resource path="res://maps/rust.tscn" type="PackedScene" id=9]
+[ext_resource path="res://maps/station.tscn" type="PackedScene" id=10]
+[ext_resource path="res://maps/graveyard.tscn" type="PackedScene" id=11]
+[ext_resource path="res://maps/lab.tscn" type="PackedScene" id=12]
+[ext_resource path="res://maps/boss/boss2_arena.tscn" type="PackedScene" id=13]
+[ext_resource path="res://maps/cave_scholar.tscn" type="PackedScene" id=14]
+[ext_resource path="res://maps/hills.tscn" type="PackedScene" id=15]
+[ext_resource path="res://maps/boss/boss3_arena.tscn" type="PackedScene" id=16]
+
+[sub_resource type="Resource" id=1]
+resource_name = "Verdant Hills"
+script = ExtResource( 5 )
+title = "Verdant Hills"
+shard_titles = [ "Climb to the top", "The obstacle course", "The smallest platform", "Energetic eviscerator", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "hills"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = ""
+boss = false
+has_scoreboard = true
+scene = ExtResource( 2 )
+
+[sub_resource type="Resource" id=2]
+resource_name = "Shady Canopy"
+script = ExtResource( 5 )
+title = "Shady Canopy"
+shard_titles = [ "Archer and His Friend", "Thirsty Spiders", "Spider's Den", "Dancing Above the Pond", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "canopy"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = ""
+boss = false
+has_scoreboard = true
+scene = ExtResource( 3 )
+
+[sub_resource type="Resource" id=4]
+resource_name = "Echo Mountain"
+script = ExtResource( 5 )
+title = "Echo Mountain"
+shard_titles = [ "Push the Rock", "Twin Rolling Fiends", "Beware! Moving Platforms", "Crafty CatBat", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "mountain"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = ""
+boss = false
+has_scoreboard = true
+scene = ExtResource( 6 )
+
+[sub_resource type="Resource" id=6]
+resource_name = "VS The Scrump"
+script = ExtResource( 5 )
+title = "VS The Scrump"
+shard_titles = [ "-w-", "owo", "uwu", "o3o", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "boss1"
+shards_required_sweet = 8
+shards_required_salty = 12
+shards_required_spicy = 16
+shards_required_pungent = 24
+boss_required = ""
+boss = true
+has_scoreboard = false
+scene = ExtResource( 8 )
+
+[sub_resource type="Resource" id=3]
+resource_name = "Blue Ray Cavern"
+script = ExtResource( 5 )
+title = "Blue Ray Cavern"
+shard_titles = [ "Dynamic Duo", "Stalactite Scramble", "OverHead Obstacle Course", "Sneaky Snail", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "cave"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss1"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 14 )
+
+[sub_resource type="Resource" id=10]
+resource_name = "Crater of the Abyss"
+script = ExtResource( 5 )
+title = "Crater of the Abyss"
+shard_titles = [ "Follow the minnow", "Beel enclosure", "Turchin jump", "Drop Down Mine Jump", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "abyss"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss1"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 7 )
+
+[sub_resource type="Resource" id=9]
+resource_name = "ArlingWood Graveyard"
+script = ExtResource( 5 )
+title = "ArlingWood Graveyard"
+shard_titles = [ "Bone Climb", "Soul Graze", "Bow Happy Hellarcher", "Look out for spikes!", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "graveyard"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss1"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 11 )
+
+[sub_resource type="Resource" id=12]
+resource_name = "VS. STG-2600"
+script = ExtResource( 5 )
+title = "VS. STG-2600"
+shard_titles = [ "", "", "", "", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "boss2"
+shards_required_sweet = 20
+shards_required_salty = 24
+shards_required_spicy = 32
+shards_required_pungent = 40
+boss_required = ""
+boss = true
+has_scoreboard = false
+scene = ExtResource( 13 )
+
+[sub_resource type="Resource" id=8]
+resource_name = "Dread PD"
+script = ExtResource( 5 )
+title = "Dread PD"
+shard_titles = [ "All Cops Are Bastards", "Save Ms.X", "Treacherous Climb", "Dodge the lasers", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "station"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss2"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 10 )
+
+[sub_resource type="Resource" id=7]
+resource_name = "Rust Inc."
+script = ExtResource( 5 )
+title = "Rust Inc."
+shard_titles = [ "Precarious Block", "Beside the button", "Saws and bullets", "Beyond the Steam", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "rust"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss2"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 9 )
+
+[sub_resource type="Resource" id=11]
+resource_name = "Fami's Lab"
+script = ExtResource( 5 )
+title = "Fami's Lab"
+shard_titles = [ "Spikes Can't Stop You", "Final Obstacle Course", "5-Finger Discount", "Good Job!", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "lab"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = "boss2"
+boss = false
+has_scoreboard = true
+scene = ExtResource( 12 )
+
+[sub_resource type="Resource" id=15]
+resource_name = "VS. Fami"
+script = ExtResource( 5 )
+title = "VS. Fami"
+shard_titles = [ "", "", "", "", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "boss3"
+shards_required_sweet = 30
+shards_required_salty = 40
+shards_required_spicy = 50
+shards_required_pungent = 60
+boss_required = ""
+boss = true
+has_scoreboard = false
+scene = ExtResource( 16 )
+
+[sub_resource type="Resource" id=14]
+resource_name = "Beta Blue Ray Cavern"
+script = ExtResource( 5 )
+title = "Beta Blue Ray Cavern"
+shard_titles = [ "Star-Crossed Lovers", "The Snail Cave", "Members Only!", "OverHead Obstacle Course", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "beta_cave"
+shards_required_sweet = 72
+shards_required_salty = 72
+shards_required_spicy = 72
+shards_required_pungent = 72
+boss_required = "boss3"
+boss = false
+has_scoreboard = false
+scene = ExtResource( 4 )
+
+[sub_resource type="Resource" id=13]
+resource_name = "Beta Verdant Hills"
+script = ExtResource( 5 )
+title = "Beta Verdant Hills"
+shard_titles = [ "Climb the Big Vine", "Next to the Lone Tree", "Slime's Treasure", "The Snake Pit", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
+save_id = "beta_hills"
+shards_required_sweet = 0
+shards_required_salty = 0
+shards_required_spicy = 0
+shards_required_pungent = 0
+boss_required = ""
+boss = false
+has_scoreboard = false
+scene = ExtResource( 15 )
+
+[node name="LevelData" type="Node"]
+script = ExtResource( 1 )
+levels = [ SubResource( 1 ), SubResource( 2 ), SubResource( 4 ), SubResource( 6 ), SubResource( 3 ), SubResource( 10 ), SubResource( 9 ), SubResource( 12 ), SubResource( 8 ), SubResource( 7 ), SubResource( 11 ), SubResource( 15 ), SubResource( 14 ), SubResource( 13 ) ]
diff --git a/autoloads/ngio.gd b/autoloads/ngio.gd
new file mode 100644
index 0000000..6303a39
--- /dev/null
+++ b/autoloads/ngio.gd
@@ -0,0 +1,191 @@
+extends Node
+
+
+const GATEWAY_URI: String = "https://newgrounds.io/gateway_v3.php"
+const SESSION_FILE: String = "user://ngio.pr"
+const EMPTY_SESSION: Dictionary = {
+ expired = true,
+ id = "",
+ passport_url = "",
+ remember = false,
+ user = null,
+}
+
+
+var app_id: String = "" # app id on newgrounds
+var aes_key := PoolByteArray([]) # AES-128/Base64 encryption key
+var session: Dictionary = EMPTY_SESSION
+var keys_loaded: bool = false # whether id and key have been loaded from ini file
+
+var http := HTTPRequest.new() # http request node
+var aes := AESContext.new() # aes encryption
+var rng := RandomNumberGenerator.new()
+
+
+var _response: Dictionary = {}
+
+
+func _ready() -> void:
+ # load app id from ngio.ini
+ var ini = ConfigFile.new()
+ var err = ini.load("res://ngio.ini")
+ if err != OK:
+ push_error("Failed to load ngio data. Will not be able to access scoreboards.")
+ return
+ app_id = ini.get_value("ngio", "id", "")
+ if app_id == "":
+ push_error("Failed to load ngio data. Will not be able to access scoreboards.")
+ keys_loaded = false
+ return
+ else:
+ keys_loaded = true
+
+ # attempt to load aes key
+ var key = Marshalls.base64_to_raw(ini.get_value("ngio", "key", ""))
+ if key.size() == 16:
+ aes_key = key
+
+ # initialize HTTPRequest
+ add_child(http)
+ http.connect("request_completed", self, "_http_request_completed")
+
+ # initialize rng for encryption
+ rng.randomize()
+
+ # try to load saved session
+ if not yield(load_saved_session(), "completed"):
+ yield(start_new_session(), "completed")
+
+
+## attempts to load a saved newgrounds.io session
+## returns true if the loaded session is valid
+func load_saved_session() -> bool:
+ var ini = ConfigFile.new()
+ var err = ini.load(SESSION_FILE)
+ # fail if can't load ngio.pr
+ if err != OK:
+ session = EMPTY_SESSION
+ session.id = ini.get_value("ngio", "session_id", "")
+ #const url = new URL(location.href);
+ #this.session_id = url.searchParams.get('ngio_session_id');
+ if OS.has_feature('JavaScript'):
+ var sp_session = JavaScript.eval("""
+ new URL(window.location.href).searchParams.get('ngio_session_id')
+ """)
+ if sp_session != null:
+ session.id = sp_session
+ # check session is valid
+ var response = yield(request_execute("App.checkSession"), "completed")
+ if has_result(response):
+ var result = response.result
+ if result.data.success and not result.data.session.expired:
+ session = result.data.session
+ return true
+ session = EMPTY_SESSION
+ ini.set_value("ngio", "session_id", "")
+ ini.save(SESSION_FILE)
+ return false
+
+
+## start new session
+func start_new_session() -> bool:
+ var response = yield(request_execute("App.startSession"), "completed")
+ if has_result(response):
+ var result = response.result
+ if result.data.success and not result.data.session.expired:
+ session = result.data.session
+ return true
+ session = EMPTY_SESSION
+ return false
+
+
+## repeatedly checks session until it is logged in or cancelled
+func passport_check() -> bool:
+ # attempt for maximum of 5 minutes
+ var attempts = 60
+ while attempts > 0:
+ attempts -= 1
+ yield(get_tree().create_timer(5.0), "timeout")
+ var response = yield(request_execute("App.checkSession"), "completed")
+ if has_result(response):
+ var result = response.result
+ if result.data.success:
+ if result.data.session.user:
+ session = result.data.session
+ if session.remember:
+ var ini = ConfigFile.new()
+ ini.set_value("ngio", "session_id", session.id)
+ ini.save(SESSION_FILE)
+ return true
+ else:
+ return false
+ return false
+
+
+## checks if a response is valid and succeeded
+func has_result(response: Dictionary) -> bool:
+ return "success" in response and response.success
+
+
+## requests the provided component be executed, do not call async :/
+# may call with either single or multiple components
+func request_execute(component: String, parameters: Dictionary = {}, echo: String = "", encrypt: bool = false) -> Dictionary:
+ # build request headers
+ var headers = [
+ "Content-Type: application/x-www-form-urlencoded",
+ ]
+ # build execute object
+ var execute = {
+ component = component,
+ parameters = parameters,
+ echo = echo,
+ }
+ # use encryption if a valid key is available
+ # TODO: implementation messed up in some way. encryption is fine, but
+ # formatting is wrong in some way that newgrounds can not understand
+# if encrypt and aes_key.size() == 16:
+ if false:
+ # convert to bytes
+ var data = to_json(execute).to_utf8()
+ # pad to 16 bytes alignment
+ var padding = PoolByteArray([])
+ padding.resize((16 - data.size() % 16) % 16)
+ padding.fill(0)
+ data.append_array(padding)
+ # generate random initialization vector
+ var iv = PoolByteArray([])
+ iv.resize(16)
+ for i in iv.size():
+ iv[i] = rng.randi() % 0xFF
+ # encrypt data
+ aes.start(AESContext.MODE_CBC_ENCRYPT, aes_key, iv)
+ var encrypted = aes.update(data)
+ aes.finish()
+ # compose secure execute object
+ execute = {
+ secure = Marshalls.raw_to_base64(iv + encrypted)
+ }
+ # compose request body
+ var request = {
+ app_id = app_id,
+ session_id = session.id,
+ execute = execute,
+ }
+ var body = "input=" + to_json(request).percent_encode()
+ # make request
+ var err = http.request(GATEWAY_URI, headers, true, HTTPClient.METHOD_POST, body)
+ if err != OK:
+ push_error("Invalid HTTP request")
+ # yield response
+ yield(http, "request_completed")
+ return _response
+
+
+## called when the HTTPRequest gets a responce
+func _http_request_completed(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void:
+ if response_code == 200:
+ var dict = parse_json(body.get_string_from_utf8())
+ if typeof(dict) == TYPE_DICTIONARY:
+ _response = dict
+ return
+ _response = {success = false}
diff --git a/autoloads/options.gd b/autoloads/options.gd
new file mode 100644
index 0000000..fbb7655
--- /dev/null
+++ b/autoloads/options.gd
@@ -0,0 +1,199 @@
+extends Node
+
+
+#Enums
+enum ScalingMode {INTEGER, ASPECT, STRETCH}
+enum Filter {NONE, CRT, LCD, BILINEAR}
+enum RumbleMode {NONE, DEATHS, FULL}
+enum TransSpeed {SLOW, NORMAL, FAST, INSTANT}
+enum ScanlineType {NONE, LCD, CRT}
+enum Gore {NONE, NO_STAINS, FULL}
+enum Section {GAME, VIDEO, AUDIO, ALL}
+
+
+#Constants
+const TRANS_SPEEDS := [0.8, 0.4, 0.2, 0.0000001]
+
+
+#Game
+var rumble: int = RumbleMode.FULL
+var gore: int = Gore.FULL
+var speedrun_timer: bool = false setget _set_speedrun_timer
+var speccy_help: bool = false
+var scoreboard_name: String = "" setget _set_scoreboard_name
+var scoreboard_id: int = -1
+
+#Video
+var fullscreen: bool = false setget _set_fullscreen
+var window_size: float = 2.0 setget _set_window_size
+var scaling_mode: int = ScalingMode.INTEGER setget _set_scaling_mode
+var transition_speed: int = TransSpeed.NORMAL setget _set_transition_speed
+var transition_speed_secs setget , _get_transition_speed_sex
+var border: int = 0 setget _set_border
+var scanlines: int = ScanlineType.NONE setget _set_scanlines
+
+#Audio
+var master_volume: float = 1.0 setget _set_master_volume
+var music_volume: float = 1.0 setget _set_music_volume
+var sound_volume: float = 1.0 setget _set_sound_volume
+var landing_sound: bool = true setget _set_landing_sound
+
+# last played file
+var last_file: int = 0
+
+# default values
+var defaults = null
+
+# text is being entered
+var entry: bool = false
+
+func _ready() -> void:
+ pause_mode = PAUSE_MODE_PROCESS
+
+ # clone self into defaults before loading stored values
+ if defaults == null:
+ defaults = duplicate()
+ load_options()
+
+func _unhandled_input(event: InputEvent) -> void:
+ if not Debug.entry and not entry:
+ if event.is_action_pressed("fullscreen"):
+ OS.window_fullscreen = not OS.window_fullscreen
+
+func load_options() -> void:
+ var file = ConfigFile.new()
+ file.load("user://options.pr")
+ # game
+ rumble = file.get_value("game", "rumble", defaults.rumble)
+ gore = file.get_value("game", "gore", defaults.gore)
+ _set_speedrun_timer(file.get_value("game", "speedrun_timer", defaults.speedrun_timer))
+ speccy_help = file.get_value("game", "speccy_help", defaults.speccy_help)
+ _set_scoreboard_name(file.get_value("game", "scoreboard_name", ""))
+ randomize()
+ scoreboard_id = file.get_value("game", "scoreboard_id", randi())
+ # video
+ _set_fullscreen(file.get_value("video", "fullscreen", defaults.fullscreen))
+ _set_window_size(file.get_value("video", "window_size", defaults.window_size))
+ _set_scaling_mode(file.get_value("video", "scaling_mode", defaults.scaling_mode))
+ _set_transition_speed(file.get_value("video", "transition_speed", defaults.transition_speed))
+ _set_border(file.get_value("video", "border", defaults.border))
+ _set_scanlines(file.get_value("video", "scanlines", defaults.scanlines))
+ # audio
+ _set_master_volume(file.get_value("audio", "master_volume", 1.0))
+ _set_music_volume(file.get_value("audio", "music_volume", 1.0))
+ _set_sound_volume(file.get_value("audio", "sound_volume", 1.0))
+ _set_landing_sound(file.get_value("audio", "landing_sound", defaults.landing_sound))
+ # last played file
+ last_file = file.get_value("save", "last_file", 0)
+
+func load_defaults(section: int = Section.ALL) -> void:
+ match section:
+ Section.GAME, Section.ALL:
+ rumble = defaults.rumble
+ gore = defaults.gore
+ speedrun_timer = defaults.speedrun_timer
+ speccy_help = defaults.speccy_help
+ scoreboard_name = defaults.scoreboard_name
+ scoreboard_id = randi()
+ Section.VIDEO, Section.ALL:
+ fullscreen = defaults.fullscreen
+ window_size = defaults.window_size
+ scaling_mode = defaults.scaling_mode
+ transition_speed = defaults.transition_speed
+ border = defaults.border
+ scanlines = defaults.scanlines
+ Section.AUDIO, Section.ALL:
+ master_volume = defaults.master_volume
+ music_volume = defaults.music_volume
+ sound_volume = defaults.sound_volume
+ landing_sound = defaults.landing_sound
+
+func save_options() -> void:
+ var file = ConfigFile.new()
+ #Game
+ file.set_value("game", "rumble", rumble)
+ file.set_value("game", "gore", gore)
+ file.set_value("game", "speedrun_timer", speedrun_timer)
+ file.set_value("game", "speccy_help", speccy_help)
+ file.set_value("game", "scoreboard_name", scoreboard_name)
+ file.set_value("game", "scoreboard_id", scoreboard_id)
+ #Video
+ file.set_value("video", "fullscreen", fullscreen)
+ file.set_value("video", "window_size", window_size)
+ file.set_value("video", "scaling_mode", scaling_mode)
+ file.set_value("video", "transition_speed", transition_speed)
+ file.set_value("video", "border", border)
+ file.set_value("video", "scanlines", scanlines)
+ #Audio
+ file.set_value("audio", "master_volume", master_volume)
+ file.set_value("audio", "music_volume", music_volume)
+ file.set_value("audio", "sound_volume", sound_volume)
+ file.set_value("audio", "landing_sound", landing_sound)
+ # last played file
+ file.set_value("save", "last_file", last_file)
+ # save the options to file
+ file.save("user://options.pr")
+
+# Setters
+
+# game setters
+func _set_speedrun_timer(value: bool) -> void:
+ speedrun_timer = value
+ if not speedrun_timer:
+ SpeedrunTimer.visible = false
+ SpeedrunTimer.timer_running = false
+
+func _set_scoreboard_name(value: String) -> void:
+ scoreboard_name = value.substr(0, 10).to_lower()
+
+
+# video setters
+func _set_fullscreen(value: bool) -> void:
+ fullscreen = value
+ if Engine.get_idle_frames() == 0:
+ OS.window_fullscreen = fullscreen
+
+func _set_window_size(value: float) -> void:
+ window_size = value
+ OS.window_size = Game.RESOLUTION * window_size
+
+func _set_scaling_mode(value: int) -> void:
+ scaling_mode = value
+ SceneManager.scaling_mode = scaling_mode
+ get_tree().emit_signal("screen_resized") # force screen size update
+
+func _set_transition_speed(value: int) -> void:
+ transition_speed = value
+
+func _get_transition_speed_sex() -> float:
+ return TRANS_SPEEDS[transition_speed]
+
+func _set_border(value: int) -> void:
+ border = value
+ Border.current_border = border
+
+func _set_scanlines(value: int) -> void:
+ scanlines = value
+ SceneManager.set_scanlines(scanlines)
+
+
+# audio setters
+func _set_master_volume(value: float) -> void:
+ master_volume = value
+ AudioServer.set_bus_volume_db(0, linear2db(value))
+
+func _set_music_volume(value: float) -> void:
+ music_volume = value
+ var idx = AudioServer.get_bus_index("music")
+ AudioServer.set_bus_volume_db(idx, linear2db(value))
+
+func _set_sound_volume(value: float) -> void:
+ sound_volume = value
+ var idx = AudioServer.get_bus_index("sound")
+ AudioServer.set_bus_volume_db(idx, linear2db(value))
+ idx = AudioServer.get_bus_index("shard")
+ AudioServer.set_bus_volume_db(idx, linear2db(value))
+
+func _set_landing_sound(value: bool) -> void:
+ landing_sound = value
+ Audio.ac_land.volume_db = -15.0 if landing_sound else -INF
diff --git a/autoloads/save.gd b/autoloads/save.gd
new file mode 100644
index 0000000..a865cb4
--- /dev/null
+++ b/autoloads/save.gd
@@ -0,0 +1,180 @@
+extends Node
+
+# currently-used compatible format version
+const FORMAT_VERSION: int = 1
+
+# contains the save data for a single level
+class LevelSaveData:
+ # save file category to use for this level
+ var save_id: String
+ # scores
+ var score_any: int = 0
+ var score_100: int = 0
+ # times
+ var time_any: float = INF
+ var time_100: float = INF
+ # times died in that level
+ var deaths: int
+ # collectibles
+ var keys_collected: int = 0
+ var shards_collected: Array
+ # whether level has been beaten at all
+ var completed: bool = false
+
+ func _init(id: String) -> void:
+ save_id = id
+ # initialize shards array
+ shards_collected = []
+ shards_collected.resize(8)
+ for i in 8:
+ shards_collected[i] = false
+
+ ## save the level data to the given ConfigFile
+ func save_to_file(file: ConfigFile) -> void:
+ # set scores
+ file.set_value(save_id, "score_any", score_any)
+ file.set_value(save_id, "score_100", score_100)
+ # set times
+ file.set_value(save_id, "time_any", time_any)
+ file.set_value(save_id, "time_100", time_100)
+ # set deaths
+ file.set_value(save_id, "deaths", deaths)
+ # set collected keys
+ file.set_value(save_id, "keys", keys_collected)
+ # set collected shards
+ for i in 8:
+ file.set_value(save_id, "shard_%d" % i, shards_collected[i])
+ # set completion status
+ file.set_value(save_id, "completed", completed)
+
+ ## loads level data from the given ConfigFile
+ func load_from_file(file: ConfigFile) -> void:
+ # get scores
+ score_any = file.get_value(save_id, "score_any", 0)
+ score_100 = file.get_value(save_id, "score_100", 0)
+ # get times
+ time_any = file.get_value(save_id, "time_any", INF)
+ time_100 = file.get_value(save_id, "time_100", INF)
+ # get deaths
+ deaths = file.get_value(save_id, "deaths", 0)
+ # get collected keys
+ keys_collected = file.get_value(save_id, "keys", keys_collected)
+ # get collected shards
+ for i in 8:
+ shards_collected[i] = file.get_value(save_id, "shard_%d" % i, false)
+ # get completion status
+ completed = file.get_value(save_id, "completed", false)
+
+# contains data of one save file
+class SaveFile:
+ # path of file to load/save from
+ var file_path: String
+ # version of save file format
+ var version: int = FORMAT_VERSION
+ # name of the save file
+ var name: String = ""
+ # difficulty chosen for the file
+ var difficulty: int = Game.Difficulty.SPICY
+ # total play time
+ var play_time: float = 0.0
+ # dictionary of levels' save data
+ var levels: Dictionary
+ # whether is debug save
+ var debug: bool = false
+ # palette the save file is using
+ var palette: String = "default"
+
+ func _init(path: String, debug_save: bool = false) -> void:
+ debug = debug_save
+ file_path = path
+ # initialize level save data dictionary
+ levels = {}
+ for level in LevelData.levels:
+ var data := LevelSaveData.new(level.save_id)
+ if debug:
+ data.completed = true
+ levels[level.save_id] = data
+
+ # return total number of shards
+ func get_total_shards() -> int:
+ if debug:
+ return 999
+ var total = 0
+ for level in levels.values():
+ total += level.shards_collected.count(true)
+ return total
+
+ # return total number of keys
+ func get_total_keys() -> int:
+ var total = 0
+ for level in levels.values():
+ total += level.keys_collected
+ return total
+
+ # return total number of deaths
+ func get_total_deaths() -> int:
+ var total = 0
+ for level in levels.values():
+ total += level.deaths
+ return total
+
+ func is_super_player() -> bool:
+ return get_total_shards() >= 72 and levels["boss3"].completed
+
+ # loads data from the file at `path`
+ func load_from_file() -> void:
+ var file = ConfigFile.new()
+ file.load(file_path)
+ # get save format version
+ version = file.get_value("options", "version", 0)
+ # load name
+ name = file.get_value("options", "name", "SG")
+ # load difficulty
+ difficulty = file.get_value("options", "difficulty", Game.Difficulty.SPICY)
+ # load playtime
+ play_time = file.get_value("options", "play_time", 0.0)
+ palette = file.get_value("options", "palette", "default")
+ # TODO: load bought palettes
+ # TODO: load selected palette
+ # load level save data
+ for level_save in levels.values():
+ level_save.load_from_file(file)
+
+ func save_to_file() -> void:
+ var file = ConfigFile.new()
+ # use current format version
+ file.set_value("options", "version", FORMAT_VERSION)
+ # save name
+ file.set_value("options", "name", name)
+ # save difficulty
+ file.set_value("options", "difficulty", difficulty)
+ # save playtime
+ file.set_value("options", "play_time", play_time)
+ file.set_value("options", "palette", palette)
+ # TODO: save bought palettes
+ # TODO: save selected palette
+ # save level data
+ for level in levels.values():
+ level.save_to_file(file)
+ file.save(file_path)
+
+
+## currently used save file
+var current_file: SaveFile = null
+
+func _ready() -> void:
+ if OS.is_debug_build():
+ current_file = SaveFile.new("user://debug_save.pr", true)
+ else:
+ current_file = load_file("user://file%d.pr" % Options.last_file)
+ if current_file:
+ Game.difficulty = current_file.difficulty
+
+## shortcut for loading a save file from specific path
+func load_file(path: String) -> SaveFile:
+ if File.new().file_exists(path):
+ var file = SaveFile.new(path)
+ file.load_from_file()
+ return file
+ else:
+ return null
diff --git a/autoloads/scene_manager.gd b/autoloads/scene_manager.gd
new file mode 100644
index 0000000..f6c8a67
--- /dev/null
+++ b/autoloads/scene_manager.gd
@@ -0,0 +1,105 @@
+## manages current scene and viewport scaling
+extends Node
+
+# methods of scaling viewport
+enum ScalingMode {
+ INTEGER, # maintain aspect ratio and scale by whole numbers
+ ASPECT, # maintain aspect ratio
+ STRETCH, # stretch to fill screen
+}
+
+## method used to scale game viewport
+export (ScalingMode) var scaling_mode: int = ScalingMode.INTEGER
+
+# node references #
+onready var viewport_container: ViewportContainer = $ViewportContainer
+onready var viewport: Viewport = $ViewportContainer/Viewport
+
+var resolution: Vector2
+
+var current_scene: Node setget change_scene
+
+var last_input_gamepad: bool = true
+
+func _input(event: InputEvent) -> void:
+ if event is InputEventJoypadButton:
+ last_input_gamepad = true
+ elif event is InputEventKey:
+ last_input_gamepad = false
+
+## change the current scene
+func change_scene(new_scene: Node) -> void:
+ # remove current scene if it exists
+ if current_scene != null:
+ viewport.remove_child(current_scene)
+ current_scene.queue_free()
+ # remove child from parent if it has one
+ if new_scene.is_inside_tree():
+ new_scene.get_parent().call_deferred("remove_child", new_scene)
+ # add new scene to tree
+ viewport.call_deferred("add_child", new_scene)
+ current_scene = new_scene
+
+func set_scanlines(type: int) -> void:
+ yield(get_tree(), "idle_frame")
+ match type:
+ Options.ScanlineType.NONE:
+ viewport_container.material.set_shader_param("enabled", false)
+ Options.ScanlineType.CRT:
+ viewport_container.material.set_shader_param("enabled", true)
+ viewport_container.material.set_shader_param("scanline_opacity", Vector2(0.2, 0.0))
+ viewport_container.material.set_shader_param("brightness", 1.1)
+ Options.ScanlineType.LCD:
+ viewport_container.material.set_shader_param("enabled", true)
+ viewport_container.material.set_shader_param("scanline_opacity", Vector2(0.2, 0.2))
+ viewport_container.material.set_shader_param("brightness", 1.2)
+
+func _ready() -> void:
+ var tree := get_tree()
+ # capture initial scene
+ if tree.current_scene != self:
+ change_scene(tree.current_scene)
+ tree.current_scene = self
+ # capture autoloads in the group "viewport_autoload"
+ for node in tree.get_nodes_in_group("viewport_autoload"):
+ node.get_parent().call_deferred("remove_child", node)
+ viewport.call_deferred("add_child", node)
+
+ # get design resolution from project settings
+ var project_resolution := Vector2(
+ ProjectSettings.get_setting("display/window/size/width"),
+ ProjectSettings.get_setting("display/window/size/height")
+ )
+ viewport.size = project_resolution
+ resolution = project_resolution
+ # size container and pivot on center
+ viewport_container.rect_size = resolution
+ viewport_container.rect_pivot_offset = resolution / 2.0
+ # fix viewportcontainer input bug
+ viewport.set_deferred("handle_input_locally", true)
+ # connect resized signal
+ tree.connect("screen_resized", self, "_on_screen_resized")
+ _on_screen_resized()
+
+func _process(delta: float) -> void:
+ if Debug.entry == false:
+ #CRT FILTER
+ if Input.is_action_just_pressed("crt"):
+ viewport_container.material.set_shader_param("enabled", not viewport_container.material.get_shader_param("enabled"))
+
+func _on_screen_resized() -> void:
+ var screen_size := OS.window_size
+ var scale_delta := screen_size / resolution
+
+ match scaling_mode:
+ ScalingMode.INTEGER:
+ # find smaller scale difference, floor to integer
+ var scale = floor(min(scale_delta.x, scale_delta.y))
+ viewport_container.rect_scale = Vector2(scale, scale)
+ ScalingMode.ASPECT:
+ # find smaller scale difference
+ var scale = min(scale_delta.x, scale_delta.y)
+ viewport_container.rect_scale = Vector2(scale, scale)
+ ScalingMode.STRETCH:
+ # simply use scale difference
+ viewport_container.rect_scale = scale_delta
diff --git a/autoloads/scene_manager.tscn b/autoloads/scene_manager.tscn
new file mode 100644
index 0000000..4c6aaa6
--- /dev/null
+++ b/autoloads/scene_manager.tscn
@@ -0,0 +1,34 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://autoloads/scene_manager.gd" type="Script" id=1]
+[ext_resource path="res://shaders/lcd.gdshader" type="Shader" id=2]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/enabled = true
+shader_param/resolution = Vector2( 256, 192 )
+shader_param/curvature = Vector2( 0, 0 )
+shader_param/scanline_opacity = Vector2( 0.1, 0.1 )
+shader_param/brightness = 1.0
+
+[node name="SceneManager" type="Node"]
+pause_mode = 2
+script = ExtResource( 1 )
+
+[node name="ViewportContainer" type="ViewportContainer" parent="."]
+material = SubResource( 1 )
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -128.0
+margin_top = -96.0
+margin_right = 128.0
+margin_bottom = 96.0
+mouse_filter = 1
+
+[node name="Viewport" type="Viewport" parent="ViewportContainer"]
+size = Vector2( 256, 192 )
+handle_input_locally = false
+usage = 0
+render_target_update_mode = 3
diff --git a/autoloads/scoreboard.gd b/autoloads/scoreboard.gd
new file mode 100644
index 0000000..0b15f8c
--- /dev/null
+++ b/autoloads/scoreboard.gd
@@ -0,0 +1,124 @@
+extends Node
+
+
+signal _response_received
+
+
+const CHECK_INTERVAL: float = 60.0
+const POLL_INTERVAL: float = 0.5
+
+
+var server_host: String = ""
+var http: HTTPRequest = null
+## True if there is currently a request processing.
+var waiting_for_response: bool = false
+## True if the last request failed and the result is not valid.
+var errored: bool = false
+
+var _response_code: int = -1
+var _response_body: String = ""
+
+
+class ScoreEntry:
+ var score: int
+ var time: int
+ var difficulty: int
+
+ func _init(score: int, time: int, difficulty: int) -> void:
+ self.score = score
+ self.time = time
+ self.difficulty = difficulty
+
+ static func from_dict(dict: Dictionary) -> ScoreEntry:
+ return ScoreEntry.new(dict.score, dict.time, dict.difficulty)
+
+
+func _ready() -> void:
+ var file = File.new()
+ var result = file.open("res://scoreboard_host.txt", File.READ)
+ if result == OK:
+ server_host = file.get_line()
+ file.close()
+
+ http = HTTPRequest.new()
+ http.download_chunk_size = 4096
+ http.timeout = 30.0
+ http.use_threads = OS.get_name() != "HTML5"
+ http.connect("request_completed", self, "_on_request_completed")
+ add_child(http)
+
+func _on_request_completed(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void:
+ if result != OK:
+ errored = true
+ else:
+ errored = false
+ _response_code = response_code
+ _response_body = body.get_string_from_utf8()
+ waiting_for_response = false
+ emit_signal("_response_received")
+
+
+func is_name_free(player_name: String, id: int) -> bool:
+ if waiting_for_response:
+ yield(self, "_response_received")
+ var err = http.request(server_host + "/api/players/" + player_name)
+ if err != OK:
+ errored = true
+ return false
+ waiting_for_response = true
+
+ yield(self, "_response_received")
+ if _response_code == HTTPClient.RESPONSE_NOT_FOUND or _response_body.to_int() == id:
+ return true
+ return false
+
+
+func touch_name(player_name: String, id: int) -> void:
+ if waiting_for_response:
+ yield(self, "_response_received")
+ var err = http.request(
+ server_host + "/api/players/%s/%d" % [player_name, id],
+ [], true, HTTPClient.METHOD_POST
+ )
+ if err != OK:
+ errored = true
+ return
+ waiting_for_response = true
+
+
+func submit_score(level: String, entry: ScoreEntry) -> bool:
+ if waiting_for_response:
+ yield(self, "_response_received")
+ var err = http.request(
+ server_host + "/api/scores/%s/%s/%d/%d/%d" % [
+ level, Options.scoreboard_name,
+ entry.score, entry.time, entry.difficulty
+ ],
+ [], true, HTTPClient.METHOD_POST
+ )
+ if err != OK:
+ errored = true
+ return false
+ waiting_for_response = true
+ yield(self, "_response_received")
+ if errored or _response_code != HTTPClient.RESPONSE_OK:
+ return false
+ return true
+
+
+func get_scores(level: String) -> Dictionary:
+ if waiting_for_response:
+ yield(self, "_response_received")
+ var err = http.request(server_host + "/api/scores/%s" % level)
+ if err != OK:
+ errored = true
+ return {}
+ waiting_for_response = true
+ yield(self, "_response_received")
+ if not errored and _response_code == HTTPClient.RESPONSE_OK:
+ var dict = parse_json(_response_body)
+ var scores = {}
+ for player in dict.keys():
+ scores[player] = ScoreEntry.from_dict(dict[player])
+ return scores
+ return {}
diff --git a/autoloads/speedrun_timer.gd b/autoloads/speedrun_timer.gd
new file mode 100644
index 0000000..5a3c4ff
--- /dev/null
+++ b/autoloads/speedrun_timer.gd
@@ -0,0 +1,29 @@
+extends CanvasLayer
+
+
+export var bonus_color: Color
+
+
+var time: float = 0.0
+var timer_running: bool = false
+
+
+onready var time_counter: Label = $Box/TimeCounter
+
+
+func _physics_process(delta: float) -> void:
+ if timer_running:
+ time += delta
+
+
+func _process(delta: float) -> void:
+ if visible:
+ time_counter.text = Game.format_time(time)
+
+ if timer_running:
+ var map = Game.get_map()
+ if is_instance_valid(map):
+ if (Game.has_collection_bonus() && Game.time <= map.target_time_100) or (!Game.has_collection_bonus() && Game.time <= map.target_time_any):
+ time_counter.modulate = bonus_color
+ return
+ time_counter.modulate = Color.white
diff --git a/autoloads/speedrun_timer.tscn b/autoloads/speedrun_timer.tscn
new file mode 100644
index 0000000..45be8be
--- /dev/null
+++ b/autoloads/speedrun_timer.tscn
@@ -0,0 +1,32 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://autoloads/speedrun_timer.gd" type="Script" id=1]
+[ext_resource path="res://graphics/hud/hud.png" type="Texture" id=2]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 180, 58, 12 )
+
+[node name="CanvasLayer" type="CanvasLayer" groups=["viewport_autoload"]]
+pause_mode = 2
+layer = 127
+visible = false
+script = ExtResource( 1 )
+bonus_color = Color( 0.478431, 1, 0.47451, 1 )
+
+[node name="Box" type="TextureRect" parent="."]
+anchor_top = 1.0
+anchor_bottom = 1.0
+margin_top = -12.0
+margin_right = 58.0
+texture = SubResource( 1 )
+
+[node name="TimeCounter" type="Label" parent="Box"]
+modulate = Color( 0.478431, 1, 0.47451, 1 )
+margin_left = 1.0
+margin_top = 1.0
+margin_right = 57.0
+margin_bottom = 11.0
+theme = ExtResource( 3 )
+text = "00:00:00"
diff --git a/autoloads/stain_layer.gd b/autoloads/stain_layer.gd
new file mode 100644
index 0000000..5c701d9
--- /dev/null
+++ b/autoloads/stain_layer.gd
@@ -0,0 +1,27 @@
+extends Light2D
+
+
+onready var viewport: Viewport = $Viewport
+
+
+func _ready() -> void:
+ texture = viewport.get_texture()
+
+
+func _process(delta: float) -> void:
+ var main_viewport = get_viewport()
+ if viewport.canvas_transform != main_viewport.canvas_transform:
+ viewport.canvas_transform = main_viewport.canvas_transform
+ transform = main_viewport.canvas_transform.inverse()
+ viewport.render_target_update_mode = Viewport.UPDATE_ONCE
+
+
+func add_stain(stain: Node2D) -> void:
+ viewport.add_child(stain)
+ viewport.render_target_update_mode = Viewport.UPDATE_ONCE
+
+
+func reset() -> void:
+ for child in viewport.get_children():
+ child.queue_free()
+ viewport.render_target_update_mode = Viewport.UPDATE_ONCE
diff --git a/autoloads/stain_layer.tscn b/autoloads/stain_layer.tscn
new file mode 100644
index 0000000..238cbfa
--- /dev/null
+++ b/autoloads/stain_layer.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://autoloads/stain_layer.gd" type="Script" id=1]
+
+[node name="StainLight" type="Light2D" groups=["viewport_autoload"]]
+offset = Vector2( 128, 96 )
+mode = 2
+range_item_cull_mask = 2
+script = ExtResource( 1 )
+
+[node name="Viewport" type="Viewport" parent="."]
+size = Vector2( 256, 192 )
+transparent_bg = true
+disable_3d = true
+usage = 1
+render_target_v_flip = true
+render_target_update_mode = 1
diff --git a/autoloads/touch_controls.gd b/autoloads/touch_controls.gd
new file mode 100644
index 0000000..fa7d9e8
--- /dev/null
+++ b/autoloads/touch_controls.gd
@@ -0,0 +1,14 @@
+extends CanvasLayer
+
+export var opacity = 0.5
+
+func _ready():
+ if !OS.has_feature("mobile"):
+ visible = false
+ $CanvasModulate.color = Color(1.0, 1.0, 1.0, opacity)
+ _reposition()
+ get_tree().connect("screen_resized", self, "_reposition")
+
+func _reposition():
+ $Directions.position = Vector2(0.0, get_viewport().size.y)
+ $Actions.position = get_viewport().size
diff --git a/autoloads/touch_controls.tscn b/autoloads/touch_controls.tscn
new file mode 100644
index 0000000..fe115f9
--- /dev/null
+++ b/autoloads/touch_controls.tscn
@@ -0,0 +1,104 @@
+[gd_scene load_steps=17 format=2]
+
+[ext_resource path="res://autoloads/touch_controls.gd" type="Script" id=1]
+[ext_resource path="res://graphics/hud/touch/touch_left.png" type="Texture" id=2]
+[ext_resource path="res://graphics/hud/touch/touch_down_pressed.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/touch/touch_right_pressed.png" type="Texture" id=4]
+[ext_resource path="res://graphics/hud/touch/touch_up.png" type="Texture" id=5]
+[ext_resource path="res://graphics/hud/touch/touch_up_pressed.png" type="Texture" id=6]
+[ext_resource path="res://graphics/hud/touch/touch_left_pressed.png" type="Texture" id=7]
+[ext_resource path="res://graphics/hud/touch/touch_down.png" type="Texture" id=8]
+[ext_resource path="res://graphics/hud/touch/touch_right.png" type="Texture" id=9]
+[ext_resource path="res://graphics/hud/touch/touch_jump.png" type="Texture" id=10]
+[ext_resource path="res://graphics/hud/touch/touch_shoot.png" type="Texture" id=11]
+[ext_resource path="res://graphics/hud/touch/touch_jump_pressed.png" type="Texture" id=12]
+[ext_resource path="res://graphics/hud/touch/touch_shoot_pressed.png" type="Texture" id=13]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 40, 120 )
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 120, 40 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 40, 40 )
+
+[node name="TouchControls" type="CanvasLayer"]
+pause_mode = 2
+layer = 128
+script = ExtResource( 1 )
+
+[node name="CanvasModulate" type="CanvasModulate" parent="."]
+
+[node name="Directions" type="Node2D" parent="."]
+
+[node name="LeftButton" type="TouchScreenButton" parent="Directions"]
+position = Vector2( 0, -160 )
+normal = ExtResource( 2 )
+pressed = ExtResource( 7 )
+shape = SubResource( 1 )
+passby_press = true
+action = "ui_left"
+
+[node name="RightButton" type="TouchScreenButton" parent="Directions"]
+position = Vector2( 160, -160 )
+normal = ExtResource( 9 )
+pressed = ExtResource( 4 )
+shape = SubResource( 1 )
+passby_press = true
+action = "ui_right"
+
+[node name="UpButton" type="TouchScreenButton" parent="Directions"]
+position = Vector2( 80, -240 )
+normal = ExtResource( 5 )
+pressed = ExtResource( 6 )
+shape = SubResource( 2 )
+passby_press = true
+action = "ui_up"
+
+[node name="DownButton" type="TouchScreenButton" parent="Directions"]
+position = Vector2( 80, -80 )
+normal = ExtResource( 8 )
+pressed = ExtResource( 3 )
+shape = SubResource( 2 )
+passby_press = true
+action = "ui_down"
+
+[node name="Actions" type="Node2D" parent="."]
+
+[node name="JumpButton" type="TouchScreenButton" parent="Actions"]
+position = Vector2( -80, -120 )
+normal = ExtResource( 10 )
+pressed = ExtResource( 12 )
+shape = SubResource( 3 )
+passby_press = true
+action = "jump"
+
+[node name="AcceptButton" type="TouchScreenButton" parent="Actions"]
+position = Vector2( -80, -120 )
+shape = SubResource( 3 )
+passby_press = true
+action = "ui_accept"
+
+[node name="ShootButton" type="TouchScreenButton" parent="Actions"]
+position = Vector2( -200, -120 )
+normal = ExtResource( 11 )
+pressed = ExtResource( 13 )
+shape = SubResource( 3 )
+passby_press = true
+action = "shoot"
+
+[node name="CancelButton" type="TouchScreenButton" parent="Actions"]
+position = Vector2( -200, -120 )
+shape = SubResource( 3 )
+passby_press = true
+action = "ui_cancel"
+
+[node name="PauseButton" type="TouchScreenButton" parent="Actions"]
+position = Vector2( 0, -400 )
+rotation = 1.5708
+normal = ExtResource( 11 )
+pressed = ExtResource( 12 )
+shape = SubResource( 3 )
+passby_press = true
+action = "pause"
diff --git a/control.tscn b/control.tscn
deleted file mode 100644
index 767fd50..0000000
--- a/control.tscn
+++ /dev/null
@@ -1,63 +0,0 @@
-[gd_scene load_steps=7 format=2]
-
-[ext_resource path="res://scripts/scaling.gd" type="Script" id=1]
-[ext_resource path="res://graphics/borders/prideborder.png" type="Texture" id=2]
-[ext_resource path="res://maps/level_select.tscn" type="PackedScene" id=3]
-[ext_resource path="res://scripts/crt.gdshader" type="Shader" id=4]
-[ext_resource path="res://scripts/theme.tres" type="Theme" id=5]
-
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 4 )
-shader_param/enabled = false
-shader_param/resolution = Vector2( 256, 192 )
-shader_param/curvature = Vector2( 6, 6 )
-shader_param/scanline_opacity = Vector2( 0.4, 0.05 )
-shader_param/brightness = 1.25
-
-[node name="Control" type="Control"]
-pause_mode = 2
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_right = -16.0
-margin_bottom = -48.0
-rect_pivot_offset = Vector2( 128, 96 )
-size_flags_horizontal = 2
-size_flags_vertical = 2
-script = ExtResource( 1 )
-
-[node name="TextureRect" type="TextureRect" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-texture = ExtResource( 2 )
-expand = true
-
-[node name="ViewportContainer" type="ViewportContainer" parent="."]
-material = SubResource( 1 )
-anchor_left = 0.5
-anchor_top = 0.5
-anchor_right = 0.5
-anchor_bottom = 0.5
-margin_left = -120.0
-margin_top = -72.0
-margin_right = 136.0
-margin_bottom = 120.0
-rect_pivot_offset = Vector2( 128, 96 )
-
-[node name="Viewport" type="Viewport" parent="ViewportContainer"]
-size = Vector2( 256, 192 )
-handle_input_locally = false
-render_target_update_mode = 3
-
-[node name="LevelSelect" parent="ViewportContainer/Viewport" instance=ExtResource( 3 )]
-
-[node name="CheatLayer" type="CanvasLayer" parent="ViewportContainer/Viewport"]
-layer = 127
-
-[node name="CheatLabel" type="Label" parent="ViewportContainer/Viewport/CheatLayer"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_right = -1.0
-margin_bottom = -5.0
-theme = ExtResource( 5 )
-align = 2
-valign = 2
diff --git a/credits.txt b/credits.txt
index 4a6674d..66b51f7 100644
--- a/credits.txt
+++ b/credits.txt
@@ -1,3 +1,3 @@
Game by Penny Rigate
-Music by Ivy Snyder (https://ivysnyder.newgrounds.com/)
-Shaders and code help by Haze
\ No newline at end of file
+Music by Scarlett Sylvistrix (https://ivysnyder.newgrounds.com/)
+Shaders and code help by Haze
diff --git a/cutscenes/ending_future.tscn b/cutscenes/ending_future.tscn
new file mode 100644
index 0000000..33e099a
--- /dev/null
+++ b/cutscenes/ending_future.tscn
@@ -0,0 +1,204 @@
+[gd_scene load_steps=18 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://tilesets/t_grass.tres" type="TileSet" id=2]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=3]
+[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=4]
+[ext_resource path="res://graphics/backgrounds/hills.png" type="Texture" id=5]
+[ext_resource path="res://graphics/npc/msx_future.png" type="Texture" id=6]
+[ext_resource path="res://graphics/npc/speccy_future.png" type="Texture" id=7]
+[ext_resource path="res://graphics/npc/sg_future.png" type="Texture" id=8]
+[ext_resource path="res://graphics/ending/picnic_table.png" type="Texture" id=9]
+[ext_resource path="res://graphics/npc/sms.png" type="Texture" id=10]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=11]
+[ext_resource path="res://cutscenes/intro_story.gd" type="Script" id=12]
+[ext_resource path="res://graphics/ending/end.png" type="Texture" id=13]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/color_1 = Color( 0, 0, 0, 1 )
+shader_param/color_2 = Color( 0.486275, 0, 0, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 16, 0 )
+shader_param/cycle_speed = Vector2( 4, 4 )
+shader_param/cycle_alternation = Vector2( 4, 4 )
+shader_param/uv_transform = Transform2D( 0, 1, 1, 0, 0, 0 )
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 192 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "scroll"
+length = 67.0
+step = 0.25
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 50, 55 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 8, 200 ), Vector2( 8, -437.742 ), Vector2( 8, -437.742 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Static:modulate")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 50 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("White:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 57.75, 58, 58.25, 58.5, 58.75, 59, 59.25, 59.5, 59.75, 60, 60.25, 60.5, 60.75, 61, 61.25, 61.5, 61.75, 62, 62.25, 62.5, 62.75 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.95 ), Color( 1, 1, 1, 0.9 ), Color( 1, 1, 1, 0.85 ), Color( 1, 1, 1, 0.8 ), Color( 1, 1, 1, 0.75 ), Color( 1, 1, 1, 0.7 ), Color( 1, 1, 1, 0.65 ), Color( 1, 1, 1, 0.6 ), Color( 1, 1, 1, 0.55 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.45 ), Color( 1, 1, 1, 0.4 ), Color( 1, 1, 1, 0.35 ), Color( 1, 1, 1, 0.3 ), Color( 1, 1, 1, 0.25 ), Color( 1, 1, 1, 0.2 ), Color( 1, 1, 1, 0.15 ), Color( 1, 1, 1, 0.1 ), Color( 1, 1, 1, 0.05 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Label:modulate")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.75, 50, 50.25, 50.5, 50.75, 51, 51.25, 51.5, 51.75, 52, 52.25, 52.5, 52.75, 53, 53.25, 53.5, 53.75, 54, 54.25, 54.5, 54.75, 55 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.95 ), Color( 1, 1, 1, 0.9 ), Color( 1, 1, 1, 0.85 ), Color( 1, 1, 1, 0.8 ), Color( 1, 1, 1, 0.75 ), Color( 1, 1, 1, 0.7 ), Color( 1, 1, 1, 0.65 ), Color( 1, 1, 1, 0.6 ), Color( 1, 1, 1, 0.55 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.45 ), Color( 1, 1, 1, 0.4 ), Color( 1, 1, 1, 0.35 ), Color( 1, 1, 1, 0.3 ), Color( 1, 1, 1, 0.25 ), Color( 1, 1, 1, 0.2 ), Color( 1, 1, 1, 0.15 ), Color( 1, 1, 1, 0.1 ), Color( 1, 1, 1, 0.05 ), Color( 1, 1, 1, 0 ) ]
+}
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 4 )
+shader_param/animate_noise = true
+shader_param/noise_intensity = 6.0
+shader_param/fps = 12.0
+
+[node name="IntroStory" type="Node2D"]
+script = ExtResource( 12 )
+is_intro = false
+
+[node name="ColorRect" type="ColorRect" parent="."]
+visible = false
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "scroll"
+anims/RESET = SubResource( 2 )
+anims/scroll = SubResource( 3 )
+
+[node name="VoiceOver" type="AudioStreamPlayer" parent="."]
+
+[node name="TimeskipScene" type="Node2D" parent="."]
+z_index = -1
+
+[node name="Sprite" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 5 )
+
+[node name="TileMap" type="TileMap" parent="TimeskipScene"]
+tile_set = ExtResource( 2 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 1507327, 3, 1, 1441792, 3, 2, 1441793, 3, 2, 1441794, 3, 2, 1441795, 3, 2, 1441796, 3, 2, 1441797, 3, 2, 1441798, 3, 2, 1441799, 3, 2, 1441800, 3, 2, 1441801, 3, 2, 1441802, 3, 2, 1441803, 3, 2, 1441804, 3, 2, 1441805, 3, 2, 1441806, 3, 2, 1441807, 3, 2, 1441808, 3, 2, 1441809, 3, 2, 1441810, 3, 2, 1441811, 3, 2, 1441812, 3, 2, 1441813, 3, 2, 1441814, 3, 2, 1441815, 3, 2, 1441816, 3, 2, 1441817, 3, 2, 1441818, 3, 2, 1441819, 3, 2, 1441820, 3, 2, 1441821, 3, 2, 1441822, 3, 2, 1441823, 3, 2, 1441824, 3, 3, 1572863, 3, 65537, 1507328, 3, 65538, 1507329, 3, 65538, 1507330, 3, 65538, 1507331, 3, 65538, 1507332, 3, 65538, 1507333, 3, 65538, 1507334, 3, 65538, 1507335, 3, 65538, 1507336, 3, 65538, 1507337, 3, 65538, 1507338, 3, 65538, 1507339, 3, 65538, 1507340, 3, 65538, 1507341, 3, 65538, 1507342, 3, 65538, 1507343, 3, 65538, 1507344, 3, 65538, 1507345, 3, 65538, 1507346, 3, 65538, 1507347, 3, 65538, 1507348, 3, 65538, 1507349, 3, 65538, 1507350, 3, 65538, 1507351, 3, 65538, 1507352, 3, 65538, 1507353, 3, 65538, 1507354, 3, 65538, 1507355, 3, 65538, 1507356, 3, 65538, 1507357, 3, 65538, 1507358, 3, 65538, 1507359, 3, 65538, 1507360, 3, 65539, 1638399, 3, 131073, 1572864, 3, 131074, 1572865, 3, 131074, 1572866, 3, 131074, 1572867, 3, 131074, 1572868, 3, 131074, 1572869, 3, 131074, 1572870, 3, 131074, 1572871, 3, 131074, 1572872, 3, 131074, 1572873, 3, 131074, 1572874, 3, 131074, 1572875, 3, 131074, 1572876, 3, 131074, 1572877, 3, 131074, 1572878, 3, 131074, 1572879, 3, 131074, 1572880, 3, 131074, 1572881, 3, 131074, 1572882, 3, 131074, 1572883, 3, 131074, 1572884, 3, 131074, 1572885, 3, 131074, 1572886, 3, 131074, 1572887, 3, 131074, 1572888, 3, 131074, 1572889, 3, 131074, 1572890, 3, 131074, 1572891, 3, 131074, 1572892, 3, 131074, 1572893, 3, 131074, 1572894, 3, 131074, 1572895, 3, 131074, 1572896, 3, 131075 )
+
+[node name="SgFuture" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 96, 166 )
+texture = ExtResource( 8 )
+
+[node name="MsxFuture" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 161, 166 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 6 )
+
+[node name="SpeccyFuture" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 176, 164 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 7 )
+
+[node name="Sms" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 80, 164 )
+texture = ExtResource( 10 )
+
+[node name="PicnicTable" type="Sprite" parent="TimeskipScene"]
+position = Vector2( 128, 167 )
+texture = ExtResource( 9 )
+
+[node name="Sprite2" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+texture = ExtResource( 13 )
+
+[node name="White" type="ColorRect" parent="."]
+margin_right = 256.0
+margin_bottom = 192.0
+color = Color( 1, 0.952941, 0.933333, 1 )
+
+[node name="Static" type="ColorRect" parent="."]
+material = SubResource( 4 )
+margin_right = 256.0
+margin_bottom = 192.0
+color = Color( 0.662745, 0.8, 0.996078, 1 )
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 11 )
+margin_left = 8.0
+margin_top = 192.0
+margin_right = 248.0
+margin_bottom = 1294.0
+theme = ExtResource( 1 )
+text = "With Fami and all of the other corruptive forces of the world taken out, a new future is born.
+
+The Shards had
+turned Fami into Super Famira, one of the most powerful beings in the entire universe, a monster only bested by SG's
+heroic courage.
+
+SG and Speccy realized that kind of power should not be able to rest in the hands of anyone.
+The heroes plan to collect the shards again next year to find a way to get rid of them forever.
+
+The freedom fighters plan to create a new future in the ashes of old virginia.
+A world that doesn't revolve around money and power,
+where everyone works together to the best of their ability to support each other and share resources.
+It will take a lot of work to create this future, and it will take a lot of work to keep it running.
+
+
+
+
+
+Congratulations!
+You are a super player!!
+The future is bright thanks to you!!!
+Rest well until the time comes again!!!!
+
+
+"
+align = 1
+autowrap = true
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
diff --git a/cutscenes/ending_present.tscn b/cutscenes/ending_present.tscn
new file mode 100644
index 0000000..f980956
--- /dev/null
+++ b/cutscenes/ending_present.tscn
@@ -0,0 +1,92 @@
+[gd_scene load_steps=9 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=2]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=3]
+[ext_resource path="res://audio/sounds/intro_voiceover.ogg" type="AudioStream" id=4]
+[ext_resource path="res://cutscenes/intro_story.gd" type="Script" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/color_1 = Color( 0, 0, 0, 1 )
+shader_param/color_2 = Color( 0.486275, 0, 0, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 16, 0 )
+shader_param/cycle_speed = Vector2( 4, 4 )
+shader_param/cycle_alternation = Vector2( 4, 4 )
+shader_param/uv_transform = Transform2D( 0, 1, 1, 0, 0, 0 )
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 192 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "scroll"
+length = 80.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 80 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 8, 182 ), Vector2( 8, -528 ) ]
+}
+
+[node name="IntroStory" type="Node2D"]
+script = ExtResource( 5 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 2 )
+margin_left = 8.0
+margin_top = 192.0
+margin_right = 248.0
+margin_bottom = 722.0
+theme = ExtResource( 1 )
+text = "And so with Fami and all the other corruptive forces of the world taken out, a new future is born.
+
+The Shards had
+turned Fami into Famira, one of the most powerful beings in the entire universe, a monster only bested by SG's
+heroic courage.
+
+SG and the other freedom fighters realized that kind of power should not be able to rest in the hands of anyone,
+and so a year later, the heroes collected the shards again and sent them to planet x, never to be found again.
+
+SG and their friends plan to create a utopia where everyone shares resources and works together to support each other, a future without
+coercive hierarchies or money.
+
+ It will take a lot of work for this plan to come to fruition but it's easier now but with
+the capitalist order dismantled. It'll take the work of many people not only to establish this utopia, but to keep it alive.
+
+It's thanks to everyone that the world is saved, not only SG, but their friends as well, and you, the player!"
+align = 1
+autowrap = true
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "scroll"
+anims/RESET = SubResource( 2 )
+anims/scroll = SubResource( 3 )
+
+[node name="VoiceOver" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 4 )
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
diff --git a/cutscenes/fami_cutscene.gd b/cutscenes/fami_cutscene.gd
new file mode 100644
index 0000000..fb18afb
--- /dev/null
+++ b/cutscenes/fami_cutscene.gd
@@ -0,0 +1,59 @@
+extends Node2D
+
+signal cutscene_finished
+
+const DeathParticles = preload("res://objects/enemy/death_particles.tscn")
+
+export var cutscene_skip: float = 78.5
+
+onready var animation_player: AnimationPlayer = $AnimationPlayer
+
+func _init() -> void:
+ connect("cutscene_finished", self, "_on_cutscene_finished")
+ Game.can_restart = false
+
+func _on_cutscene_finished() -> void:
+ Audio.play_sound(Audio.a_fami_transform,Audio.ac_voice)
+
+func _physics_process(delta: float) -> void:
+ if animation_player.current_animation_position < cutscene_skip:
+ Game.can_pause = false
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("jump") and animation_player.current_animation_position < (cutscene_skip - Options.transition_speed_secs * 2.0):
+ skip_cutscene()
+ if event.is_action_pressed("debug_2"):
+ animation_player.seek(60)
+
+func skip_cutscene() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ animation_player.seek(cutscene_skip)
+ $Label.rect_position.y = -99999 # stupid 1.1 stuff
+ Fade.fade_in(Options.transition_speed_secs)
+
+func kill_cop() -> void:
+ var splatter := DeathParticles.instance()
+ splatter.global_position = $Cop.global_position
+ splatter.emitting = true
+ Audio.play_sound(Audio.a_copsquash,Audio.ac_land)
+ Audio.play_sound(Audio.a_copsquash2,Audio.ac_voice)
+ add_child(splatter)
+ $Cop.queue_free()
+
+func stop_music():
+ Audio.ac_music.playing = false
+
+func play_rumble_intro():
+ Audio.play_music(load("res://audio/music/rumble_revolution_intro.ogg"))
+
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ animation_player.playback_active = false
+ $FamiVoice.stream_paused = true
+ Audio.ac_music.stream_paused = true
+ NOTIFICATION_WM_FOCUS_IN:
+ animation_player.playback_active = true
+ $FamiVoice.stream_paused = false
+ Audio.ac_music.stream_paused = false
diff --git a/cutscenes/fami_cutscene.tscn b/cutscenes/fami_cutscene.tscn
new file mode 100644
index 0000000..14034bf
--- /dev/null
+++ b/cutscenes/fami_cutscene.tscn
@@ -0,0 +1,812 @@
+[gd_scene load_steps=47 format=2]
+
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=2]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
+[ext_resource path="res://scripts/sg_palette.gd" type="Script" id=5]
+[ext_resource path="res://graphics/player/sg.png" type="Texture" id=6]
+[ext_resource path="res://tilesets/t_station.tres" type="TileSet" id=7]
+[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=8]
+[ext_resource path="res://graphics/npc/fami_human.png" type="Texture" id=9]
+[ext_resource path="res://cutscenes/fami_cutscene.gd" type="Script" id=10]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=12]
+[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=13]
+[ext_resource path="res://graphics/enemy/cop/scope_walk.png" type="Texture" id=14]
+[ext_resource path="res://graphics/enemy/cop/scope_shoot.png" type="Texture" id=15]
+[ext_resource path="res://graphics/npc/fami_human_walk.png" type="Texture" id=16]
+[ext_resource path="res://graphics/npc/fami_human_punch.png" type="Texture" id=17]
+[ext_resource path="res://graphics/npc/fami_human_transform.png" type="Texture" id=18]
+[ext_resource path="res://objects/enemy/boss/fami_transform.material" type="Material" id=19]
+[ext_resource path="res://audio/sounds/absorb_shard.ogg" type="AudioStream" id=20]
+[ext_resource path="res://audio/sounds/shard_expel.ogg" type="AudioStream" id=21]
+[ext_resource path="res://audio/sounds/shard_float.ogg" type="AudioStream" id=22]
+[ext_resource path="res://audio/sounds/gun_cock.ogg" type="AudioStream" id=23]
+
+[sub_resource type="AtlasTexture" id=17]
+atlas = ExtResource( 18 )
+region = Rect2( 42, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=18]
+atlas = ExtResource( 18 )
+region = Rect2( 56, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=19]
+atlas = ExtResource( 18 )
+region = Rect2( 70, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=20]
+atlas = ExtResource( 18 )
+region = Rect2( 0, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=21]
+atlas = ExtResource( 18 )
+region = Rect2( 14, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=22]
+atlas = ExtResource( 18 )
+region = Rect2( 28, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 16 )
+region = Rect2( 0, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 16 )
+region = Rect2( 14, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 16 )
+region = Rect2( 28, 0, 14, 24 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 16 )
+region = Rect2( 42, 0, 14, 24 )
+
+[sub_resource type="SpriteFrames" id=7]
+animations = [ {
+"frames": [ ExtResource( 9 ) ],
+"loop": true,
+"name": "idle",
+"speed": 5.0
+}, {
+"frames": [ SubResource( 17 ), SubResource( 18 ), SubResource( 19 ) ],
+"loop": true,
+"name": "orb",
+"speed": 8.0
+}, {
+"frames": [ ExtResource( 17 ) ],
+"loop": true,
+"name": "punch",
+"speed": 5.0
+}, {
+"frames": [ SubResource( 20 ), SubResource( 21 ), SubResource( 22 ) ],
+"loop": false,
+"name": "shrink",
+"speed": 8.0
+}, {
+"frames": [ SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
+"loop": true,
+"name": "walk",
+"speed": 5.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 2 )
+
+[sub_resource type="Animation" id=16]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShardRain:emitting")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShardParticles:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("FamiVoice:playing")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("FamiHuman:material:shader_param/background_color")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("FamiHuman:material:shader_param/arc_color")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Label:text")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "" ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("FamiHuman:position")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 160, 167 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("SgIdle:frame_coords")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("SgIdle:flip_h")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("FamiHuman:animation")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "idle" ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Cop:position")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -8, 169 ) ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "cutscene"
+length = 100.0
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:text")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = false
+tracks/0/keys = {
+"times": PoolRealArray( 0, 4.5, 9.5, 13.5, 18.5, 22.5, 26.5, 30.5, 34.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 2,
+"values": [ "So you've made it this far... too bad your efforts are all in vain.", "You see, SG,
+I plan to use the shards to power my spaceship, its exhaust will be so powerful, you peasants will all be vaporized. ", "Me and all of the wonderful billionaires of the world will head to planet X, the newly discovered planet beyond pluto.", "You plan to hijack my wonderful future, eh? Whaddya kids call it? A revolution?", "Ha! I already started my own revolution in 2068.", "You know what they say, the freer the market, the freer the people! Ever since then, I never felt so free!", "You're such a fool. The perfect tool for the reconstruction of the Zircon Ultima.", "While you've been on your gay little adventure collecting shards I've been waiting for this very moment to take them all from you!", "Have at you!!!" ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("FamiVoice:playing")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.25, 96 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Cop:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.25, 76.5, 78 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -8, 169 ), Vector2( -8, 169 ), Vector2( 72, 169 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Cop:animation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 76.5, 78 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ "gun", "walk", "gun" ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("FamiHuman:animation")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0.25, 79, 81, 81.5, 87, 89, 93, 93.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ "idle", "walk", "idle", "punch", "walk", "idle", "shrink", "orb" ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("FamiHuman:position")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0.25, 79, 81, 87, 89, 93, 95, 96 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 105, 167 ), Vector2( 105, 167 ), Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 160, 83 ) ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("ShardParticles:emitting")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0.5, 82.8, 88 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("ShardRain:emitting")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0.25, 90, 93 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("FamiHuman:material:shader_param/background_color")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0.25, 92, 93 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 1 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("FamiHuman:material:shader_param/arc_color")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0.25, 92, 93 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 1 ) ]
+}
+tracks/10/type = "method"
+tracks/10/path = NodePath(".")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 96 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "cutscene_finished" ],
+"method": "emit_signal"
+} ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("ShardAbsorb:playing")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 90 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("ShardExpel:playing")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 82.8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("ShardFloat:playing")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 93.8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("SgIdle:frame_coords")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 2.6, 2.7, 2.8, 8, 8.1, 8.2, 12.4, 12.5, 13, 17.1092, 17.2092, 18.3092, 22.25, 24.25, 30.25, 30.5, 32.5, 40.25, 40.75, 41.25, 41.5, 48, 48.75, 49.25, 49.75, 50.25, 51, 51.5, 52, 52.5, 53.25, 53.75, 54.25, 54.75, 55.5, 56, 56.5, 57, 57.75, 58.25, 58.75, 60.75, 61.5, 62, 62.5, 63, 63.75, 64.25, 64.75, 65.25, 66, 66.5, 67, 67.5, 68.25, 68.75, 69.25, 69.75, 70.5, 71, 71.5, 72.25, 73, 73.5, 74, 74.5, 78, 78.15, 78.3, 78.45, 89.8, 90, 90.2, 90.3, 90.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03526, 1, 1, 1.03526, 1, 1.03526, 1, 1.03526, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 1, 12 ), Vector2( 0, 12 ), Vector2( 0, 0 ), Vector2( 1, 12 ), Vector2( 0, 12 ), Vector2( 0, 0 ), Vector2( 1, 12 ), Vector2( 0, 12 ), Vector2( 0, 0 ), Vector2( 1, 12 ), Vector2( 0, 12 ), Vector2( 0, 0 ), Vector2( 0, 19 ), Vector2( 0, 19 ), Vector2( 1, 12 ), Vector2( 0, 19 ), Vector2( 1, 12 ), Vector2( 0, 19 ), Vector2( 1, 12 ), Vector2( 0, 19 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 1, 18 ), Vector2( 2, 18 ), Vector2( 3, 18 ), Vector2( 0, 18 ), Vector2( 0, 17 ), Vector2( 0, 0 ), Vector2( 0, 16 ), Vector2( 0, 17 ), Vector2( 1, 12 ), Vector2( 0, 12 ), Vector2( 0, 12 ), Vector2( 0, 16 ), Vector2( 0, 0 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("SgIdle:flip_h")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 50.75, 78.45, 90.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ false, false, true, false ]
+}
+tracks/16/type = "method"
+tracks/16/path = NodePath(".")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 81.5, 82.8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"values": [ {
+"args": [ ],
+"method": "stop_music"
+}, {
+"args": [ ],
+"method": "play_rumble_intro"
+} ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("GunCock:playing")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( -0.1, 78 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Label:percent_visible")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = false
+tracks/18/keys = {
+"times": PoolRealArray( 0, 3, 4, 4.5, 8, 9, 9.5, 12, 13, 13.5, 17, 18, 18.5, 21, 22, 22.5, 25, 26, 26.5, 29, 30, 30.5, 33, 34, 34.5, 37 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0 ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Label:visible")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = false
+tracks/19/keys = {
+"times": PoolRealArray( 0, 4, 4.5, 9, 9.5, 13, 13.5, 18, 18.5, 22, 22.5, 26, 26.5, 30, 30.5, 34, 34.5, 39 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false ]
+}
+
+[sub_resource type="Animation" id=27]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShardRain:emitting")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShardParticles:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("FamiVoice:playing")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("FamiHuman:material:shader_param/background_color")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("FamiHuman:material:shader_param/arc_color")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Label:text")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "" ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("FamiHuman:position")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 160, 167 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("SgIdle:frame_coords")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("SgIdle:flip_h")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("FamiHuman:animation")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "idle" ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Cop:position")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -8, 169 ) ]
+}
+
+[sub_resource type="Animation" id=28]
+resource_name = "cutscene"
+length = 93.0
+step = 0.25
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:text")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 4.5, 9.5, 13.5, 18.5, 22.5, 26.5, 30.5, 34.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 2,
+"values": [ "So you've made it this far... too bad your efforts are all in vain.", "You see, SG,
+I plan to use the shards to power my spaceship, its exhaust will be so powerful, you peasants will all be vaporized. ", "Me and all of the wonderful billionaires of the world will head to planet X, the newly discovered planet beyond pluto.", "You plan to hijack my wonderful future, eh? Whaddya kids call it? A revolution?", "Ha! I already started my own revolution in 2068.", "You know what they say, the freer the market, the freer the people! Ever since then, I never felt so free!", "You're such a fool. The perfect tool for the reconstruction of the Zircon Ultima.", "While you've been on your gay little adventure collecting shards, I've been waiting for this very moment to take them all from you!", "Have at you!!!" ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Label:percent_visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 3, 4, 4.5, 8, 9, 9.5, 12, 13, 13.5, 17, 18, 18.5, 21, 22, 22.5, 25, 26, 26.5, 29, 30, 30.5, 33, 34, 34.5, 35.25 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Label:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 4, 4.5, 9, 9.5, 13, 13.5, 18, 18.5, 22, 22.5, 26, 26.5, 30, 30.5, 34, 34.5, 37 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false ]
+}
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 12 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=23]
+atlas = ExtResource( 14 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=24]
+atlas = ExtResource( 14 )
+region = Rect2( 20, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=25]
+atlas = ExtResource( 14 )
+region = Rect2( 40, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=26]
+atlas = ExtResource( 14 )
+region = Rect2( 60, 0, 20, 21 )
+
+[sub_resource type="SpriteFrames" id=13]
+animations = [ {
+"frames": [ ExtResource( 15 ) ],
+"loop": true,
+"name": "gun",
+"speed": 5.0
+}, {
+"frames": [ SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ) ],
+"loop": true,
+"name": "walk",
+"speed": 10.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=14]
+shader = ExtResource( 12 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="ShaderMaterial" id=15]
+shader = ExtResource( 12 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[node name="FamiCutscene" type="Node2D"]
+script = ExtResource( 10 )
+cutscene_skip = 78.75
+
+[node name="TileMap" type="TileMap" parent="."]
+tile_set = ExtResource( 7 )
+cell_size = Vector2( 8, 8 )
+format = 1
+
+[node name="TileMap" type="TileMap" parent="TileMap"]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 4 )
+margin_left = 16.0
+margin_top = 48.0
+margin_right = 240.0
+margin_bottom = 136.0
+theme = ExtResource( 3 )
+align = 1
+valign = 1
+autowrap = true
+percent_visible = 0.0
+
+[node name="FamiHuman" type="AnimatedSprite" parent="."]
+material = ExtResource( 19 )
+position = Vector2( 160, 167 )
+rotation = 3.14159
+scale = Vector2( 1, -1 )
+frames = SubResource( 7 )
+animation = "idle"
+playing = true
+
+[node name="SgIdle" type="Sprite" parent="."]
+material = SubResource( 1 )
+position = Vector2( 97, 163 )
+texture = ExtResource( 6 )
+hframes = 8
+vframes = 20
+script = ExtResource( 5 )
+
+[node name="FamiVoice" type="AudioStreamPlayer" parent="."]
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "cutscene"
+playback_process_mode = 0
+anims/RESET = SubResource( 16 )
+anims/cutscene = SubResource( 2 )
+
+[node name="labelanim" type="AnimationPlayer" parent="."]
+autoplay = "cutscene"
+playback_process_mode = 0
+playback_speed = 0.5
+anims/RESET = SubResource( 27 )
+anims/cutscene = SubResource( 28 )
+
+[node name="Cop" type="AnimatedSprite" parent="."]
+material = SubResource( 8 )
+position = Vector2( -8, 169 )
+frames = SubResource( 13 )
+animation = "gun"
+playing = true
+
+[node name="ShardParticles" type="CPUParticles2D" parent="."]
+material = SubResource( 14 )
+position = Vector2( 97, 160 )
+emitting = false
+amount = 72
+lifetime = 2.5
+texture = ExtResource( 13 )
+direction = Vector2( 0, -2 )
+gravity = Vector2( 0, 42 )
+initial_velocity = 250.0
+initial_velocity_random = 0.35
+linear_accel = -30.19
+
+[node name="ShardRain" type="CPUParticles2D" parent="."]
+material = SubResource( 15 )
+position = Vector2( 163, -4 )
+emitting = false
+amount = 72
+lifetime = 2.0
+texture = ExtResource( 13 )
+direction = Vector2( 0, 1 )
+initial_velocity = 18.0
+angular_velocity = 2.5
+
+[node name="ShardAbsorb" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 20 )
+volume_db = -10.0
+
+[node name="ShardFloat" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 22 )
+volume_db = -10.0
+
+[node name="ShardExpel" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 21 )
+volume_db = -10.0
+
+[node name="GunCock" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 23 )
+volume_db = -10.0
diff --git a/cutscenes/intro_story.gd b/cutscenes/intro_story.gd
new file mode 100644
index 0000000..c9b9c8c
--- /dev/null
+++ b/cutscenes/intro_story.gd
@@ -0,0 +1,41 @@
+extends Node2D
+
+export var is_intro = true
+
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ Audio.ac_music.set_volume_db(-13.5)
+ if is_intro:
+ Audio.play_music(load("res://audio/music/intro.ogg"))
+ else:
+ Audio.play_music(load("res://audio/music/empty_motel.ogg"))
+ $VoiceOver.play()
+
+func _input(event):
+ if Input.is_action_just_pressed("ui_accept") && is_intro:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ if is_intro:
+ SceneManager.current_scene = load("res://menus/level_select_scholar.tscn").instance()
+ else:
+ SceneManager.current_scene = load("res://menus/credits.tscn").instance()
+
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ $AnimationPlayer.playback_active = false
+ $VoiceOver.stream_paused = true
+ Audio.ac_music.stream_paused = true
+ NOTIFICATION_WM_FOCUS_IN:
+ $AnimationPlayer.playback_active = true
+ $VoiceOver.stream_paused = false
+ Audio.ac_music.stream_paused = false
+
+func _on_AnimationPlayer_animation_finished(anim_name):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ if is_intro:
+ SceneManager.current_scene = load("res://menus/level_select_scholar.tscn").instance()
+ else:
+ SceneManager.current_scene = load("res://menus/credits.tscn").instance()
diff --git a/cutscenes/intro_story.tscn b/cutscenes/intro_story.tscn
new file mode 100644
index 0000000..d1826f3
--- /dev/null
+++ b/cutscenes/intro_story.tscn
@@ -0,0 +1,88 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=2]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=3]
+[ext_resource path="res://cutscenes/intro_story.gd" type="Script" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/color_1 = Color( 0, 0, 0, 1 )
+shader_param/color_2 = Color( 0.1188, 0.1188, 0.22, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 16, 0 )
+shader_param/cycle_speed = Vector2( 4, 4 )
+shader_param/cycle_alternation = Vector2( 4, 4 )
+shader_param/uv_transform = Transform2D( 0, 1, 1, 0, 0, 0 )
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 192 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "scroll"
+length = 80.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 80 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 8, 198 ), Vector2( 8, -600 ) ]
+}
+
+[node name="IntroStory" type="Node2D"]
+script = ExtResource( 5 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 2 )
+margin_left = 8.0
+margin_top = 192.0
+margin_right = 248.0
+margin_bottom = 800.0
+theme = ExtResource( 1 )
+text = "The Year is 2083.
+All hope seems lost.
+
+What's left of America has become a horrible autocracy. A man named Fami has complete control over the government, and owns most companies in America, at a time where business is more important than it's ever been.
+
+Fami achieved his authority through the use of monstrous chimeras - creatures made from a combination of biological materials and AI cores known as \"artificial souls\".
+
+The technology responsible for such machines was developed by an egotistical man named Dr. Intelli. Intelli had given up on humanity long ago, he now wishes for the world to be run by machines.
+
+ Intelli also developed a space laser that can be powered by the shards of zircon ultima, a gem that can grant unlimited power. Fami used the laser to horribly alter the world, which scattered the shards across Virginia. Fami plans to use the shards again. the future looks bleak.
+
+SG, an assembly line worker at one of Intelli's factories, is fed up with their endless toil.
+After learning of Fami's plan from their best friend Speccy, they realize they need to take matters into their own hands. SG vows to change the future, they have made it their mission to keep the shards from Fami as well as bring an end to his reign.
+"
+align = 1
+autowrap = true
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "scroll"
+anims/RESET = SubResource( 2 )
+anims/scroll = SubResource( 3 )
+
+[node name="VoiceOver" type="AudioStreamPlayer" parent="."]
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
diff --git a/default_bus_layout.tres b/default_bus_layout.tres
new file mode 100644
index 0000000..0588eaf
--- /dev/null
+++ b/default_bus_layout.tres
@@ -0,0 +1,38 @@
+[gd_resource type="AudioBusLayout" load_steps=4 format=2]
+
+[sub_resource type="AudioEffectLowPassFilter" id=2]
+resource_name = "LowPassFilter"
+cutoff_hz = 1000.0
+
+[sub_resource type="AudioEffectReverb" id=3]
+resource_name = "Reverb"
+room_size = 0.11
+
+[sub_resource type="AudioEffectChorus" id=4]
+resource_name = "Chorus"
+
+[resource]
+bus/0/effect/0/effect = SubResource( 2 )
+bus/0/effect/0/enabled = false
+bus/0/effect/1/effect = SubResource( 3 )
+bus/0/effect/1/enabled = false
+bus/1/name = "music"
+bus/1/solo = false
+bus/1/mute = false
+bus/1/bypass_fx = false
+bus/1/volume_db = 0.0
+bus/1/send = "Master"
+bus/1/effect/0/effect = SubResource( 4 )
+bus/1/effect/0/enabled = false
+bus/2/name = "sound"
+bus/2/solo = false
+bus/2/mute = false
+bus/2/bypass_fx = false
+bus/2/volume_db = 0.0
+bus/2/send = "Master"
+bus/3/name = "shard"
+bus/3/solo = false
+bus/3/mute = false
+bus/3/bypass_fx = false
+bus/3/volume_db = 0.0
+bus/3/send = "sound"
diff --git a/export_presets.cfg b/export_presets.cfg
index 7a13acc..168510f 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -5,9 +5,9 @@ platform="Windows Desktop"
runnable=true
custom_features=""
export_filter="all_resources"
-include_filter=""
+include_filter="scoreboard_host.txt"
exclude_filter=""
-export_path="build/windows/Hero Mark 2.exe"
+export_path="build/windows/Revolution 2083.exe"
script_export_mode=1
script_encryption_key=""
@@ -16,7 +16,7 @@ script_encryption_key=""
custom_template/debug=""
custom_template/release=""
binary_format/64_bits=true
-binary_format/embed_pck=true
+binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
@@ -31,14 +31,15 @@ codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PoolStringArray( )
-application/modify_resources=false
-application/icon=""
-application/file_version=""
-application/product_version=""
-application/company_name=""
-application/product_name=""
-application/file_description=""
-application/copyright=""
+application/modify_resources=true
+application/icon="res://icon.ico"
+application/icon_interpolation=0
+application/file_version="1.1.0.0"
+application/product_version="1.1.0.0"
+application/company_name="Team SG"
+application/product_name="Revolution 2083"
+application/file_description="Change the future!"
+application/copyright="Team SG"
application/trademarks=""
[preset.1]
@@ -48,9 +49,9 @@ platform="Linux/X11"
runnable=true
custom_features=""
export_filter="all_resources"
-include_filter=""
+include_filter="scoreboard_host.txt"
exclude_filter=""
-export_path="build/linux/Hero Mark 2.x86_64"
+export_path="build/linux/Revolution 2083.x86_64"
script_export_mode=1
script_encryption_key=""
@@ -58,8 +59,8 @@ script_encryption_key=""
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=true
-binary_format/embed_pck=true
+binary_format/architecture="x86_64"
+binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
@@ -73,7 +74,7 @@ platform="HTML5"
runnable=true
custom_features=""
export_filter="all_resources"
-include_filter=""
+include_filter="scoreboard_host.txt"
exclude_filter=""
export_path="build/html5/index.html"
script_export_mode=1
@@ -100,3 +101,90 @@ progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color( 0, 0, 0, 1 )
+
+[preset.3]
+
+name="Mac OSX"
+platform="Mac OSX"
+runnable=true
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path="build/macos/Revolution 2083.zip"
+script_export_mode=1
+script_encryption_key=""
+
+[preset.3.options]
+
+export/distribution_type=1
+custom_template/debug=""
+custom_template/release=""
+application/name="Revolution 2083"
+application/icon="res://icon.png"
+application/icon_interpolation=4
+application/identifier="club.teamsg.hero-mark-2"
+application/signature=""
+application/app_category="Arcade-games"
+application/short_version="1.0"
+application/version="1.0"
+application/copyright=""
+application/min_macos_version="10.12"
+display/high_res=false
+xcode/platform_build="14C18"
+xcode/sdk_version="13.1"
+xcode/sdk_build="22C55"
+xcode/sdk_name="macosx13.1"
+xcode/xcode_version="1420"
+xcode/xcode_build="14C18"
+codesign/codesign=1
+codesign/installer_identity=""
+codesign/apple_team_id=""
+codesign/identity=""
+codesign/certificate_file=""
+codesign/certificate_password=""
+codesign/provisioning_profile=""
+codesign/entitlements/custom_file=""
+codesign/entitlements/allow_jit_code_execution=false
+codesign/entitlements/allow_unsigned_executable_memory=false
+codesign/entitlements/allow_dyld_environment_variables=false
+codesign/entitlements/disable_library_validation=false
+codesign/entitlements/audio_input=false
+codesign/entitlements/camera=false
+codesign/entitlements/location=false
+codesign/entitlements/address_book=false
+codesign/entitlements/calendars=false
+codesign/entitlements/photos_library=false
+codesign/entitlements/apple_events=false
+codesign/entitlements/debugging=false
+codesign/entitlements/app_sandbox/enabled=false
+codesign/entitlements/app_sandbox/network_server=false
+codesign/entitlements/app_sandbox/network_client=false
+codesign/entitlements/app_sandbox/device_usb=false
+codesign/entitlements/app_sandbox/device_bluetooth=false
+codesign/entitlements/app_sandbox/files_downloads=0
+codesign/entitlements/app_sandbox/files_pictures=0
+codesign/entitlements/app_sandbox/files_music=0
+codesign/entitlements/app_sandbox/files_movies=0
+codesign/entitlements/app_sandbox/files_user_selected=0
+codesign/custom_options=PoolStringArray( )
+notarization/notarization=0
+notarization/apple_id_name=""
+notarization/apple_id_password=""
+notarization/api_uuid=""
+notarization/api_key=""
+notarization/api_key_id=""
+privacy/microphone_usage_description=""
+privacy/camera_usage_description=""
+privacy/location_usage_description=""
+privacy/address_book_usage_description=""
+privacy/calendar_usage_description=""
+privacy/photos_library_usage_description=""
+privacy/desktop_folder_usage_description=""
+privacy/documents_folder_usage_description=""
+privacy/downloads_folder_usage_description=""
+privacy/network_volumes_usage_description=""
+privacy/removable_volumes_usage_description=""
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
diff --git a/fonts/2ndpuberty..fnt b/fonts/2ndpuberty..fnt
deleted file mode 100644
index 89d88e8..0000000
--- a/fonts/2ndpuberty..fnt
+++ /dev/null
@@ -1,102 +0,0 @@
-info face="2ndPubertyMono" size=16 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,2,1 spacing=-2,0
-common lineHeight=7 base=12 scaleW=512 scaleH=512 pages=1 packed=0
-page id=0 file="2ndpuberty..png"
-chars count=97
-char id=0 x=108 y=20 width=8 height=20 xoffset=0 yoffset=-1 xadvance=6 page=0 chnl=0
-char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
-char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=7 page=0 chnl=0
-char id=33 x=333 y=0 width=9 height=20 xoffset=2 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=34 x=324 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=35 x=63 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=36 x=18 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=37 x=36 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=38 x=81 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=39 x=360 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=40 x=405 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=41 x=414 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=42 x=99 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=43 x=45 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=44 x=378 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=45 x=27 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=46 x=369 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=47 x=486 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=48 x=315 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=49 x=234 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=50 x=243 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=51 x=252 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=52 x=261 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=53 x=270 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=54 x=279 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=55 x=288 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=56 x=297 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=57 x=306 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=58 x=396 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=59 x=387 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=60 x=459 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=61 x=54 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=62 x=468 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=63 x=351 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=64 x=495 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=65 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=66 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=67 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=68 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=69 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=70 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=71 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=72 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=73 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=74 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=75 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=76 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=77 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=78 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=79 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=80 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=81 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=82 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=83 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=84 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=85 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=86 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=87 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=88 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=89 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=90 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=91 x=423 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=92 x=0 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=93 x=432 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=94 x=9 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=95 x=72 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=96 x=342 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=97 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=98 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=99 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=100 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=101 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=102 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=103 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=104 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=105 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=106 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=107 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=108 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=109 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=110 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=111 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=112 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=113 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=114 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=115 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=116 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=117 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=118 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=119 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=120 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=121 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=122 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=123 x=441 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=124 x=477 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=125 x=450 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-char id=126 x=90 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
-kernings count=0
diff --git a/fonts/2ndpuberty..png b/fonts/2ndpuberty..png
deleted file mode 100644
index a0f793d..0000000
Binary files a/fonts/2ndpuberty..png and /dev/null differ
diff --git a/fonts/2ndpuberty..png.import b/fonts/2ndpuberty..png.import
deleted file mode 100644
index cb38b53..0000000
--- a/fonts/2ndpuberty..png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://fonts/2ndpuberty..png"
-dest_files=[ "res://.import/2ndpuberty..png-fcb093b956485853b52b89a083af493a.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/game.gd b/game.gd
deleted file mode 100644
index 2bd7bf5..0000000
--- a/game.gd
+++ /dev/null
@@ -1,155 +0,0 @@
-extends Node
-
-var resolution = Vector2(256,192)
-onready var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport")
-var current_sector = Vector2(0,0)
-var fullscreen = false
-#Onreadys
-onready var viewport_container = get_parent().get_node("Main/Control/ViewportContainer")
-#Collectibles
-var golds = 0
-var stars = [false,false,false,false,false]
-var shards = 0
-var arrows = 0
-var score = 0
-var high_score = 0
-var lives = 2
-var time = 0.0
-#Audio Channels
-onready var ac_jump = $JumpSound
-onready var ac_collectible = $CollecitbleSound
-onready var ac_climb = $ClimbSound
-onready var ac_die = $DieSound
-onready var ac_music = $Music
-onready var ac_cheat = $CodeEntrySound
-#Sounds
-const a_gold = preload("res://audio/sounds/gold.wav")
-const a_arrow = preload("res://audio/sounds/a_egg_collect.ogg")
-const a_jump = preload("res://audio/sounds/jump.ogg")
-const a_star = preload("res://audio/sounds/a_jinjo.ogg")
-const a_shard = preload("res://audio/sounds/shard.wav")
-const a_climb_up = preload("res://audio/sounds/a_climb.ogg")
-const a_climb_down = preload("res://audio/sounds/a_bmilc.ogg")
-const a_sword = preload("res://audio/sounds/sword.ogg")
-const a_doublejump = preload("res://audio/sounds/a_bree.wav")
-const a_shoot = preload("res://audio/sounds/a_egg_shoot.ogg")
-const a_die = preload("res://audio/sounds/die.wav")
-const a_die_skeleton = preload("res://audio/sounds/die_skeleton.wav")
-const a_gover = preload("res://audio/sounds/gover.wav")
-#Objects
-const block_text = preload("res://objects/hud/blocktext.tscn")
-const pause_screen = preload("res://objects/hud/pause_screen.tscn")
-var respawn_point = Vector2(32,166) #Respawn point
-var current_level = 0 #Current level being played
-var current_file = 1 #Current save file
-var shards_collected = [false,false,false,false,false,false,false,false,false,false]
-
-func _ready():
- Save.load_file(current_file)
-
-#Instances a node
-func instance_node(node:PackedScene,x:float,y:float,parent):
- var Instance = node.instance()
- Instance.global_position = Vector2(x,y)
- parent.add_child(Instance)
-
-#Plays a sound
-func play_sound(snd,player):
- player.set_stream(snd)
- player._set_playing(true)
-
-#Get position in sectors
-func get_sector(pos):
- return (pos / resolution).floor()
-
-#Return the current Map
-func get_map():
- return get_tree().get_nodes_in_group("map")[0]
-
-#Go to new map
-func change_map(map):
- shards_collected = [false,false,false,false,false,false,false,false,false,false]
- get_map().queue_free()
- instance_node(map,0,0,viewport)
-
-#Clear data
-func clear_collectibles():
- Game.score = 0
- Game.golds = 0
- Game.stars = [false,false,false,false,false]
- Game.shards = 0
- Game.arrows = 0
- Game.lives = 2
-
-#Save
-func save():
- var save_id = LevelData.levels[current_level].save_id
- var save_data = Save.get_level_data(save_id)
- var is_100 = shards >= 5 && golds >= 50
- # set score and time depending on completion
- if score > save_data["score_100" if is_100 else "score_any"]:
- Save.set_score(save_id, score, is_100)
- if time < save_data["time_100" if is_100 else "time_any"]:
- Save.set_time(save_id, time, is_100)
- # set shards
- for i in 8:
- if shards_collected[i]:
- Save.set_shard_collected(save_id, i, true)
- # save file
- Save.save_file(current_file)
-
-#Convert seconds into M:SS:MS
-func timeify(input):
- if input < 600:
- var minutes = str(floor(input / 60))
- var seconds = floor(fmod(input,60))
- var milliseconds := floor(fmod(input, 1) * 100)
- return minutes + ":" + ("%02d" % seconds) + ":" + ("%02d" % milliseconds)
- elif input == INF:
- return "-:--:--"
- else:
- return "9:59:99"
-
-#Restart level
-func restart_level():
- if Game.score > Game.high_score: Game.high_score = Game.score
- Game.score = 0
- Game.golds = 0
- Game.stars = [false,false,false,false,false]
- Game.shards = 0
- Game.arrows = 0
- Game.lives = 2
- Game.ac_climb.stop()
- Game.ac_die.stop()
- Engine.time_scale = 1.0
- for tween in get_tree().get_processed_tweens():
- tween.kill()
- Game.change_map(load(Game.get_map().filename))
-
-#Freeze frame
-func freeze_frame(time):
- get_tree().paused = true
- var timer = get_tree().create_timer(time, true)
- timer.connect("timeout", get_tree(), "set_pause", [false])
- return timer
-
-#Check if 100%ed
-func has_collection_bonus():
- return Game.shards == 5 && Game.golds == 50
-
-func _process(delta):
- if Debug.entry == false:
- #CRT FILTER
- if Input.is_action_just_pressed("crt"):
- viewport_container.material.set_shader_param("enabled",!viewport_container.material.get_shader_param("enabled"))
- #Fullscreen
- if Input.is_action_just_pressed("fullscreen"):
- fullscreen = !fullscreen
- if fullscreen:
- OS.set_window_fullscreen(true)
- else:
- OS.set_window_fullscreen(false)
- #Pause
- if Input.is_action_just_pressed("pause"):
- var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport")
- instance_node(pause_screen,0,0,viewport)
diff --git a/game.tscn b/game.tscn
deleted file mode 100644
index da0cea6..0000000
--- a/game.tscn
+++ /dev/null
@@ -1,25 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://game.gd" type="Script" id=1]
-
-[node name="Game" type="Node"]
-pause_mode = 2
-script = ExtResource( 1 )
-
-[node name="CollecitbleSound" type="AudioStreamPlayer" parent="."]
-volume_db = -8.0
-
-[node name="JumpSound" type="AudioStreamPlayer" parent="."]
-volume_db = -12.0
-
-[node name="ClimbSound" type="AudioStreamPlayer" parent="."]
-volume_db = -12.0
-
-[node name="Music" type="AudioStreamPlayer" parent="."]
-volume_db = -13.5
-
-[node name="DieSound" type="AudioStreamPlayer" parent="."]
-volume_db = -12.0
-
-[node name="CodeEntrySound" type="AudioStreamPlayer" parent="."]
-volume_db = -12.0
diff --git a/global_palette.png b/global_palette.png
index 8a44fb0..a77b625 100644
Binary files a/global_palette.png and b/global_palette.png differ
diff --git a/graphics/backgrounds/abyss.png b/graphics/backgrounds/abyss.png
new file mode 100644
index 0000000..21ccf85
Binary files /dev/null and b/graphics/backgrounds/abyss.png differ
diff --git a/graphics/backgrounds/abyss.png.import b/graphics/backgrounds/abyss.png.import
new file mode 100644
index 0000000..c78c57a
--- /dev/null
+++ b/graphics/backgrounds/abyss.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/abyss.png-ce2d2c9a469b6a1269abd6a6791bd5a0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/abyss.png"
+dest_files=[ "res://.import/abyss.png-ce2d2c9a469b6a1269abd6a6791bd5a0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/canopy.png b/graphics/backgrounds/canopy.png
index 01e90dc..b03152c 100644
Binary files a/graphics/backgrounds/canopy.png and b/graphics/backgrounds/canopy.png differ
diff --git a/graphics/backgrounds/cave_scholar.png b/graphics/backgrounds/cave_scholar.png
new file mode 100644
index 0000000..3606543
Binary files /dev/null and b/graphics/backgrounds/cave_scholar.png differ
diff --git a/graphics/backgrounds/cave_scholar.png.import b/graphics/backgrounds/cave_scholar.png.import
new file mode 100644
index 0000000..0bc1e56
--- /dev/null
+++ b/graphics/backgrounds/cave_scholar.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cave_scholar.png-5daab0741db98d8c70cedb3ef3dbd7f3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/cave_scholar.png"
+dest_files=[ "res://.import/cave_scholar.png-5daab0741db98d8c70cedb3ef3dbd7f3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/copper.png b/graphics/backgrounds/copper.png
deleted file mode 100644
index 6d5e292..0000000
Binary files a/graphics/backgrounds/copper.png and /dev/null differ
diff --git a/graphics/backgrounds/fami_rooftop.png b/graphics/backgrounds/fami_rooftop.png
new file mode 100644
index 0000000..df5c30d
Binary files /dev/null and b/graphics/backgrounds/fami_rooftop.png differ
diff --git a/graphics/backgrounds/fami_rooftop.png.import b/graphics/backgrounds/fami_rooftop.png.import
new file mode 100644
index 0000000..e84fc9e
--- /dev/null
+++ b/graphics/backgrounds/fami_rooftop.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_rooftop.png-ff77cafa929ebb12585d1acfffe83fe2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/fami_rooftop.png"
+dest_files=[ "res://.import/fami_rooftop.png-ff77cafa929ebb12585d1acfffe83fe2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/fire.png b/graphics/backgrounds/fire.png
new file mode 100644
index 0000000..e3e70ce
Binary files /dev/null and b/graphics/backgrounds/fire.png differ
diff --git a/graphics/backgrounds/fire.png.import b/graphics/backgrounds/fire.png.import
new file mode 100644
index 0000000..216239a
--- /dev/null
+++ b/graphics/backgrounds/fire.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fire.png-1a6113db082c73e88b91aa92d46ef1c6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/fire.png"
+dest_files=[ "res://.import/fire.png-1a6113db082c73e88b91aa92d46ef1c6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/hills.png b/graphics/backgrounds/hills.png
new file mode 100644
index 0000000..8e19ea6
Binary files /dev/null and b/graphics/backgrounds/hills.png differ
diff --git a/graphics/backgrounds/hills.png.import b/graphics/backgrounds/hills.png.import
new file mode 100644
index 0000000..36f3fea
--- /dev/null
+++ b/graphics/backgrounds/hills.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hills.png-7dec5898237d30f7e14a64e4fdf326a3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/hills.png"
+dest_files=[ "res://.import/hills.png-7dec5898237d30f7e14a64e4fdf326a3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/moon.png b/graphics/backgrounds/moon.png
new file mode 100644
index 0000000..19e9e27
Binary files /dev/null and b/graphics/backgrounds/moon.png differ
diff --git a/graphics/backgrounds/moon.png.import b/graphics/backgrounds/moon.png.import
new file mode 100644
index 0000000..c3f3f99
--- /dev/null
+++ b/graphics/backgrounds/moon.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/moon.png-0d02dd6dd46a32e59657bae322ccdfab.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/moon.png"
+dest_files=[ "res://.import/moon.png-0d02dd6dd46a32e59657bae322ccdfab.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/mountain_clouds.png b/graphics/backgrounds/mountain_clouds.png
new file mode 100644
index 0000000..960e1fd
Binary files /dev/null and b/graphics/backgrounds/mountain_clouds.png differ
diff --git a/graphics/backgrounds/mountain_clouds.png.import b/graphics/backgrounds/mountain_clouds.png.import
new file mode 100644
index 0000000..5634b60
--- /dev/null
+++ b/graphics/backgrounds/mountain_clouds.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mountain_clouds.png-3cce20d1c8d3fb4da0e01c4ef2883a5a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/mountain_clouds.png"
+dest_files=[ "res://.import/mountain_clouds.png-3cce20d1c8d3fb4da0e01c4ef2883a5a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/mountain_mountain.png b/graphics/backgrounds/mountain_mountain.png
new file mode 100644
index 0000000..a499e95
Binary files /dev/null and b/graphics/backgrounds/mountain_mountain.png differ
diff --git a/graphics/backgrounds/mountain_mountain.png.import b/graphics/backgrounds/mountain_mountain.png.import
new file mode 100644
index 0000000..6aeb5b6
--- /dev/null
+++ b/graphics/backgrounds/mountain_mountain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mountain_mountain.png-b60ccc0e1dc2cad7e5e0f9b0989a8e90.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/mountain_mountain.png"
+dest_files=[ "res://.import/mountain_mountain.png-b60ccc0e1dc2cad7e5e0f9b0989a8e90.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/mountain_sunset.png b/graphics/backgrounds/mountain_sunset.png
new file mode 100644
index 0000000..a77e70f
Binary files /dev/null and b/graphics/backgrounds/mountain_sunset.png differ
diff --git a/graphics/backgrounds/mountain_sunset.png.import b/graphics/backgrounds/mountain_sunset.png.import
new file mode 100644
index 0000000..c6681c1
--- /dev/null
+++ b/graphics/backgrounds/mountain_sunset.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mountain_sunset.png-519fb714951bd75c9584558d94d5d245.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/mountain_sunset.png"
+dest_files=[ "res://.import/mountain_sunset.png-519fb714951bd75c9584558d94d5d245.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/night.png b/graphics/backgrounds/night.png
new file mode 100644
index 0000000..3e693d4
Binary files /dev/null and b/graphics/backgrounds/night.png differ
diff --git a/graphics/backgrounds/night.png.import b/graphics/backgrounds/night.png.import
new file mode 100644
index 0000000..eb93c10
--- /dev/null
+++ b/graphics/backgrounds/night.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/night.png-bd14659ad4c7859075ba2714ac2dbbf2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/night.png"
+dest_files=[ "res://.import/night.png-bd14659ad4c7859075ba2714ac2dbbf2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/rust.png b/graphics/backgrounds/rust.png
new file mode 100644
index 0000000..f89d54f
Binary files /dev/null and b/graphics/backgrounds/rust.png differ
diff --git a/graphics/backgrounds/rust.png.import b/graphics/backgrounds/rust.png.import
new file mode 100644
index 0000000..200a66e
--- /dev/null
+++ b/graphics/backgrounds/rust.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/rust.png-c1bb23404b8fb1787806ee30f87af3d9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/rust.png"
+dest_files=[ "res://.import/rust.png-c1bb23404b8fb1787806ee30f87af3d9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/steel.png b/graphics/backgrounds/steel.png
new file mode 100644
index 0000000..8a5ccc5
Binary files /dev/null and b/graphics/backgrounds/steel.png differ
diff --git a/graphics/backgrounds/steel.png.import b/graphics/backgrounds/steel.png.import
new file mode 100644
index 0000000..3b01f07
--- /dev/null
+++ b/graphics/backgrounds/steel.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/steel.png-2632ac587d41da64a1aa822cf3846761.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/steel.png"
+dest_files=[ "res://.import/steel.png-2632ac587d41da64a1aa822cf3846761.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/backgrounds/sun_and_clouds.png b/graphics/backgrounds/sun_and_clouds.png
new file mode 100644
index 0000000..9c87617
Binary files /dev/null and b/graphics/backgrounds/sun_and_clouds.png differ
diff --git a/graphics/backgrounds/sun_and_clouds.png.import b/graphics/backgrounds/sun_and_clouds.png.import
new file mode 100644
index 0000000..9b85afc
--- /dev/null
+++ b/graphics/backgrounds/sun_and_clouds.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sun_and_clouds.png-c34ae0c7398c0c962738b6b195e403ec.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/backgrounds/sun_and_clouds.png"
+dest_files=[ "res://.import/sun_and_clouds.png-c34ae0c7398c0c962738b6b195e403ec.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/barrier/barrier_2px.png b/graphics/barrier/barrier_2px.png
index dd12d47..4f78446 100644
Binary files a/graphics/barrier/barrier_2px.png and b/graphics/barrier/barrier_2px.png differ
diff --git a/graphics/barrier/jail_bars.png b/graphics/barrier/jail_bars.png
new file mode 100644
index 0000000..79a192a
Binary files /dev/null and b/graphics/barrier/jail_bars.png differ
diff --git a/graphics/barrier/jail_bars.png.import b/graphics/barrier/jail_bars.png.import
new file mode 100644
index 0000000..d27ac93
--- /dev/null
+++ b/graphics/barrier/jail_bars.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/jail_bars.png-c12552d9db5ac1abb4b86393a6ffd9c8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/barrier/jail_bars.png"
+dest_files=[ "res://.import/jail_bars.png-c12552d9db5ac1abb4b86393a6ffd9c8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/black_bars.png b/graphics/borders/black_bars.png
new file mode 100644
index 0000000..81c8075
Binary files /dev/null and b/graphics/borders/black_bars.png differ
diff --git a/graphics/borders/black_bars.png.import b/graphics/borders/black_bars.png.import
new file mode 100644
index 0000000..d1976be
--- /dev/null
+++ b/graphics/borders/black_bars.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/black_bars.png-f561832c992d95eedd150193b627c9d7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/black_bars.png"
+dest_files=[ "res://.import/black_bars.png-f561832c992d95eedd150193b627c9d7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/bodhi_sg_border.png b/graphics/borders/bodhi_sg_border.png
new file mode 100644
index 0000000..81cb40c
Binary files /dev/null and b/graphics/borders/bodhi_sg_border.png differ
diff --git a/graphics/borders/bodhi_sg_border.png.import b/graphics/borders/bodhi_sg_border.png.import
new file mode 100644
index 0000000..d81a1af
--- /dev/null
+++ b/graphics/borders/bodhi_sg_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bodhi_sg_border.png-3cf24d7237511d5ab9d451ff57338378.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/bodhi_sg_border.png"
+dest_files=[ "res://.import/bodhi_sg_border.png-3cf24d7237511d5ab9d451ff57338378.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/copper.png b/graphics/borders/copper.png
new file mode 100644
index 0000000..6225b09
Binary files /dev/null and b/graphics/borders/copper.png differ
diff --git a/graphics/borders/copper.png.import b/graphics/borders/copper.png.import
new file mode 100644
index 0000000..42c3eac
--- /dev/null
+++ b/graphics/borders/copper.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/copper.png-0b0131ce9b9cbaf1a35bcfe5384044a4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/copper.png"
+dest_files=[ "res://.import/copper.png-0b0131ce9b9cbaf1a35bcfe5384044a4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/enby_border.png b/graphics/borders/enby_border.png
new file mode 100644
index 0000000..ed3cc67
Binary files /dev/null and b/graphics/borders/enby_border.png differ
diff --git a/graphics/borders/enby_border.png.import b/graphics/borders/enby_border.png.import
new file mode 100644
index 0000000..bed31eb
--- /dev/null
+++ b/graphics/borders/enby_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/enby_border.png-8fe8ce46d94d5a239271b744697eea68.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/enby_border.png"
+dest_files=[ "res://.import/enby_border.png-8fe8ce46d94d5a239271b744697eea68.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/endless_revolution.png b/graphics/borders/endless_revolution.png
new file mode 100644
index 0000000..347d4e5
Binary files /dev/null and b/graphics/borders/endless_revolution.png differ
diff --git a/graphics/borders/endless_revolution.png.import b/graphics/borders/endless_revolution.png.import
new file mode 100644
index 0000000..00283ba
--- /dev/null
+++ b/graphics/borders/endless_revolution.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/endless_revolution.png-1d89aea8ca43103d7e9475b87f235435.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/endless_revolution.png"
+dest_files=[ "res://.import/endless_revolution.png-1d89aea8ca43103d7e9475b87f235435.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/infiltration.png b/graphics/borders/infiltration.png
new file mode 100644
index 0000000..8aeb0e0
Binary files /dev/null and b/graphics/borders/infiltration.png differ
diff --git a/graphics/borders/infiltration.png.import b/graphics/borders/infiltration.png.import
new file mode 100644
index 0000000..35c50ce
--- /dev/null
+++ b/graphics/borders/infiltration.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/infiltration.png-1da7899a792593280d7179886ee709d9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/infiltration.png"
+dest_files=[ "res://.import/infiltration.png-1da7899a792593280d7179886ee709d9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/mosaic.png b/graphics/borders/mosaic.png
new file mode 100644
index 0000000..401608f
Binary files /dev/null and b/graphics/borders/mosaic.png differ
diff --git a/graphics/borders/mosaic.png.import b/graphics/borders/mosaic.png.import
new file mode 100644
index 0000000..b526f26
--- /dev/null
+++ b/graphics/borders/mosaic.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mosaic.png-86087188dc497a73b24f23cbfd665f80.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/mosaic.png"
+dest_files=[ "res://.import/mosaic.png-86087188dc497a73b24f23cbfd665f80.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/prideborder.png b/graphics/borders/prideborder.png
index c4f969a..f0d47c9 100644
Binary files a/graphics/borders/prideborder.png and b/graphics/borders/prideborder.png differ
diff --git a/graphics/borders/revolution_border.png b/graphics/borders/revolution_border.png
new file mode 100644
index 0000000..a16611f
Binary files /dev/null and b/graphics/borders/revolution_border.png differ
diff --git a/graphics/borders/revolution_border.png.import b/graphics/borders/revolution_border.png.import
new file mode 100644
index 0000000..fe9b5b4
--- /dev/null
+++ b/graphics/borders/revolution_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/revolution_border.png-26cfcbd3fd4a8ff51b1e7e479b7e793b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/revolution_border.png"
+dest_files=[ "res://.import/revolution_border.png-26cfcbd3fd4a8ff51b1e7e479b7e793b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/skaborder.png b/graphics/borders/skaborder.png
new file mode 100644
index 0000000..9869734
Binary files /dev/null and b/graphics/borders/skaborder.png differ
diff --git a/graphics/borders/skaborder.png.import b/graphics/borders/skaborder.png.import
new file mode 100644
index 0000000..e1ae3a3
--- /dev/null
+++ b/graphics/borders/skaborder.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/skaborder.png-b93f5de83ccf5fbcedd55382465c1432.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/skaborder.png"
+dest_files=[ "res://.import/skaborder.png-b93f5de83ccf5fbcedd55382465c1432.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/static.png b/graphics/borders/static.png
new file mode 100644
index 0000000..a1d080c
Binary files /dev/null and b/graphics/borders/static.png differ
diff --git a/graphics/borders/static.png.import b/graphics/borders/static.png.import
new file mode 100644
index 0000000..1cd472c
--- /dev/null
+++ b/graphics/borders/static.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/static.png-bfbd6ab638837af161325225ae0ecc38.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/static.png"
+dest_files=[ "res://.import/static.png-bfbd6ab638837af161325225ae0ecc38.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/borders/the_gays_border.png b/graphics/borders/the_gays_border.png
new file mode 100644
index 0000000..01caafd
Binary files /dev/null and b/graphics/borders/the_gays_border.png differ
diff --git a/graphics/borders/the_gays_border.png.import b/graphics/borders/the_gays_border.png.import
new file mode 100644
index 0000000..358a16e
--- /dev/null
+++ b/graphics/borders/the_gays_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/the_gays_border.png-ce1ce710b5bf4d5182ecdd13d7a17fb5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/borders/the_gays_border.png"
+dest_files=[ "res://.import/the_gays_border.png-ce1ce710b5bf4d5182ecdd13d7a17fb5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/collectibles/30385.png b/graphics/collectibles/30385.png
index 173f2d1..1b0793f 100644
Binary files a/graphics/collectibles/30385.png and b/graphics/collectibles/30385.png differ
diff --git a/graphics/collectibles/key.png b/graphics/collectibles/key.png
new file mode 100644
index 0000000..4d4e600
Binary files /dev/null and b/graphics/collectibles/key.png differ
diff --git a/graphics/collectibles/key.png.import b/graphics/collectibles/key.png.import
new file mode 100644
index 0000000..d3ff0a2
--- /dev/null
+++ b/graphics/collectibles/key.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/key.png-224908b8fd999e59db3c3688c6a274a1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/collectibles/key.png"
+dest_files=[ "res://.import/key.png-224908b8fd999e59db3c3688c6a274a1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/collectibles/pal_dime.png b/graphics/collectibles/pal_dime.png
deleted file mode 100644
index 7aeee27..0000000
Binary files a/graphics/collectibles/pal_dime.png and /dev/null differ
diff --git a/graphics/collectibles/pal_dime.png.import b/graphics/collectibles/pal_dime.png.import
deleted file mode 100644
index e7c08f8..0000000
--- a/graphics/collectibles/pal_dime.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/collectibles/pal_dime.png"
-dest_files=[ "res://.import/pal_dime.png-c3cfda8a4b0f7f1e34b94571af5f2aff.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/collectibles/pal_penny.png b/graphics/collectibles/pal_gold.png
similarity index 100%
rename from graphics/collectibles/pal_penny.png
rename to graphics/collectibles/pal_gold.png
diff --git a/graphics/collectibles/pal_gold.png.import b/graphics/collectibles/pal_gold.png.import
new file mode 100644
index 0000000..2af4935
--- /dev/null
+++ b/graphics/collectibles/pal_gold.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/pal_gold.png-1d32510fd65533e51861efb83f404009.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/collectibles/pal_gold.png"
+dest_files=[ "res://.import/pal_gold.png-1d32510fd65533e51861efb83f404009.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/collectibles/pal_nickel.png b/graphics/collectibles/pal_nickel.png
deleted file mode 100644
index faa2eb5..0000000
Binary files a/graphics/collectibles/pal_nickel.png and /dev/null differ
diff --git a/graphics/collectibles/pal_nickel.png.import b/graphics/collectibles/pal_nickel.png.import
deleted file mode 100644
index 076b052..0000000
--- a/graphics/collectibles/pal_nickel.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/collectibles/pal_nickel.png"
-dest_files=[ "res://.import/pal_nickel.png-3d18346d4db1a8718745e6c08c14cc43.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/collectibles/pal_penny.png.import b/graphics/collectibles/pal_penny.png.import
deleted file mode 100644
index 69c6643..0000000
--- a/graphics/collectibles/pal_penny.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/collectibles/pal_penny.png"
-dest_files=[ "res://.import/pal_penny.png-2878f646b27e25b7bf3c37aa3de7b04b.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/collectibles/shard.png b/graphics/collectibles/shard.png
index fb1b4d3..4c2e263 100644
Binary files a/graphics/collectibles/shard.png and b/graphics/collectibles/shard.png differ
diff --git a/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png b/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png
new file mode 100644
index 0000000..6691630
Binary files /dev/null and b/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png differ
diff --git a/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png.import b/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png.import
new file mode 100644
index 0000000..09fd899
--- /dev/null
+++ b/graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arrow_sign.png-da6d10e9dfa32f0e569a1e5af2b395d9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png"
+dest_files=[ "res://.import/arrow_sign.png-da6d10e9dfa32f0e569a1e5af2b395d9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/ending/end.png b/graphics/ending/end.png
new file mode 100644
index 0000000..40680a4
Binary files /dev/null and b/graphics/ending/end.png differ
diff --git a/graphics/ending/end.png.import b/graphics/ending/end.png.import
new file mode 100644
index 0000000..0c89972
--- /dev/null
+++ b/graphics/ending/end.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/end.png-086a46f85042ae90dc3a1e18c99813d0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/ending/end.png"
+dest_files=[ "res://.import/end.png-086a46f85042ae90dc3a1e18c99813d0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/ending/end_egg.png b/graphics/ending/end_egg.png
new file mode 100644
index 0000000..4526c02
Binary files /dev/null and b/graphics/ending/end_egg.png differ
diff --git a/graphics/ending/end_egg.png.import b/graphics/ending/end_egg.png.import
new file mode 100644
index 0000000..a6387ff
--- /dev/null
+++ b/graphics/ending/end_egg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/end_egg.png-2074c63941c3a4ac7552b725f3fe0e89.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/ending/end_egg.png"
+dest_files=[ "res://.import/end_egg.png-2074c63941c3a4ac7552b725f3fe0e89.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/ending/picnic_table.png b/graphics/ending/picnic_table.png
new file mode 100644
index 0000000..8acb474
Binary files /dev/null and b/graphics/ending/picnic_table.png differ
diff --git a/graphics/ending/picnic_table.png.import b/graphics/ending/picnic_table.png.import
new file mode 100644
index 0000000..37e63cf
--- /dev/null
+++ b/graphics/ending/picnic_table.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/picnic_table.png-36237cf92de6d1327e6c724100872052.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/ending/picnic_table.png"
+dest_files=[ "res://.import/picnic_table.png-36237cf92de6d1327e6c724100872052.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/antlion.png b/graphics/enemy/antlion.png
new file mode 100644
index 0000000..60fe466
Binary files /dev/null and b/graphics/enemy/antlion.png differ
diff --git a/graphics/enemy/antlion.png.import b/graphics/enemy/antlion.png.import
new file mode 100644
index 0000000..bcb21f5
--- /dev/null
+++ b/graphics/enemy/antlion.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/antlion.png-d369a6b81d52bd231cbe21ebcf4a19a9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/antlion.png"
+dest_files=[ "res://.import/antlion.png-d369a6b81d52bd231cbe21ebcf4a19a9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/antlion_body.png b/graphics/enemy/antlion_body.png
new file mode 100644
index 0000000..370dd7e
Binary files /dev/null and b/graphics/enemy/antlion_body.png differ
diff --git a/graphics/enemy/antlion_body.png.import b/graphics/enemy/antlion_body.png.import
new file mode 100644
index 0000000..ecea654
--- /dev/null
+++ b/graphics/enemy/antlion_body.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/antlion_body.png-bcaee6ef06ac133db9c32040e4b38d32.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/antlion_body.png"
+dest_files=[ "res://.import/antlion_body.png-bcaee6ef06ac133db9c32040e4b38d32.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/antlion_body_border.png b/graphics/enemy/antlion_body_border.png
new file mode 100644
index 0000000..5d8d56d
Binary files /dev/null and b/graphics/enemy/antlion_body_border.png differ
diff --git a/graphics/enemy/antlion_body_border.png.import b/graphics/enemy/antlion_body_border.png.import
new file mode 100644
index 0000000..7bc00eb
--- /dev/null
+++ b/graphics/enemy/antlion_body_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/antlion_body_border.png-eedaa961c8d23661449fab8f5d3562f5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/antlion_body_border.png"
+dest_files=[ "res://.import/antlion_body_border.png-eedaa961c8d23661449fab8f5d3562f5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/artificial_soul.png b/graphics/enemy/artificial_soul.png
new file mode 100644
index 0000000..dc4a8d5
Binary files /dev/null and b/graphics/enemy/artificial_soul.png differ
diff --git a/graphics/enemy/artificial_soul.png.import b/graphics/enemy/artificial_soul.png.import
new file mode 100644
index 0000000..ee47abd
--- /dev/null
+++ b/graphics/enemy/artificial_soul.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/artificial_soul.png-56b840ad8304c2739f473a4d5b5b0e29.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/artificial_soul.png"
+dest_files=[ "res://.import/artificial_soul.png-56b840ad8304c2739f473a4d5b5b0e29.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/big_saw.png b/graphics/enemy/big_saw.png
new file mode 100644
index 0000000..79a8611
Binary files /dev/null and b/graphics/enemy/big_saw.png differ
diff --git a/graphics/enemy/big_saw.png.import b/graphics/enemy/big_saw.png.import
new file mode 100644
index 0000000..1c3dfbc
--- /dev/null
+++ b/graphics/enemy/big_saw.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/big_saw.png-a44e3977b56835f580fa101393440339.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/big_saw.png"
+dest_files=[ "res://.import/big_saw.png-a44e3977b56835f580fa101393440339.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/bone.png b/graphics/enemy/bone.png
index f178f0e..9c8dfdf 100644
Binary files a/graphics/enemy/bone.png and b/graphics/enemy/bone.png differ
diff --git a/graphics/enemy/boss/fami_parts/arm_segment.png b/graphics/enemy/boss/fami_parts/arm_segment.png
new file mode 100644
index 0000000..c8528e8
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/arm_segment.png differ
diff --git a/graphics/enemy/boss/fami_parts/arm_segment.png.import b/graphics/enemy/boss/fami_parts/arm_segment.png.import
new file mode 100644
index 0000000..bcdcf16
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/arm_segment.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arm_segment.png-da4ef203361c0a30f2279aa0ab4f15ba.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/arm_segment.png"
+dest_files=[ "res://.import/arm_segment.png-da4ef203361c0a30f2279aa0ab4f15ba.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/arm_segment_border.png b/graphics/enemy/boss/fami_parts/arm_segment_border.png
new file mode 100644
index 0000000..b028667
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/arm_segment_border.png differ
diff --git a/graphics/enemy/boss/fami_parts/arm_segment_border.png.import b/graphics/enemy/boss/fami_parts/arm_segment_border.png.import
new file mode 100644
index 0000000..4a886f0
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/arm_segment_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arm_segment_border.png-bf3b689b225eb094d59824f85abbae78.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/arm_segment_border.png"
+dest_files=[ "res://.import/arm_segment_border.png-bf3b689b225eb094d59824f85abbae78.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/body.png b/graphics/enemy/boss/fami_parts/body.png
new file mode 100644
index 0000000..95ff842
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/body.png differ
diff --git a/graphics/enemy/boss/fami_parts/body.png.import b/graphics/enemy/boss/fami_parts/body.png.import
new file mode 100644
index 0000000..4df6019
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/body.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/body.png-df6aa24749dc789c01ae739efee96718.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/body.png"
+dest_files=[ "res://.import/body.png-df6aa24749dc789c01ae739efee96718.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/body_glow_mask.png b/graphics/enemy/boss/fami_parts/body_glow_mask.png
new file mode 100644
index 0000000..6d7a483
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/body_glow_mask.png differ
diff --git a/graphics/enemy/boss/fami_parts/body_glow_mask.png.import b/graphics/enemy/boss/fami_parts/body_glow_mask.png.import
new file mode 100644
index 0000000..e8918f1
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/body_glow_mask.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/body_glow_mask.png-5d6ebce3da83f855ce22bad6beb88258.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/body_glow_mask.png"
+dest_files=[ "res://.import/body_glow_mask.png-5d6ebce3da83f855ce22bad6beb88258.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/eye.png b/graphics/enemy/boss/fami_parts/eye.png
new file mode 100644
index 0000000..386dc52
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/eye.png differ
diff --git a/graphics/enemy/boss/fami_parts/eye.png.import b/graphics/enemy/boss/fami_parts/eye.png.import
new file mode 100644
index 0000000..08679c8
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/eye.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eye.png-b4c7f42b6e983d4217350a9b2ac20562.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/eye.png"
+dest_files=[ "res://.import/eye.png-b4c7f42b6e983d4217350a9b2ac20562.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/foot.png b/graphics/enemy/boss/fami_parts/foot.png
new file mode 100644
index 0000000..7b387c6
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/foot.png differ
diff --git a/graphics/enemy/boss/fami_parts/foot.png.import b/graphics/enemy/boss/fami_parts/foot.png.import
new file mode 100644
index 0000000..cd8c7fb
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/foot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/foot.png-2e76590f0a66ba7ca91cc05a549afe87.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/foot.png"
+dest_files=[ "res://.import/foot.png-2e76590f0a66ba7ca91cc05a549afe87.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/hand.png b/graphics/enemy/boss/fami_parts/hand.png
new file mode 100644
index 0000000..e23d808
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/hand.png differ
diff --git a/graphics/enemy/boss/fami_parts/hand.png.import b/graphics/enemy/boss/fami_parts/hand.png.import
new file mode 100644
index 0000000..cc4da80
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/hand.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hand.png-c354281b38925f653c87a54040cc3a24.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/hand.png"
+dest_files=[ "res://.import/hand.png-c354281b38925f653c87a54040cc3a24.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/head_back.png b/graphics/enemy/boss/fami_parts/head_back.png
new file mode 100644
index 0000000..cd01095
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/head_back.png differ
diff --git a/graphics/enemy/boss/fami_parts/head_back.png.import b/graphics/enemy/boss/fami_parts/head_back.png.import
new file mode 100644
index 0000000..3a7eaac
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/head_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_back.png-1bccd614de968923411809ed0a9a47ec.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/head_back.png"
+dest_files=[ "res://.import/head_back.png-1bccd614de968923411809ed0a9a47ec.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/head_back_glow_mask.png b/graphics/enemy/boss/fami_parts/head_back_glow_mask.png
new file mode 100644
index 0000000..666e4c9
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/head_back_glow_mask.png differ
diff --git a/graphics/enemy/boss/fami_parts/head_back_glow_mask.png.import b/graphics/enemy/boss/fami_parts/head_back_glow_mask.png.import
new file mode 100644
index 0000000..528f40d
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/head_back_glow_mask.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_back_glow_mask.png-912947a6fac25c3b88539a342be1eaa2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/head_back_glow_mask.png"
+dest_files=[ "res://.import/head_back_glow_mask.png-912947a6fac25c3b88539a342be1eaa2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/head_lower.png b/graphics/enemy/boss/fami_parts/head_lower.png
new file mode 100644
index 0000000..76cf031
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/head_lower.png differ
diff --git a/graphics/enemy/boss/fami_parts/head_lower.png.import b/graphics/enemy/boss/fami_parts/head_lower.png.import
new file mode 100644
index 0000000..a25c2af
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/head_lower.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_lower.png-3f00788ef8e1fe96a9f1619728b058df.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/head_lower.png"
+dest_files=[ "res://.import/head_lower.png-3f00788ef8e1fe96a9f1619728b058df.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/head_upper.png b/graphics/enemy/boss/fami_parts/head_upper.png
new file mode 100644
index 0000000..1031cb2
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/head_upper.png differ
diff --git a/graphics/enemy/boss/fami_parts/head_upper.png.import b/graphics/enemy/boss/fami_parts/head_upper.png.import
new file mode 100644
index 0000000..663ce4c
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/head_upper.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_upper.png-c39f225b2583e29d199ec2fba43a0662.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/head_upper.png"
+dest_files=[ "res://.import/head_upper.png-c39f225b2583e29d199ec2fba43a0662.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png b/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png
new file mode 100644
index 0000000..653643d
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png differ
diff --git a/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png.import b/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png.import
new file mode 100644
index 0000000..0787294
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/head_upper_glow_mask.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_upper_glow_mask.png-b8eac607758b521c1c339ab5fe792414.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/head_upper_glow_mask.png"
+dest_files=[ "res://.import/head_upper_glow_mask.png-b8eac607758b521c1c339ab5fe792414.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/leg.png b/graphics/enemy/boss/fami_parts/leg.png
new file mode 100644
index 0000000..2a326b9
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/leg.png differ
diff --git a/graphics/enemy/boss/fami_parts/leg.png.import b/graphics/enemy/boss/fami_parts/leg.png.import
new file mode 100644
index 0000000..acefac1
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/leg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/leg.png-b5cf2c1eb1aa8a79ae6def8820c2a75a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/leg.png"
+dest_files=[ "res://.import/leg.png-b5cf2c1eb1aa8a79ae6def8820c2a75a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/leg_lower.png b/graphics/enemy/boss/fami_parts/leg_lower.png
new file mode 100644
index 0000000..675e723
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/leg_lower.png differ
diff --git a/graphics/enemy/boss/fami_parts/leg_lower.png.import b/graphics/enemy/boss/fami_parts/leg_lower.png.import
new file mode 100644
index 0000000..7b38e09
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/leg_lower.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/leg_lower.png-9ecb53d4858a913e6ec3beaecc3411d2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/leg_lower.png"
+dest_files=[ "res://.import/leg_lower.png-9ecb53d4858a913e6ec3beaecc3411d2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/fami_parts/mouth_tendril.png b/graphics/enemy/boss/fami_parts/mouth_tendril.png
new file mode 100644
index 0000000..facee02
Binary files /dev/null and b/graphics/enemy/boss/fami_parts/mouth_tendril.png differ
diff --git a/graphics/enemy/boss/fami_parts/mouth_tendril.png.import b/graphics/enemy/boss/fami_parts/mouth_tendril.png.import
new file mode 100644
index 0000000..a261f6b
--- /dev/null
+++ b/graphics/enemy/boss/fami_parts/mouth_tendril.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mouth_tendril.png-f6bdbcc85167f9ddb0b2ff5a81efc376.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/fami_parts/mouth_tendril.png"
+dest_files=[ "res://.import/mouth_tendril.png-f6bdbcc85167f9ddb0b2ff5a81efc376.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/famira-wip.png b/graphics/enemy/boss/famira-wip.png
new file mode 100644
index 0000000..025c5a3
Binary files /dev/null and b/graphics/enemy/boss/famira-wip.png differ
diff --git a/graphics/enemy/boss/famira-wip.png.import b/graphics/enemy/boss/famira-wip.png.import
new file mode 100644
index 0000000..7b6343a
--- /dev/null
+++ b/graphics/enemy/boss/famira-wip.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira-wip.png-724a50fc63b1b570cfdaa11733d1f42e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/famira-wip.png"
+dest_files=[ "res://.import/famira-wip.png-724a50fc63b1b570cfdaa11733d1f42e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/famira_dissolve.png b/graphics/enemy/boss/famira_dissolve.png
new file mode 100644
index 0000000..4f64df4
Binary files /dev/null and b/graphics/enemy/boss/famira_dissolve.png differ
diff --git a/graphics/enemy/boss/famira_dissolve.png.import b/graphics/enemy/boss/famira_dissolve.png.import
new file mode 100644
index 0000000..e11954d
--- /dev/null
+++ b/graphics/enemy/boss/famira_dissolve.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_dissolve.png-fc21beac8113424467a72a3beb454de9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/famira_dissolve.png"
+dest_files=[ "res://.import/famira_dissolve.png-fc21beac8113424467a72a3beb454de9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/famira_fire.png b/graphics/enemy/boss/famira_fire.png
new file mode 100644
index 0000000..bf6ff01
Binary files /dev/null and b/graphics/enemy/boss/famira_fire.png differ
diff --git a/graphics/enemy/boss/famira_fire.png.import b/graphics/enemy/boss/famira_fire.png.import
new file mode 100644
index 0000000..052b4a1
--- /dev/null
+++ b/graphics/enemy/boss/famira_fire.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_fire.png-e17dc562be1c1f2c970eb59a9cfda450.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/famira_fire.png"
+dest_files=[ "res://.import/famira_fire.png-e17dc562be1c1f2c970eb59a9cfda450.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump.png b/graphics/enemy/boss/scrump.png
new file mode 100644
index 0000000..94b9db4
Binary files /dev/null and b/graphics/enemy/boss/scrump.png differ
diff --git a/graphics/enemy/boss/scrump.png.import b/graphics/enemy/boss/scrump.png.import
new file mode 100644
index 0000000..5305916
--- /dev/null
+++ b/graphics/enemy/boss/scrump.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/scrump.png-20a0f13e9fd578f74222e8fcfeadea9c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump.png"
+dest_files=[ "res://.import/scrump.png-20a0f13e9fd578f74222e8fcfeadea9c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/brain1.png b/graphics/enemy/boss/scrump_gore/brain1.png
new file mode 100644
index 0000000..5593884
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/brain1.png differ
diff --git a/graphics/enemy/boss/scrump_gore/brain1.png.import b/graphics/enemy/boss/scrump_gore/brain1.png.import
new file mode 100644
index 0000000..abff7b5
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/brain1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/brain1.png-1158e09185c1ea5503436abba618a779.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/brain1.png"
+dest_files=[ "res://.import/brain1.png-1158e09185c1ea5503436abba618a779.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/brain2.png b/graphics/enemy/boss/scrump_gore/brain2.png
new file mode 100644
index 0000000..753e563
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/brain2.png differ
diff --git a/graphics/enemy/boss/scrump_gore/brain2.png.import b/graphics/enemy/boss/scrump_gore/brain2.png.import
new file mode 100644
index 0000000..c2717f6
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/brain2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/brain2.png-2250df685cd477f1289fb2afa9805a3b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/brain2.png"
+dest_files=[ "res://.import/brain2.png-2250df685cd477f1289fb2afa9805a3b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/brain3.png b/graphics/enemy/boss/scrump_gore/brain3.png
new file mode 100644
index 0000000..2100a49
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/brain3.png differ
diff --git a/graphics/enemy/boss/scrump_gore/brain3.png.import b/graphics/enemy/boss/scrump_gore/brain3.png.import
new file mode 100644
index 0000000..a6b2c1f
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/brain3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/brain3.png-4d4ddcec1be58de1f6459b0ee86b2bc0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/brain3.png"
+dest_files=[ "res://.import/brain3.png-4d4ddcec1be58de1f6459b0ee86b2bc0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/brain4.png b/graphics/enemy/boss/scrump_gore/brain4.png
new file mode 100644
index 0000000..7360fea
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/brain4.png differ
diff --git a/graphics/enemy/boss/scrump_gore/brain4.png.import b/graphics/enemy/boss/scrump_gore/brain4.png.import
new file mode 100644
index 0000000..7d5a70f
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/brain4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/brain4.png-109d7c623bdbccda56ce2e16b44930f5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/brain4.png"
+dest_files=[ "res://.import/brain4.png-109d7c623bdbccda56ce2e16b44930f5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/eye.png b/graphics/enemy/boss/scrump_gore/eye.png
new file mode 100644
index 0000000..6a1d1fe
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/eye.png differ
diff --git a/graphics/enemy/boss/scrump_gore/eye.png.import b/graphics/enemy/boss/scrump_gore/eye.png.import
new file mode 100644
index 0000000..d244d7f
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/eye.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eye.png-59017e84b7d250914b0edece5a3dbe4c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/eye.png"
+dest_files=[ "res://.import/eye.png-59017e84b7d250914b0edece5a3dbe4c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/eyestalk.png b/graphics/enemy/boss/scrump_gore/eyestalk.png
new file mode 100644
index 0000000..feffc04
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/eyestalk.png differ
diff --git a/graphics/enemy/boss/scrump_gore/eyestalk.png.import b/graphics/enemy/boss/scrump_gore/eyestalk.png.import
new file mode 100644
index 0000000..fa0ac7e
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/eyestalk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eyestalk.png-4ace80160a0fb54f0cadd22cd1eefed7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/eyestalk.png"
+dest_files=[ "res://.import/eyestalk.png-4ace80160a0fb54f0cadd22cd1eefed7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/headlower.png b/graphics/enemy/boss/scrump_gore/headlower.png
new file mode 100644
index 0000000..917bde2
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/headlower.png differ
diff --git a/graphics/enemy/boss/scrump_gore/headlower.png.import b/graphics/enemy/boss/scrump_gore/headlower.png.import
new file mode 100644
index 0000000..ce50600
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/headlower.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/headlower.png-8a896df396494abd24a6cea552fcd875.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/headlower.png"
+dest_files=[ "res://.import/headlower.png-8a896df396494abd24a6cea552fcd875.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/headupper.png b/graphics/enemy/boss/scrump_gore/headupper.png
new file mode 100644
index 0000000..463fe04
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/headupper.png differ
diff --git a/graphics/enemy/boss/scrump_gore/headupper.png.import b/graphics/enemy/boss/scrump_gore/headupper.png.import
new file mode 100644
index 0000000..0bb99c9
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/headupper.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/headupper.png-4c1bc34d2bdb2eb54ca8588fd1c55ea5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/headupper.png"
+dest_files=[ "res://.import/headupper.png-4c1bc34d2bdb2eb54ca8588fd1c55ea5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle1.png b/graphics/enemy/boss/scrump_gore/tentacle1.png
new file mode 100644
index 0000000..e64bf40
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle1.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle1.png.import b/graphics/enemy/boss/scrump_gore/tentacle1.png.import
new file mode 100644
index 0000000..84df8bf
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle1.png-1e1d4b85b51f27875445a7b33b412617.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle1.png"
+dest_files=[ "res://.import/tentacle1.png-1e1d4b85b51f27875445a7b33b412617.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle2.png b/graphics/enemy/boss/scrump_gore/tentacle2.png
new file mode 100644
index 0000000..782955e
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle2.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle2.png.import b/graphics/enemy/boss/scrump_gore/tentacle2.png.import
new file mode 100644
index 0000000..e7b28ff
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle2.png-835d05b55680976174a62f32f51ddc20.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle2.png"
+dest_files=[ "res://.import/tentacle2.png-835d05b55680976174a62f32f51ddc20.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle3.png b/graphics/enemy/boss/scrump_gore/tentacle3.png
new file mode 100644
index 0000000..cd2024a
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle3.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle3.png.import b/graphics/enemy/boss/scrump_gore/tentacle3.png.import
new file mode 100644
index 0000000..60ebf8b
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle3.png-85addbc9cd47f50ad26b6a2dc46b92a5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle3.png"
+dest_files=[ "res://.import/tentacle3.png-85addbc9cd47f50ad26b6a2dc46b92a5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle4.png b/graphics/enemy/boss/scrump_gore/tentacle4.png
new file mode 100644
index 0000000..63144bb
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle4.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle4.png.import b/graphics/enemy/boss/scrump_gore/tentacle4.png.import
new file mode 100644
index 0000000..68ad508
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle4.png-b0a2f40eb4e9ded19420aa6b6663b1f7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle4.png"
+dest_files=[ "res://.import/tentacle4.png-b0a2f40eb4e9ded19420aa6b6663b1f7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle5.png b/graphics/enemy/boss/scrump_gore/tentacle5.png
new file mode 100644
index 0000000..e3e04f2
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle5.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle5.png.import b/graphics/enemy/boss/scrump_gore/tentacle5.png.import
new file mode 100644
index 0000000..21d78d4
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle5.png-8e7223bc5d1918d75d16b5098d66b7d7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle5.png"
+dest_files=[ "res://.import/tentacle5.png-8e7223bc5d1918d75d16b5098d66b7d7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/scrump_gore/tentacle6.png b/graphics/enemy/boss/scrump_gore/tentacle6.png
new file mode 100644
index 0000000..a441140
Binary files /dev/null and b/graphics/enemy/boss/scrump_gore/tentacle6.png differ
diff --git a/graphics/enemy/boss/scrump_gore/tentacle6.png.import b/graphics/enemy/boss/scrump_gore/tentacle6.png.import
new file mode 100644
index 0000000..0943b4e
--- /dev/null
+++ b/graphics/enemy/boss/scrump_gore/tentacle6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tentacle6.png-21ece83eb93c3f03b8142e110a83ddb3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/scrump_gore/tentacle6.png"
+dest_files=[ "res://.import/tentacle6.png-21ece83eb93c3f03b8142e110a83ddb3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/beam.png b/graphics/enemy/boss/stg_2600/beam.png
new file mode 100644
index 0000000..ff3ad0d
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/beam.png differ
diff --git a/graphics/enemy/boss/stg_2600/beam.png.import b/graphics/enemy/boss/stg_2600/beam.png.import
new file mode 100644
index 0000000..9ae197a
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/beam.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/beam.png-a6465ac769ebb2c528af0b787f682930.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/beam.png"
+dest_files=[ "res://.import/beam.png-a6465ac769ebb2c528af0b787f682930.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/beam_gradient.png b/graphics/enemy/boss/stg_2600/beam_gradient.png
new file mode 100644
index 0000000..4be40f8
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/beam_gradient.png differ
diff --git a/graphics/enemy/boss/stg_2600/beam_gradient.png.import b/graphics/enemy/boss/stg_2600/beam_gradient.png.import
new file mode 100644
index 0000000..6137a04
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/beam_gradient.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/beam_gradient.png-1b75c5d23d16832372548a1c5c3edb0d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/beam_gradient.png"
+dest_files=[ "res://.import/beam_gradient.png-1b75c5d23d16832372548a1c5c3edb0d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/bold_large.xcf b/graphics/enemy/boss/stg_2600/bold_large.xcf
new file mode 100644
index 0000000..8e19af6
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bold_large.xcf differ
diff --git a/graphics/enemy/boss/stg_2600/bolt_large.png b/graphics/enemy/boss/stg_2600/bolt_large.png
new file mode 100644
index 0000000..302db84
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_large.png differ
diff --git a/graphics/enemy/boss/stg_2600/bolt_large.png.import b/graphics/enemy/boss/stg_2600/bolt_large.png.import
new file mode 100644
index 0000000..a722400
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/bolt_large.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bolt_large.png-87121a52143bd846fbb123b3634228b7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/bolt_large.png"
+dest_files=[ "res://.import/bolt_large.png-87121a52143bd846fbb123b3634228b7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/bolt_large.xcf b/graphics/enemy/boss/stg_2600/bolt_large.xcf
new file mode 100644
index 0000000..611c39f
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_large.xcf differ
diff --git a/graphics/enemy/boss/stg_2600/bolt_medium.png b/graphics/enemy/boss/stg_2600/bolt_medium.png
new file mode 100644
index 0000000..2e35b22
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_medium.png differ
diff --git a/graphics/enemy/boss/stg_2600/bolt_medium.png.import b/graphics/enemy/boss/stg_2600/bolt_medium.png.import
new file mode 100644
index 0000000..fc3b685
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/bolt_medium.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bolt_medium.png-c18f34f796165752e94c6e28216b7e6e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/bolt_medium.png"
+dest_files=[ "res://.import/bolt_medium.png-c18f34f796165752e94c6e28216b7e6e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/bolt_medium.xcf b/graphics/enemy/boss/stg_2600/bolt_medium.xcf
new file mode 100644
index 0000000..c1d3f4a
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_medium.xcf differ
diff --git a/graphics/enemy/boss/stg_2600/bolt_small.xcf b/graphics/enemy/boss/stg_2600/bolt_small.xcf
new file mode 100644
index 0000000..94dbe84
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_small.xcf differ
diff --git a/graphics/enemy/boss/stg_2600/foot.png b/graphics/enemy/boss/stg_2600/foot.png
new file mode 100644
index 0000000..d8146da
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/foot.png differ
diff --git a/graphics/enemy/boss/stg_2600/foot.png.import b/graphics/enemy/boss/stg_2600/foot.png.import
new file mode 100644
index 0000000..e56b636
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/foot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/foot.png-49e7bfc3417af16c0f1c825106e6cf3a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/foot.png"
+dest_files=[ "res://.import/foot.png-49e7bfc3417af16c0f1c825106e6cf3a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/foot.xcf b/graphics/enemy/boss/stg_2600/foot.xcf
new file mode 100644
index 0000000..f6ab01d
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/foot.xcf differ
diff --git a/graphics/enemy/boss/stg_2600/head_broken.png b/graphics/enemy/boss/stg_2600/head_broken.png
new file mode 100644
index 0000000..a19d4d1
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_broken.png differ
diff --git a/graphics/enemy/boss/stg_2600/head_broken.png.import b/graphics/enemy/boss/stg_2600/head_broken.png.import
new file mode 100644
index 0000000..cfb4bf2
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/head_broken.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_broken.png-cf8f0c7e5f516f4b2efbd5ac2fee134c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/head_broken.png"
+dest_files=[ "res://.import/head_broken.png-cf8f0c7e5f516f4b2efbd5ac2fee134c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/head_cracked.png b/graphics/enemy/boss/stg_2600/head_cracked.png
new file mode 100644
index 0000000..a81ac62
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_cracked.png differ
diff --git a/graphics/enemy/boss/stg_2600/head_cracked.png.import b/graphics/enemy/boss/stg_2600/head_cracked.png.import
new file mode 100644
index 0000000..f388cec
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/head_cracked.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_cracked.png-6dfa8a34ba8a3e28ec67d923de7dda93.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/head_cracked.png"
+dest_files=[ "res://.import/head_cracked.png-6dfa8a34ba8a3e28ec67d923de7dda93.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/head_intact.png b/graphics/enemy/boss/stg_2600/head_intact.png
new file mode 100644
index 0000000..b8255eb
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_intact.png differ
diff --git a/graphics/enemy/boss/stg_2600/head_intact.png.import b/graphics/enemy/boss/stg_2600/head_intact.png.import
new file mode 100644
index 0000000..a39a2d9
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/head_intact.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/head_intact.png-54b42888eb160863193673b5bc2d22d5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/head_intact.png"
+dest_files=[ "res://.import/head_intact.png-54b42888eb160863193673b5bc2d22d5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/leg.png b/graphics/enemy/boss/stg_2600/leg.png
new file mode 100644
index 0000000..4129b56
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/leg.png differ
diff --git a/graphics/enemy/boss/stg_2600/leg.png.import b/graphics/enemy/boss/stg_2600/leg.png.import
new file mode 100644
index 0000000..83a842e
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/leg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/leg.png-e82a4080bfae744da299fb320083a254.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/leg.png"
+dest_files=[ "res://.import/leg.png-e82a4080bfae744da299fb320083a254.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/sg_2083.png b/graphics/enemy/boss/stg_2600/sg_2083.png
new file mode 100644
index 0000000..f5b8ca0
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/sg_2083.png differ
diff --git a/graphics/enemy/boss/stg_2600/sg_2083.png.import b/graphics/enemy/boss/stg_2600/sg_2083.png.import
new file mode 100644
index 0000000..d00ec58
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/sg_2083.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_2083.png-e75cfae4b8483550759568a2ca940538.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/sg_2083.png"
+dest_files=[ "res://.import/sg_2083.png-e75cfae4b8483550759568a2ca940538.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/stg_2600/tailpipes.png b/graphics/enemy/boss/stg_2600/tailpipes.png
new file mode 100644
index 0000000..a384fd5
Binary files /dev/null and b/graphics/enemy/boss/stg_2600/tailpipes.png differ
diff --git a/graphics/enemy/boss/stg_2600/tailpipes.png.import b/graphics/enemy/boss/stg_2600/tailpipes.png.import
new file mode 100644
index 0000000..af2089d
--- /dev/null
+++ b/graphics/enemy/boss/stg_2600/tailpipes.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tailpipes.png-f2cc21241c48e1d5a125f73c2b7a9f85.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/stg_2600/tailpipes.png"
+dest_files=[ "res://.import/tailpipes.png-f2cc21241c48e1d5a125f73c2b7a9f85.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/boss/the_scrump.png b/graphics/enemy/boss/the_scrump.png
new file mode 100644
index 0000000..3668331
Binary files /dev/null and b/graphics/enemy/boss/the_scrump.png differ
diff --git a/graphics/enemy/boss/the_scrump.png.import b/graphics/enemy/boss/the_scrump.png.import
new file mode 100644
index 0000000..ca09b5c
--- /dev/null
+++ b/graphics/enemy/boss/the_scrump.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/the_scrump.png-5d6d9e8e958472079e561df8449adc91.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/boss/the_scrump.png"
+dest_files=[ "res://.import/the_scrump.png-5d6d9e8e958472079e561df8449adc91.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/chain.png b/graphics/enemy/chain.png
new file mode 100644
index 0000000..eef8472
Binary files /dev/null and b/graphics/enemy/chain.png differ
diff --git a/graphics/enemy/chain.png.import b/graphics/enemy/chain.png.import
new file mode 100644
index 0000000..7221e6d
--- /dev/null
+++ b/graphics/enemy/chain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/chain.png-418b1dbdc93cfd012f4f36fd87b0e225.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/chain.png"
+dest_files=[ "res://.import/chain.png-418b1dbdc93cfd012f4f36fd87b0e225.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/cop_idle.png b/graphics/enemy/cop/cop_idle.png
new file mode 100644
index 0000000..12123f5
Binary files /dev/null and b/graphics/enemy/cop/cop_idle.png differ
diff --git a/graphics/enemy/cop/cop_idle.png.import b/graphics/enemy/cop/cop_idle.png.import
new file mode 100644
index 0000000..147dccd
--- /dev/null
+++ b/graphics/enemy/cop/cop_idle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cop_idle.png-61e8342149402c57abbb7d9f292f6738.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/cop_idle.png"
+dest_files=[ "res://.import/cop_idle.png-61e8342149402c57abbb7d9f292f6738.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/cop_shoot.png b/graphics/enemy/cop/cop_shoot.png
new file mode 100644
index 0000000..fac96a3
Binary files /dev/null and b/graphics/enemy/cop/cop_shoot.png differ
diff --git a/graphics/enemy/cop/cop_shoot.png.import b/graphics/enemy/cop/cop_shoot.png.import
new file mode 100644
index 0000000..d107d39
--- /dev/null
+++ b/graphics/enemy/cop/cop_shoot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cop_shoot.png-7a1b6ca4069ac0f99c04c2a88c7e4ebd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/cop_shoot.png"
+dest_files=[ "res://.import/cop_shoot.png-7a1b6ca4069ac0f99c04c2a88c7e4ebd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/cop_walk.png b/graphics/enemy/cop/cop_walk.png
new file mode 100644
index 0000000..48f5750
Binary files /dev/null and b/graphics/enemy/cop/cop_walk.png differ
diff --git a/graphics/enemy/cop/cop_walk.png.import b/graphics/enemy/cop/cop_walk.png.import
new file mode 100644
index 0000000..70f42ea
--- /dev/null
+++ b/graphics/enemy/cop/cop_walk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cop_walk.png-e754cdca0ddd2cc2ab634dc56d6f10e3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/cop_walk.png"
+dest_files=[ "res://.import/cop_walk.png-e754cdca0ddd2cc2ab634dc56d6f10e3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/scope_idle.png b/graphics/enemy/cop/scope_idle.png
new file mode 100644
index 0000000..db98015
Binary files /dev/null and b/graphics/enemy/cop/scope_idle.png differ
diff --git a/graphics/enemy/cop/scope_idle.png.import b/graphics/enemy/cop/scope_idle.png.import
new file mode 100644
index 0000000..971fc9d
--- /dev/null
+++ b/graphics/enemy/cop/scope_idle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/scope_idle.png-edfb3b6efbf557231c79afc0b20cdc8d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/scope_idle.png"
+dest_files=[ "res://.import/scope_idle.png-edfb3b6efbf557231c79afc0b20cdc8d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/scope_shoot.png b/graphics/enemy/cop/scope_shoot.png
new file mode 100644
index 0000000..adca693
Binary files /dev/null and b/graphics/enemy/cop/scope_shoot.png differ
diff --git a/graphics/enemy/cop/scope_shoot.png.import b/graphics/enemy/cop/scope_shoot.png.import
new file mode 100644
index 0000000..074448c
--- /dev/null
+++ b/graphics/enemy/cop/scope_shoot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/scope_shoot.png-cb51b66a6fbf90463877cb05556866a7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/scope_shoot.png"
+dest_files=[ "res://.import/scope_shoot.png-cb51b66a6fbf90463877cb05556866a7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/scope_walk.png b/graphics/enemy/cop/scope_walk.png
new file mode 100644
index 0000000..5f0a09c
Binary files /dev/null and b/graphics/enemy/cop/scope_walk.png differ
diff --git a/graphics/enemy/cop/scope_walk.png.import b/graphics/enemy/cop/scope_walk.png.import
new file mode 100644
index 0000000..fa02cb4
--- /dev/null
+++ b/graphics/enemy/cop/scope_walk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/scope_walk.png-f2c5dbb93e8a856e4d1169d185c92f99.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/scope_walk.png"
+dest_files=[ "res://.import/scope_walk.png-f2c5dbb93e8a856e4d1169d185c92f99.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/the_sheriff_idle.png b/graphics/enemy/cop/the_sheriff_idle.png
new file mode 100644
index 0000000..322d122
Binary files /dev/null and b/graphics/enemy/cop/the_sheriff_idle.png differ
diff --git a/graphics/enemy/cop/the_sheriff_idle.png.import b/graphics/enemy/cop/the_sheriff_idle.png.import
new file mode 100644
index 0000000..6d43e04
--- /dev/null
+++ b/graphics/enemy/cop/the_sheriff_idle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/the_sheriff_idle.png-014665844bd2f3239eec29a093e13bfe.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/the_sheriff_idle.png"
+dest_files=[ "res://.import/the_sheriff_idle.png-014665844bd2f3239eec29a093e13bfe.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/the_sheriff_shoot.png b/graphics/enemy/cop/the_sheriff_shoot.png
new file mode 100644
index 0000000..7667542
Binary files /dev/null and b/graphics/enemy/cop/the_sheriff_shoot.png differ
diff --git a/graphics/enemy/cop/the_sheriff_shoot.png.import b/graphics/enemy/cop/the_sheriff_shoot.png.import
new file mode 100644
index 0000000..fe1d10d
--- /dev/null
+++ b/graphics/enemy/cop/the_sheriff_shoot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/the_sheriff_shoot.png-3125c06d508cb96e0ad5f5a9a0978451.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/the_sheriff_shoot.png"
+dest_files=[ "res://.import/the_sheriff_shoot.png-3125c06d508cb96e0ad5f5a9a0978451.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/cop/the_sheriff_walk.png b/graphics/enemy/cop/the_sheriff_walk.png
new file mode 100644
index 0000000..fe8752b
Binary files /dev/null and b/graphics/enemy/cop/the_sheriff_walk.png differ
diff --git a/graphics/enemy/cop/the_sheriff_walk.png.import b/graphics/enemy/cop/the_sheriff_walk.png.import
new file mode 100644
index 0000000..ad5940e
--- /dev/null
+++ b/graphics/enemy/cop/the_sheriff_walk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/the_sheriff_walk.png-fd72a685f4b3844bdad9a7201ad253bc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/cop/the_sheriff_walk.png"
+dest_files=[ "res://.import/the_sheriff_walk.png-fd72a685f4b3844bdad9a7201ad253bc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/eel_body.png b/graphics/enemy/eel_body.png
new file mode 100644
index 0000000..58588ac
Binary files /dev/null and b/graphics/enemy/eel_body.png differ
diff --git a/graphics/enemy/eel_body.png.import b/graphics/enemy/eel_body.png.import
new file mode 100644
index 0000000..5be4646
--- /dev/null
+++ b/graphics/enemy/eel_body.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eel_body.png-4e2a707966d6656d9260d34aba0d2f9d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/eel_body.png"
+dest_files=[ "res://.import/eel_body.png-4e2a707966d6656d9260d34aba0d2f9d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/eel_head.png b/graphics/enemy/eel_head.png
new file mode 100644
index 0000000..873037c
Binary files /dev/null and b/graphics/enemy/eel_head.png differ
diff --git a/graphics/enemy/eel_head.png.import b/graphics/enemy/eel_head.png.import
new file mode 100644
index 0000000..f48ab5d
--- /dev/null
+++ b/graphics/enemy/eel_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eel_head.png-29e1a9b9dd541b3771a77751dd32cb42.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/eel_head.png"
+dest_files=[ "res://.import/eel_head.png-29e1a9b9dd541b3771a77751dd32cb42.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/eel_inner_border.png b/graphics/enemy/eel_inner_border.png
new file mode 100644
index 0000000..3e33ee3
Binary files /dev/null and b/graphics/enemy/eel_inner_border.png differ
diff --git a/graphics/enemy/eel_inner_border.png.import b/graphics/enemy/eel_inner_border.png.import
new file mode 100644
index 0000000..c5aab61
--- /dev/null
+++ b/graphics/enemy/eel_inner_border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eel_inner_border.png-ba82f5e4214fedd66b04b75d8ca636b6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/eel_inner_border.png"
+dest_files=[ "res://.import/eel_inner_border.png-ba82f5e4214fedd66b04b75d8ca636b6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/eel_tail.png b/graphics/enemy/eel_tail.png
new file mode 100644
index 0000000..dd08a76
Binary files /dev/null and b/graphics/enemy/eel_tail.png differ
diff --git a/graphics/enemy/eel_tail.png.import b/graphics/enemy/eel_tail.png.import
new file mode 100644
index 0000000..401b397
--- /dev/null
+++ b/graphics/enemy/eel_tail.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/eel_tail.png-359163ddc00e2ac41549552381ce8558.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/eel_tail.png"
+dest_files=[ "res://.import/eel_tail.png-359163ddc00e2ac41549552381ce8558.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/explosion.png b/graphics/enemy/explosion.png
new file mode 100644
index 0000000..4870a28
Binary files /dev/null and b/graphics/enemy/explosion.png differ
diff --git a/graphics/enemy/explosion.png.import b/graphics/enemy/explosion.png.import
new file mode 100644
index 0000000..e275fec
--- /dev/null
+++ b/graphics/enemy/explosion.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/explosion.png-04c26d31be903fe5209fbb88fb2b001b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/explosion.png"
+dest_files=[ "res://.import/explosion.png-04c26d31be903fe5209fbb88fb2b001b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/explosion_small.png b/graphics/enemy/explosion_small.png
new file mode 100644
index 0000000..6faa8c3
Binary files /dev/null and b/graphics/enemy/explosion_small.png differ
diff --git a/graphics/enemy/explosion_small.png.import b/graphics/enemy/explosion_small.png.import
new file mode 100644
index 0000000..b8f4f18
--- /dev/null
+++ b/graphics/enemy/explosion_small.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/explosion_small.png-ec9dc247e6022a776d8379ea2837dcb6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/explosion_small.png"
+dest_files=[ "res://.import/explosion_small.png-ec9dc247e6022a776d8379ea2837dcb6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/fish.png b/graphics/enemy/fish.png
new file mode 100644
index 0000000..283bd4b
Binary files /dev/null and b/graphics/enemy/fish.png differ
diff --git a/graphics/enemy/fish.png.import b/graphics/enemy/fish.png.import
new file mode 100644
index 0000000..35bbc3d
--- /dev/null
+++ b/graphics/enemy/fish.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fish.png-3b834e5fe038dfff40dea010bacb8ae6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/fish.png"
+dest_files=[ "res://.import/fish.png-3b834e5fe038dfff40dea010bacb8ae6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/hellarcher_shoot.png b/graphics/enemy/hellarcher_shoot.png
new file mode 100644
index 0000000..8cd94b1
Binary files /dev/null and b/graphics/enemy/hellarcher_shoot.png differ
diff --git a/graphics/enemy/hellarcher_shoot.png.import b/graphics/enemy/hellarcher_shoot.png.import
new file mode 100644
index 0000000..b8b6ab7
--- /dev/null
+++ b/graphics/enemy/hellarcher_shoot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hellarcher_shoot.png-65d7de6e316a64bf812ec4d7ecc795ab.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/hellarcher_shoot.png"
+dest_files=[ "res://.import/hellarcher_shoot.png-65d7de6e316a64bf812ec4d7ecc795ab.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/jumping_spider.png b/graphics/enemy/jumping_spider.png
index 8fab00a..26747cc 100644
Binary files a/graphics/enemy/jumping_spider.png and b/graphics/enemy/jumping_spider.png differ
diff --git a/graphics/enemy/laser_wall.png b/graphics/enemy/laser_wall.png
new file mode 100644
index 0000000..5c1ac8c
Binary files /dev/null and b/graphics/enemy/laser_wall.png differ
diff --git a/graphics/enemy/laser_wall.png.import b/graphics/enemy/laser_wall.png.import
new file mode 100644
index 0000000..e18afef
--- /dev/null
+++ b/graphics/enemy/laser_wall.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/laser_wall.png-4fb7af6c3027dd56a2c4a083903f0911.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/laser_wall.png"
+dest_files=[ "res://.import/laser_wall.png-4fb7af6c3027dd56a2c4a083903f0911.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/mine.png b/graphics/enemy/mine.png
new file mode 100644
index 0000000..ccdd428
Binary files /dev/null and b/graphics/enemy/mine.png differ
diff --git a/graphics/enemy/mine.png.import b/graphics/enemy/mine.png.import
new file mode 100644
index 0000000..70ce21c
--- /dev/null
+++ b/graphics/enemy/mine.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mine.png-64fede174f9ce16c1380d86ae4488e55.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/mine.png"
+dest_files=[ "res://.import/mine.png-64fede174f9ce16c1380d86ae4488e55.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/slime_purple.png b/graphics/enemy/pal_slime_purple.png
similarity index 100%
rename from graphics/enemy/slime_purple.png
rename to graphics/enemy/pal_slime_purple.png
diff --git a/graphics/enemy/pal_slime_purple.png.import b/graphics/enemy/pal_slime_purple.png.import
new file mode 100644
index 0000000..53250cf
--- /dev/null
+++ b/graphics/enemy/pal_slime_purple.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/pal_slime_purple.png-d805a8245be98e61426c73599f2b2190.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/pal_slime_purple.png"
+dest_files=[ "res://.import/pal_slime_purple.png-d805a8245be98e61426c73599f2b2190.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/robosnake.png b/graphics/enemy/robosnake.png
new file mode 100644
index 0000000..497ad3e
Binary files /dev/null and b/graphics/enemy/robosnake.png differ
diff --git a/graphics/enemy/robosnake.png.import b/graphics/enemy/robosnake.png.import
new file mode 100644
index 0000000..4540efb
--- /dev/null
+++ b/graphics/enemy/robosnake.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/robosnake.png-9628cd695b11d94f81ee466c12b59d7e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/robosnake.png"
+dest_files=[ "res://.import/robosnake.png-9628cd695b11d94f81ee466c12b59d7e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/roboturret.png b/graphics/enemy/roboturret.png
new file mode 100644
index 0000000..b557948
Binary files /dev/null and b/graphics/enemy/roboturret.png differ
diff --git a/graphics/enemy/roboturret.png.import b/graphics/enemy/roboturret.png.import
new file mode 100644
index 0000000..6cfe625
--- /dev/null
+++ b/graphics/enemy/roboturret.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/roboturret.png-e07ce7c3906f2fea34c536c816695e97.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/roboturret.png"
+dest_files=[ "res://.import/roboturret.png-e07ce7c3906f2fea34c536c816695e97.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/roboturret_projectile.png b/graphics/enemy/roboturret_projectile.png
new file mode 100644
index 0000000..6d2c066
Binary files /dev/null and b/graphics/enemy/roboturret_projectile.png differ
diff --git a/graphics/enemy/roboturret_projectile.png.import b/graphics/enemy/roboturret_projectile.png.import
new file mode 100644
index 0000000..f91009a
--- /dev/null
+++ b/graphics/enemy/roboturret_projectile.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/roboturret_projectile.png-d7d81b85620cc134b26a04626029ce57.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/roboturret_projectile.png"
+dest_files=[ "res://.import/roboturret_projectile.png-d7d81b85620cc134b26a04626029ce57.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/roller_fiend.png b/graphics/enemy/roller_fiend.png
deleted file mode 100644
index 5a929ad..0000000
Binary files a/graphics/enemy/roller_fiend.png and /dev/null differ
diff --git a/graphics/enemy/roller_fiend.png.import b/graphics/enemy/roller_fiend.png.import
deleted file mode 100644
index 22de4d8..0000000
--- a/graphics/enemy/roller_fiend.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/roller_fiend.png-2f4ff517749815b6378d9070bb47d63f.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/roller_fiend.png"
-dest_files=[ "res://.import/roller_fiend.png-2f4ff517749815b6378d9070bb47d63f.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/roller_fiend_small.png.import b/graphics/enemy/roller_fiend_small.png.import
deleted file mode 100644
index 823feea..0000000
--- a/graphics/enemy/roller_fiend_small.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/roller_fiend_small.png-efb72678baec971ddc1e0966a158ebaa.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/roller_fiend_small.png"
-dest_files=[ "res://.import/roller_fiend_small.png-efb72678baec971ddc1e0966a158ebaa.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/rolling_fiend.png b/graphics/enemy/rolling_fiend.png
new file mode 100644
index 0000000..7b5316e
Binary files /dev/null and b/graphics/enemy/rolling_fiend.png differ
diff --git a/graphics/enemy/rolling_fiend.png.import b/graphics/enemy/rolling_fiend.png.import
new file mode 100644
index 0000000..ee468b4
--- /dev/null
+++ b/graphics/enemy/rolling_fiend.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/rolling_fiend.png-37d32239fa865317d5d7b0f286feba62.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/rolling_fiend.png"
+dest_files=[ "res://.import/rolling_fiend.png-37d32239fa865317d5d7b0f286feba62.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/sawblade.png b/graphics/enemy/sawblade.png
new file mode 100644
index 0000000..09c8292
Binary files /dev/null and b/graphics/enemy/sawblade.png differ
diff --git a/graphics/enemy/sawblade.png.import b/graphics/enemy/sawblade.png.import
new file mode 100644
index 0000000..4478346
--- /dev/null
+++ b/graphics/enemy/sawblade.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sawblade.png-119b741e5fae47e2364714ec95e18dd2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/sawblade.png"
+dest_files=[ "res://.import/sawblade.png-119b741e5fae47e2364714ec95e18dd2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/skelarcher_duck.png.import b/graphics/enemy/skelarcher_duck.png.import
deleted file mode 100644
index cb1a6fe..0000000
--- a/graphics/enemy/skelarcher_duck.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/skelarcher_duck.png-ea842fa5209405d34f5606825e37ff96.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/skelarcher_duck.png"
-dest_files=[ "res://.import/skelarcher_duck.png-ea842fa5209405d34f5606825e37ff96.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/skelarcher_idle.png b/graphics/enemy/skelarcher_idle.png
deleted file mode 100644
index d7957ea..0000000
Binary files a/graphics/enemy/skelarcher_idle.png and /dev/null differ
diff --git a/graphics/enemy/skelarcher_shoot.png b/graphics/enemy/skelarcher_shoot.png
index 4426a65..d975d09 100644
Binary files a/graphics/enemy/skelarcher_shoot.png and b/graphics/enemy/skelarcher_shoot.png differ
diff --git a/graphics/enemy/slime_blue.png b/graphics/enemy/slime_blue.png
deleted file mode 100644
index 4bdb1ba..0000000
Binary files a/graphics/enemy/slime_blue.png and /dev/null differ
diff --git a/graphics/enemy/slime_blue.png.import b/graphics/enemy/slime_blue.png.import
deleted file mode 100644
index a010165..0000000
--- a/graphics/enemy/slime_blue.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/slime_blue.png"
-dest_files=[ "res://.import/slime_blue.png-08b8c9d415101018014b3150d00f766f.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/slime_green.png b/graphics/enemy/slime_green.png
deleted file mode 100644
index 39928d2..0000000
Binary files a/graphics/enemy/slime_green.png and /dev/null differ
diff --git a/graphics/enemy/slime_green.png.import b/graphics/enemy/slime_green.png.import
deleted file mode 100644
index cd9ee90..0000000
--- a/graphics/enemy/slime_green.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/slime_green.png"
-dest_files=[ "res://.import/slime_green.png-9784384e610afbd1660a5f91be577d8f.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/slime_purple.png.import b/graphics/enemy/slime_purple.png.import
deleted file mode 100644
index 90475d6..0000000
--- a/graphics/enemy/slime_purple.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/enemy/slime_purple.png"
-dest_files=[ "res://.import/slime_purple.png-2e24557adf5bdd2777a17906d3867cf5.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/enemy/snail.png b/graphics/enemy/snail.png
index 5505e20..6bfe69a 100644
Binary files a/graphics/enemy/snail.png and b/graphics/enemy/snail.png differ
diff --git a/graphics/enemy/snake.png b/graphics/enemy/snake.png
index b0a124d..051ad8e 100644
Binary files a/graphics/enemy/snake.png and b/graphics/enemy/snake.png differ
diff --git a/graphics/enemy/squig.png b/graphics/enemy/squig.png
new file mode 100644
index 0000000..00ada40
Binary files /dev/null and b/graphics/enemy/squig.png differ
diff --git a/graphics/enemy/squig.png.import b/graphics/enemy/squig.png.import
new file mode 100644
index 0000000..faf61b4
--- /dev/null
+++ b/graphics/enemy/squig.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/squig.png-17d636ce34898af05744f4145669e9ed.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/squig.png"
+dest_files=[ "res://.import/squig.png-17d636ce34898af05744f4145669e9ed.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/stg_bullet.png b/graphics/enemy/stg_bullet.png
new file mode 100644
index 0000000..0d77065
Binary files /dev/null and b/graphics/enemy/stg_bullet.png differ
diff --git a/graphics/enemy/stg_bullet.png.import b/graphics/enemy/stg_bullet.png.import
new file mode 100644
index 0000000..d230970
--- /dev/null
+++ b/graphics/enemy/stg_bullet.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stg_bullet.png-3ab70a711eb012e51f77e11932f8bd02.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/stg_bullet.png"
+dest_files=[ "res://.import/stg_bullet.png-3ab70a711eb012e51f77e11932f8bd02.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/tin.png b/graphics/enemy/tin.png
new file mode 100644
index 0000000..a9ba19c
Binary files /dev/null and b/graphics/enemy/tin.png differ
diff --git a/graphics/enemy/tin.png.import b/graphics/enemy/tin.png.import
new file mode 100644
index 0000000..4f33a40
--- /dev/null
+++ b/graphics/enemy/tin.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tin.png-5d733ddd1f13d5cb9a4546391a220dfb.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/tin.png"
+dest_files=[ "res://.import/tin.png-5d733ddd1f13d5cb9a4546391a220dfb.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/tin_eye.png b/graphics/enemy/tin_eye.png
new file mode 100644
index 0000000..2e8acd6
Binary files /dev/null and b/graphics/enemy/tin_eye.png differ
diff --git a/graphics/enemy/tin_eye.png.import b/graphics/enemy/tin_eye.png.import
new file mode 100644
index 0000000..995c231
--- /dev/null
+++ b/graphics/enemy/tin_eye.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tin_eye.png-dd282f2fe6b907439d8561e8a420df07.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/tin_eye.png"
+dest_files=[ "res://.import/tin_eye.png-dd282f2fe6b907439d8561e8a420df07.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/enemy/turtle.png b/graphics/enemy/turtle.png
new file mode 100644
index 0000000..ad4dc39
Binary files /dev/null and b/graphics/enemy/turtle.png differ
diff --git a/graphics/enemy/turtle.png.import b/graphics/enemy/turtle.png.import
new file mode 100644
index 0000000..4564080
--- /dev/null
+++ b/graphics/enemy/turtle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turtle.png-7f0700b33935e20aa7dac9deef68652e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/enemy/turtle.png"
+dest_files=[ "res://.import/turtle.png-7f0700b33935e20aa7dac9deef68652e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/exit/exit.png b/graphics/exit/exit.png
index 5974678..53c0b91 100644
Binary files a/graphics/exit/exit.png and b/graphics/exit/exit.png differ
diff --git a/graphics/exit/exit_back.png b/graphics/exit/exit_back.png
new file mode 100644
index 0000000..2680d36
Binary files /dev/null and b/graphics/exit/exit_back.png differ
diff --git a/graphics/exit/exit_back.png.import b/graphics/exit/exit_back.png.import
new file mode 100644
index 0000000..6fc7734
--- /dev/null
+++ b/graphics/exit/exit_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/exit_back.png-cd39ec899573a453a62e1f55eaf2a249.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/exit/exit_back.png"
+dest_files=[ "res://.import/exit_back.png-cd39ec899573a453a62e1f55eaf2a249.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/diamonds.png b/graphics/fade_patterns/diamonds.png
new file mode 100644
index 0000000..c7fed7a
Binary files /dev/null and b/graphics/fade_patterns/diamonds.png differ
diff --git a/graphics/fade_patterns/diamonds.png.import b/graphics/fade_patterns/diamonds.png.import
new file mode 100644
index 0000000..ea84281
--- /dev/null
+++ b/graphics/fade_patterns/diamonds.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/diamonds.png-1b6afccd789d89c964ce5cbd8de4f0ae.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/diamonds.png"
+dest_files=[ "res://.import/diamonds.png-1b6afccd789d89c964ce5cbd8de4f0ae.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/diamonds2.png b/graphics/fade_patterns/diamonds2.png
new file mode 100644
index 0000000..07c0dd9
Binary files /dev/null and b/graphics/fade_patterns/diamonds2.png differ
diff --git a/graphics/fade_patterns/diamonds2.png.import b/graphics/fade_patterns/diamonds2.png.import
new file mode 100644
index 0000000..a7a66ed
--- /dev/null
+++ b/graphics/fade_patterns/diamonds2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/diamonds2.png-6384575a151993f4e1e5204bb9fa7ccd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/diamonds2.png"
+dest_files=[ "res://.import/diamonds2.png-6384575a151993f4e1e5204bb9fa7ccd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/spiral.png b/graphics/fade_patterns/spiral.png
new file mode 100644
index 0000000..e56fb5e
Binary files /dev/null and b/graphics/fade_patterns/spiral.png differ
diff --git a/graphics/fade_patterns/spiral.png.import b/graphics/fade_patterns/spiral.png.import
new file mode 100644
index 0000000..b1af641
--- /dev/null
+++ b/graphics/fade_patterns/spiral.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/spiral.png-0cc8af891fa9e8064a38fe7b4ba16e11.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/spiral.png"
+dest_files=[ "res://.import/spiral.png-0cc8af891fa9e8064a38fe7b4ba16e11.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/squares.png b/graphics/fade_patterns/squares.png
new file mode 100644
index 0000000..2253fe5
Binary files /dev/null and b/graphics/fade_patterns/squares.png differ
diff --git a/graphics/fade_patterns/squares.png.import b/graphics/fade_patterns/squares.png.import
new file mode 100644
index 0000000..8827618
--- /dev/null
+++ b/graphics/fade_patterns/squares.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/squares.png-9179c9007a057ecbe55c2a166ac31c9c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/squares.png"
+dest_files=[ "res://.import/squares.png-9179c9007a057ecbe55c2a166ac31c9c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/squarescascade.png b/graphics/fade_patterns/squarescascade.png
new file mode 100644
index 0000000..8b8067e
Binary files /dev/null and b/graphics/fade_patterns/squarescascade.png differ
diff --git a/graphics/fade_patterns/squarescascade.png.import b/graphics/fade_patterns/squarescascade.png.import
new file mode 100644
index 0000000..97c0d82
--- /dev/null
+++ b/graphics/fade_patterns/squarescascade.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/squarescascade.png-03b9f723f6548e48efaf22430cfd4855.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/squarescascade.png"
+dest_files=[ "res://.import/squarescascade.png-03b9f723f6548e48efaf22430cfd4855.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/fade_patterns/stg_explosion.png b/graphics/fade_patterns/stg_explosion.png
new file mode 100644
index 0000000..2f01069
Binary files /dev/null and b/graphics/fade_patterns/stg_explosion.png differ
diff --git a/graphics/fade_patterns/stg_explosion.png.import b/graphics/fade_patterns/stg_explosion.png.import
new file mode 100644
index 0000000..c5c9f14
--- /dev/null
+++ b/graphics/fade_patterns/stg_explosion.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stg_explosion.png-598b3ffe756e54c024ac9b9212bc795c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/fade_patterns/stg_explosion.png"
+dest_files=[ "res://.import/stg_explosion.png-598b3ffe756e54c024ac9b9212bc795c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/falling_block/falling_block_cave.png b/graphics/falling_block/falling_block_cave.png
index a74c260..b359269 100644
Binary files a/graphics/falling_block/falling_block_cave.png and b/graphics/falling_block/falling_block_cave.png differ
diff --git a/graphics/falling_block/falling_block_lab.png b/graphics/falling_block/falling_block_lab.png
new file mode 100644
index 0000000..83da745
Binary files /dev/null and b/graphics/falling_block/falling_block_lab.png differ
diff --git a/graphics/falling_block/falling_block_lab.png.import b/graphics/falling_block/falling_block_lab.png.import
new file mode 100644
index 0000000..8666b06
--- /dev/null
+++ b/graphics/falling_block/falling_block_lab.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/falling_block_lab.png-6ebf33dbe45acfe91ee6786039182d5d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/falling_block/falling_block_lab.png"
+dest_files=[ "res://.import/falling_block_lab.png-6ebf33dbe45acfe91ee6786039182d5d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/falling_block/woeful_soul.png b/graphics/falling_block/woeful_soul.png
new file mode 100644
index 0000000..4ee9813
Binary files /dev/null and b/graphics/falling_block/woeful_soul.png differ
diff --git a/graphics/falling_block/woeful_soul.png.import b/graphics/falling_block/woeful_soul.png.import
new file mode 100644
index 0000000..fde01eb
--- /dev/null
+++ b/graphics/falling_block/woeful_soul.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/woeful_soul.png-965187965bd4c63511479b4beca52f66.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/falling_block/woeful_soul.png"
+dest_files=[ "res://.import/woeful_soul.png-965187965bd4c63511479b4beca52f66.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/graffiti/msx.png b/graphics/graffiti/msx.png
new file mode 100644
index 0000000..09feec8
Binary files /dev/null and b/graphics/graffiti/msx.png differ
diff --git a/graphics/graffiti/msx.png.import b/graphics/graffiti/msx.png.import
new file mode 100644
index 0000000..1128f0a
--- /dev/null
+++ b/graphics/graffiti/msx.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx.png-048931302361c46e2dea865ea468e7ee.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/graffiti/msx.png"
+dest_files=[ "res://.import/msx.png-048931302361c46e2dea865ea468e7ee.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/graffiti/msx_was_here.png b/graphics/graffiti/msx_was_here.png
new file mode 100644
index 0000000..2554723
Binary files /dev/null and b/graphics/graffiti/msx_was_here.png differ
diff --git a/graphics/graffiti/msx_was_here.png.import b/graphics/graffiti/msx_was_here.png.import
new file mode 100644
index 0000000..ad73f48
--- /dev/null
+++ b/graphics/graffiti/msx_was_here.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_was_here.png-32f1e7652867d3f31f30cfec2a95d8c1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/graffiti/msx_was_here.png"
+dest_files=[ "res://.import/msx_was_here.png-32f1e7652867d3f31f30cfec2a95d8c1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/graffiti/tgirls_rule.png b/graphics/graffiti/tgirls_rule.png
new file mode 100644
index 0000000..23cd428
Binary files /dev/null and b/graphics/graffiti/tgirls_rule.png differ
diff --git a/graphics/graffiti/tgirls_rule.png.import b/graphics/graffiti/tgirls_rule.png.import
new file mode 100644
index 0000000..f7facc3
--- /dev/null
+++ b/graphics/graffiti/tgirls_rule.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tgirls_rule.png-950e00f23b61559d8aebd3aad7c0ee33.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/graffiti/tgirls_rule.png"
+dest_files=[ "res://.import/tgirls_rule.png-950e00f23b61559d8aebd3aad7c0ee33.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hatch/hatch.png b/graphics/hatch/hatch.png
new file mode 100644
index 0000000..7fe68f6
Binary files /dev/null and b/graphics/hatch/hatch.png differ
diff --git a/graphics/hatch/hatch.png.import b/graphics/hatch/hatch.png.import
new file mode 100644
index 0000000..e3cf96f
--- /dev/null
+++ b/graphics/hatch/hatch.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hatch.png-e12a4a7b9a8d86a05e31be49a9422eca.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hatch/hatch.png"
+dest_files=[ "res://.import/hatch.png-e12a4a7b9a8d86a05e31be49a9422eca.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/2083_energy_back.png b/graphics/hud/2083_energy_back.png
new file mode 100644
index 0000000..7d44221
Binary files /dev/null and b/graphics/hud/2083_energy_back.png differ
diff --git a/graphics/hud/2083_energy_back.png.import b/graphics/hud/2083_energy_back.png.import
new file mode 100644
index 0000000..f7ad9c2
--- /dev/null
+++ b/graphics/hud/2083_energy_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2083_energy_back.png-11dd98a9d72b54c8260155992faf6158.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/2083_energy_back.png"
+dest_files=[ "res://.import/2083_energy_back.png-11dd98a9d72b54c8260155992faf6158.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/2083_energy_filled.png b/graphics/hud/2083_energy_filled.png
new file mode 100644
index 0000000..95f1101
Binary files /dev/null and b/graphics/hud/2083_energy_filled.png differ
diff --git a/graphics/hud/2083_energy_filled.png.import b/graphics/hud/2083_energy_filled.png.import
new file mode 100644
index 0000000..f40b60e
--- /dev/null
+++ b/graphics/hud/2083_energy_filled.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2083_energy_filled.png-33bce25982854ea73e3364035f2d3a2b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/2083_energy_filled.png"
+dest_files=[ "res://.import/2083_energy_filled.png-33bce25982854ea73e3364035f2d3a2b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/2083_health_back.png b/graphics/hud/2083_health_back.png
new file mode 100644
index 0000000..7222ec1
Binary files /dev/null and b/graphics/hud/2083_health_back.png differ
diff --git a/graphics/hud/2083_health_back.png.import b/graphics/hud/2083_health_back.png.import
new file mode 100644
index 0000000..c308a09
--- /dev/null
+++ b/graphics/hud/2083_health_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2083_health_back.png-5fcc5a99e8ed1532568696eb69fd0d43.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/2083_health_back.png"
+dest_files=[ "res://.import/2083_health_back.png-5fcc5a99e8ed1532568696eb69fd0d43.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/2083_health_filled.png b/graphics/hud/2083_health_filled.png
new file mode 100644
index 0000000..6e00191
Binary files /dev/null and b/graphics/hud/2083_health_filled.png differ
diff --git a/graphics/hud/2083_health_filled.png.import b/graphics/hud/2083_health_filled.png.import
new file mode 100644
index 0000000..ca86966
--- /dev/null
+++ b/graphics/hud/2083_health_filled.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2083_health_filled.png-44b40a17a023454bbb8170346f74b17f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/2083_health_filled.png"
+dest_files=[ "res://.import/2083_health_filled.png-44b40a17a023454bbb8170346f74b17f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/arrow_down.png b/graphics/hud/arrow_down.png
new file mode 100644
index 0000000..b077880
Binary files /dev/null and b/graphics/hud/arrow_down.png differ
diff --git a/graphics/hud/arrow_down.png.import b/graphics/hud/arrow_down.png.import
new file mode 100644
index 0000000..147e2b1
--- /dev/null
+++ b/graphics/hud/arrow_down.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arrow_down.png-476089e36c213673a0f11adb99cc0724.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/arrow_down.png"
+dest_files=[ "res://.import/arrow_down.png-476089e36c213673a0f11adb99cc0724.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/arrow_up.png b/graphics/hud/arrow_up.png
new file mode 100644
index 0000000..795cca0
Binary files /dev/null and b/graphics/hud/arrow_up.png differ
diff --git a/graphics/hud/arrow_up.png.import b/graphics/hud/arrow_up.png.import
new file mode 100644
index 0000000..b303c7a
--- /dev/null
+++ b/graphics/hud/arrow_up.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arrow_up.png-afb605e867089f8aedd83a8cc3ba6369.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/arrow_up.png"
+dest_files=[ "res://.import/arrow_up.png-afb605e867089f8aedd83a8cc3ba6369.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/back.png b/graphics/hud/back.png
new file mode 100644
index 0000000..67dc879
Binary files /dev/null and b/graphics/hud/back.png differ
diff --git a/graphics/hud/back.png.import b/graphics/hud/back.png.import
new file mode 100644
index 0000000..53429b6
--- /dev/null
+++ b/graphics/hud/back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/back.png-af9fa24ee27e034b2c861ccb4762fa95.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/back.png"
+dest_files=[ "res://.import/back.png-af9fa24ee27e034b2c861ccb4762fa95.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/back_dim.png b/graphics/hud/back_dim.png
new file mode 100644
index 0000000..eee8d27
Binary files /dev/null and b/graphics/hud/back_dim.png differ
diff --git a/graphics/hud/back_dim.png.import b/graphics/hud/back_dim.png.import
new file mode 100644
index 0000000..3e2d3c8
--- /dev/null
+++ b/graphics/hud/back_dim.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/back_dim.png-9b702d592d23c89eb848d819a2b0a7cb.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/back_dim.png"
+dest_files=[ "res://.import/back_dim.png-9b702d592d23c89eb848d819a2b0a7cb.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/boss_health_back.png b/graphics/hud/boss_health_back.png
new file mode 100644
index 0000000..46218a7
Binary files /dev/null and b/graphics/hud/boss_health_back.png differ
diff --git a/graphics/hud/boss_health_back.png.import b/graphics/hud/boss_health_back.png.import
new file mode 100644
index 0000000..4523486
--- /dev/null
+++ b/graphics/hud/boss_health_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/boss_health_back.png-c5ec975a0abf1a1c0a45705fcc5f82b7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/boss_health_back.png"
+dest_files=[ "res://.import/boss_health_back.png-c5ec975a0abf1a1c0a45705fcc5f82b7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/coin_counter.png.import b/graphics/hud/coin_counter.png.import
new file mode 100644
index 0000000..c625aa6
--- /dev/null
+++ b/graphics/hud/coin_counter.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/coin_counter.png-888d3029a846d3da4a291c7e27b8e0a7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/coin_counter.png"
+dest_files=[ "res://.import/coin_counter.png-888d3029a846d3da4a291c7e27b8e0a7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/collection_bonus.png b/graphics/hud/collection_bonus.png
new file mode 100644
index 0000000..343767d
Binary files /dev/null and b/graphics/hud/collection_bonus.png differ
diff --git a/graphics/hud/collection_bonus.png.import b/graphics/hud/collection_bonus.png.import
new file mode 100644
index 0000000..577f988
--- /dev/null
+++ b/graphics/hud/collection_bonus.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/collection_bonus.png-c0498f7550478bc8b1614afa3fdb3e89.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/collection_bonus.png"
+dest_files=[ "res://.import/collection_bonus.png-c0498f7550478bc8b1614afa3fdb3e89.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/deaths_head.png b/graphics/hud/deaths_head.png
new file mode 100644
index 0000000..5570267
Binary files /dev/null and b/graphics/hud/deaths_head.png differ
diff --git a/graphics/hud/deaths_head.png.import b/graphics/hud/deaths_head.png.import
new file mode 100644
index 0000000..3a303ff
--- /dev/null
+++ b/graphics/hud/deaths_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/deaths_head.png-8207d14882a026c4638e68f6f058ba2f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/deaths_head.png"
+dest_files=[ "res://.import/deaths_head.png-8207d14882a026c4638e68f6f058ba2f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/delete.png b/graphics/hud/delete.png
new file mode 100644
index 0000000..4029e0f
Binary files /dev/null and b/graphics/hud/delete.png differ
diff --git a/graphics/hud/delete.png.import b/graphics/hud/delete.png.import
new file mode 100644
index 0000000..6c1e3df
--- /dev/null
+++ b/graphics/hud/delete.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/delete.png-9117bf6c631defbca88858287a9f5ad3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/delete.png"
+dest_files=[ "res://.import/delete.png-9117bf6c631defbca88858287a9f5ad3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/delete_dim.png b/graphics/hud/delete_dim.png
new file mode 100644
index 0000000..3771d8e
Binary files /dev/null and b/graphics/hud/delete_dim.png differ
diff --git a/graphics/hud/delete_dim.png.import b/graphics/hud/delete_dim.png.import
new file mode 100644
index 0000000..2e0219e
--- /dev/null
+++ b/graphics/hud/delete_dim.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/delete_dim.png-0fe030b64fef9e199335b59b8477cc54.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/delete_dim.png"
+dest_files=[ "res://.import/delete_dim.png-0fe030b64fef9e199335b59b8477cc54.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/down_prompt.png b/graphics/hud/down_prompt.png
new file mode 100644
index 0000000..a22a3d2
Binary files /dev/null and b/graphics/hud/down_prompt.png differ
diff --git a/graphics/hud/down_prompt.png.import b/graphics/hud/down_prompt.png.import
new file mode 100644
index 0000000..c568451
--- /dev/null
+++ b/graphics/hud/down_prompt.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/down_prompt.png-89717297e979e201fddd0a1efbfcafb6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/down_prompt.png"
+dest_files=[ "res://.import/down_prompt.png-89717297e979e201fddd0a1efbfcafb6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/famira_health_back.png b/graphics/hud/famira_health_back.png
new file mode 100644
index 0000000..a3c9a9c
Binary files /dev/null and b/graphics/hud/famira_health_back.png differ
diff --git a/graphics/hud/famira_health_back.png.import b/graphics/hud/famira_health_back.png.import
new file mode 100644
index 0000000..58ff57d
--- /dev/null
+++ b/graphics/hud/famira_health_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_health_back.png-e56d7b671e52edb71218a9a73df2de68.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/famira_health_back.png"
+dest_files=[ "res://.import/famira_health_back.png-e56d7b671e52edb71218a9a73df2de68.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/famira_health_bar.png b/graphics/hud/famira_health_bar.png
new file mode 100644
index 0000000..a6e3946
Binary files /dev/null and b/graphics/hud/famira_health_bar.png differ
diff --git a/graphics/hud/famira_health_bar.png.import b/graphics/hud/famira_health_bar.png.import
new file mode 100644
index 0000000..e9a001b
--- /dev/null
+++ b/graphics/hud/famira_health_bar.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_health_bar.png-063ac979690728319544ff2981510039.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/famira_health_bar.png"
+dest_files=[ "res://.import/famira_health_bar.png-063ac979690728319544ff2981510039.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/famira_health_bar_filled.png.import b/graphics/hud/famira_health_bar_filled.png.import
new file mode 100644
index 0000000..3bf8b7c
--- /dev/null
+++ b/graphics/hud/famira_health_bar_filled.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_health_bar_filled.png-b876077097f24cd200f1d2d915a33255.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/famira_health_bar_filled.png"
+dest_files=[ "res://.import/famira_health_bar_filled.png-b876077097f24cd200f1d2d915a33255.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/famira_health_filled.png b/graphics/hud/famira_health_filled.png
new file mode 100644
index 0000000..db1fc92
Binary files /dev/null and b/graphics/hud/famira_health_filled.png differ
diff --git a/graphics/hud/famira_health_filled.png.import b/graphics/hud/famira_health_filled.png.import
new file mode 100644
index 0000000..0ffe6c6
--- /dev/null
+++ b/graphics/hud/famira_health_filled.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_health_filled.png-a06f76ad0a946df51e9ccad3452b0465.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/famira_health_filled.png"
+dest_files=[ "res://.import/famira_health_filled.png-a06f76ad0a946df51e9ccad3452b0465.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/file_select_arrow.png b/graphics/hud/file_select_arrow.png
new file mode 100644
index 0000000..111ffcc
Binary files /dev/null and b/graphics/hud/file_select_arrow.png differ
diff --git a/graphics/hud/file_select_arrow.png.import b/graphics/hud/file_select_arrow.png.import
new file mode 100644
index 0000000..b9569fd
--- /dev/null
+++ b/graphics/hud/file_select_arrow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/file_select_arrow.png-c4dd38af48f940ca232cee7aab98deca.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/file_select_arrow.png"
+dest_files=[ "res://.import/file_select_arrow.png-c4dd38af48f940ca232cee7aab98deca.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/final_score.png b/graphics/hud/final_score.png
new file mode 100644
index 0000000..8d90201
Binary files /dev/null and b/graphics/hud/final_score.png differ
diff --git a/graphics/hud/final_score.png.import b/graphics/hud/final_score.png.import
new file mode 100644
index 0000000..7b4dcbc
--- /dev/null
+++ b/graphics/hud/final_score.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/final_score.png-fb476d39fc42e0aa87fe7b2a0ad829cc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/final_score.png"
+dest_files=[ "res://.import/final_score.png-fb476d39fc42e0aa87fe7b2a0ad829cc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/game_staff.png b/graphics/hud/game_staff.png
new file mode 100644
index 0000000..0a75c9f
Binary files /dev/null and b/graphics/hud/game_staff.png differ
diff --git a/graphics/hud/game_staff.png.import b/graphics/hud/game_staff.png.import
new file mode 100644
index 0000000..c2d57db
--- /dev/null
+++ b/graphics/hud/game_staff.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/game_staff.png-9b292cd6ee053785af7dfc5839c49ecc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/game_staff.png"
+dest_files=[ "res://.import/game_staff.png-9b292cd6ee053785af7dfc5839c49ecc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/gamepad_buttons.png b/graphics/hud/gamepad_buttons.png
new file mode 100644
index 0000000..703f78c
Binary files /dev/null and b/graphics/hud/gamepad_buttons.png differ
diff --git a/graphics/hud/gamepad_buttons.png.import b/graphics/hud/gamepad_buttons.png.import
new file mode 100644
index 0000000..3ca0780
--- /dev/null
+++ b/graphics/hud/gamepad_buttons.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/gamepad_buttons.png-2be301e9c2e67e54b73d3d64156de301.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/gamepad_buttons.png"
+dest_files=[ "res://.import/gamepad_buttons.png-2be301e9c2e67e54b73d3d64156de301.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/godot_splash.png b/graphics/hud/godot_splash.png
new file mode 100644
index 0000000..963a9df
Binary files /dev/null and b/graphics/hud/godot_splash.png differ
diff --git a/graphics/hud/godot_splash.png.import b/graphics/hud/godot_splash.png.import
new file mode 100644
index 0000000..4d61550
--- /dev/null
+++ b/graphics/hud/godot_splash.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/godot_splash.png-5d8819d8c94270b9158234d3ebb5bf62.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/godot_splash.png"
+dest_files=[ "res://.import/godot_splash.png-5d8819d8c94270b9158234d3ebb5bf62.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/gold_counter.png b/graphics/hud/gold_counter.png
new file mode 100644
index 0000000..5cf10a4
Binary files /dev/null and b/graphics/hud/gold_counter.png differ
diff --git a/graphics/hud/gold_counter.png.import b/graphics/hud/gold_counter.png.import
new file mode 100644
index 0000000..92dbdd7
--- /dev/null
+++ b/graphics/hud/gold_counter.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/gold_counter.png-2022a2cb58f1c48c8ab57aedbb553592.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/gold_counter.png"
+dest_files=[ "res://.import/gold_counter.png-2022a2cb58f1c48c8ab57aedbb553592.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/high_score.png b/graphics/hud/high_score.png
new file mode 100644
index 0000000..908a3d7
Binary files /dev/null and b/graphics/hud/high_score.png differ
diff --git a/graphics/hud/high_score.png.import b/graphics/hud/high_score.png.import
new file mode 100644
index 0000000..23b4081
--- /dev/null
+++ b/graphics/hud/high_score.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/high_score.png-02ca81bb7439e75fa559a1c0a399afc3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/high_score.png"
+dest_files=[ "res://.import/high_score.png-02ca81bb7439e75fa559a1c0a399afc3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/hslider_grabber.png b/graphics/hud/hslider_grabber.png
new file mode 100644
index 0000000..feefd58
Binary files /dev/null and b/graphics/hud/hslider_grabber.png differ
diff --git a/graphics/hud/hslider_grabber.png.import b/graphics/hud/hslider_grabber.png.import
new file mode 100644
index 0000000..d67472d
--- /dev/null
+++ b/graphics/hud/hslider_grabber.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hslider_grabber.png-c706e239e429c74f08afcd7244f24e5e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/hslider_grabber.png"
+dest_files=[ "res://.import/hslider_grabber.png-c706e239e429c74f08afcd7244f24e5e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/hslider_grabber_focused.png b/graphics/hud/hslider_grabber_focused.png
new file mode 100644
index 0000000..b0f5270
Binary files /dev/null and b/graphics/hud/hslider_grabber_focused.png differ
diff --git a/graphics/hud/hslider_grabber_focused.png.import b/graphics/hud/hslider_grabber_focused.png.import
new file mode 100644
index 0000000..0f7fb70
--- /dev/null
+++ b/graphics/hud/hslider_grabber_focused.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hslider_grabber_focused.png-48312a8e36afc2eacf49d5c4ba2472b9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/hslider_grabber_focused.png"
+dest_files=[ "res://.import/hslider_grabber_focused.png-48312a8e36afc2eacf49d5c4ba2472b9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/hslider_slider.png b/graphics/hud/hslider_slider.png
new file mode 100644
index 0000000..d7a4adc
Binary files /dev/null and b/graphics/hud/hslider_slider.png differ
diff --git a/graphics/hud/hslider_slider.png.import b/graphics/hud/hslider_slider.png.import
new file mode 100644
index 0000000..59d106a
--- /dev/null
+++ b/graphics/hud/hslider_slider.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hslider_slider.png-fb09b533480611aefefa9fcda43d6545.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/hslider_slider.png"
+dest_files=[ "res://.import/hslider_slider.png-fb09b533480611aefefa9fcda43d6545.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/hud.png b/graphics/hud/hud.png
index c476c60..5b18871 100644
Binary files a/graphics/hud/hud.png and b/graphics/hud/hud.png differ
diff --git a/graphics/hud/hud_arrow.png b/graphics/hud/hud_arrow.png
new file mode 100644
index 0000000..2003e91
Binary files /dev/null and b/graphics/hud/hud_arrow.png differ
diff --git a/graphics/hud/hud_arrow.png.import b/graphics/hud/hud_arrow.png.import
new file mode 100644
index 0000000..b551078
--- /dev/null
+++ b/graphics/hud/hud_arrow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/hud_arrow.png-41c44a240363dedbd3291d11e50b15f7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/hud_arrow.png"
+dest_files=[ "res://.import/hud_arrow.png-41c44a240363dedbd3291d11e50b15f7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/hud_old.png b/graphics/hud/hud_old.png
deleted file mode 100644
index 74192a2..0000000
Binary files a/graphics/hud/hud_old.png and /dev/null differ
diff --git a/graphics/hud/hud_old.png.import b/graphics/hud/hud_old.png.import
deleted file mode 100644
index d689cbe..0000000
--- a/graphics/hud/hud_old.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/hud/hud_old.png"
-dest_files=[ "res://.import/hud_old.png-375dbe46e18dedab40b4fcb3c0bcf043.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/hud/key_counter.png b/graphics/hud/key_counter.png
new file mode 100644
index 0000000..b05b908
Binary files /dev/null and b/graphics/hud/key_counter.png differ
diff --git a/graphics/hud/key_counter.png.import b/graphics/hud/key_counter.png.import
new file mode 100644
index 0000000..c2e1e59
--- /dev/null
+++ b/graphics/hud/key_counter.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/key_counter.png-da2d7c7bd7de08c5ebbb97a7c4ceb9dd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/key_counter.png"
+dest_files=[ "res://.import/key_counter.png-da2d7c7bd7de08c5ebbb97a7c4ceb9dd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/killmode_skull.png b/graphics/hud/killmode_skull.png
new file mode 100644
index 0000000..f66be54
Binary files /dev/null and b/graphics/hud/killmode_skull.png differ
diff --git a/graphics/hud/killmode_skull.png.import b/graphics/hud/killmode_skull.png.import
new file mode 100644
index 0000000..70b0f95
--- /dev/null
+++ b/graphics/hud/killmode_skull.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/killmode_skull.png-b04f545789948a183bd39a46c229e29a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/killmode_skull.png"
+dest_files=[ "res://.import/killmode_skull.png-b04f545789948a183bd39a46c229e29a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/laser_ok.png b/graphics/hud/laser_ok.png
new file mode 100644
index 0000000..59273b9
Binary files /dev/null and b/graphics/hud/laser_ok.png differ
diff --git a/graphics/hud/laser_ok.png.import b/graphics/hud/laser_ok.png.import
new file mode 100644
index 0000000..7e74a1b
--- /dev/null
+++ b/graphics/hud/laser_ok.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/laser_ok.png-126e4d7df435412bb6a8cf636d6c3b24.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/laser_ok.png"
+dest_files=[ "res://.import/laser_ok.png-126e4d7df435412bb6a8cf636d6c3b24.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/laser_ok_text.png b/graphics/hud/laser_ok_text.png
new file mode 100644
index 0000000..f085abe
Binary files /dev/null and b/graphics/hud/laser_ok_text.png differ
diff --git a/graphics/hud/laser_ok_text.png.import b/graphics/hud/laser_ok_text.png.import
new file mode 100644
index 0000000..c4193ea
--- /dev/null
+++ b/graphics/hud/laser_ok_text.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/laser_ok_text.png-d6af5ac9f51f62aab017a6b2e8ec549a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/laser_ok_text.png"
+dest_files=[ "res://.import/laser_ok_text.png-d6af5ac9f51f62aab017a6b2e8ec549a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/letter_blocks.png b/graphics/hud/letter_blocks.png
new file mode 100644
index 0000000..6d4ab15
Binary files /dev/null and b/graphics/hud/letter_blocks.png differ
diff --git a/graphics/hud/letter_blocks.png.import b/graphics/hud/letter_blocks.png.import
new file mode 100644
index 0000000..f8b9d43
--- /dev/null
+++ b/graphics/hud/letter_blocks.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/letter_blocks.png-b999452f443d17ac8d79aa4caf470f5a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/letter_blocks.png"
+dest_files=[ "res://.import/letter_blocks.png-b999452f443d17ac8d79aa4caf470f5a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/levelselect_arrow.png b/graphics/hud/levelselect_arrow.png
index e151ead..661237e 100644
Binary files a/graphics/hud/levelselect_arrow.png and b/graphics/hud/levelselect_arrow.png differ
diff --git a/graphics/hud/life_bonus.png b/graphics/hud/life_bonus.png
new file mode 100644
index 0000000..b1ca23e
Binary files /dev/null and b/graphics/hud/life_bonus.png differ
diff --git a/graphics/hud/life_bonus.png.import b/graphics/hud/life_bonus.png.import
new file mode 100644
index 0000000..5c3c8c0
--- /dev/null
+++ b/graphics/hud/life_bonus.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/life_bonus.png-0f9d1521de3f08e08ca6e0b90e3ef8d2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/life_bonus.png"
+dest_files=[ "res://.import/life_bonus.png-0f9d1521de3f08e08ca6e0b90e3ef8d2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/listen_to_the_future.png b/graphics/hud/listen_to_the_future.png
new file mode 100644
index 0000000..37d93f5
Binary files /dev/null and b/graphics/hud/listen_to_the_future.png differ
diff --git a/graphics/hud/listen_to_the_future.png.import b/graphics/hud/listen_to_the_future.png.import
new file mode 100644
index 0000000..900063c
--- /dev/null
+++ b/graphics/hud/listen_to_the_future.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/listen_to_the_future.png-18afd75ae8025c1763d363989bb142bd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/listen_to_the_future.png"
+dest_files=[ "res://.import/listen_to_the_future.png-18afd75ae8025c1763d363989bb142bd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/lives_head.png b/graphics/hud/lives_head.png
new file mode 100644
index 0000000..ad20671
Binary files /dev/null and b/graphics/hud/lives_head.png differ
diff --git a/graphics/hud/lives_head.png.import b/graphics/hud/lives_head.png.import
new file mode 100644
index 0000000..72aeb31
--- /dev/null
+++ b/graphics/hud/lives_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/lives_head.png-d13195bbf6be6456364b8977d7fcec9a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/lives_head.png"
+dest_files=[ "res://.import/lives_head.png-d13195bbf6be6456364b8977d7fcec9a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/logo.png b/graphics/hud/logo.png
new file mode 100644
index 0000000..5b8142b
Binary files /dev/null and b/graphics/hud/logo.png differ
diff --git a/graphics/hud/logo.png.import b/graphics/hud/logo.png.import
new file mode 100644
index 0000000..5c3731e
--- /dev/null
+++ b/graphics/hud/logo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/logo.png-987a724a82090f90a871d13e95cc61e2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/logo.png"
+dest_files=[ "res://.import/logo.png-987a724a82090f90a871d13e95cc61e2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/missed_shard.png b/graphics/hud/missed_shard.png
new file mode 100644
index 0000000..4c360e2
Binary files /dev/null and b/graphics/hud/missed_shard.png differ
diff --git a/graphics/hud/missed_shard.png.import b/graphics/hud/missed_shard.png.import
new file mode 100644
index 0000000..687ffd8
--- /dev/null
+++ b/graphics/hud/missed_shard.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/missed_shard.png-26175a30421cb7606ba8b71e96c137b9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/missed_shard.png"
+dest_files=[ "res://.import/missed_shard.png-26175a30421cb7606ba8b71e96c137b9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/mori_mark.png b/graphics/hud/mori_mark.png
new file mode 100644
index 0000000..d9e14e1
Binary files /dev/null and b/graphics/hud/mori_mark.png differ
diff --git a/graphics/hud/mori_mark.png.import b/graphics/hud/mori_mark.png.import
new file mode 100644
index 0000000..ad0b28b
--- /dev/null
+++ b/graphics/hud/mori_mark.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mori_mark.png-3610f38cc63d9747d05aa7c7b9da1293.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/mori_mark.png"
+dest_files=[ "res://.import/mori_mark.png-3610f38cc63d9747d05aa7c7b9da1293.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/mori_mark_100_complete.png b/graphics/hud/mori_mark_100_complete.png
new file mode 100644
index 0000000..b45f5c9
Binary files /dev/null and b/graphics/hud/mori_mark_100_complete.png differ
diff --git a/graphics/hud/mori_mark_100_complete.png.import b/graphics/hud/mori_mark_100_complete.png.import
new file mode 100644
index 0000000..dc69285
--- /dev/null
+++ b/graphics/hud/mori_mark_100_complete.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mori_mark_100_complete.png-2509ca697b7483804ebf2c252c02e267.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/mori_mark_100_complete.png"
+dest_files=[ "res://.import/mori_mark_100_complete.png-2509ca697b7483804ebf2c252c02e267.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/mori_mark_game_complete.png b/graphics/hud/mori_mark_game_complete.png
new file mode 100644
index 0000000..5072390
Binary files /dev/null and b/graphics/hud/mori_mark_game_complete.png differ
diff --git a/graphics/hud/mori_mark_game_complete.png.import b/graphics/hud/mori_mark_game_complete.png.import
new file mode 100644
index 0000000..b024f39
--- /dev/null
+++ b/graphics/hud/mori_mark_game_complete.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mori_mark_game_complete.png-190b43b85747ae66c2992e2a8a07fd96.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/mori_mark_game_complete.png"
+dest_files=[ "res://.import/mori_mark_game_complete.png-190b43b85747ae66c2992e2a8a07fd96.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/mori_mark_no_death.png b/graphics/hud/mori_mark_no_death.png
new file mode 100644
index 0000000..aa9789c
Binary files /dev/null and b/graphics/hud/mori_mark_no_death.png differ
diff --git a/graphics/hud/mori_mark_no_death.png.import b/graphics/hud/mori_mark_no_death.png.import
new file mode 100644
index 0000000..30d33ce
--- /dev/null
+++ b/graphics/hud/mori_mark_no_death.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mori_mark_no_death.png-453f189aba54dd64e99be0743422d03b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/mori_mark_no_death.png"
+dest_files=[ "res://.import/mori_mark_no_death.png-453f189aba54dd64e99be0743422d03b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/msx_head.png b/graphics/hud/msx_head.png
new file mode 100644
index 0000000..0ec7e71
Binary files /dev/null and b/graphics/hud/msx_head.png differ
diff --git a/graphics/hud/msx_head.png.import b/graphics/hud/msx_head.png.import
new file mode 100644
index 0000000..6f9b78f
--- /dev/null
+++ b/graphics/hud/msx_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_head.png-fdcdc2eae8f1ff9e51eb57e0483b2b2f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/msx_head.png"
+dest_files=[ "res://.import/msx_head.png-fdcdc2eae8f1ff9e51eb57e0483b2b2f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/off_level_indicator.png b/graphics/hud/off_level_indicator.png
new file mode 100644
index 0000000..a73bb78
Binary files /dev/null and b/graphics/hud/off_level_indicator.png differ
diff --git a/graphics/hud/off_level_indicator.png.import b/graphics/hud/off_level_indicator.png.import
new file mode 100644
index 0000000..0f45554
--- /dev/null
+++ b/graphics/hud/off_level_indicator.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/off_level_indicator.png-57fb71ce33e59c157912e9700e4a98f6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/off_level_indicator.png"
+dest_files=[ "res://.import/off_level_indicator.png-57fb71ce33e59c157912e9700e4a98f6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/oxygen.png b/graphics/hud/oxygen.png
new file mode 100644
index 0000000..a46084f
Binary files /dev/null and b/graphics/hud/oxygen.png differ
diff --git a/graphics/hud/oxygen.png.import b/graphics/hud/oxygen.png.import
new file mode 100644
index 0000000..d48e207
--- /dev/null
+++ b/graphics/hud/oxygen.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oxygen.png-bc27b1760336003353c838235a4cb02c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/oxygen.png"
+dest_files=[ "res://.import/oxygen.png-bc27b1760336003353c838235a4cb02c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/oxygen_blips.png b/graphics/hud/oxygen_blips.png
new file mode 100644
index 0000000..ac4b0f8
Binary files /dev/null and b/graphics/hud/oxygen_blips.png differ
diff --git a/graphics/hud/oxygen_blips.png.import b/graphics/hud/oxygen_blips.png.import
new file mode 100644
index 0000000..23d038b
--- /dev/null
+++ b/graphics/hud/oxygen_blips.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oxygen_blips.png-3f20e6a3a7f5eebc14154a2e2292ed5d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/oxygen_blips.png"
+dest_files=[ "res://.import/oxygen_blips.png-3f20e6a3a7f5eebc14154a2e2292ed5d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/oxygen_meter.png b/graphics/hud/oxygen_meter.png
new file mode 100644
index 0000000..5357304
Binary files /dev/null and b/graphics/hud/oxygen_meter.png differ
diff --git a/graphics/hud/oxygen_meter.png.import b/graphics/hud/oxygen_meter.png.import
new file mode 100644
index 0000000..e9aebb3
--- /dev/null
+++ b/graphics/hud/oxygen_meter.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oxygen_meter.png-65332a0e74d166901bfa7ecd6045514f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/oxygen_meter.png"
+dest_files=[ "res://.import/oxygen_meter.png-65332a0e74d166901bfa7ecd6045514f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/perfect_bonus.png b/graphics/hud/perfect_bonus.png
new file mode 100644
index 0000000..1a5dc88
Binary files /dev/null and b/graphics/hud/perfect_bonus.png differ
diff --git a/graphics/hud/perfect_bonus.png.import b/graphics/hud/perfect_bonus.png.import
new file mode 100644
index 0000000..d71a669
--- /dev/null
+++ b/graphics/hud/perfect_bonus.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/perfect_bonus.png-df090bb05894ccbdd3eae2afd31298d4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/perfect_bonus.png"
+dest_files=[ "res://.import/perfect_bonus.png-df090bb05894ccbdd3eae2afd31298d4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/results.png b/graphics/hud/results.png
new file mode 100644
index 0000000..0df4cae
Binary files /dev/null and b/graphics/hud/results.png differ
diff --git a/graphics/hud/results.png.import b/graphics/hud/results.png.import
new file mode 100644
index 0000000..108632e
--- /dev/null
+++ b/graphics/hud/results.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/results.png-c3c2389f681d388610852a8c684f356d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/results.png"
+dest_files=[ "res://.import/results.png-c3c2389f681d388610852a8c684f356d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/roll_call.png b/graphics/hud/roll_call.png
new file mode 100644
index 0000000..07a5bb3
Binary files /dev/null and b/graphics/hud/roll_call.png differ
diff --git a/graphics/hud/roll_call.png.import b/graphics/hud/roll_call.png.import
new file mode 100644
index 0000000..416869b
--- /dev/null
+++ b/graphics/hud/roll_call.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/roll_call.png-e7f8615e3b19317abd8b52ddd2f6b60d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/roll_call.png"
+dest_files=[ "res://.import/roll_call.png-e7f8615e3b19317abd8b52ddd2f6b60d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/scores/pungent.png b/graphics/hud/scores/pungent.png
new file mode 100644
index 0000000..7754646
Binary files /dev/null and b/graphics/hud/scores/pungent.png differ
diff --git a/graphics/hud/scores/pungent.png.import b/graphics/hud/scores/pungent.png.import
new file mode 100644
index 0000000..1265a85
--- /dev/null
+++ b/graphics/hud/scores/pungent.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/pungent.png-e07e66e400d4d252772a81c6867bb967.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/scores/pungent.png"
+dest_files=[ "res://.import/pungent.png-e07e66e400d4d252772a81c6867bb967.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/scores/salty.png b/graphics/hud/scores/salty.png
new file mode 100644
index 0000000..af22ef1
Binary files /dev/null and b/graphics/hud/scores/salty.png differ
diff --git a/graphics/hud/scores/salty.png.import b/graphics/hud/scores/salty.png.import
new file mode 100644
index 0000000..06ae307
--- /dev/null
+++ b/graphics/hud/scores/salty.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/salty.png-44a2905ee6e3795b4fc59059696696a8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/scores/salty.png"
+dest_files=[ "res://.import/salty.png-44a2905ee6e3795b4fc59059696696a8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/scores/spicy.png b/graphics/hud/scores/spicy.png
new file mode 100644
index 0000000..ddace82
Binary files /dev/null and b/graphics/hud/scores/spicy.png differ
diff --git a/graphics/hud/scores/spicy.png.import b/graphics/hud/scores/spicy.png.import
new file mode 100644
index 0000000..2e03a1a
--- /dev/null
+++ b/graphics/hud/scores/spicy.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/spicy.png-a2205eedcb443d8faf52477db79df90f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/scores/spicy.png"
+dest_files=[ "res://.import/spicy.png-a2205eedcb443d8faf52477db79df90f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/scores/sweet.png b/graphics/hud/scores/sweet.png
new file mode 100644
index 0000000..7dc896c
Binary files /dev/null and b/graphics/hud/scores/sweet.png differ
diff --git a/graphics/hud/scores/sweet.png.import b/graphics/hud/scores/sweet.png.import
new file mode 100644
index 0000000..8ed72ac
--- /dev/null
+++ b/graphics/hud/scores/sweet.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sweet.png-9fd594d4011ef7c51cf9c89d5c0132b0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/scores/sweet.png"
+dest_files=[ "res://.import/sweet.png-9fd594d4011ef7c51cf9c89d5c0132b0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sg_head.png b/graphics/hud/sg_head.png
new file mode 100644
index 0000000..d8e16a5
Binary files /dev/null and b/graphics/hud/sg_head.png differ
diff --git a/graphics/hud/sg_head.png.import b/graphics/hud/sg_head.png.import
new file mode 100644
index 0000000..cfdc5f7
--- /dev/null
+++ b/graphics/hud/sg_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_head.png-0b64f276be1b8233fbd11dadbfae739a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sg_head.png"
+dest_files=[ "res://.import/sg_head.png-0b64f276be1b8233fbd11dadbfae739a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sg_menu.png b/graphics/hud/sg_menu.png
new file mode 100644
index 0000000..4d68023
Binary files /dev/null and b/graphics/hud/sg_menu.png differ
diff --git a/graphics/hud/sg_menu.png.import b/graphics/hud/sg_menu.png.import
new file mode 100644
index 0000000..0b0937d
--- /dev/null
+++ b/graphics/hud/sg_menu.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_menu.png-1059e958ce9fae654e7b5a67b2bbfacf.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sg_menu.png"
+dest_files=[ "res://.import/sg_menu.png-1059e958ce9fae654e7b5a67b2bbfacf.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sg_menu_blink.png b/graphics/hud/sg_menu_blink.png
new file mode 100644
index 0000000..c9f4766
Binary files /dev/null and b/graphics/hud/sg_menu_blink.png differ
diff --git a/graphics/hud/sg_menu_blink.png.import b/graphics/hud/sg_menu_blink.png.import
new file mode 100644
index 0000000..53e9a64
--- /dev/null
+++ b/graphics/hud/sg_menu_blink.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_menu_blink.png-52c2e781126ecac40e3e1a9c6b79cf1c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sg_menu_blink.png"
+dest_files=[ "res://.import/sg_menu_blink.png-52c2e781126ecac40e3e1a9c6b79cf1c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sg_tasting.png b/graphics/hud/sg_tasting.png
new file mode 100644
index 0000000..13908f0
Binary files /dev/null and b/graphics/hud/sg_tasting.png differ
diff --git a/graphics/hud/sg_tasting.png.import b/graphics/hud/sg_tasting.png.import
new file mode 100644
index 0000000..ceb6459
--- /dev/null
+++ b/graphics/hud/sg_tasting.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_tasting.png-33c5875536743f0990f8d054dfbbfa21.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sg_tasting.png"
+dest_files=[ "res://.import/sg_tasting.png-33c5875536743f0990f8d054dfbbfa21.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/shard_counter.png.import b/graphics/hud/shard_counter.png.import
new file mode 100644
index 0000000..ea8ef57
--- /dev/null
+++ b/graphics/hud/shard_counter.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/shard_counter.png-21107511ef3e175bf6cbab17710b5745.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/shard_counter.png"
+dest_files=[ "res://.import/shard_counter.png-21107511ef3e175bf6cbab17710b5745.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sound_test_arrow.png b/graphics/hud/sound_test_arrow.png
new file mode 100644
index 0000000..bc1e20c
Binary files /dev/null and b/graphics/hud/sound_test_arrow.png differ
diff --git a/graphics/hud/sound_test_arrow.png.import b/graphics/hud/sound_test_arrow.png.import
new file mode 100644
index 0000000..c50f8d2
--- /dev/null
+++ b/graphics/hud/sound_test_arrow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sound_test_arrow.png-03e263e7b69b8c981df8a10023a98da6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sound_test_arrow.png"
+dest_files=[ "res://.import/sound_test_arrow.png-03e263e7b69b8c981df8a10023a98da6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/sound_test_title.png b/graphics/hud/sound_test_title.png
new file mode 100644
index 0000000..2352aac
Binary files /dev/null and b/graphics/hud/sound_test_title.png differ
diff --git a/graphics/hud/sound_test_title.png.import b/graphics/hud/sound_test_title.png.import
new file mode 100644
index 0000000..ccc63c0
--- /dev/null
+++ b/graphics/hud/sound_test_title.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sound_test_title.png-4be45a72e6dcc1d358ca74117086ca3d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/sound_test_title.png"
+dest_files=[ "res://.import/sound_test_title.png-4be45a72e6dcc1d358ca74117086ca3d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/break_the_glass.png b/graphics/hud/speccy/break_the_glass.png
new file mode 100644
index 0000000..91b6e49
Binary files /dev/null and b/graphics/hud/speccy/break_the_glass.png differ
diff --git a/graphics/hud/speccy/break_the_glass.png.import b/graphics/hud/speccy/break_the_glass.png.import
new file mode 100644
index 0000000..e130b48
--- /dev/null
+++ b/graphics/hud/speccy/break_the_glass.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/break_the_glass.png-322e406de2ce417c6947e7c51513424a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/break_the_glass.png"
+dest_files=[ "res://.import/break_the_glass.png-322e406de2ce417c6947e7c51513424a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/go_get_em.png b/graphics/hud/speccy/go_get_em.png
new file mode 100644
index 0000000..a258c9b
Binary files /dev/null and b/graphics/hud/speccy/go_get_em.png differ
diff --git a/graphics/hud/speccy/go_get_em.png.import b/graphics/hud/speccy/go_get_em.png.import
new file mode 100644
index 0000000..f6a343a
--- /dev/null
+++ b/graphics/hud/speccy/go_get_em.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/go_get_em.png-80076e7e728e92f49b471d7986a620fe.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/go_get_em.png"
+dest_files=[ "res://.import/go_get_em.png-80076e7e728e92f49b471d7986a620fe.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/kill_em_all.png b/graphics/hud/speccy/kill_em_all.png
new file mode 100644
index 0000000..2b12863
Binary files /dev/null and b/graphics/hud/speccy/kill_em_all.png differ
diff --git a/graphics/hud/speccy/kill_em_all.png.import b/graphics/hud/speccy/kill_em_all.png.import
new file mode 100644
index 0000000..ecf5766
--- /dev/null
+++ b/graphics/hud/speccy/kill_em_all.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/kill_em_all.png-043b29a5fc7f16177492c344511e8a3a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/kill_em_all.png"
+dest_files=[ "res://.import/kill_em_all.png-043b29a5fc7f16177492c344511e8a3a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/oi_go_right.png b/graphics/hud/speccy/oi_go_right.png
new file mode 100644
index 0000000..dcde1da
Binary files /dev/null and b/graphics/hud/speccy/oi_go_right.png differ
diff --git a/graphics/hud/speccy/oi_go_right.png.import b/graphics/hud/speccy/oi_go_right.png.import
new file mode 100644
index 0000000..bf4083e
--- /dev/null
+++ b/graphics/hud/speccy/oi_go_right.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oi_go_right.png-23a20f2a0d8cb4ec57588e4ae39867a8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/oi_go_right.png"
+dest_files=[ "res://.import/oi_go_right.png-23a20f2a0d8cb4ec57588e4ae39867a8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/over_here.png b/graphics/hud/speccy/over_here.png
new file mode 100644
index 0000000..af337fd
Binary files /dev/null and b/graphics/hud/speccy/over_here.png differ
diff --git a/graphics/hud/speccy/over_here.png.import b/graphics/hud/speccy/over_here.png.import
new file mode 100644
index 0000000..48a4d32
--- /dev/null
+++ b/graphics/hud/speccy/over_here.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/over_here.png-aea3855eafdcaa5c5f0a21f9ac1c64a0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/over_here.png"
+dest_files=[ "res://.import/over_here.png-aea3855eafdcaa5c5f0a21f9ac1c64a0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/shoot_that_thing.png b/graphics/hud/speccy/shoot_that_thing.png
new file mode 100644
index 0000000..284ea08
Binary files /dev/null and b/graphics/hud/speccy/shoot_that_thing.png differ
diff --git a/graphics/hud/speccy/shoot_that_thing.png.import b/graphics/hud/speccy/shoot_that_thing.png.import
new file mode 100644
index 0000000..5347456
--- /dev/null
+++ b/graphics/hud/speccy/shoot_that_thing.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/shoot_that_thing.png-967594bf022da78bfe418a0ac5073eda.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/shoot_that_thing.png"
+dest_files=[ "res://.import/shoot_that_thing.png-967594bf022da78bfe418a0ac5073eda.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speccy/shoot_the_eye.png b/graphics/hud/speccy/shoot_the_eye.png
new file mode 100644
index 0000000..712c2ce
Binary files /dev/null and b/graphics/hud/speccy/shoot_the_eye.png differ
diff --git a/graphics/hud/speccy/shoot_the_eye.png.import b/graphics/hud/speccy/shoot_the_eye.png.import
new file mode 100644
index 0000000..66c1332
--- /dev/null
+++ b/graphics/hud/speccy/shoot_the_eye.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/shoot_the_eye.png-483a88ff92e95a40ee9cfc88aa6084cb.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speccy/shoot_the_eye.png"
+dest_files=[ "res://.import/shoot_the_eye.png-483a88ff92e95a40ee9cfc88aa6084cb.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/speech_bubble.png b/graphics/hud/speech_bubble.png
new file mode 100644
index 0000000..10b708c
Binary files /dev/null and b/graphics/hud/speech_bubble.png differ
diff --git a/graphics/hud/speech_bubble.png.import b/graphics/hud/speech_bubble.png.import
new file mode 100644
index 0000000..9f4bf8c
--- /dev/null
+++ b/graphics/hud/speech_bubble.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/speech_bubble.png-432aa9dcde6a27c31b84f7cece92306f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/speech_bubble.png"
+dest_files=[ "res://.import/speech_bubble.png-432aa9dcde6a27c31b84f7cece92306f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/team_sg_logo.png b/graphics/hud/team_sg_logo.png
new file mode 100644
index 0000000..59f8ca9
Binary files /dev/null and b/graphics/hud/team_sg_logo.png differ
diff --git a/graphics/hud/team_sg_logo.png.import b/graphics/hud/team_sg_logo.png.import
new file mode 100644
index 0000000..937e35d
--- /dev/null
+++ b/graphics/hud/team_sg_logo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/team_sg_logo.png-417aa1cf589d0b9ccf8914bde098b763.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/team_sg_logo.png"
+dest_files=[ "res://.import/team_sg_logo.png-417aa1cf589d0b9ccf8914bde098b763.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/team_sg_splash.png b/graphics/hud/team_sg_splash.png
new file mode 100644
index 0000000..85b5037
Binary files /dev/null and b/graphics/hud/team_sg_splash.png differ
diff --git a/graphics/hud/team_sg_splash.png.import b/graphics/hud/team_sg_splash.png.import
new file mode 100644
index 0000000..ed6e833
--- /dev/null
+++ b/graphics/hud/team_sg_splash.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/team_sg_splash.png-23db1fe9018a61fe815d83158426f094.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/team_sg_splash.png"
+dest_files=[ "res://.import/team_sg_splash.png-23db1fe9018a61fe815d83158426f094.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/thankyou.png b/graphics/hud/thankyou.png
new file mode 100644
index 0000000..adb30c9
Binary files /dev/null and b/graphics/hud/thankyou.png differ
diff --git a/graphics/hud/thankyou.png.import b/graphics/hud/thankyou.png.import
new file mode 100644
index 0000000..e7d359a
--- /dev/null
+++ b/graphics/hud/thankyou.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/thankyou.png-b548ea25ae4942012c22eb964f92a049.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/thankyou.png"
+dest_files=[ "res://.import/thankyou.png-b548ea25ae4942012c22eb964f92a049.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/time_bonus.png b/graphics/hud/time_bonus.png
new file mode 100644
index 0000000..f4e3215
Binary files /dev/null and b/graphics/hud/time_bonus.png differ
diff --git a/graphics/hud/time_bonus.png.import b/graphics/hud/time_bonus.png.import
new file mode 100644
index 0000000..35bc08a
--- /dev/null
+++ b/graphics/hud/time_bonus.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/time_bonus.png-663cd5c7331098252c03675e887c4123.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/time_bonus.png"
+dest_files=[ "res://.import/time_bonus.png-663cd5c7331098252c03675e887c4123.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/title_credits.png b/graphics/hud/title_credits.png
new file mode 100644
index 0000000..6ebb035
Binary files /dev/null and b/graphics/hud/title_credits.png differ
diff --git a/graphics/hud/title_credits.png.import b/graphics/hud/title_credits.png.import
new file mode 100644
index 0000000..fb4e5ee
--- /dev/null
+++ b/graphics/hud/title_credits.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/title_credits.png-639d7382e4b0b843e258deacb1d11d62.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/title_credits.png"
+dest_files=[ "res://.import/title_credits.png-639d7382e4b0b843e258deacb1d11d62.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_down.png b/graphics/hud/touch/touch_down.png
new file mode 100644
index 0000000..9c5f7db
Binary files /dev/null and b/graphics/hud/touch/touch_down.png differ
diff --git a/graphics/hud/touch/touch_down.png.import b/graphics/hud/touch/touch_down.png.import
new file mode 100644
index 0000000..fc29860
--- /dev/null
+++ b/graphics/hud/touch/touch_down.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_down.png-f7b3b9d5360093c35208cae627eee0fa.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_down.png"
+dest_files=[ "res://.import/touch_down.png-f7b3b9d5360093c35208cae627eee0fa.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_down_pressed.png b/graphics/hud/touch/touch_down_pressed.png
new file mode 100644
index 0000000..727575a
Binary files /dev/null and b/graphics/hud/touch/touch_down_pressed.png differ
diff --git a/graphics/hud/touch/touch_down_pressed.png.import b/graphics/hud/touch/touch_down_pressed.png.import
new file mode 100644
index 0000000..1298f24
--- /dev/null
+++ b/graphics/hud/touch/touch_down_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_down_pressed.png-26e3c9959e421a752a92240046513eb6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_down_pressed.png"
+dest_files=[ "res://.import/touch_down_pressed.png-26e3c9959e421a752a92240046513eb6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_jump.png b/graphics/hud/touch/touch_jump.png
new file mode 100644
index 0000000..4aaad88
Binary files /dev/null and b/graphics/hud/touch/touch_jump.png differ
diff --git a/graphics/hud/touch/touch_jump.png.import b/graphics/hud/touch/touch_jump.png.import
new file mode 100644
index 0000000..074d2be
--- /dev/null
+++ b/graphics/hud/touch/touch_jump.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_jump.png-d25a25c96ba529fc22922d345cf1f985.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_jump.png"
+dest_files=[ "res://.import/touch_jump.png-d25a25c96ba529fc22922d345cf1f985.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_jump_pressed.png b/graphics/hud/touch/touch_jump_pressed.png
new file mode 100644
index 0000000..a415139
Binary files /dev/null and b/graphics/hud/touch/touch_jump_pressed.png differ
diff --git a/graphics/hud/touch/touch_jump_pressed.png.import b/graphics/hud/touch/touch_jump_pressed.png.import
new file mode 100644
index 0000000..dc4546e
--- /dev/null
+++ b/graphics/hud/touch/touch_jump_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_jump_pressed.png-37dc8c2572dc91bc5bf30beb311f19a0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_jump_pressed.png"
+dest_files=[ "res://.import/touch_jump_pressed.png-37dc8c2572dc91bc5bf30beb311f19a0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_left.png b/graphics/hud/touch/touch_left.png
new file mode 100644
index 0000000..31b7e3d
Binary files /dev/null and b/graphics/hud/touch/touch_left.png differ
diff --git a/graphics/hud/touch/touch_left.png.import b/graphics/hud/touch/touch_left.png.import
new file mode 100644
index 0000000..c953307
--- /dev/null
+++ b/graphics/hud/touch/touch_left.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_left.png-0d1348fd1f7bc33ef4880e04370b336c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_left.png"
+dest_files=[ "res://.import/touch_left.png-0d1348fd1f7bc33ef4880e04370b336c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_left_pressed.png b/graphics/hud/touch/touch_left_pressed.png
new file mode 100644
index 0000000..34b6359
Binary files /dev/null and b/graphics/hud/touch/touch_left_pressed.png differ
diff --git a/graphics/hud/touch/touch_left_pressed.png.import b/graphics/hud/touch/touch_left_pressed.png.import
new file mode 100644
index 0000000..fd6455c
--- /dev/null
+++ b/graphics/hud/touch/touch_left_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_left_pressed.png-cdb9c23493ebeaf4d533502019100251.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_left_pressed.png"
+dest_files=[ "res://.import/touch_left_pressed.png-cdb9c23493ebeaf4d533502019100251.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_right.png b/graphics/hud/touch/touch_right.png
new file mode 100644
index 0000000..99e7303
Binary files /dev/null and b/graphics/hud/touch/touch_right.png differ
diff --git a/graphics/hud/touch/touch_right.png.import b/graphics/hud/touch/touch_right.png.import
new file mode 100644
index 0000000..e9249d2
--- /dev/null
+++ b/graphics/hud/touch/touch_right.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_right.png-b39574011fcd5ee55b3e373c24167362.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_right.png"
+dest_files=[ "res://.import/touch_right.png-b39574011fcd5ee55b3e373c24167362.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_right_pressed.png b/graphics/hud/touch/touch_right_pressed.png
new file mode 100644
index 0000000..c56dbfb
Binary files /dev/null and b/graphics/hud/touch/touch_right_pressed.png differ
diff --git a/graphics/hud/touch/touch_right_pressed.png.import b/graphics/hud/touch/touch_right_pressed.png.import
new file mode 100644
index 0000000..cf0f5af
--- /dev/null
+++ b/graphics/hud/touch/touch_right_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_right_pressed.png-816aab9d2892ce2d06d13959d3378255.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_right_pressed.png"
+dest_files=[ "res://.import/touch_right_pressed.png-816aab9d2892ce2d06d13959d3378255.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_shoot.png b/graphics/hud/touch/touch_shoot.png
new file mode 100644
index 0000000..a2948da
Binary files /dev/null and b/graphics/hud/touch/touch_shoot.png differ
diff --git a/graphics/hud/touch/touch_shoot.png.import b/graphics/hud/touch/touch_shoot.png.import
new file mode 100644
index 0000000..552bf7b
--- /dev/null
+++ b/graphics/hud/touch/touch_shoot.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_shoot.png-f3f5c2ac5ce5bd30dda5a011dfa4b49c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_shoot.png"
+dest_files=[ "res://.import/touch_shoot.png-f3f5c2ac5ce5bd30dda5a011dfa4b49c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_shoot_pressed.png b/graphics/hud/touch/touch_shoot_pressed.png
new file mode 100644
index 0000000..37fa228
Binary files /dev/null and b/graphics/hud/touch/touch_shoot_pressed.png differ
diff --git a/graphics/hud/touch/touch_shoot_pressed.png.import b/graphics/hud/touch/touch_shoot_pressed.png.import
new file mode 100644
index 0000000..6e19914
--- /dev/null
+++ b/graphics/hud/touch/touch_shoot_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_shoot_pressed.png-21478853c80a510d300db9de2d76e41d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_shoot_pressed.png"
+dest_files=[ "res://.import/touch_shoot_pressed.png-21478853c80a510d300db9de2d76e41d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_up.png b/graphics/hud/touch/touch_up.png
new file mode 100644
index 0000000..54db8ef
Binary files /dev/null and b/graphics/hud/touch/touch_up.png differ
diff --git a/graphics/hud/touch/touch_up.png.import b/graphics/hud/touch/touch_up.png.import
new file mode 100644
index 0000000..946acad
--- /dev/null
+++ b/graphics/hud/touch/touch_up.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_up.png-954befe4d1b24b6da3d6f6fe5d9fce88.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_up.png"
+dest_files=[ "res://.import/touch_up.png-954befe4d1b24b6da3d6f6fe5d9fce88.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/hud/touch/touch_up_pressed.png b/graphics/hud/touch/touch_up_pressed.png
new file mode 100644
index 0000000..51fcdb7
Binary files /dev/null and b/graphics/hud/touch/touch_up_pressed.png differ
diff --git a/graphics/hud/touch/touch_up_pressed.png.import b/graphics/hud/touch/touch_up_pressed.png.import
new file mode 100644
index 0000000..3b8e0bb
--- /dev/null
+++ b/graphics/hud/touch/touch_up_pressed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/touch_up_pressed.png-0dea60c997753fc151f6488b7d2ed2d1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/hud/touch/touch_up_pressed.png"
+dest_files=[ "res://.import/touch_up_pressed.png-0dea60c997753fc151f6488b7d2ed2d1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/ladder/vine.png b/graphics/ladder/vine.png
deleted file mode 100644
index 261f90c..0000000
Binary files a/graphics/ladder/vine.png and /dev/null differ
diff --git a/graphics/ladder/vine.png.import b/graphics/ladder/vine.png.import
deleted file mode 100644
index 172fb34..0000000
--- a/graphics/ladder/vine.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/ladder/vine.png"
-dest_files=[ "res://.import/vine.png-87e1480df08ec85216f71ac1fe8d8359.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/level_select/small_sg.png b/graphics/level_select/small_sg.png
new file mode 100644
index 0000000..00710d9
Binary files /dev/null and b/graphics/level_select/small_sg.png differ
diff --git a/graphics/level_select/small_sg.png.import b/graphics/level_select/small_sg.png.import
new file mode 100644
index 0000000..89c353a
--- /dev/null
+++ b/graphics/level_select/small_sg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/small_sg.png-1e404b8f0979e895a2dcca9c5f498c3c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/level_select/small_sg.png"
+dest_files=[ "res://.import/small_sg.png-1e404b8f0979e895a2dcca9c5f498c3c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/level_select/wave.tres b/graphics/level_select/wave.tres
new file mode 100644
index 0000000..4f2b83d
--- /dev/null
+++ b/graphics/level_select/wave.tres
@@ -0,0 +1,14 @@
+[gd_resource type="AnimatedTexture" load_steps=4 format=2]
+
+[ext_resource path="res://graphics/level_select/wave_1.png" type="Texture" id=1]
+[ext_resource path="res://graphics/level_select/wave_2.png" type="Texture" id=2]
+[ext_resource path="res://graphics/level_select/wave_3.png" type="Texture" id=3]
+
+[resource]
+frames = 3
+fps = 8.0
+frame_0/texture = ExtResource( 1 )
+frame_1/texture = ExtResource( 2 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 3 )
+frame_2/delay_sec = 0.0
diff --git a/graphics/level_select/wave_particle.png b/graphics/level_select/wave_particle.png
new file mode 100644
index 0000000..0959e5b
Binary files /dev/null and b/graphics/level_select/wave_particle.png differ
diff --git a/graphics/level_select/wave_particle.png.import b/graphics/level_select/wave_particle.png.import
new file mode 100644
index 0000000..4297765
--- /dev/null
+++ b/graphics/level_select/wave_particle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/wave_particle.png-0766fcb01570705c5441be7b8bb455f9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/level_select/wave_particle.png"
+dest_files=[ "res://.import/wave_particle.png-0766fcb01570705c5441be7b8bb455f9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/level_select/waves_mask.png b/graphics/level_select/waves_mask.png
new file mode 100644
index 0000000..3cb98cc
Binary files /dev/null and b/graphics/level_select/waves_mask.png differ
diff --git a/graphics/level_select/waves_mask.png.import b/graphics/level_select/waves_mask.png.import
new file mode 100644
index 0000000..3d08ad3
--- /dev/null
+++ b/graphics/level_select/waves_mask.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/waves_mask.png-0b5b86f235e2682fba9f9ac40ac7f640.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/level_select/waves_mask.png"
+dest_files=[ "res://.import/waves_mask.png-0b5b86f235e2682fba9f9ac40ac7f640.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/level_select/whirlpool.png b/graphics/level_select/whirlpool.png
new file mode 100644
index 0000000..8f5db4b
Binary files /dev/null and b/graphics/level_select/whirlpool.png differ
diff --git a/graphics/level_select/whirlpool.png.import b/graphics/level_select/whirlpool.png.import
new file mode 100644
index 0000000..7dfbdaf
--- /dev/null
+++ b/graphics/level_select/whirlpool.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/whirlpool.png-93394bcc546b149f80fec79f58a2fa75.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/level_select/whirlpool.png"
+dest_files=[ "res://.import/whirlpool.png-93394bcc546b149f80fec79f58a2fa75.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/level_select/whirlpool.xcf b/graphics/level_select/whirlpool.xcf
new file mode 100644
index 0000000..1c875ba
Binary files /dev/null and b/graphics/level_select/whirlpool.xcf differ
diff --git a/graphics/level_select/world_map.png b/graphics/level_select/world_map.png
new file mode 100644
index 0000000..cfc8e32
Binary files /dev/null and b/graphics/level_select/world_map.png differ
diff --git a/graphics/level_select/world_map.png.import b/graphics/level_select/world_map.png.import
new file mode 100644
index 0000000..dc5f7a1
--- /dev/null
+++ b/graphics/level_select/world_map.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/world_map.png-c7670ec033333050c2cad389b5ebb694.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/level_select/world_map.png"
+dest_files=[ "res://.import/world_map.png-c7670ec033333050c2cad389b5ebb694.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/level_select/world_map.xcf b/graphics/level_select/world_map.xcf
new file mode 100644
index 0000000..0714bf8
Binary files /dev/null and b/graphics/level_select/world_map.xcf differ
diff --git a/graphics/lore/2083_lore.png b/graphics/lore/2083_lore.png
new file mode 100644
index 0000000..39bc8ff
Binary files /dev/null and b/graphics/lore/2083_lore.png differ
diff --git a/graphics/lore/2083_lore.png.import b/graphics/lore/2083_lore.png.import
new file mode 100644
index 0000000..b24812c
--- /dev/null
+++ b/graphics/lore/2083_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2083_lore.png-413754d57591d2753b78fb7adaeaaa9f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/2083_lore.png"
+dest_files=[ "res://.import/2083_lore.png-413754d57591d2753b78fb7adaeaaa9f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/2600_lore.png b/graphics/lore/2600_lore.png
new file mode 100644
index 0000000..71df6a3
Binary files /dev/null and b/graphics/lore/2600_lore.png differ
diff --git a/graphics/lore/2600_lore.png.import b/graphics/lore/2600_lore.png.import
new file mode 100644
index 0000000..0f2faa6
--- /dev/null
+++ b/graphics/lore/2600_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2600_lore.png-639cdd01246046c019315da6b29b0244.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/2600_lore.png"
+dest_files=[ "res://.import/2600_lore.png-639cdd01246046c019315da6b29b0244.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/arlingwood_graveyard.png b/graphics/lore/arlingwood_graveyard.png
new file mode 100644
index 0000000..4939a9a
Binary files /dev/null and b/graphics/lore/arlingwood_graveyard.png differ
diff --git a/graphics/lore/arlingwood_graveyard.png.import b/graphics/lore/arlingwood_graveyard.png.import
new file mode 100644
index 0000000..e55a2f2
--- /dev/null
+++ b/graphics/lore/arlingwood_graveyard.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/arlingwood_graveyard.png-dcf19c4ee26882dff177a70d66d68e6f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/arlingwood_graveyard.png"
+dest_files=[ "res://.import/arlingwood_graveyard.png-dcf19c4ee26882dff177a70d66d68e6f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/artificial_soul_lore.png b/graphics/lore/artificial_soul_lore.png
new file mode 100644
index 0000000..7ae45f2
Binary files /dev/null and b/graphics/lore/artificial_soul_lore.png differ
diff --git a/graphics/lore/artificial_soul_lore.png.import b/graphics/lore/artificial_soul_lore.png.import
new file mode 100644
index 0000000..746e826
--- /dev/null
+++ b/graphics/lore/artificial_soul_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/artificial_soul_lore.png-ccae07a62b43ff1af6289ea38581667f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/artificial_soul_lore.png"
+dest_files=[ "res://.import/artificial_soul_lore.png-ccae07a62b43ff1af6289ea38581667f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/beel_lore.png b/graphics/lore/beel_lore.png
new file mode 100644
index 0000000..8c44d5f
Binary files /dev/null and b/graphics/lore/beel_lore.png differ
diff --git a/graphics/lore/beel_lore.png.import b/graphics/lore/beel_lore.png.import
new file mode 100644
index 0000000..d62d465
--- /dev/null
+++ b/graphics/lore/beel_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/beel_lore.png-3a17d7be0c6bde0fd16f64d711fbd08d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/beel_lore.png"
+dest_files=[ "res://.import/beel_lore.png-3a17d7be0c6bde0fd16f64d711fbd08d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/blue_ray_cavern.png b/graphics/lore/blue_ray_cavern.png
new file mode 100644
index 0000000..05784f5
Binary files /dev/null and b/graphics/lore/blue_ray_cavern.png differ
diff --git a/graphics/lore/blue_ray_cavern.png.import b/graphics/lore/blue_ray_cavern.png.import
new file mode 100644
index 0000000..7dc7725
--- /dev/null
+++ b/graphics/lore/blue_ray_cavern.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/blue_ray_cavern.png-0dd2d74f57c9b34a7254592f4a4c18d7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/blue_ray_cavern.png"
+dest_files=[ "res://.import/blue_ray_cavern.png-0dd2d74f57c9b34a7254592f4a4c18d7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/crater_of_the_abyss.png b/graphics/lore/crater_of_the_abyss.png
new file mode 100644
index 0000000..47ee482
Binary files /dev/null and b/graphics/lore/crater_of_the_abyss.png differ
diff --git a/graphics/lore/crater_of_the_abyss.png.import b/graphics/lore/crater_of_the_abyss.png.import
new file mode 100644
index 0000000..6d36fa4
--- /dev/null
+++ b/graphics/lore/crater_of_the_abyss.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/crater_of_the_abyss.png-44342320e1396b51a3b006db6564a8b9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/crater_of_the_abyss.png"
+dest_files=[ "res://.import/crater_of_the_abyss.png-44342320e1396b51a3b006db6564a8b9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/echo_mountain.png b/graphics/lore/echo_mountain.png
new file mode 100644
index 0000000..6ca6d56
Binary files /dev/null and b/graphics/lore/echo_mountain.png differ
diff --git a/graphics/lore/echo_mountain.png.import b/graphics/lore/echo_mountain.png.import
new file mode 100644
index 0000000..58c8db3
--- /dev/null
+++ b/graphics/lore/echo_mountain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/echo_mountain.png-8be11e924a4c00da67ba983b33e86006.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/echo_mountain.png"
+dest_files=[ "res://.import/echo_mountain.png-8be11e924a4c00da67ba983b33e86006.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/famis_lab.png b/graphics/lore/famis_lab.png
new file mode 100644
index 0000000..9d0a447
Binary files /dev/null and b/graphics/lore/famis_lab.png differ
diff --git a/graphics/lore/famis_lab.png.import b/graphics/lore/famis_lab.png.import
new file mode 100644
index 0000000..68c247d
--- /dev/null
+++ b/graphics/lore/famis_lab.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famis_lab.png-efe18e972d1c3612155057cea6d183e6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/famis_lab.png"
+dest_files=[ "res://.import/famis_lab.png-efe18e972d1c3612155057cea6d183e6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/police_station.png b/graphics/lore/police_station.png
new file mode 100644
index 0000000..7a93790
Binary files /dev/null and b/graphics/lore/police_station.png differ
diff --git a/graphics/lore/police_station.png.import b/graphics/lore/police_station.png.import
new file mode 100644
index 0000000..738aa00
--- /dev/null
+++ b/graphics/lore/police_station.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/police_station.png-e1ce5a436800b65847372b057e912ee2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/police_station.png"
+dest_files=[ "res://.import/police_station.png-e1ce5a436800b65847372b057e912ee2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/roboturret_lore.png b/graphics/lore/roboturret_lore.png
new file mode 100644
index 0000000..5a5827b
Binary files /dev/null and b/graphics/lore/roboturret_lore.png differ
diff --git a/graphics/lore/roboturret_lore.png.import b/graphics/lore/roboturret_lore.png.import
new file mode 100644
index 0000000..af6b122
--- /dev/null
+++ b/graphics/lore/roboturret_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/roboturret_lore.png-8fad4290cd0d33277422bca7007e004f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/roboturret_lore.png"
+dest_files=[ "res://.import/roboturret_lore.png-8fad4290cd0d33277422bca7007e004f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/rust_inc.png b/graphics/lore/rust_inc.png
new file mode 100644
index 0000000..65e7a57
Binary files /dev/null and b/graphics/lore/rust_inc.png differ
diff --git a/graphics/lore/rust_inc.png.import b/graphics/lore/rust_inc.png.import
new file mode 100644
index 0000000..0f5c48a
--- /dev/null
+++ b/graphics/lore/rust_inc.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/rust_inc.png-b66eb29b8ed3924f77cae1a82c2fc5d6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/rust_inc.png"
+dest_files=[ "res://.import/rust_inc.png-b66eb29b8ed3924f77cae1a82c2fc5d6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/scrump_lore.png b/graphics/lore/scrump_lore.png
new file mode 100644
index 0000000..66ef174
Binary files /dev/null and b/graphics/lore/scrump_lore.png differ
diff --git a/graphics/lore/scrump_lore.png.import b/graphics/lore/scrump_lore.png.import
new file mode 100644
index 0000000..62192c1
--- /dev/null
+++ b/graphics/lore/scrump_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/scrump_lore.png-91e5f3c77b57e010126e8911c72a1858.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/scrump_lore.png"
+dest_files=[ "res://.import/scrump_lore.png-91e5f3c77b57e010126e8911c72a1858.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/shady_canopy.png b/graphics/lore/shady_canopy.png
new file mode 100644
index 0000000..045311f
Binary files /dev/null and b/graphics/lore/shady_canopy.png differ
diff --git a/graphics/lore/shady_canopy.png.import b/graphics/lore/shady_canopy.png.import
new file mode 100644
index 0000000..3649bb6
--- /dev/null
+++ b/graphics/lore/shady_canopy.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/shady_canopy.png-e3860504d1d7ce41398bbe44abadb9b5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/shady_canopy.png"
+dest_files=[ "res://.import/shady_canopy.png-e3860504d1d7ce41398bbe44abadb9b5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/steel_factory.png b/graphics/lore/steel_factory.png
new file mode 100644
index 0000000..d9a7d1d
Binary files /dev/null and b/graphics/lore/steel_factory.png differ
diff --git a/graphics/lore/steel_factory.png.import b/graphics/lore/steel_factory.png.import
new file mode 100644
index 0000000..1a5bf8f
--- /dev/null
+++ b/graphics/lore/steel_factory.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/steel_factory.png-23add5a49d9fa73768acb4c5ab2d9ca3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/steel_factory.png"
+dest_files=[ "res://.import/steel_factory.png-23add5a49d9fa73768acb4c5ab2d9ca3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/tin_lore.png b/graphics/lore/tin_lore.png
new file mode 100644
index 0000000..933c9d4
Binary files /dev/null and b/graphics/lore/tin_lore.png differ
diff --git a/graphics/lore/tin_lore.png.import b/graphics/lore/tin_lore.png.import
new file mode 100644
index 0000000..6492ddc
--- /dev/null
+++ b/graphics/lore/tin_lore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tin_lore.png-875eab5ed3581c466d94f045212ca393.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/tin_lore.png"
+dest_files=[ "res://.import/tin_lore.png-875eab5ed3581c466d94f045212ca393.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/lore/verdant_hills.png b/graphics/lore/verdant_hills.png
new file mode 100644
index 0000000..72c9f3b
Binary files /dev/null and b/graphics/lore/verdant_hills.png differ
diff --git a/graphics/lore/verdant_hills.png.import b/graphics/lore/verdant_hills.png.import
new file mode 100644
index 0000000..f369df6
--- /dev/null
+++ b/graphics/lore/verdant_hills.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/verdant_hills.png-c370ff8554ff6b9616cb89947e2207df.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/lore/verdant_hills.png"
+dest_files=[ "res://.import/verdant_hills.png-c370ff8554ff6b9616cb89947e2207df.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/moving_platform/moving_platform.png b/graphics/moving_platform/moving_platform.png
new file mode 100644
index 0000000..1ea26ac
Binary files /dev/null and b/graphics/moving_platform/moving_platform.png differ
diff --git a/graphics/moving_platform/moving_platform.png.import b/graphics/moving_platform/moving_platform.png.import
new file mode 100644
index 0000000..7873ba8
--- /dev/null
+++ b/graphics/moving_platform/moving_platform.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/moving_platform.png-9f4dacf0fea7d199f190d8298e4c7b54.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/moving_platform/moving_platform.png"
+dest_files=[ "res://.import/moving_platform.png-9f4dacf0fea7d199f190d8298e4c7b54.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=1
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/elaine.png b/graphics/npc/elaine.png
new file mode 100644
index 0000000..4c68d6f
Binary files /dev/null and b/graphics/npc/elaine.png differ
diff --git a/graphics/npc/elaine.png.import b/graphics/npc/elaine.png.import
new file mode 100644
index 0000000..1cd1ced
--- /dev/null
+++ b/graphics/npc/elaine.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/elaine.png-2d997800668116b1ce6cddc2ee61d768.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/elaine.png"
+dest_files=[ "res://.import/elaine.png-2d997800668116b1ce6cddc2ee61d768.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/fami_human.png b/graphics/npc/fami_human.png
new file mode 100644
index 0000000..230f41f
Binary files /dev/null and b/graphics/npc/fami_human.png differ
diff --git a/graphics/npc/fami_human.png.import b/graphics/npc/fami_human.png.import
new file mode 100644
index 0000000..f0c79c7
--- /dev/null
+++ b/graphics/npc/fami_human.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_human.png-c8272874b8b4943e946edb63a2b57912.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/fami_human.png"
+dest_files=[ "res://.import/fami_human.png-c8272874b8b4943e946edb63a2b57912.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/fami_human_laugh.png b/graphics/npc/fami_human_laugh.png
new file mode 100644
index 0000000..5845521
Binary files /dev/null and b/graphics/npc/fami_human_laugh.png differ
diff --git a/graphics/npc/fami_human_laugh.png.import b/graphics/npc/fami_human_laugh.png.import
new file mode 100644
index 0000000..dc4c7bb
--- /dev/null
+++ b/graphics/npc/fami_human_laugh.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_human_laugh.png-29e0d3a9f74034394b8f6007e6ef3b51.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/fami_human_laugh.png"
+dest_files=[ "res://.import/fami_human_laugh.png-29e0d3a9f74034394b8f6007e6ef3b51.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/fami_human_punch.png b/graphics/npc/fami_human_punch.png
new file mode 100644
index 0000000..1b8d9e7
Binary files /dev/null and b/graphics/npc/fami_human_punch.png differ
diff --git a/graphics/npc/fami_human_punch.png.import b/graphics/npc/fami_human_punch.png.import
new file mode 100644
index 0000000..47a158e
--- /dev/null
+++ b/graphics/npc/fami_human_punch.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_human_punch.png-3abbf294e7d6a39085ec2aeb01159189.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/fami_human_punch.png"
+dest_files=[ "res://.import/fami_human_punch.png-3abbf294e7d6a39085ec2aeb01159189.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/fami_human_transform.png b/graphics/npc/fami_human_transform.png
new file mode 100644
index 0000000..3cc4c38
Binary files /dev/null and b/graphics/npc/fami_human_transform.png differ
diff --git a/graphics/npc/fami_human_transform.png.import b/graphics/npc/fami_human_transform.png.import
new file mode 100644
index 0000000..63f1894
--- /dev/null
+++ b/graphics/npc/fami_human_transform.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_human_transform.png-2f2a884b33decf15ad67d39c6798c5de.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/fami_human_transform.png"
+dest_files=[ "res://.import/fami_human_transform.png-2f2a884b33decf15ad67d39c6798c5de.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/fami_human_walk.png b/graphics/npc/fami_human_walk.png
new file mode 100644
index 0000000..90d8031
Binary files /dev/null and b/graphics/npc/fami_human_walk.png differ
diff --git a/graphics/npc/fami_human_walk.png.import b/graphics/npc/fami_human_walk.png.import
new file mode 100644
index 0000000..cc05663
--- /dev/null
+++ b/graphics/npc/fami_human_walk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fami_human_walk.png-0bdff16bec74475af4c98568148c5f60.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/fami_human_walk.png"
+dest_files=[ "res://.import/fami_human_walk.png-0bdff16bec74475af4c98568148c5f60.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/haze.png b/graphics/npc/haze.png
new file mode 100644
index 0000000..895b19d
Binary files /dev/null and b/graphics/npc/haze.png differ
diff --git a/graphics/npc/haze.png.import b/graphics/npc/haze.png.import
new file mode 100644
index 0000000..1727763
--- /dev/null
+++ b/graphics/npc/haze.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/haze.png-b483c72d2cdabfa5fdaaaf0dcb693e88.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/haze.png"
+dest_files=[ "res://.import/haze.png-b483c72d2cdabfa5fdaaaf0dcb693e88.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/intelli_head.png b/graphics/npc/intelli_head.png
new file mode 100644
index 0000000..649282f
Binary files /dev/null and b/graphics/npc/intelli_head.png differ
diff --git a/graphics/npc/intelli_head.png.import b/graphics/npc/intelli_head.png.import
new file mode 100644
index 0000000..721fab6
--- /dev/null
+++ b/graphics/npc/intelli_head.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/intelli_head.png-9f4bf937d24c38cc981e0b0aff9115cf.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/intelli_head.png"
+dest_files=[ "res://.import/intelli_head.png-9f4bf937d24c38cc981e0b0aff9115cf.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/intelli_idle.png b/graphics/npc/intelli_idle.png
new file mode 100644
index 0000000..ccc4bdf
Binary files /dev/null and b/graphics/npc/intelli_idle.png differ
diff --git a/graphics/npc/intelli_idle.png.import b/graphics/npc/intelli_idle.png.import
new file mode 100644
index 0000000..26c174b
--- /dev/null
+++ b/graphics/npc/intelli_idle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/intelli_idle.png-7a45754f787286146055a5bdc790c40a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/intelli_idle.png"
+dest_files=[ "res://.import/intelli_idle.png-7a45754f787286146055a5bdc790c40a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/intelli_pod.png.import b/graphics/npc/intelli_pod.png.import
new file mode 100644
index 0000000..2ee5deb
--- /dev/null
+++ b/graphics/npc/intelli_pod.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/intelli_pod.png-bebe1d4f21b18e23f590810c176320c5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/intelli_pod.png"
+dest_files=[ "res://.import/intelli_pod.png-bebe1d4f21b18e23f590810c176320c5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/ivy.png b/graphics/npc/ivy.png
new file mode 100644
index 0000000..1bd6dda
Binary files /dev/null and b/graphics/npc/ivy.png differ
diff --git a/graphics/npc/ivy.png.import b/graphics/npc/ivy.png.import
new file mode 100644
index 0000000..4218087
--- /dev/null
+++ b/graphics/npc/ivy.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ivy.png-c6a8f5eae7fe59d41bed18257e0d1b63.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/ivy.png"
+dest_files=[ "res://.import/ivy.png-c6a8f5eae7fe59d41bed18257e0d1b63.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/kiki_dog.png b/graphics/npc/kiki_dog.png
new file mode 100644
index 0000000..d0a739b
Binary files /dev/null and b/graphics/npc/kiki_dog.png differ
diff --git a/graphics/npc/kiki_dog.png.import b/graphics/npc/kiki_dog.png.import
new file mode 100644
index 0000000..3fd24f6
--- /dev/null
+++ b/graphics/npc/kiki_dog.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/kiki_dog.png-562218a12eeaaf2e2134ec7dbe875a1a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/kiki_dog.png"
+dest_files=[ "res://.import/kiki_dog.png-562218a12eeaaf2e2134ec7dbe875a1a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_blink.png b/graphics/npc/msx_blink.png
new file mode 100644
index 0000000..54236d0
Binary files /dev/null and b/graphics/npc/msx_blink.png differ
diff --git a/graphics/npc/msx_blink.png.import b/graphics/npc/msx_blink.png.import
new file mode 100644
index 0000000..a71262c
--- /dev/null
+++ b/graphics/npc/msx_blink.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_blink.png-3e81cac31b42c7066c74bede693edca4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_blink.png"
+dest_files=[ "res://.import/msx_blink.png-3e81cac31b42c7066c74bede693edca4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_future.png b/graphics/npc/msx_future.png
new file mode 100644
index 0000000..b101777
Binary files /dev/null and b/graphics/npc/msx_future.png differ
diff --git a/graphics/npc/msx_future.png.import b/graphics/npc/msx_future.png.import
new file mode 100644
index 0000000..ae1e579
--- /dev/null
+++ b/graphics/npc/msx_future.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_future.png-f80025a99339fb4cc97772ee4a9ac9d4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_future.png"
+dest_files=[ "res://.import/msx_future.png-f80025a99339fb4cc97772ee4a9ac9d4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_give.png b/graphics/npc/msx_give.png
new file mode 100644
index 0000000..1f7f98e
Binary files /dev/null and b/graphics/npc/msx_give.png differ
diff --git a/graphics/npc/msx_give.png.import b/graphics/npc/msx_give.png.import
new file mode 100644
index 0000000..9106f57
--- /dev/null
+++ b/graphics/npc/msx_give.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_give.png-ae86958a670c41e2764ea07957b7c651.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_give.png"
+dest_files=[ "res://.import/msx_give.png-ae86958a670c41e2764ea07957b7c651.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_idle.png b/graphics/npc/msx_idle.png
new file mode 100644
index 0000000..4253dce
Binary files /dev/null and b/graphics/npc/msx_idle.png differ
diff --git a/graphics/npc/msx_idle.png.import b/graphics/npc/msx_idle.png.import
new file mode 100644
index 0000000..81bf2a8
--- /dev/null
+++ b/graphics/npc/msx_idle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_idle.png-904e9b439d6f605dfe60ef477bd6d3fc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_idle.png"
+dest_files=[ "res://.import/msx_idle.png-904e9b439d6f605dfe60ef477bd6d3fc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_respawn.png b/graphics/npc/msx_respawn.png
new file mode 100644
index 0000000..0747802
Binary files /dev/null and b/graphics/npc/msx_respawn.png differ
diff --git a/graphics/npc/msx_respawn.png.import b/graphics/npc/msx_respawn.png.import
new file mode 100644
index 0000000..37f3179
--- /dev/null
+++ b/graphics/npc/msx_respawn.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_respawn.png-079d35100957fd3b65980cf58702fa84.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_respawn.png"
+dest_files=[ "res://.import/msx_respawn.png-079d35100957fd3b65980cf58702fa84.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/msx_walk.png b/graphics/npc/msx_walk.png
new file mode 100644
index 0000000..5ec524d
Binary files /dev/null and b/graphics/npc/msx_walk.png differ
diff --git a/graphics/npc/msx_walk.png.import b/graphics/npc/msx_walk.png.import
new file mode 100644
index 0000000..83fdbd5
--- /dev/null
+++ b/graphics/npc/msx_walk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/msx_walk.png-02e0194c211bff92277c716918f63d22.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/msx_walk.png"
+dest_files=[ "res://.import/msx_walk.png-02e0194c211bff92277c716918f63d22.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/penny.png b/graphics/npc/penny.png
new file mode 100644
index 0000000..862d912
Binary files /dev/null and b/graphics/npc/penny.png differ
diff --git a/graphics/npc/penny.png.import b/graphics/npc/penny.png.import
new file mode 100644
index 0000000..809fc6d
--- /dev/null
+++ b/graphics/npc/penny.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/penny.png-be9d1011ecdcce51cd716f48371b95fa.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/penny.png"
+dest_files=[ "res://.import/penny.png-be9d1011ecdcce51cd716f48371b95fa.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/sg_future.png b/graphics/npc/sg_future.png
new file mode 100644
index 0000000..20c10ec
Binary files /dev/null and b/graphics/npc/sg_future.png differ
diff --git a/graphics/npc/sg_future.png.import b/graphics/npc/sg_future.png.import
new file mode 100644
index 0000000..cf20b60
--- /dev/null
+++ b/graphics/npc/sg_future.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_future.png-cdbd7c9b08828f45ce5d3a3faf7f2693.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/sg_future.png"
+dest_files=[ "res://.import/sg_future.png-cdbd7c9b08828f45ce5d3a3faf7f2693.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/sms.png b/graphics/npc/sms.png
new file mode 100644
index 0000000..55b24d6
Binary files /dev/null and b/graphics/npc/sms.png differ
diff --git a/graphics/npc/sms.png.import b/graphics/npc/sms.png.import
new file mode 100644
index 0000000..95dc577
--- /dev/null
+++ b/graphics/npc/sms.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sms.png-d86229f2d402f74a94586086e38351f0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/sms.png"
+dest_files=[ "res://.import/sms.png-d86229f2d402f74a94586086e38351f0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/speccy.png b/graphics/npc/speccy.png
new file mode 100644
index 0000000..cd69a11
Binary files /dev/null and b/graphics/npc/speccy.png differ
diff --git a/graphics/npc/speccy.png.import b/graphics/npc/speccy.png.import
new file mode 100644
index 0000000..fec1991
--- /dev/null
+++ b/graphics/npc/speccy.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/speccy.png-6a5559d75a077641c7ee8b3aa2431551.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/speccy.png"
+dest_files=[ "res://.import/speccy.png-6a5559d75a077641c7ee8b3aa2431551.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/speccy_cool.png b/graphics/npc/speccy_cool.png
new file mode 100644
index 0000000..bca34f7
Binary files /dev/null and b/graphics/npc/speccy_cool.png differ
diff --git a/graphics/npc/speccy_cool.png.import b/graphics/npc/speccy_cool.png.import
new file mode 100644
index 0000000..3537f3d
--- /dev/null
+++ b/graphics/npc/speccy_cool.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/speccy_cool.png-a2bef9af08d75596c39afabf4b591669.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/speccy_cool.png"
+dest_files=[ "res://.import/speccy_cool.png-a2bef9af08d75596c39afabf4b591669.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/speccy_future.png b/graphics/npc/speccy_future.png
new file mode 100644
index 0000000..3e11641
Binary files /dev/null and b/graphics/npc/speccy_future.png differ
diff --git a/graphics/npc/speccy_future.png.import b/graphics/npc/speccy_future.png.import
new file mode 100644
index 0000000..4048d3b
--- /dev/null
+++ b/graphics/npc/speccy_future.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/speccy_future.png-1e522d079b6cc689a4fc31f14da4eeae.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/speccy_future.png"
+dest_files=[ "res://.import/speccy_future.png-1e522d079b6cc689a4fc31f14da4eeae.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/npc/speccy_talk.png b/graphics/npc/speccy_talk.png
new file mode 100644
index 0000000..c269c25
Binary files /dev/null and b/graphics/npc/speccy_talk.png differ
diff --git a/graphics/npc/speccy_talk.png.import b/graphics/npc/speccy_talk.png.import
new file mode 100644
index 0000000..a62b071
--- /dev/null
+++ b/graphics/npc/speccy_talk.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/speccy_talk.png-0e5075eaf8cca73ab16668de5d45d342.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/npc/speccy_talk.png"
+dest_files=[ "res://.import/speccy_talk.png-0e5075eaf8cca73ab16668de5d45d342.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/blood.png b/graphics/particles/blood.png
index 99873a0..be971c9 100644
Binary files a/graphics/particles/blood.png and b/graphics/particles/blood.png differ
diff --git a/graphics/particles/bubble.png b/graphics/particles/bubble.png
new file mode 100644
index 0000000..56ed7d8
Binary files /dev/null and b/graphics/particles/bubble.png differ
diff --git a/graphics/particles/bubble.png.import b/graphics/particles/bubble.png.import
new file mode 100644
index 0000000..bf5f6d8
--- /dev/null
+++ b/graphics/particles/bubble.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bubble.png-161ac864ae4d227c6f7027dcb5a47f62.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/bubble.png"
+dest_files=[ "res://.import/bubble.png-161ac864ae4d227c6f7027dcb5a47f62.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/bullet_casing.png b/graphics/particles/bullet_casing.png
new file mode 100644
index 0000000..6cb1c1d
Binary files /dev/null and b/graphics/particles/bullet_casing.png differ
diff --git a/graphics/particles/bullet_casing.png.import b/graphics/particles/bullet_casing.png.import
new file mode 100644
index 0000000..56f415e
--- /dev/null
+++ b/graphics/particles/bullet_casing.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bullet_casing.png-8bc5e58567bcb82b42eb851699be796d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/bullet_casing.png"
+dest_files=[ "res://.import/bullet_casing.png-8bc5e58567bcb82b42eb851699be796d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/dust.png b/graphics/particles/dust.png
index 2b421f1..9531a48 100644
Binary files a/graphics/particles/dust.png and b/graphics/particles/dust.png differ
diff --git a/graphics/particles/famira_blood.png b/graphics/particles/famira_blood.png
new file mode 100644
index 0000000..54a8a2f
Binary files /dev/null and b/graphics/particles/famira_blood.png differ
diff --git a/graphics/particles/famira_blood.png.import b/graphics/particles/famira_blood.png.import
new file mode 100644
index 0000000..795e7a3
--- /dev/null
+++ b/graphics/particles/famira_blood.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/famira_blood.png-66c7d485af49d3549856534ecea8b239.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/famira_blood.png"
+dest_files=[ "res://.import/famira_blood.png-66c7d485af49d3549856534ecea8b239.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/glass_shard.png b/graphics/particles/glass_shard.png
new file mode 100644
index 0000000..716eda1
Binary files /dev/null and b/graphics/particles/glass_shard.png differ
diff --git a/graphics/particles/glass_shard.png.import b/graphics/particles/glass_shard.png.import
new file mode 100644
index 0000000..e19b7b6
--- /dev/null
+++ b/graphics/particles/glass_shard.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/glass_shard.png-9dc867929059fea83ab155e049de7ab1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/glass_shard.png"
+dest_files=[ "res://.import/glass_shard.png-9dc867929059fea83ab155e049de7ab1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/goo.png b/graphics/particles/goo.png
new file mode 100644
index 0000000..7c5918c
Binary files /dev/null and b/graphics/particles/goo.png differ
diff --git a/graphics/particles/goo.png.import b/graphics/particles/goo.png.import
new file mode 100644
index 0000000..d09d993
--- /dev/null
+++ b/graphics/particles/goo.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/goo.png-02802c5ed00e67c8421d72a2c9c229ca.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/goo.png"
+dest_files=[ "res://.import/goo.png-02802c5ed00e67c8421d72a2c9c229ca.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/goo_back.png b/graphics/particles/goo_back.png
new file mode 100644
index 0000000..aa66c72
Binary files /dev/null and b/graphics/particles/goo_back.png differ
diff --git a/graphics/particles/goo_back.png.import b/graphics/particles/goo_back.png.import
new file mode 100644
index 0000000..1965010
--- /dev/null
+++ b/graphics/particles/goo_back.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/goo_back.png-4ac48bbcb9cbbc9966601896a0aabf9d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/goo_back.png"
+dest_files=[ "res://.import/goo_back.png-4ac48bbcb9cbbc9966601896a0aabf9d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/goo_trail.png b/graphics/particles/goo_trail.png
new file mode 100644
index 0000000..c0ee926
Binary files /dev/null and b/graphics/particles/goo_trail.png differ
diff --git a/graphics/particles/goo_trail.png.import b/graphics/particles/goo_trail.png.import
new file mode 100644
index 0000000..9df839a
--- /dev/null
+++ b/graphics/particles/goo_trail.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/goo_trail.png-f255c69fac10319a6308214fbd2f5bb5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/goo_trail.png"
+dest_files=[ "res://.import/goo_trail.png-f255c69fac10319a6308214fbd2f5bb5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/muzzle_flash.png b/graphics/particles/muzzle_flash.png
new file mode 100644
index 0000000..8d94c63
Binary files /dev/null and b/graphics/particles/muzzle_flash.png differ
diff --git a/graphics/particles/muzzle_flash.png.import b/graphics/particles/muzzle_flash.png.import
new file mode 100644
index 0000000..8a804df
--- /dev/null
+++ b/graphics/particles/muzzle_flash.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/muzzle_flash.png-b54cbcced1f0d7a86670b4da7d4f76be.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/muzzle_flash.png"
+dest_files=[ "res://.import/muzzle_flash.png-b54cbcced1f0d7a86670b4da7d4f76be.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/shine.png b/graphics/particles/shine.png
new file mode 100644
index 0000000..2ab9021
Binary files /dev/null and b/graphics/particles/shine.png differ
diff --git a/graphics/particles/shine.png.import b/graphics/particles/shine.png.import
new file mode 100644
index 0000000..9f4a88c
--- /dev/null
+++ b/graphics/particles/shine.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/shine.png-e490d9bf1bcf9743c95719a78e9f033e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/shine.png"
+dest_files=[ "res://.import/shine.png-e490d9bf1bcf9743c95719a78e9f033e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/slime.png b/graphics/particles/slime.png
new file mode 100644
index 0000000..5afc927
Binary files /dev/null and b/graphics/particles/slime.png differ
diff --git a/graphics/particles/slime.png.import b/graphics/particles/slime.png.import
new file mode 100644
index 0000000..f9130d9
--- /dev/null
+++ b/graphics/particles/slime.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/slime.png-0c1cdefef5c663365373c826e991178b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/slime.png"
+dest_files=[ "res://.import/slime.png-0c1cdefef5c663365373c826e991178b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/smoke.png b/graphics/particles/smoke.png
new file mode 100644
index 0000000..6c478d9
Binary files /dev/null and b/graphics/particles/smoke.png differ
diff --git a/graphics/particles/smoke.png.import b/graphics/particles/smoke.png.import
new file mode 100644
index 0000000..f7b0016
--- /dev/null
+++ b/graphics/particles/smoke.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/smoke.png-ec8443d9c944559763c6fb0b7caf4529.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/smoke.png"
+dest_files=[ "res://.import/smoke.png-ec8443d9c944559763c6fb0b7caf4529.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/splash.png b/graphics/particles/splash.png
new file mode 100644
index 0000000..50fe6c4
Binary files /dev/null and b/graphics/particles/splash.png differ
diff --git a/graphics/particles/splash.png.import b/graphics/particles/splash.png.import
new file mode 100644
index 0000000..7feac9c
--- /dev/null
+++ b/graphics/particles/splash.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/splash.png-a6ada3bebf5580104e880db2dd2dd744.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/splash.png"
+dest_files=[ "res://.import/splash.png-a6ada3bebf5580104e880db2dd2dd744.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/particles/stalactite.png b/graphics/particles/stalactite.png
new file mode 100644
index 0000000..1b6b8fb
Binary files /dev/null and b/graphics/particles/stalactite.png differ
diff --git a/graphics/particles/stalactite.png.import b/graphics/particles/stalactite.png.import
new file mode 100644
index 0000000..d0a56b4
--- /dev/null
+++ b/graphics/particles/stalactite.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stalactite.png-7ff7cef7387b0ace5975d18a41208957.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/particles/stalactite.png"
+dest_files=[ "res://.import/stalactite.png-7ff7cef7387b0ace5975d18a41208957.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/arrow.png b/graphics/player/arrow.png
index 4d7e9d2..14f7695 100644
Binary files a/graphics/player/arrow.png and b/graphics/player/arrow.png differ
diff --git a/graphics/player/costume_wriggle.png b/graphics/player/costume_wriggle.png
new file mode 100644
index 0000000..f570542
Binary files /dev/null and b/graphics/player/costume_wriggle.png differ
diff --git a/graphics/player/costume_wriggle.png.import b/graphics/player/costume_wriggle.png.import
new file mode 100644
index 0000000..6d49b1c
--- /dev/null
+++ b/graphics/player/costume_wriggle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/costume_wriggle.png-9a4503fad456a1616bc9300fa81a7e80.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/costume_wriggle.png"
+dest_files=[ "res://.import/costume_wriggle.png-9a4503fad456a1616bc9300fa81a7e80.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/jump.png b/graphics/player/jump.png
deleted file mode 100644
index e55f19d..0000000
Binary files a/graphics/player/jump.png and /dev/null differ
diff --git a/graphics/player/jump.png.import b/graphics/player/jump.png.import
deleted file mode 100644
index 488fdf9..0000000
--- a/graphics/player/jump.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/jump.png-695d33639e35e024c8003771673e09df.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/jump.png"
-dest_files=[ "res://.import/jump.png-695d33639e35e024c8003771673e09df.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/pal_purplearmor.png b/graphics/player/pal_purplearmor.png
deleted file mode 100644
index ff68eb2..0000000
Binary files a/graphics/player/pal_purplearmor.png and /dev/null differ
diff --git a/graphics/player/pal_purplearmor.png.import b/graphics/player/pal_purplearmor.png.import
deleted file mode 100644
index 52d2959..0000000
--- a/graphics/player/pal_purplearmor.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/pal_purplearmor.png"
-dest_files=[ "res://.import/pal_purplearmor.png-4be1df2c9bcaa98882b0b62f01cb851a.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/pal_sword_gold.png b/graphics/player/pal_sword_gold.png
deleted file mode 100644
index 078f2e4..0000000
Binary files a/graphics/player/pal_sword_gold.png and /dev/null differ
diff --git a/graphics/player/pal_sword_gold.png.import b/graphics/player/pal_sword_gold.png.import
deleted file mode 100644
index ee049c7..0000000
--- a/graphics/player/pal_sword_gold.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/pal_sword_gold.png"
-dest_files=[ "res://.import/pal_sword_gold.png-00c27853a324f2c5a0dbbe0dd32019c5.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/pal_sword_teal.png b/graphics/player/pal_sword_teal.png
deleted file mode 100644
index f677187..0000000
Binary files a/graphics/player/pal_sword_teal.png and /dev/null differ
diff --git a/graphics/player/pal_sword_teal.png.import b/graphics/player/pal_sword_teal.png.import
deleted file mode 100644
index 5ba13b9..0000000
--- a/graphics/player/pal_sword_teal.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/pal_sword_teal.png"
-dest_files=[ "res://.import/pal_sword_teal.png-c2b8715f85c3f3be264335534a88c7be.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/palettes/blanc.tex b/graphics/player/palettes/blanc.tex
new file mode 100644
index 0000000..0ea8906
Binary files /dev/null and b/graphics/player/palettes/blanc.tex differ
diff --git a/graphics/player/palettes/bnw.png.import b/graphics/player/palettes/bnw.png.import
new file mode 100644
index 0000000..db6307b
--- /dev/null
+++ b/graphics/player/palettes/bnw.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bnw.png-135cfdae7a1066f9a02b72b1d037a0c8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/bnw.png"
+dest_files=[ "res://.import/bnw.png-135cfdae7a1066f9a02b72b1d037a0c8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/bnw.tex b/graphics/player/palettes/bnw.tex
new file mode 100644
index 0000000..0887341
Binary files /dev/null and b/graphics/player/palettes/bnw.tex differ
diff --git a/graphics/player/palettes/cave dweller.png.import b/graphics/player/palettes/cave dweller.png.import
new file mode 100644
index 0000000..e024ebf
--- /dev/null
+++ b/graphics/player/palettes/cave dweller.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cave dweller.png-32afeb8b10dd658bba75c813db97ba7b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/cave dweller.png"
+dest_files=[ "res://.import/cave dweller.png-32afeb8b10dd658bba75c813db97ba7b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/cave_dweller.tex b/graphics/player/palettes/cave_dweller.tex
new file mode 100644
index 0000000..e5e69ef
Binary files /dev/null and b/graphics/player/palettes/cave_dweller.tex differ
diff --git a/graphics/player/palettes/costume_wriggle.tex b/graphics/player/palettes/costume_wriggle.tex
new file mode 100644
index 0000000..9404af7
Binary files /dev/null and b/graphics/player/palettes/costume_wriggle.tex differ
diff --git a/graphics/player/palettes/crocodibli.tex b/graphics/player/palettes/crocodibli.tex
new file mode 100644
index 0000000..3a7d1d1
Binary files /dev/null and b/graphics/player/palettes/crocodibli.tex differ
diff --git a/graphics/player/palettes/cyber_city.png.import b/graphics/player/palettes/cyber_city.png.import
new file mode 100644
index 0000000..4fc6c42
--- /dev/null
+++ b/graphics/player/palettes/cyber_city.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/cyber_city.png-9afb23fdc2788ef5644663f47cffc4d5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/cyber_city.png"
+dest_files=[ "res://.import/cyber_city.png-9afb23fdc2788ef5644663f47cffc4d5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/cyber_city.tex b/graphics/player/palettes/cyber_city.tex
new file mode 100644
index 0000000..5435cb1
Binary files /dev/null and b/graphics/player/palettes/cyber_city.tex differ
diff --git a/graphics/player/palettes/default.tex b/graphics/player/palettes/default.tex
new file mode 100644
index 0000000..b583807
Binary files /dev/null and b/graphics/player/palettes/default.tex differ
diff --git a/graphics/player/palettes/dmg.png.import b/graphics/player/palettes/dmg.png.import
new file mode 100644
index 0000000..ea325c4
--- /dev/null
+++ b/graphics/player/palettes/dmg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/dmg.png-58de64a0a647a53f1c17134b2fe29f95.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/dmg.png"
+dest_files=[ "res://.import/dmg.png-58de64a0a647a53f1c17134b2fe29f95.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/doggy.tex b/graphics/player/palettes/doggy.tex
new file mode 100644
index 0000000..fdf5ea9
Binary files /dev/null and b/graphics/player/palettes/doggy.tex differ
diff --git a/graphics/player/palettes/elaine.tex b/graphics/player/palettes/elaine.tex
new file mode 100644
index 0000000..3337712
Binary files /dev/null and b/graphics/player/palettes/elaine.tex differ
diff --git a/graphics/player/palettes/gayboy.tex b/graphics/player/palettes/gayboy.tex
new file mode 100644
index 0000000..3a1544f
Binary files /dev/null and b/graphics/player/palettes/gayboy.tex differ
diff --git a/graphics/player/palettes/gravitational_redshift.tex b/graphics/player/palettes/gravitational_redshift.tex
new file mode 100644
index 0000000..1ea5361
Binary files /dev/null and b/graphics/player/palettes/gravitational_redshift.tex differ
diff --git a/graphics/player/palettes/ice mountain.png.import b/graphics/player/palettes/ice mountain.png.import
new file mode 100644
index 0000000..4751221
--- /dev/null
+++ b/graphics/player/palettes/ice mountain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ice mountain.png-ebec2be22bf9751c02cb09871a8c45e1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/ice mountain.png"
+dest_files=[ "res://.import/ice mountain.png-ebec2be22bf9751c02cb09871a8c45e1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/ice_mountain.tex b/graphics/player/palettes/ice_mountain.tex
new file mode 100644
index 0000000..93a5b42
Binary files /dev/null and b/graphics/player/palettes/ice_mountain.tex differ
diff --git a/graphics/player/palettes/lasertag.tex b/graphics/player/palettes/lasertag.tex
new file mode 100644
index 0000000..9255579
Binary files /dev/null and b/graphics/player/palettes/lasertag.tex differ
diff --git a/graphics/player/palettes/lucas.tex b/graphics/player/palettes/lucas.tex
new file mode 100644
index 0000000..c1bfefe
Binary files /dev/null and b/graphics/player/palettes/lucas.tex differ
diff --git a/graphics/player/palettes/marza.png.import b/graphics/player/palettes/marza.png.import
new file mode 100644
index 0000000..ef1fead
--- /dev/null
+++ b/graphics/player/palettes/marza.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/marza.png-58ff3b3d551293c32579f87949c6a3e4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/marza.png"
+dest_files=[ "res://.import/marza.png-58ff3b3d551293c32579f87949c6a3e4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/marza.tex b/graphics/player/palettes/marza.tex
new file mode 100644
index 0000000..83d022f
Binary files /dev/null and b/graphics/player/palettes/marza.tex differ
diff --git a/graphics/player/palettes/mibibli.tex b/graphics/player/palettes/mibibli.tex
new file mode 100644
index 0000000..7cecd9b
Binary files /dev/null and b/graphics/player/palettes/mibibli.tex differ
diff --git a/graphics/player/palettes/msx.tex b/graphics/player/palettes/msx.tex
new file mode 100644
index 0000000..3089444
Binary files /dev/null and b/graphics/player/palettes/msx.tex differ
diff --git a/graphics/player/palettes/nightrunner.png.import b/graphics/player/palettes/nightrunner.png.import
new file mode 100644
index 0000000..ed1d7a9
--- /dev/null
+++ b/graphics/player/palettes/nightrunner.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/nightrunner.png-220d6d3608b72a9c74bd49c68c00703a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/nightrunner.png"
+dest_files=[ "res://.import/nightrunner.png-220d6d3608b72a9c74bd49c68c00703a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/nightrunner.tex b/graphics/player/palettes/nightrunner.tex
new file mode 100644
index 0000000..a9d3c79
Binary files /dev/null and b/graphics/player/palettes/nightrunner.tex differ
diff --git a/graphics/player/palettes/noir.tex b/graphics/player/palettes/noir.tex
new file mode 100644
index 0000000..135445c
Binary files /dev/null and b/graphics/player/palettes/noir.tex differ
diff --git a/graphics/player/palettes/pal_lucas.png.import b/graphics/player/palettes/pal_lucas.png.import
new file mode 100644
index 0000000..2a21767
--- /dev/null
+++ b/graphics/player/palettes/pal_lucas.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/pal_lucas.png-81b0d44d10248b62b099ec9240b0b682.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/pal_lucas.png"
+dest_files=[ "res://.import/pal_lucas.png-81b0d44d10248b62b099ec9240b0b682.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/protector.png.import b/graphics/player/palettes/protector.png.import
new file mode 100644
index 0000000..64a01ba
--- /dev/null
+++ b/graphics/player/palettes/protector.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/protector.png-f50c1fff60cd235780d378620459d0d4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/protector.png"
+dest_files=[ "res://.import/protector.png-f50c1fff60cd235780d378620459d0d4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/protector.tex b/graphics/player/palettes/protector.tex
new file mode 100644
index 0000000..7d7575f
Binary files /dev/null and b/graphics/player/palettes/protector.tex differ
diff --git a/graphics/player/palettes/seegee.tex b/graphics/player/palettes/seegee.tex
new file mode 100644
index 0000000..40c6fb4
Binary files /dev/null and b/graphics/player/palettes/seegee.tex differ
diff --git a/graphics/player/palettes/seejee.png.import b/graphics/player/palettes/seejee.png.import
new file mode 100644
index 0000000..7786088
--- /dev/null
+++ b/graphics/player/palettes/seejee.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seejee.png-7d8a374ab1e2679f0f2c2f92231a5cf9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/seejee.png"
+dest_files=[ "res://.import/seejee.png-7d8a374ab1e2679f0f2c2f92231a5cf9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/sms.png.import b/graphics/player/palettes/sms.png.import
new file mode 100644
index 0000000..f58832e
--- /dev/null
+++ b/graphics/player/palettes/sms.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sms.png-2076305d78f45f7154f78edf4e6198ec.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/sms.png"
+dest_files=[ "res://.import/sms.png-2076305d78f45f7154f78edf4e6198ec.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/sms.tex b/graphics/player/palettes/sms.tex
new file mode 100644
index 0000000..dac72f4
Binary files /dev/null and b/graphics/player/palettes/sms.tex differ
diff --git a/graphics/player/palettes/strawberry.tex b/graphics/player/palettes/strawberry.tex
new file mode 100644
index 0000000..a968338
Binary files /dev/null and b/graphics/player/palettes/strawberry.tex differ
diff --git a/graphics/player/palettes/sunfish.png.import b/graphics/player/palettes/sunfish.png.import
new file mode 100644
index 0000000..0032efc
--- /dev/null
+++ b/graphics/player/palettes/sunfish.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sunfish.png-806c70cbe509ade67d2059a5fef125e0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/sunfish.png"
+dest_files=[ "res://.import/sunfish.png-806c70cbe509ade67d2059a5fef125e0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/super_player.tex b/graphics/player/palettes/super_player.tex
new file mode 100644
index 0000000..1a1dc28
Binary files /dev/null and b/graphics/player/palettes/super_player.tex differ
diff --git a/graphics/player/palettes/superman.tex b/graphics/player/palettes/superman.tex
new file mode 100644
index 0000000..4edb1f6
Binary files /dev/null and b/graphics/player/palettes/superman.tex differ
diff --git a/graphics/player/palettes/supersonic.tex b/graphics/player/palettes/supersonic.tex
new file mode 100644
index 0000000..589af79
Binary files /dev/null and b/graphics/player/palettes/supersonic.tex differ
diff --git a/graphics/player/palettes/telstar.png.import b/graphics/player/palettes/telstar.png.import
new file mode 100644
index 0000000..aff7edf
--- /dev/null
+++ b/graphics/player/palettes/telstar.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/telstar.png-c306a9d1a4146b6776b12ff22fcf7be8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/telstar.png"
+dest_files=[ "res://.import/telstar.png-c306a9d1a4146b6776b12ff22fcf7be8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/telstar.tex b/graphics/player/palettes/telstar.tex
new file mode 100644
index 0000000..f5d723c
Binary files /dev/null and b/graphics/player/palettes/telstar.tex differ
diff --git a/graphics/player/palettes/thunder.png.import b/graphics/player/palettes/thunder.png.import
new file mode 100644
index 0000000..31c04a5
--- /dev/null
+++ b/graphics/player/palettes/thunder.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/thunder.png-8d4e24aa54fc1c7c78a6c379b675a905.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/thunder.png"
+dest_files=[ "res://.import/thunder.png-8d4e24aa54fc1c7c78a6c379b675a905.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/trans_pride.tex b/graphics/player/palettes/trans_pride.tex
new file mode 100644
index 0000000..b3c782f
Binary files /dev/null and b/graphics/player/palettes/trans_pride.tex differ
diff --git a/graphics/player/palettes/typhoon.png.import b/graphics/player/palettes/typhoon.png.import
new file mode 100644
index 0000000..7e55f5b
--- /dev/null
+++ b/graphics/player/palettes/typhoon.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/typhoon.png-a749b35eca97d2eb4710c73a2a548065.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/typhoon.png"
+dest_files=[ "res://.import/typhoon.png-a749b35eca97d2eb4710c73a2a548065.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/typhoon.tex b/graphics/player/palettes/typhoon.tex
new file mode 100644
index 0000000..c1da263
Binary files /dev/null and b/graphics/player/palettes/typhoon.tex differ
diff --git a/graphics/player/palettes/unknown friend.png.import b/graphics/player/palettes/unknown friend.png.import
new file mode 100644
index 0000000..855fc78
--- /dev/null
+++ b/graphics/player/palettes/unknown friend.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/unknown friend.png-7db4fb0a2deaa6f8fcc674222592b145.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/unknown friend.png"
+dest_files=[ "res://.import/unknown friend.png-7db4fb0a2deaa6f8fcc674222592b145.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/unknown_friend.tex b/graphics/player/palettes/unknown_friend.tex
new file mode 100644
index 0000000..3d5b306
Binary files /dev/null and b/graphics/player/palettes/unknown_friend.tex differ
diff --git a/graphics/player/palettes/wavebird.png.import b/graphics/player/palettes/wavebird.png.import
new file mode 100644
index 0000000..4e864d5
--- /dev/null
+++ b/graphics/player/palettes/wavebird.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/wavebird.png-aadfcb79425d8053ec5635f9b7d13ec4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/wavebird.png"
+dest_files=[ "res://.import/wavebird.png-aadfcb79425d8053ec5635f9b7d13ec4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/wavebird.tex b/graphics/player/palettes/wavebird.tex
new file mode 100644
index 0000000..92711a9
Binary files /dev/null and b/graphics/player/palettes/wavebird.tex differ
diff --git a/graphics/player/palettes/yoonie.png.import b/graphics/player/palettes/yoonie.png.import
new file mode 100644
index 0000000..fef57ac
--- /dev/null
+++ b/graphics/player/palettes/yoonie.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/yoonie.png-c534690bdd0d2a005e39a32fd10d60ae.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/yoonie.png"
+dest_files=[ "res://.import/yoonie.png-c534690bdd0d2a005e39a32fd10d60ae.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/palettes/yoony.png.import b/graphics/player/palettes/yoony.png.import
new file mode 100644
index 0000000..fb429c8
--- /dev/null
+++ b/graphics/player/palettes/yoony.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/yoony.png-8b18663f7ac375ec64b9bdafd71bbcce.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/palettes/yoony.png"
+dest_files=[ "res://.import/yoony.png-8b18663f7ac375ec64b9bdafd71bbcce.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg.png b/graphics/player/sg.png
new file mode 100644
index 0000000..88aaab2
Binary files /dev/null and b/graphics/player/sg.png differ
diff --git a/graphics/player/sg.png.import b/graphics/player/sg.png.import
new file mode 100644
index 0000000..f3d94f8
--- /dev/null
+++ b/graphics/player/sg.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg.png-712e02c203f35b95a8377a73b65c9a2a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg.png"
+dest_files=[ "res://.import/sg.png-712e02c203f35b95a8377a73b65c9a2a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_blink.png b/graphics/player/sg_blink.png
new file mode 100644
index 0000000..18a88f5
Binary files /dev/null and b/graphics/player/sg_blink.png differ
diff --git a/graphics/player/sg_blink.png.import b/graphics/player/sg_blink.png.import
new file mode 100644
index 0000000..6ff40b1
--- /dev/null
+++ b/graphics/player/sg_blink.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_blink.png-061b1aa02fe8cd8d1da97eb6f9cb9bd2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_blink.png"
+dest_files=[ "res://.import/sg_blink.png-061b1aa02fe8cd8d1da97eb6f9cb9bd2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_bow.png b/graphics/player/sg_bow.png
index de319b1..0b269d6 100644
Binary files a/graphics/player/sg_bow.png and b/graphics/player/sg_bow.png differ
diff --git a/graphics/player/sg_climb.png b/graphics/player/sg_climb.png
index 847c97b..43603cc 100644
Binary files a/graphics/player/sg_climb.png and b/graphics/player/sg_climb.png differ
diff --git a/graphics/player/sg_doublejump.png b/graphics/player/sg_doublejump.png
index d77733f..37936e9 100644
Binary files a/graphics/player/sg_doublejump.png and b/graphics/player/sg_doublejump.png differ
diff --git a/graphics/player/sg_drown.png b/graphics/player/sg_drown.png
new file mode 100644
index 0000000..0181be7
Binary files /dev/null and b/graphics/player/sg_drown.png differ
diff --git a/graphics/player/sg_drown.png.import b/graphics/player/sg_drown.png.import
new file mode 100644
index 0000000..cc3418c
--- /dev/null
+++ b/graphics/player/sg_drown.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_drown.png-9f3aae90e49cac8847cdd0ba90cfe464.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_drown.png"
+dest_files=[ "res://.import/sg_drown.png-9f3aae90e49cac8847cdd0ba90cfe464.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_duck.png b/graphics/player/sg_duck.png
new file mode 100644
index 0000000..26d8e44
Binary files /dev/null and b/graphics/player/sg_duck.png differ
diff --git a/graphics/player/sg_duck.png.import b/graphics/player/sg_duck.png.import
new file mode 100644
index 0000000..c966fe5
--- /dev/null
+++ b/graphics/player/sg_duck.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_duck.png-2c4af6f61584cc7699021d5bd8cdd8a4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_duck.png"
+dest_files=[ "res://.import/sg_duck.png-2c4af6f61584cc7699021d5bd8cdd8a4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_edge.png b/graphics/player/sg_edge.png
new file mode 100644
index 0000000..de8bdd8
Binary files /dev/null and b/graphics/player/sg_edge.png differ
diff --git a/graphics/player/sg_edge.png.import b/graphics/player/sg_edge.png.import
new file mode 100644
index 0000000..d7e417b
--- /dev/null
+++ b/graphics/player/sg_edge.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_edge.png-3b7ab88abecd3b7d4299c2110085e970.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_edge.png"
+dest_files=[ "res://.import/sg_edge.png-3b7ab88abecd3b7d4299c2110085e970.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_fall.png b/graphics/player/sg_fall.png
new file mode 100644
index 0000000..3937170
Binary files /dev/null and b/graphics/player/sg_fall.png differ
diff --git a/graphics/player/sg_fall.png.import b/graphics/player/sg_fall.png.import
new file mode 100644
index 0000000..6096528
--- /dev/null
+++ b/graphics/player/sg_fall.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_fall.png-8ac8242c36830eb8cb608db4b96378d3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_fall.png"
+dest_files=[ "res://.import/sg_fall.png-8ac8242c36830eb8cb608db4b96378d3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_fall_scared.png b/graphics/player/sg_fall_scared.png
new file mode 100644
index 0000000..446b3f0
Binary files /dev/null and b/graphics/player/sg_fall_scared.png differ
diff --git a/graphics/player/sg_fall_scared.png.import b/graphics/player/sg_fall_scared.png.import
new file mode 100644
index 0000000..53f1f33
--- /dev/null
+++ b/graphics/player/sg_fall_scared.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_fall_scared.png-5d09bfcf952ef301fc60700a81d09a31.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_fall_scared.png"
+dest_files=[ "res://.import/sg_fall_scared.png-5d09bfcf952ef301fc60700a81d09a31.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_headphones.png b/graphics/player/sg_headphones.png
new file mode 100644
index 0000000..fe36878
Binary files /dev/null and b/graphics/player/sg_headphones.png differ
diff --git a/graphics/player/sg_headphones.png.import b/graphics/player/sg_headphones.png.import
new file mode 100644
index 0000000..e85fc24
--- /dev/null
+++ b/graphics/player/sg_headphones.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_headphones.png-786539fc8b251a584407dfd1c925e629.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_headphones.png"
+dest_files=[ "res://.import/sg_headphones.png-786539fc8b251a584407dfd1c925e629.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_idle.png b/graphics/player/sg_idle.png
index 79453dd..d3660d7 100644
Binary files a/graphics/player/sg_idle.png and b/graphics/player/sg_idle.png differ
diff --git a/graphics/player/sg_jump.png b/graphics/player/sg_jump.png
new file mode 100644
index 0000000..c12f10a
Binary files /dev/null and b/graphics/player/sg_jump.png differ
diff --git a/graphics/player/sg_jump.png.import b/graphics/player/sg_jump.png.import
new file mode 100644
index 0000000..3af1a04
--- /dev/null
+++ b/graphics/player/sg_jump.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_jump.png-2f20bbb39eaeddb7a35a1fe707095356.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_jump.png"
+dest_files=[ "res://.import/sg_jump.png-2f20bbb39eaeddb7a35a1fe707095356.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_jump_ladder.png b/graphics/player/sg_jump_ladder.png
new file mode 100644
index 0000000..b5509c2
Binary files /dev/null and b/graphics/player/sg_jump_ladder.png differ
diff --git a/graphics/player/sg_jump_ladder.png.import b/graphics/player/sg_jump_ladder.png.import
new file mode 100644
index 0000000..d5501dc
--- /dev/null
+++ b/graphics/player/sg_jump_ladder.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_jump_ladder.png-47f6c448f8443f8066f4d7e915150ff9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_jump_ladder.png"
+dest_files=[ "res://.import/sg_jump_ladder.png-47f6c448f8443f8066f4d7e915150ff9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_particles_mask.png b/graphics/player/sg_particles_mask.png
new file mode 100644
index 0000000..5e79306
Binary files /dev/null and b/graphics/player/sg_particles_mask.png differ
diff --git a/graphics/player/sg_particles_mask.png.import b/graphics/player/sg_particles_mask.png.import
new file mode 100644
index 0000000..d2e7566
--- /dev/null
+++ b/graphics/player/sg_particles_mask.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_particles_mask.png-c9c7f43473087b6f629bc945f72d141f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_particles_mask.png"
+dest_files=[ "res://.import/sg_particles_mask.png-c9c7f43473087b6f629bc945f72d141f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_push.png b/graphics/player/sg_push.png
new file mode 100644
index 0000000..425cd07
Binary files /dev/null and b/graphics/player/sg_push.png differ
diff --git a/graphics/player/sg_push.png.import b/graphics/player/sg_push.png.import
new file mode 100644
index 0000000..98d537b
--- /dev/null
+++ b/graphics/player/sg_push.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_push.png-b5f08f60752bffda7789fdaccf5e5e09.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_push.png"
+dest_files=[ "res://.import/sg_push.png-b5f08f60752bffda7789fdaccf5e5e09.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_respawn.png b/graphics/player/sg_respawn.png
new file mode 100644
index 0000000..35ca9b1
Binary files /dev/null and b/graphics/player/sg_respawn.png differ
diff --git a/graphics/player/sg_respawn.png.import b/graphics/player/sg_respawn.png.import
new file mode 100644
index 0000000..6083c74
--- /dev/null
+++ b/graphics/player/sg_respawn.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_respawn.png-83125dc5d93640f1f36a4388495f77b6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_respawn.png"
+dest_files=[ "res://.import/sg_respawn.png-83125dc5d93640f1f36a4388495f77b6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_shoot.png b/graphics/player/sg_shoot.png
index 937cc4c..8abddd5 100644
Binary files a/graphics/player/sg_shoot.png and b/graphics/player/sg_shoot.png differ
diff --git a/graphics/player/sg_shoot_air.png b/graphics/player/sg_shoot_air.png
index 1118f97..a53a717 100644
Binary files a/graphics/player/sg_shoot_air.png and b/graphics/player/sg_shoot_air.png differ
diff --git a/graphics/player/sg_shoot_grounded.png b/graphics/player/sg_shoot_grounded.png
index 4cbeae8..33faf1b 100644
Binary files a/graphics/player/sg_shoot_grounded.png and b/graphics/player/sg_shoot_grounded.png differ
diff --git a/graphics/player/sg_slash.png b/graphics/player/sg_slash.png
deleted file mode 100644
index dc612ff..0000000
Binary files a/graphics/player/sg_slash.png and /dev/null differ
diff --git a/graphics/player/sg_slash.png.import b/graphics/player/sg_slash.png.import
deleted file mode 100644
index 9c64666..0000000
--- a/graphics/player/sg_slash.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/sg_slash.png"
-dest_files=[ "res://.import/sg_slash.png-b9382a5cd994dfa4416b6ba51b6f2e82.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/sg_stab.png b/graphics/player/sg_stab.png
index 02b1370..7b42f1e 100644
Binary files a/graphics/player/sg_stab.png and b/graphics/player/sg_stab.png differ
diff --git a/graphics/player/sg_step.png b/graphics/player/sg_step.png
new file mode 100644
index 0000000..62319a2
Binary files /dev/null and b/graphics/player/sg_step.png differ
diff --git a/graphics/player/sg_step.png.import b/graphics/player/sg_step.png.import
new file mode 100644
index 0000000..f27b874
--- /dev/null
+++ b/graphics/player/sg_step.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_step.png-05fa404dd930772c6e0da48aaf383812.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_step.png"
+dest_files=[ "res://.import/sg_step.png-05fa404dd930772c6e0da48aaf383812.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_stim.png b/graphics/player/sg_stim.png
new file mode 100644
index 0000000..5a8c19d
Binary files /dev/null and b/graphics/player/sg_stim.png differ
diff --git a/graphics/player/sg_stim.png.import b/graphics/player/sg_stim.png.import
new file mode 100644
index 0000000..eca8d39
--- /dev/null
+++ b/graphics/player/sg_stim.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_stim.png-5dc11f85935d2bd053b2df3c37dfb0e9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_stim.png"
+dest_files=[ "res://.import/sg_stim.png-5dc11f85935d2bd053b2df3c37dfb0e9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sg_swing.png b/graphics/player/sg_swing.png
deleted file mode 100644
index 2daf962..0000000
Binary files a/graphics/player/sg_swing.png and /dev/null differ
diff --git a/graphics/player/sg_swing.png.import b/graphics/player/sg_swing.png.import
deleted file mode 100644
index d93c561..0000000
--- a/graphics/player/sg_swing.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/sg_swing.png"
-dest_files=[ "res://.import/sg_swing.png-1db47eaaaf2ed5a1738acf5a9eb25b64.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/sg_sword.png b/graphics/player/sg_sword.png
deleted file mode 100644
index be293e6..0000000
Binary files a/graphics/player/sg_sword.png and /dev/null differ
diff --git a/graphics/player/sg_sword.png.import b/graphics/player/sg_sword.png.import
deleted file mode 100644
index ec10fba..0000000
--- a/graphics/player/sg_sword.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/sg_sword.png"
-dest_files=[ "res://.import/sg_sword.png-3a07cd2417fb17cc2f65d7fbb7fee774.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/sg_walk.png b/graphics/player/sg_walk.png
index 447a657..9c41c6f 100644
Binary files a/graphics/player/sg_walk.png and b/graphics/player/sg_walk.png differ
diff --git a/graphics/player/sg_zap.png b/graphics/player/sg_zap.png
new file mode 100644
index 0000000..21e41e9
Binary files /dev/null and b/graphics/player/sg_zap.png differ
diff --git a/graphics/player/sg_zap.png.import b/graphics/player/sg_zap.png.import
new file mode 100644
index 0000000..9063f0d
--- /dev/null
+++ b/graphics/player/sg_zap.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sg_zap.png-42b9645cdd95a12a23b467e9a2265eec.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/sg_zap.png"
+dest_files=[ "res://.import/sg_zap.png-42b9645cdd95a12a23b467e9a2265eec.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/player/sword.png b/graphics/player/sword.png
deleted file mode 100644
index 61afc86..0000000
Binary files a/graphics/player/sword.png and /dev/null differ
diff --git a/graphics/player/sword.png.import b/graphics/player/sword.png.import
deleted file mode 100644
index 5402ee5..0000000
--- a/graphics/player/sword.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/sword.png"
-dest_files=[ "res://.import/sword.png-d02aeb6ea6702cb3352af1da1b2206f3.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/sword_slash.png b/graphics/player/sword_slash.png
deleted file mode 100644
index 02db565..0000000
Binary files a/graphics/player/sword_slash.png and /dev/null differ
diff --git a/graphics/player/sword_slash.png.import b/graphics/player/sword_slash.png.import
deleted file mode 100644
index 91f45d2..0000000
--- a/graphics/player/sword_slash.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/sword_slash.png-a734a066e481c52863aafde60d35a027.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/player/sword_slash.png"
-dest_files=[ "res://.import/sword_slash.png-a734a066e481c52863aafde60d35a027.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/player/wriggle.png b/graphics/player/wriggle.png
new file mode 100644
index 0000000..0b16b5a
Binary files /dev/null and b/graphics/player/wriggle.png differ
diff --git a/graphics/player/wriggle.png.import b/graphics/player/wriggle.png.import
new file mode 100644
index 0000000..b7da9f9
--- /dev/null
+++ b/graphics/player/wriggle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/wriggle.png-56d005c1d18e1b587ff1ec6e46f07087.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/player/wriggle.png"
+dest_files=[ "res://.import/wriggle.png-56d005c1d18e1b587ff1ec6e46f07087.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/rock/crate.png b/graphics/rock/crate.png
new file mode 100644
index 0000000..51fc96b
Binary files /dev/null and b/graphics/rock/crate.png differ
diff --git a/graphics/rock/crate.png.import b/graphics/rock/crate.png.import
new file mode 100644
index 0000000..4ffb1f4
--- /dev/null
+++ b/graphics/rock/crate.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/crate.png-54bfd00030ca25c3153cb46f1941a534.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/rock/crate.png"
+dest_files=[ "res://.import/crate.png-54bfd00030ca25c3153cb46f1941a534.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/rock/rock.png b/graphics/rock/rock.png
index 572a305..d4a99c7 100644
Binary files a/graphics/rock/rock.png and b/graphics/rock/rock.png differ
diff --git a/graphics/secret/beach_ball.png b/graphics/secret/beach_ball.png
new file mode 100644
index 0000000..9084870
Binary files /dev/null and b/graphics/secret/beach_ball.png differ
diff --git a/graphics/secret/beach_ball.png.import b/graphics/secret/beach_ball.png.import
new file mode 100644
index 0000000..5dda4ae
--- /dev/null
+++ b/graphics/secret/beach_ball.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/beach_ball.png-e07b98c5d77d49af97ff4c5c4d64091d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/secret/beach_ball.png"
+dest_files=[ "res://.import/beach_ball.png-e07b98c5d77d49af97ff4c5c4d64091d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/secret/i_cant_take_it_anymore.png b/graphics/secret/i_cant_take_it_anymore.png
new file mode 100644
index 0000000..07ac247
Binary files /dev/null and b/graphics/secret/i_cant_take_it_anymore.png differ
diff --git a/graphics/secret/i_cant_take_it_anymore.png.import b/graphics/secret/i_cant_take_it_anymore.png.import
new file mode 100644
index 0000000..a981b73
--- /dev/null
+++ b/graphics/secret/i_cant_take_it_anymore.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/i_cant_take_it_anymore.png-a6fca862d5327d0a1d51b8c12a8aabc4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/secret/i_cant_take_it_anymore.png"
+dest_files=[ "res://.import/i_cant_take_it_anymore.png-a6fca862d5327d0a1d51b8c12a8aabc4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/secret/uncanny.png b/graphics/secret/uncanny.png
new file mode 100644
index 0000000..dfa69b6
Binary files /dev/null and b/graphics/secret/uncanny.png differ
diff --git a/graphics/secret/uncanny.png.import b/graphics/secret/uncanny.png.import
new file mode 100644
index 0000000..54773b6
--- /dev/null
+++ b/graphics/secret/uncanny.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/uncanny.png-a842bbb579fb6147c3e65cfee5536a0b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/secret/uncanny.png"
+dest_files=[ "res://.import/uncanny.png-a842bbb579fb6147c3e65cfee5536a0b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/secret/zball.png b/graphics/secret/zball.png
new file mode 100644
index 0000000..b7d4bcc
Binary files /dev/null and b/graphics/secret/zball.png differ
diff --git a/graphics/secret/zball.png.import b/graphics/secret/zball.png.import
new file mode 100644
index 0000000..5ef6a12
--- /dev/null
+++ b/graphics/secret/zball.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/zball.png-766d895c88e3cffc348d3ca2bc047df8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/secret/zball.png"
+dest_files=[ "res://.import/zball.png-766d895c88e3cffc348d3ca2bc047df8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/secret/zball_glow.png b/graphics/secret/zball_glow.png
new file mode 100644
index 0000000..c08e576
Binary files /dev/null and b/graphics/secret/zball_glow.png differ
diff --git a/graphics/secret/zball_glow.png.import b/graphics/secret/zball_glow.png.import
new file mode 100644
index 0000000..b808838
--- /dev/null
+++ b/graphics/secret/zball_glow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/zball_glow.png-a903baaaddcbe84df17501813dffd3fd.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/secret/zball_glow.png"
+dest_files=[ "res://.import/zball_glow.png-a903baaaddcbe84df17501813dffd3fd.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/sockbug/fullturn_strip10.png b/graphics/sockbug/fullturn_strip10.png
new file mode 100644
index 0000000..322a7ac
Binary files /dev/null and b/graphics/sockbug/fullturn_strip10.png differ
diff --git a/graphics/sockbug/fullturn_strip10.png.import b/graphics/sockbug/fullturn_strip10.png.import
new file mode 100644
index 0000000..f501780
--- /dev/null
+++ b/graphics/sockbug/fullturn_strip10.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fullturn_strip10.png-5f5ea8947d5fc4f53c370dfffa30a486.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/sockbug/fullturn_strip10.png"
+dest_files=[ "res://.import/fullturn_strip10.png-5f5ea8947d5fc4f53c370dfffa30a486.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/sockbug/walk_strip6.png b/graphics/sockbug/walk_strip6.png
new file mode 100644
index 0000000..1220776
Binary files /dev/null and b/graphics/sockbug/walk_strip6.png differ
diff --git a/graphics/sockbug/walk_strip6.png.import b/graphics/sockbug/walk_strip6.png.import
new file mode 100644
index 0000000..50c41e8
--- /dev/null
+++ b/graphics/sockbug/walk_strip6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/walk_strip6.png-b05978871fa10f8eeed77621aea2ecca.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/sockbug/walk_strip6.png"
+dest_files=[ "res://.import/walk_strip6.png-b05978871fa10f8eeed77621aea2ecca.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/stalactite/stalactite.png b/graphics/stalactite/stalactite.png
new file mode 100644
index 0000000..61c6eb9
Binary files /dev/null and b/graphics/stalactite/stalactite.png differ
diff --git a/graphics/stalactite/stalactite.png.import b/graphics/stalactite/stalactite.png.import
new file mode 100644
index 0000000..5509a03
--- /dev/null
+++ b/graphics/stalactite/stalactite.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/stalactite.png-02a1deb0032f5cd17ce906194b047729.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/stalactite/stalactite.png"
+dest_files=[ "res://.import/stalactite.png-02a1deb0032f5cd17ce906194b047729.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/switches/button.png b/graphics/switches/button.png
new file mode 100644
index 0000000..fd6e605
Binary files /dev/null and b/graphics/switches/button.png differ
diff --git a/graphics/switches/button.png.import b/graphics/switches/button.png.import
new file mode 100644
index 0000000..a15d81a
--- /dev/null
+++ b/graphics/switches/button.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/button.png-2e39dc35f27e72b64819be5d974ac0f1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/switches/button.png"
+dest_files=[ "res://.import/button.png-2e39dc35f27e72b64819be5d974ac0f1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/abstract.png b/graphics/tiles/abstract.png
new file mode 100644
index 0000000..505969a
Binary files /dev/null and b/graphics/tiles/abstract.png differ
diff --git a/graphics/tiles/abstract.png.import b/graphics/tiles/abstract.png.import
new file mode 100644
index 0000000..5185f11
--- /dev/null
+++ b/graphics/tiles/abstract.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/abstract.png-520d62bcdeefefeb95738be4737e0f66.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/abstract.png"
+dest_files=[ "res://.import/abstract.png-520d62bcdeefefeb95738be4737e0f66.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/abyss.png b/graphics/tiles/abyss.png
new file mode 100644
index 0000000..77a1b69
Binary files /dev/null and b/graphics/tiles/abyss.png differ
diff --git a/graphics/tiles/abyss.png.import b/graphics/tiles/abyss.png.import
new file mode 100644
index 0000000..628acf4
--- /dev/null
+++ b/graphics/tiles/abyss.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/abyss.png-6103d4163b29dbc50f76fbe18bca735e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/abyss.png"
+dest_files=[ "res://.import/abyss.png-6103d4163b29dbc50f76fbe18bca735e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/blood.tres b/graphics/tiles/blood.tres
new file mode 100644
index 0000000..2b5aba1
--- /dev/null
+++ b/graphics/tiles/blood.tres
@@ -0,0 +1,14 @@
+[gd_resource type="AnimatedTexture" load_steps=4 format=2]
+
+[ext_resource path="res://graphics/tiles/blood_2.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/blood_1.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/blood_3.png" type="Texture" id=3]
+
+[resource]
+frames = 3
+fps = 5.0
+frame_0/texture = ExtResource( 2 )
+frame_1/texture = ExtResource( 1 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 3 )
+frame_2/delay_sec = 0.0
diff --git a/graphics/tiles/blood_1.png b/graphics/tiles/blood_1.png
new file mode 100644
index 0000000..1fbda5b
Binary files /dev/null and b/graphics/tiles/blood_1.png differ
diff --git a/graphics/tiles/blood_1.png.import b/graphics/tiles/blood_1.png.import
new file mode 100644
index 0000000..4ac3023
--- /dev/null
+++ b/graphics/tiles/blood_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/blood_1.png-39180aea054e22e31e47ee01e0b988d7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/blood_1.png"
+dest_files=[ "res://.import/blood_1.png-39180aea054e22e31e47ee01e0b988d7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/blood_2.png b/graphics/tiles/blood_2.png
new file mode 100644
index 0000000..106fd3b
Binary files /dev/null and b/graphics/tiles/blood_2.png differ
diff --git a/graphics/tiles/blood_2.png.import b/graphics/tiles/blood_2.png.import
new file mode 100644
index 0000000..4211646
--- /dev/null
+++ b/graphics/tiles/blood_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/blood_2.png-c233b28b4b2ace092d9a614d5bbc9eaa.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/blood_2.png"
+dest_files=[ "res://.import/blood_2.png-c233b28b4b2ace092d9a614d5bbc9eaa.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/blood_3.png b/graphics/tiles/blood_3.png
new file mode 100644
index 0000000..d36ea37
Binary files /dev/null and b/graphics/tiles/blood_3.png differ
diff --git a/graphics/tiles/blood_3.png.import b/graphics/tiles/blood_3.png.import
new file mode 100644
index 0000000..fc129e8
--- /dev/null
+++ b/graphics/tiles/blood_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/blood_3.png-bbe729359966ca836d1b7b1cd1f2cb01.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/blood_3.png"
+dest_files=[ "res://.import/blood_3.png-bbe729359966ca836d1b7b1cd1f2cb01.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/blood_bottom.png b/graphics/tiles/blood_bottom.png
new file mode 100644
index 0000000..f8c28e6
Binary files /dev/null and b/graphics/tiles/blood_bottom.png differ
diff --git a/graphics/tiles/blood_bottom.png.import b/graphics/tiles/blood_bottom.png.import
new file mode 100644
index 0000000..fef8bf4
--- /dev/null
+++ b/graphics/tiles/blood_bottom.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/blood_bottom.png-d8a7fe91e8209fe74adce2bd66715ed1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/blood_bottom.png"
+dest_files=[ "res://.import/blood_bottom.png-d8a7fe91e8209fe74adce2bd66715ed1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/canopy.png b/graphics/tiles/canopy.png
index 2785358..684f2d9 100644
Binary files a/graphics/tiles/canopy.png and b/graphics/tiles/canopy.png differ
diff --git a/graphics/tiles/cave.png b/graphics/tiles/cave.png
index e8f463e..b458cdb 100644
Binary files a/graphics/tiles/cave.png and b/graphics/tiles/cave.png differ
diff --git a/graphics/tiles/copper.png b/graphics/tiles/copper.png
deleted file mode 100644
index ba6d6bb..0000000
Binary files a/graphics/tiles/copper.png and /dev/null differ
diff --git a/graphics/tiles/factory.png b/graphics/tiles/factory.png
index 1f069a6..ba07050 100644
Binary files a/graphics/tiles/factory.png and b/graphics/tiles/factory.png differ
diff --git a/graphics/tiles/flower/flower_blue_1.png b/graphics/tiles/flower/flower_blue_1.png
new file mode 100644
index 0000000..50ebca8
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_1.png differ
diff --git a/graphics/tiles/flower/flower_blue_1.png.import b/graphics/tiles/flower/flower_blue_1.png.import
new file mode 100644
index 0000000..700d13d
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_1.png-031b185dbdbecb0670035eac43014e80.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_1.png"
+dest_files=[ "res://.import/flower_blue_1.png-031b185dbdbecb0670035eac43014e80.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_2.png b/graphics/tiles/flower/flower_blue_2.png
new file mode 100644
index 0000000..045bd8b
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_2.png differ
diff --git a/graphics/tiles/flower/flower_blue_2.png.import b/graphics/tiles/flower/flower_blue_2.png.import
new file mode 100644
index 0000000..91b7571
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_2.png-8f33eab5c1730ff88c15dccca75011c7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_2.png"
+dest_files=[ "res://.import/flower_blue_2.png-8f33eab5c1730ff88c15dccca75011c7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_3.png b/graphics/tiles/flower/flower_blue_3.png
new file mode 100644
index 0000000..c780ae7
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_3.png differ
diff --git a/graphics/tiles/flower/flower_blue_3.png.import b/graphics/tiles/flower/flower_blue_3.png.import
new file mode 100644
index 0000000..efb2eed
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_3.png-a29e2b0894d671e2bd76acb05600bc0b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_3.png"
+dest_files=[ "res://.import/flower_blue_3.png-a29e2b0894d671e2bd76acb05600bc0b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_4.png b/graphics/tiles/flower/flower_blue_4.png
new file mode 100644
index 0000000..bea91d0
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_4.png differ
diff --git a/graphics/tiles/flower/flower_blue_4.png.import b/graphics/tiles/flower/flower_blue_4.png.import
new file mode 100644
index 0000000..ffc1436
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_4.png-f6a55d87a764dedb0b3dc8fc57115e5e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_4.png"
+dest_files=[ "res://.import/flower_blue_4.png-f6a55d87a764dedb0b3dc8fc57115e5e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_5.png b/graphics/tiles/flower/flower_blue_5.png
new file mode 100644
index 0000000..4509569
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_5.png differ
diff --git a/graphics/tiles/flower/flower_blue_5.png.import b/graphics/tiles/flower/flower_blue_5.png.import
new file mode 100644
index 0000000..70a325b
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_5.png-f045e6c2b09bd0ecb8326c94a7333072.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_5.png"
+dest_files=[ "res://.import/flower_blue_5.png-f045e6c2b09bd0ecb8326c94a7333072.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_6.png b/graphics/tiles/flower/flower_blue_6.png
new file mode 100644
index 0000000..ffb5559
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_6.png differ
diff --git a/graphics/tiles/flower/flower_blue_6.png.import b/graphics/tiles/flower/flower_blue_6.png.import
new file mode 100644
index 0000000..716c33b
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_6.png-925e9ee9e0a2f39e30c14d95529b6b0c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_6.png"
+dest_files=[ "res://.import/flower_blue_6.png-925e9ee9e0a2f39e30c14d95529b6b0c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_7.png b/graphics/tiles/flower/flower_blue_7.png
new file mode 100644
index 0000000..4509569
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_7.png differ
diff --git a/graphics/tiles/flower/flower_blue_7.png.import b/graphics/tiles/flower/flower_blue_7.png.import
new file mode 100644
index 0000000..8525bb8
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_7.png-e14aea798dac1d9a61884f722803760d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_7.png"
+dest_files=[ "res://.import/flower_blue_7.png-e14aea798dac1d9a61884f722803760d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_blue_8.png b/graphics/tiles/flower/flower_blue_8.png
new file mode 100644
index 0000000..bea91d0
Binary files /dev/null and b/graphics/tiles/flower/flower_blue_8.png differ
diff --git a/graphics/tiles/flower/flower_blue_8.png.import b/graphics/tiles/flower/flower_blue_8.png.import
new file mode 100644
index 0000000..02af55f
--- /dev/null
+++ b/graphics/tiles/flower/flower_blue_8.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_blue_8.png-22800ded7f6a218bdaff026fd4c1d97f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_blue_8.png"
+dest_files=[ "res://.import/flower_blue_8.png-22800ded7f6a218bdaff026fd4c1d97f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_1.png b/graphics/tiles/flower/flower_pink_1.png
new file mode 100644
index 0000000..a16252f
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_1.png differ
diff --git a/graphics/tiles/flower/flower_pink_1.png.import b/graphics/tiles/flower/flower_pink_1.png.import
new file mode 100644
index 0000000..c258cb9
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_1.png-e6849e2dbb5a1b419f4092e7e3c2a643.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_1.png"
+dest_files=[ "res://.import/flower_pink_1.png-e6849e2dbb5a1b419f4092e7e3c2a643.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_2.png b/graphics/tiles/flower/flower_pink_2.png
new file mode 100644
index 0000000..363f0ba
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_2.png differ
diff --git a/graphics/tiles/flower/flower_pink_2.png.import b/graphics/tiles/flower/flower_pink_2.png.import
new file mode 100644
index 0000000..7cbd008
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_2.png-0b95a7b3af227f799231e3b4e8479365.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_2.png"
+dest_files=[ "res://.import/flower_pink_2.png-0b95a7b3af227f799231e3b4e8479365.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_3.png b/graphics/tiles/flower/flower_pink_3.png
new file mode 100644
index 0000000..ff2b232
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_3.png differ
diff --git a/graphics/tiles/flower/flower_pink_3.png.import b/graphics/tiles/flower/flower_pink_3.png.import
new file mode 100644
index 0000000..eb0c08d
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_3.png-06ff9e9fa0c1abc4b149c14bab9f9068.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_3.png"
+dest_files=[ "res://.import/flower_pink_3.png-06ff9e9fa0c1abc4b149c14bab9f9068.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_4.png b/graphics/tiles/flower/flower_pink_4.png
new file mode 100644
index 0000000..6087ed5
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_4.png differ
diff --git a/graphics/tiles/flower/flower_pink_4.png.import b/graphics/tiles/flower/flower_pink_4.png.import
new file mode 100644
index 0000000..621bab0
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_4.png-5756c02b17c1fffd188c07b8ddce6d09.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_4.png"
+dest_files=[ "res://.import/flower_pink_4.png-5756c02b17c1fffd188c07b8ddce6d09.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_5.png b/graphics/tiles/flower/flower_pink_5.png
new file mode 100644
index 0000000..ea122fc
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_5.png differ
diff --git a/graphics/tiles/flower/flower_pink_5.png.import b/graphics/tiles/flower/flower_pink_5.png.import
new file mode 100644
index 0000000..0453852
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_5.png-900f01d0b635a0b5f20d9071c27c84ce.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_5.png"
+dest_files=[ "res://.import/flower_pink_5.png-900f01d0b635a0b5f20d9071c27c84ce.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_6.png b/graphics/tiles/flower/flower_pink_6.png
new file mode 100644
index 0000000..4159018
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_6.png differ
diff --git a/graphics/tiles/flower/flower_pink_6.png.import b/graphics/tiles/flower/flower_pink_6.png.import
new file mode 100644
index 0000000..aaaa3ec
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_6.png-334aec2d68c6653dd0daa9fb3a8919c1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_6.png"
+dest_files=[ "res://.import/flower_pink_6.png-334aec2d68c6653dd0daa9fb3a8919c1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_7.png b/graphics/tiles/flower/flower_pink_7.png
new file mode 100644
index 0000000..ea122fc
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_7.png differ
diff --git a/graphics/tiles/flower/flower_pink_7.png.import b/graphics/tiles/flower/flower_pink_7.png.import
new file mode 100644
index 0000000..6ee5e25
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_7.png-4b9becea393b6037fd182519621d86db.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_7.png"
+dest_files=[ "res://.import/flower_pink_7.png-4b9becea393b6037fd182519621d86db.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_pink_8.png b/graphics/tiles/flower/flower_pink_8.png
new file mode 100644
index 0000000..6087ed5
Binary files /dev/null and b/graphics/tiles/flower/flower_pink_8.png differ
diff --git a/graphics/tiles/flower/flower_pink_8.png.import b/graphics/tiles/flower/flower_pink_8.png.import
new file mode 100644
index 0000000..ec67f34
--- /dev/null
+++ b/graphics/tiles/flower/flower_pink_8.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_pink_8.png-d918ca44a7e9a01e5532d8b380c91136.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_pink_8.png"
+dest_files=[ "res://.import/flower_pink_8.png-d918ca44a7e9a01e5532d8b380c91136.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_1.png b/graphics/tiles/flower/flower_red_1.png
new file mode 100644
index 0000000..545baed
Binary files /dev/null and b/graphics/tiles/flower/flower_red_1.png differ
diff --git a/graphics/tiles/flower/flower_red_1.png.import b/graphics/tiles/flower/flower_red_1.png.import
new file mode 100644
index 0000000..1c8eb07
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_1.png-018d1bf8635b73940deff904ec212a21.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_1.png"
+dest_files=[ "res://.import/flower_red_1.png-018d1bf8635b73940deff904ec212a21.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_2.png b/graphics/tiles/flower/flower_red_2.png
new file mode 100644
index 0000000..690ab60
Binary files /dev/null and b/graphics/tiles/flower/flower_red_2.png differ
diff --git a/graphics/tiles/flower/flower_red_2.png.import b/graphics/tiles/flower/flower_red_2.png.import
new file mode 100644
index 0000000..2f8a0e5
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_2.png-4785c71a226172143eb720f08a1b9189.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_2.png"
+dest_files=[ "res://.import/flower_red_2.png-4785c71a226172143eb720f08a1b9189.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_3.png b/graphics/tiles/flower/flower_red_3.png
new file mode 100644
index 0000000..d90af5b
Binary files /dev/null and b/graphics/tiles/flower/flower_red_3.png differ
diff --git a/graphics/tiles/flower/flower_red_3.png.import b/graphics/tiles/flower/flower_red_3.png.import
new file mode 100644
index 0000000..83d4086
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_3.png-9a8bd9d374443a4e4cb2974eac7e4a07.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_3.png"
+dest_files=[ "res://.import/flower_red_3.png-9a8bd9d374443a4e4cb2974eac7e4a07.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_4.png b/graphics/tiles/flower/flower_red_4.png
new file mode 100644
index 0000000..f225c90
Binary files /dev/null and b/graphics/tiles/flower/flower_red_4.png differ
diff --git a/graphics/tiles/flower/flower_red_4.png.import b/graphics/tiles/flower/flower_red_4.png.import
new file mode 100644
index 0000000..f5eb8d5
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_4.png-3f2a74e8080fb073ef578c30dddae6ad.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_4.png"
+dest_files=[ "res://.import/flower_red_4.png-3f2a74e8080fb073ef578c30dddae6ad.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_5.png b/graphics/tiles/flower/flower_red_5.png
new file mode 100644
index 0000000..222a1d7
Binary files /dev/null and b/graphics/tiles/flower/flower_red_5.png differ
diff --git a/graphics/tiles/flower/flower_red_5.png.import b/graphics/tiles/flower/flower_red_5.png.import
new file mode 100644
index 0000000..14b5fbf
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_5.png-eb6ef4b9f7f8b718e298dcfe2344865e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_5.png"
+dest_files=[ "res://.import/flower_red_5.png-eb6ef4b9f7f8b718e298dcfe2344865e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_6.png b/graphics/tiles/flower/flower_red_6.png
new file mode 100644
index 0000000..0005bf2
Binary files /dev/null and b/graphics/tiles/flower/flower_red_6.png differ
diff --git a/graphics/tiles/flower/flower_red_6.png.import b/graphics/tiles/flower/flower_red_6.png.import
new file mode 100644
index 0000000..26fd1fd
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_6.png-40b47435511a6975b04662d51d2017f2.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_6.png"
+dest_files=[ "res://.import/flower_red_6.png-40b47435511a6975b04662d51d2017f2.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_7.png b/graphics/tiles/flower/flower_red_7.png
new file mode 100644
index 0000000..222a1d7
Binary files /dev/null and b/graphics/tiles/flower/flower_red_7.png differ
diff --git a/graphics/tiles/flower/flower_red_7.png.import b/graphics/tiles/flower/flower_red_7.png.import
new file mode 100644
index 0000000..9fdf844
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_7.png-7ad03e7a33570bee6eb55c6e6e68f182.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_7.png"
+dest_files=[ "res://.import/flower_red_7.png-7ad03e7a33570bee6eb55c6e6e68f182.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower/flower_red_8.png b/graphics/tiles/flower/flower_red_8.png
new file mode 100644
index 0000000..f225c90
Binary files /dev/null and b/graphics/tiles/flower/flower_red_8.png differ
diff --git a/graphics/tiles/flower/flower_red_8.png.import b/graphics/tiles/flower/flower_red_8.png.import
new file mode 100644
index 0000000..bfd5601
--- /dev/null
+++ b/graphics/tiles/flower/flower_red_8.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_red_8.png-99eb388e9beef4ea0b609843ab48b589.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/flower/flower_red_8.png"
+dest_files=[ "res://.import/flower_red_8.png-99eb388e9beef4ea0b609843ab48b589.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/flower_blue.tres b/graphics/tiles/flower_blue.tres
new file mode 100644
index 0000000..4b07488
--- /dev/null
+++ b/graphics/tiles/flower_blue.tres
@@ -0,0 +1,29 @@
+[gd_resource type="AnimatedTexture" load_steps=9 format=2]
+
+[ext_resource path="res://graphics/tiles/flower/flower_blue_4.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_1.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_7.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_8.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_3.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_5.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_6.png" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/flower/flower_blue_2.png" type="Texture" id=8]
+
+[resource]
+frames = 8
+fps = 10.0
+frame_0/texture = ExtResource( 2 )
+frame_1/texture = ExtResource( 8 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 5 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 1 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 6 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 7 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 3 )
+frame_6/delay_sec = 0.0
+frame_7/texture = ExtResource( 4 )
+frame_7/delay_sec = 0.0
diff --git a/graphics/tiles/flower_pink.tres b/graphics/tiles/flower_pink.tres
new file mode 100644
index 0000000..a54fd0e
--- /dev/null
+++ b/graphics/tiles/flower_pink.tres
@@ -0,0 +1,29 @@
+[gd_resource type="AnimatedTexture" load_steps=9 format=2]
+
+[ext_resource path="res://graphics/tiles/flower/flower_pink_5.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_7.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_1.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_2.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_3.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_4.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_6.png" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/flower/flower_pink_8.png" type="Texture" id=8]
+
+[resource]
+frames = 8
+fps = 10.0
+frame_0/texture = ExtResource( 3 )
+frame_1/texture = ExtResource( 4 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 5 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 6 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 1 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 7 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 2 )
+frame_6/delay_sec = 0.0
+frame_7/texture = ExtResource( 8 )
+frame_7/delay_sec = 0.0
diff --git a/graphics/tiles/flower_red.tres b/graphics/tiles/flower_red.tres
new file mode 100644
index 0000000..1d3ff9e
--- /dev/null
+++ b/graphics/tiles/flower_red.tres
@@ -0,0 +1,29 @@
+[gd_resource type="AnimatedTexture" load_steps=9 format=2]
+
+[ext_resource path="res://graphics/tiles/flower/flower_red_3.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/flower/flower_red_4.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/flower/flower_red_1.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/flower/flower_red_2.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/flower/flower_red_6.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/flower/flower_red_8.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/flower/flower_red_5.png" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/flower/flower_red_7.png" type="Texture" id=8]
+
+[resource]
+frames = 8
+fps = 10.0
+frame_0/texture = ExtResource( 3 )
+frame_1/texture = ExtResource( 4 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 1 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 2 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 7 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 5 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 8 )
+frame_6/delay_sec = 0.0
+frame_7/texture = ExtResource( 6 )
+frame_7/delay_sec = 0.0
diff --git a/graphics/tiles/grass.png b/graphics/tiles/grass.png
index c04444b..4f846b9 100644
Binary files a/graphics/tiles/grass.png and b/graphics/tiles/grass.png differ
diff --git a/graphics/tiles/horror.png b/graphics/tiles/horror.png
new file mode 100644
index 0000000..a5f62cc
Binary files /dev/null and b/graphics/tiles/horror.png differ
diff --git a/graphics/tiles/horror.png.import b/graphics/tiles/horror.png.import
new file mode 100644
index 0000000..5d3a568
--- /dev/null
+++ b/graphics/tiles/horror.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/horror.png-146c7109211cea1eaef1c6ca6b7fb11a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/horror.png"
+dest_files=[ "res://.import/horror.png-146c7109211cea1eaef1c6ca6b7fb11a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/laboratory.png b/graphics/tiles/laboratory.png
new file mode 100644
index 0000000..f8fec7e
Binary files /dev/null and b/graphics/tiles/laboratory.png differ
diff --git a/graphics/tiles/laboratory.png.import b/graphics/tiles/laboratory.png.import
new file mode 100644
index 0000000..84de99d
--- /dev/null
+++ b/graphics/tiles/laboratory.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/laboratory.png-0545cbfb34023b00be0869c971e50bc1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/laboratory.png"
+dest_files=[ "res://.import/laboratory.png-0545cbfb34023b00be0869c971e50bc1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/ladders.png b/graphics/tiles/ladders.png
new file mode 100644
index 0000000..4b0a87c
Binary files /dev/null and b/graphics/tiles/ladders.png differ
diff --git a/graphics/tiles/ladders.png.import b/graphics/tiles/ladders.png.import
new file mode 100644
index 0000000..ebb26ca
--- /dev/null
+++ b/graphics/tiles/ladders.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ladders.png-fad535df6d272c91dc28fb6bfb5c295a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/ladders.png"
+dest_files=[ "res://.import/ladders.png-fad535df6d272c91dc28fb6bfb5c295a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mountain.png b/graphics/tiles/mountain.png
new file mode 100644
index 0000000..ed70d62
Binary files /dev/null and b/graphics/tiles/mountain.png differ
diff --git a/graphics/tiles/mountain.png.import b/graphics/tiles/mountain.png.import
new file mode 100644
index 0000000..73f832c
--- /dev/null
+++ b/graphics/tiles/mountain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mountain.png-365ee0dff2824b1880f47f08612ca36a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mountain.png"
+dest_files=[ "res://.import/mountain.png-365ee0dff2824b1880f47f08612ca36a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_1.png b/graphics/tiles/mushroom/mushroom_brown_1.png
new file mode 100644
index 0000000..2a1b22e
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_1.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_1.png.import b/graphics/tiles/mushroom/mushroom_brown_1.png.import
new file mode 100644
index 0000000..ec91f97
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_1.png-401bd86f525bf355d78fc3f9b7e776ef.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_1.png"
+dest_files=[ "res://.import/mushroom_brown_1.png-401bd86f525bf355d78fc3f9b7e776ef.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_10.png b/graphics/tiles/mushroom/mushroom_brown_10.png
new file mode 100644
index 0000000..437488b
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_10.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_10.png.import b/graphics/tiles/mushroom/mushroom_brown_10.png.import
new file mode 100644
index 0000000..8795f7e
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_10.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_10.png-31cc2ad787a58abb32729fa87b073f5c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_10.png"
+dest_files=[ "res://.import/mushroom_brown_10.png-31cc2ad787a58abb32729fa87b073f5c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_2.png b/graphics/tiles/mushroom/mushroom_brown_2.png
new file mode 100644
index 0000000..437488b
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_2.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_2.png.import b/graphics/tiles/mushroom/mushroom_brown_2.png.import
new file mode 100644
index 0000000..a99a9d1
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_2.png-fa7ee3e5b01f3a75f9468d6229f78026.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_2.png"
+dest_files=[ "res://.import/mushroom_brown_2.png-fa7ee3e5b01f3a75f9468d6229f78026.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_3.png b/graphics/tiles/mushroom/mushroom_brown_3.png
new file mode 100644
index 0000000..824d233
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_3.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_3.png.import b/graphics/tiles/mushroom/mushroom_brown_3.png.import
new file mode 100644
index 0000000..3d98f74
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_3.png-9fe48fd32fe280f8215d3979badef3fc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_3.png"
+dest_files=[ "res://.import/mushroom_brown_3.png-9fe48fd32fe280f8215d3979badef3fc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_4.png b/graphics/tiles/mushroom/mushroom_brown_4.png
new file mode 100644
index 0000000..48117eb
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_4.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_4.png.import b/graphics/tiles/mushroom/mushroom_brown_4.png.import
new file mode 100644
index 0000000..aec2a34
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_4.png-e61bb5960cb2304358958de0616f4b97.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_4.png"
+dest_files=[ "res://.import/mushroom_brown_4.png-e61bb5960cb2304358958de0616f4b97.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_5.png b/graphics/tiles/mushroom/mushroom_brown_5.png
new file mode 100644
index 0000000..437488b
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_5.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_5.png.import b/graphics/tiles/mushroom/mushroom_brown_5.png.import
new file mode 100644
index 0000000..7365c8b
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_5.png-f233f3c7217a5e90b729955950af2c67.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_5.png"
+dest_files=[ "res://.import/mushroom_brown_5.png-f233f3c7217a5e90b729955950af2c67.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_6.png b/graphics/tiles/mushroom/mushroom_brown_6.png
new file mode 100644
index 0000000..2a1b22e
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_6.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_6.png.import b/graphics/tiles/mushroom/mushroom_brown_6.png.import
new file mode 100644
index 0000000..ba548dd
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_6.png-90bd4ce2116103033838b1b0f2f141fb.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_6.png"
+dest_files=[ "res://.import/mushroom_brown_6.png-90bd4ce2116103033838b1b0f2f141fb.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_7.png b/graphics/tiles/mushroom/mushroom_brown_7.png
new file mode 100644
index 0000000..437488b
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_7.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_7.png.import b/graphics/tiles/mushroom/mushroom_brown_7.png.import
new file mode 100644
index 0000000..b785cbf
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_7.png-0d5ac351baef08eb6d1e17a0c5fc50a3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_7.png"
+dest_files=[ "res://.import/mushroom_brown_7.png-0d5ac351baef08eb6d1e17a0c5fc50a3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_8.png b/graphics/tiles/mushroom/mushroom_brown_8.png
new file mode 100644
index 0000000..287b72b
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_8.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_8.png.import b/graphics/tiles/mushroom/mushroom_brown_8.png.import
new file mode 100644
index 0000000..b3d2c16
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_8.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_8.png-8eedc17b1e7d9933375eced95d2d02b7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_8.png"
+dest_files=[ "res://.import/mushroom_brown_8.png-8eedc17b1e7d9933375eced95d2d02b7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_brown_9.png b/graphics/tiles/mushroom/mushroom_brown_9.png
new file mode 100644
index 0000000..60d14dc
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_brown_9.png differ
diff --git a/graphics/tiles/mushroom/mushroom_brown_9.png.import b/graphics/tiles/mushroom/mushroom_brown_9.png.import
new file mode 100644
index 0000000..0e6e2b6
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_brown_9.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_brown_9.png-67652fb610409e79b8edd9afbcc7c31f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_brown_9.png"
+dest_files=[ "res://.import/mushroom_brown_9.png-67652fb610409e79b8edd9afbcc7c31f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_1.png b/graphics/tiles/mushroom/mushroom_red_1.png
new file mode 100644
index 0000000..7d1a09d
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_1.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_1.png.import b/graphics/tiles/mushroom/mushroom_red_1.png.import
new file mode 100644
index 0000000..21edbce
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_1.png-9a70789e43e3a1d7c71d4775dce9e83d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_1.png"
+dest_files=[ "res://.import/mushroom_red_1.png-9a70789e43e3a1d7c71d4775dce9e83d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_10.png b/graphics/tiles/mushroom/mushroom_red_10.png
new file mode 100644
index 0000000..ba73f28
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_10.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_10.png.import b/graphics/tiles/mushroom/mushroom_red_10.png.import
new file mode 100644
index 0000000..9255511
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_10.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_10.png-4adf98ea87edb9233853444e41dcb7d0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_10.png"
+dest_files=[ "res://.import/mushroom_red_10.png-4adf98ea87edb9233853444e41dcb7d0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_2.png b/graphics/tiles/mushroom/mushroom_red_2.png
new file mode 100644
index 0000000..ba73f28
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_2.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_2.png.import b/graphics/tiles/mushroom/mushroom_red_2.png.import
new file mode 100644
index 0000000..d381e35
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_2.png-a407c62f5784dfa146553812b88495ae.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_2.png"
+dest_files=[ "res://.import/mushroom_red_2.png-a407c62f5784dfa146553812b88495ae.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_3.png b/graphics/tiles/mushroom/mushroom_red_3.png
new file mode 100644
index 0000000..e0e002e
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_3.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_3.png.import b/graphics/tiles/mushroom/mushroom_red_3.png.import
new file mode 100644
index 0000000..c3c77c3
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_3.png-d35f042b87fbc5dc3415f5aec39cc383.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_3.png"
+dest_files=[ "res://.import/mushroom_red_3.png-d35f042b87fbc5dc3415f5aec39cc383.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_4.png b/graphics/tiles/mushroom/mushroom_red_4.png
new file mode 100644
index 0000000..b137e86
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_4.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_4.png.import b/graphics/tiles/mushroom/mushroom_red_4.png.import
new file mode 100644
index 0000000..99d6aca
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_4.png-c5f5704ef785d379aebd95e4ca0eab91.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_4.png"
+dest_files=[ "res://.import/mushroom_red_4.png-c5f5704ef785d379aebd95e4ca0eab91.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_5.png b/graphics/tiles/mushroom/mushroom_red_5.png
new file mode 100644
index 0000000..ba73f28
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_5.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_5.png.import b/graphics/tiles/mushroom/mushroom_red_5.png.import
new file mode 100644
index 0000000..7c0e08e
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_5.png-6ccb62525c0e98f5c4082031b48fe2d4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_5.png"
+dest_files=[ "res://.import/mushroom_red_5.png-6ccb62525c0e98f5c4082031b48fe2d4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_6.png b/graphics/tiles/mushroom/mushroom_red_6.png
new file mode 100644
index 0000000..7d1a09d
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_6.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_6.png.import b/graphics/tiles/mushroom/mushroom_red_6.png.import
new file mode 100644
index 0000000..432936c
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_6.png-b6e0bd780b47ae66c720d5a2e04bc67a.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_6.png"
+dest_files=[ "res://.import/mushroom_red_6.png-b6e0bd780b47ae66c720d5a2e04bc67a.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_7.png b/graphics/tiles/mushroom/mushroom_red_7.png
new file mode 100644
index 0000000..ba73f28
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_7.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_7.png.import b/graphics/tiles/mushroom/mushroom_red_7.png.import
new file mode 100644
index 0000000..34e5386
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_7.png-edaf25e610cee98192ef6000bbb3ab83.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_7.png"
+dest_files=[ "res://.import/mushroom_red_7.png-edaf25e610cee98192ef6000bbb3ab83.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_8.png b/graphics/tiles/mushroom/mushroom_red_8.png
new file mode 100644
index 0000000..569eefa
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_8.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_8.png.import b/graphics/tiles/mushroom/mushroom_red_8.png.import
new file mode 100644
index 0000000..dd516c3
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_8.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_8.png-a0632ee6bfec178e5f3bb526658e0037.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_8.png"
+dest_files=[ "res://.import/mushroom_red_8.png-a0632ee6bfec178e5f3bb526658e0037.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom/mushroom_red_9.png b/graphics/tiles/mushroom/mushroom_red_9.png
new file mode 100644
index 0000000..5d4cce6
Binary files /dev/null and b/graphics/tiles/mushroom/mushroom_red_9.png differ
diff --git a/graphics/tiles/mushroom/mushroom_red_9.png.import b/graphics/tiles/mushroom/mushroom_red_9.png.import
new file mode 100644
index 0000000..55a3875
--- /dev/null
+++ b/graphics/tiles/mushroom/mushroom_red_9.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red_9.png-d61749f213201957125a2b3bb6d019f4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom/mushroom_red_9.png"
+dest_files=[ "res://.import/mushroom_red_9.png-d61749f213201957125a2b3bb6d019f4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom_brown.tres b/graphics/tiles/mushroom_brown.tres
new file mode 100644
index 0000000..ee73b7b
--- /dev/null
+++ b/graphics/tiles/mushroom_brown.tres
@@ -0,0 +1,35 @@
+[gd_resource type="AnimatedTexture" load_steps=11 format=2]
+
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_4.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_8.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_7.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_6.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_1.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_2.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_3.png" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_5.png" type="Texture" id=8]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_10.png" type="Texture" id=9]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_brown_9.png" type="Texture" id=10]
+
+[resource]
+frames = 10
+fps = 9.0
+frame_0/texture = ExtResource( 5 )
+frame_1/texture = ExtResource( 6 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 7 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 1 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 8 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 4 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 3 )
+frame_6/delay_sec = 0.0
+frame_7/texture = ExtResource( 2 )
+frame_7/delay_sec = 0.0
+frame_8/texture = ExtResource( 10 )
+frame_8/delay_sec = 0.0
+frame_9/texture = ExtResource( 9 )
+frame_9/delay_sec = 0.0
diff --git a/graphics/tiles/mushroom_red.png b/graphics/tiles/mushroom_red.png
new file mode 100644
index 0000000..88eb518
Binary files /dev/null and b/graphics/tiles/mushroom_red.png differ
diff --git a/graphics/tiles/mushroom_red.png.import b/graphics/tiles/mushroom_red.png.import
new file mode 100644
index 0000000..575a1dc
--- /dev/null
+++ b/graphics/tiles/mushroom_red.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/mushroom_red.png-eb8a844ed7c445c341d0b52362b87ffa.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/mushroom_red.png"
+dest_files=[ "res://.import/mushroom_red.png-eb8a844ed7c445c341d0b52362b87ffa.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/mushroom_red.tres b/graphics/tiles/mushroom_red.tres
new file mode 100644
index 0000000..4ee5d9a
--- /dev/null
+++ b/graphics/tiles/mushroom_red.tres
@@ -0,0 +1,35 @@
+[gd_resource type="AnimatedTexture" load_steps=11 format=2]
+
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_7.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_1.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_9.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_6.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_4.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_2.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_8.png" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_3.png" type="Texture" id=8]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_5.png" type="Texture" id=9]
+[ext_resource path="res://graphics/tiles/mushroom/mushroom_red_10.png" type="Texture" id=10]
+
+[resource]
+frames = 10
+fps = 9.0
+frame_0/texture = ExtResource( 2 )
+frame_1/texture = ExtResource( 6 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 8 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 5 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 9 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 4 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 1 )
+frame_6/delay_sec = 0.0
+frame_7/texture = ExtResource( 7 )
+frame_7/delay_sec = 0.0
+frame_8/texture = ExtResource( 3 )
+frame_8/delay_sec = 0.0
+frame_9/texture = ExtResource( 10 )
+frame_9/delay_sec = 0.0
diff --git a/graphics/tiles/oil.tres b/graphics/tiles/oil.tres
new file mode 100644
index 0000000..29ebc9c
--- /dev/null
+++ b/graphics/tiles/oil.tres
@@ -0,0 +1,14 @@
+[gd_resource type="AnimatedTexture" load_steps=4 format=2]
+
+[ext_resource path="res://graphics/tiles/oil_2.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/oil_1.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/oil_3.png" type="Texture" id=3]
+
+[resource]
+frames = 3
+fps = 5.0
+frame_0/texture = ExtResource( 2 )
+frame_1/texture = ExtResource( 1 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 3 )
+frame_2/delay_sec = 0.0
diff --git a/graphics/tiles/oil_1.png b/graphics/tiles/oil_1.png
new file mode 100644
index 0000000..347c594
Binary files /dev/null and b/graphics/tiles/oil_1.png differ
diff --git a/graphics/tiles/oil_1.png.import b/graphics/tiles/oil_1.png.import
new file mode 100644
index 0000000..ab77478
--- /dev/null
+++ b/graphics/tiles/oil_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oil_1.png-71a0c20092e1b028d894b8f235c01f34.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/oil_1.png"
+dest_files=[ "res://.import/oil_1.png-71a0c20092e1b028d894b8f235c01f34.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/oil_2.png b/graphics/tiles/oil_2.png
new file mode 100644
index 0000000..0e526f5
Binary files /dev/null and b/graphics/tiles/oil_2.png differ
diff --git a/graphics/tiles/oil_2.png.import b/graphics/tiles/oil_2.png.import
new file mode 100644
index 0000000..ae7ef71
--- /dev/null
+++ b/graphics/tiles/oil_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oil_2.png-06401b4492a3087417e24a5a742c996b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/oil_2.png"
+dest_files=[ "res://.import/oil_2.png-06401b4492a3087417e24a5a742c996b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/oil_3.png b/graphics/tiles/oil_3.png
new file mode 100644
index 0000000..412a449
Binary files /dev/null and b/graphics/tiles/oil_3.png differ
diff --git a/graphics/tiles/oil_3.png.import b/graphics/tiles/oil_3.png.import
new file mode 100644
index 0000000..5abd370
--- /dev/null
+++ b/graphics/tiles/oil_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oil_3.png-cb7837d3212870c5dec358b2c4d92ec5.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/oil_3.png"
+dest_files=[ "res://.import/oil_3.png-cb7837d3212870c5dec358b2c4d92ec5.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/oil_bottom.png b/graphics/tiles/oil_bottom.png
new file mode 100644
index 0000000..c9a2123
Binary files /dev/null and b/graphics/tiles/oil_bottom.png differ
diff --git a/graphics/tiles/oil_bottom.png.import b/graphics/tiles/oil_bottom.png.import
new file mode 100644
index 0000000..edd2e8e
--- /dev/null
+++ b/graphics/tiles/oil_bottom.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/oil_bottom.png-54a30e61dae210f9fb93ef8952d0fea8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/oil_bottom.png"
+dest_files=[ "res://.import/oil_bottom.png-54a30e61dae210f9fb93ef8952d0fea8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/rust.png b/graphics/tiles/rust.png
new file mode 100644
index 0000000..35ee423
Binary files /dev/null and b/graphics/tiles/rust.png differ
diff --git a/graphics/tiles/rust.png.import b/graphics/tiles/rust.png.import
new file mode 100644
index 0000000..bf17637
--- /dev/null
+++ b/graphics/tiles/rust.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/rust.png-884f4f9da08c6a795a34abede7ae237d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/rust.png"
+dest_files=[ "res://.import/rust.png-884f4f9da08c6a795a34abede7ae237d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed.png b/graphics/tiles/seaweed.png
new file mode 100644
index 0000000..5516cdf
Binary files /dev/null and b/graphics/tiles/seaweed.png differ
diff --git a/graphics/tiles/seaweed.png.import b/graphics/tiles/seaweed.png.import
new file mode 100644
index 0000000..3ae9d0d
--- /dev/null
+++ b/graphics/tiles/seaweed.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed.png-4464300af079a1c1f3aea40f8ab5a4b1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed.png"
+dest_files=[ "res://.import/seaweed.png-4464300af079a1c1f3aea40f8ab5a4b1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed.tres b/graphics/tiles/seaweed.tres
new file mode 100644
index 0000000..963beae
--- /dev/null
+++ b/graphics/tiles/seaweed.tres
@@ -0,0 +1,26 @@
+[gd_resource type="AnimatedTexture" load_steps=8 format=2]
+
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_5.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_2.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_4.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_1.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_3.png" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_7.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/seaweed/seaweed_6.png" type="Texture" id=7]
+
+[resource]
+frames = 7
+fps = 10.0
+frame_0/texture = ExtResource( 4 )
+frame_1/texture = ExtResource( 2 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 5 )
+frame_2/delay_sec = 0.0
+frame_3/texture = ExtResource( 3 )
+frame_3/delay_sec = 0.0
+frame_4/texture = ExtResource( 1 )
+frame_4/delay_sec = 0.0
+frame_5/texture = ExtResource( 7 )
+frame_5/delay_sec = 0.0
+frame_6/texture = ExtResource( 6 )
+frame_6/delay_sec = 0.0
diff --git a/graphics/tiles/seaweed/seaweed_1.png b/graphics/tiles/seaweed/seaweed_1.png
new file mode 100644
index 0000000..2559f96
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_1.png differ
diff --git a/graphics/tiles/seaweed/seaweed_1.png.import b/graphics/tiles/seaweed/seaweed_1.png.import
new file mode 100644
index 0000000..fb2d384
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_1.png-ff447e1bdd3f1fd9714fd980fc918b30.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_1.png"
+dest_files=[ "res://.import/seaweed_1.png-ff447e1bdd3f1fd9714fd980fc918b30.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_2.png b/graphics/tiles/seaweed/seaweed_2.png
new file mode 100644
index 0000000..6cd964b
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_2.png differ
diff --git a/graphics/tiles/seaweed/seaweed_2.png.import b/graphics/tiles/seaweed/seaweed_2.png.import
new file mode 100644
index 0000000..f43cee7
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_2.png-9e111a46944f7b1f355e0ade6a856490.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_2.png"
+dest_files=[ "res://.import/seaweed_2.png-9e111a46944f7b1f355e0ade6a856490.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_3.png b/graphics/tiles/seaweed/seaweed_3.png
new file mode 100644
index 0000000..efc3349
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_3.png differ
diff --git a/graphics/tiles/seaweed/seaweed_3.png.import b/graphics/tiles/seaweed/seaweed_3.png.import
new file mode 100644
index 0000000..5d045ce
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_3.png-9b13f282b82aa12623bf67ead45168a1.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_3.png"
+dest_files=[ "res://.import/seaweed_3.png-9b13f282b82aa12623bf67ead45168a1.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_4.png b/graphics/tiles/seaweed/seaweed_4.png
new file mode 100644
index 0000000..efc3349
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_4.png differ
diff --git a/graphics/tiles/seaweed/seaweed_4.png.import b/graphics/tiles/seaweed/seaweed_4.png.import
new file mode 100644
index 0000000..d32f5c3
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_4.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_4.png-c04f3994d69c385c853bfd856241b874.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_4.png"
+dest_files=[ "res://.import/seaweed_4.png-c04f3994d69c385c853bfd856241b874.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_5.png b/graphics/tiles/seaweed/seaweed_5.png
new file mode 100644
index 0000000..2559f96
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_5.png differ
diff --git a/graphics/tiles/seaweed/seaweed_5.png.import b/graphics/tiles/seaweed/seaweed_5.png.import
new file mode 100644
index 0000000..12fc3d6
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_5.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_5.png-29721519185c8df0cf66d1b5c542f645.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_5.png"
+dest_files=[ "res://.import/seaweed_5.png-29721519185c8df0cf66d1b5c542f645.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_6.png b/graphics/tiles/seaweed/seaweed_6.png
new file mode 100644
index 0000000..44b82e2
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_6.png differ
diff --git a/graphics/tiles/seaweed/seaweed_6.png.import b/graphics/tiles/seaweed/seaweed_6.png.import
new file mode 100644
index 0000000..41b6ecf
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_6.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_6.png-0817e041e4cd4e4c3a85526515737899.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_6.png"
+dest_files=[ "res://.import/seaweed_6.png-0817e041e4cd4e4c3a85526515737899.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/seaweed/seaweed_7.png b/graphics/tiles/seaweed/seaweed_7.png
new file mode 100644
index 0000000..c77fba2
Binary files /dev/null and b/graphics/tiles/seaweed/seaweed_7.png differ
diff --git a/graphics/tiles/seaweed/seaweed_7.png.import b/graphics/tiles/seaweed/seaweed_7.png.import
new file mode 100644
index 0000000..2e616cb
--- /dev/null
+++ b/graphics/tiles/seaweed/seaweed_7.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/seaweed_7.png-2514061e7b232c6d32ae3101ae99d4ee.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/seaweed/seaweed_7.png"
+dest_files=[ "res://.import/seaweed_7.png-2514061e7b232c6d32ae3101ae99d4ee.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/spike.png b/graphics/tiles/spike.png
index 64898e7..3a7f977 100644
Binary files a/graphics/tiles/spike.png and b/graphics/tiles/spike.png differ
diff --git a/graphics/tiles/station.png b/graphics/tiles/station.png
new file mode 100644
index 0000000..f3a38ce
Binary files /dev/null and b/graphics/tiles/station.png differ
diff --git a/graphics/tiles/station.png.import b/graphics/tiles/station.png.import
new file mode 100644
index 0000000..3e61cc9
--- /dev/null
+++ b/graphics/tiles/station.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/station.png-4eb11027802e381a956d4abc935ed543.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/station.png"
+dest_files=[ "res://.import/station.png-4eb11027802e381a956d4abc935ed543.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/water_1.png b/graphics/tiles/water_1.png
index b215f63..674d983 100644
Binary files a/graphics/tiles/water_1.png and b/graphics/tiles/water_1.png differ
diff --git a/graphics/tiles/water_2.png b/graphics/tiles/water_2.png
index f81b5f9..00589f1 100644
Binary files a/graphics/tiles/water_2.png and b/graphics/tiles/water_2.png differ
diff --git a/graphics/tiles/water_light.tres b/graphics/tiles/water_light.tres
new file mode 100644
index 0000000..e5c074a
--- /dev/null
+++ b/graphics/tiles/water_light.tres
@@ -0,0 +1,14 @@
+[gd_resource type="AnimatedTexture" load_steps=4 format=2]
+
+[ext_resource path="res://graphics/tiles/water_light_3.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/water_light_2.png" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/water_light_1.png" type="Texture" id=3]
+
+[resource]
+frames = 3
+fps = 5.0
+frame_0/texture = ExtResource( 3 )
+frame_1/texture = ExtResource( 2 )
+frame_1/delay_sec = 0.0
+frame_2/texture = ExtResource( 1 )
+frame_2/delay_sec = 0.0
diff --git a/graphics/tiles/water_light_1.png b/graphics/tiles/water_light_1.png
new file mode 100644
index 0000000..72c400b
Binary files /dev/null and b/graphics/tiles/water_light_1.png differ
diff --git a/graphics/tiles/water_light_1.png.import b/graphics/tiles/water_light_1.png.import
new file mode 100644
index 0000000..e9ba36c
--- /dev/null
+++ b/graphics/tiles/water_light_1.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/water_light_1.png-dc9c8f84dcd53cb8390256599356eb12.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/water_light_1.png"
+dest_files=[ "res://.import/water_light_1.png-dc9c8f84dcd53cb8390256599356eb12.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/water_light_2.png b/graphics/tiles/water_light_2.png
new file mode 100644
index 0000000..89884c1
Binary files /dev/null and b/graphics/tiles/water_light_2.png differ
diff --git a/graphics/tiles/water_light_2.png.import b/graphics/tiles/water_light_2.png.import
new file mode 100644
index 0000000..cc95433
--- /dev/null
+++ b/graphics/tiles/water_light_2.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/water_light_2.png-5ba81c90747918ba78298b265efaba0e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/water_light_2.png"
+dest_files=[ "res://.import/water_light_2.png-5ba81c90747918ba78298b265efaba0e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/water_light_3.png b/graphics/tiles/water_light_3.png
new file mode 100644
index 0000000..e834fe7
Binary files /dev/null and b/graphics/tiles/water_light_3.png differ
diff --git a/graphics/tiles/water_light_3.png.import b/graphics/tiles/water_light_3.png.import
new file mode 100644
index 0000000..3513196
--- /dev/null
+++ b/graphics/tiles/water_light_3.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/water_light_3.png-0de652eb02faac645f8fedd7417768ab.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/water_light_3.png"
+dest_files=[ "res://.import/water_light_3.png-0de652eb02faac645f8fedd7417768ab.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/tiles/water_light_bottom.png b/graphics/tiles/water_light_bottom.png
new file mode 100644
index 0000000..e511845
Binary files /dev/null and b/graphics/tiles/water_light_bottom.png differ
diff --git a/graphics/tiles/water_light_bottom.png.import b/graphics/tiles/water_light_bottom.png.import
new file mode 100644
index 0000000..0a3ec4f
--- /dev/null
+++ b/graphics/tiles/water_light_bottom.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/water_light_bottom.png-e25ee4fe947bb28d8d59adf3b8d8632b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/tiles/water_light_bottom.png"
+dest_files=[ "res://.import/water_light_bottom.png-e25ee4fe947bb28d8d59adf3b8d8632b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform.png b/graphics/turniwood/turning_platform.png
deleted file mode 100644
index 7ae7b74..0000000
Binary files a/graphics/turniwood/turning_platform.png and /dev/null differ
diff --git a/graphics/turniwood/turning_platform.png.import b/graphics/turniwood/turning_platform.png.import
deleted file mode 100644
index b25a3b5..0000000
--- a/graphics/turniwood/turning_platform.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/turning_platform.png-405be9d001f90f3e9c015264ea0c68cb.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://graphics/turniwood/turning_platform.png"
-dest_files=[ "res://.import/turning_platform.png-405be9d001f90f3e9c015264ea0c68cb.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform_mountain.png b/graphics/turniwood/turning_platform_mountain.png
new file mode 100644
index 0000000..ef12729
Binary files /dev/null and b/graphics/turniwood/turning_platform_mountain.png differ
diff --git a/graphics/turniwood/turning_platform_mountain.png.import b/graphics/turniwood/turning_platform_mountain.png.import
new file mode 100644
index 0000000..02a4aa4
--- /dev/null
+++ b/graphics/turniwood/turning_platform_mountain.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turning_platform_mountain.png-99234754fafbece81d44f113a3eb84f8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/turniwood/turning_platform_mountain.png"
+dest_files=[ "res://.import/turning_platform_mountain.png-99234754fafbece81d44f113a3eb84f8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform_rust.png b/graphics/turniwood/turning_platform_rust.png
new file mode 100644
index 0000000..594da05
Binary files /dev/null and b/graphics/turniwood/turning_platform_rust.png differ
diff --git a/graphics/turniwood/turning_platform_rust.png.import b/graphics/turniwood/turning_platform_rust.png.import
new file mode 100644
index 0000000..2f1583e
--- /dev/null
+++ b/graphics/turniwood/turning_platform_rust.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turning_platform_rust.png-1716c004acdfe5c8b6f578edbffcb9d8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/turniwood/turning_platform_rust.png"
+dest_files=[ "res://.import/turning_platform_rust.png-1716c004acdfe5c8b6f578edbffcb9d8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform_wood.png b/graphics/turniwood/turning_platform_wood.png
new file mode 100644
index 0000000..a5bb338
Binary files /dev/null and b/graphics/turniwood/turning_platform_wood.png differ
diff --git a/graphics/turniwood/turning_platform_wood.png.import b/graphics/turniwood/turning_platform_wood.png.import
new file mode 100644
index 0000000..b69152b
--- /dev/null
+++ b/graphics/turniwood/turning_platform_wood.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turning_platform_wood.png-3793ee416806618b38cf4a3017bfbd0e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/turniwood/turning_platform_wood.png"
+dest_files=[ "res://.import/turning_platform_wood.png-3793ee416806618b38cf4a3017bfbd0e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform_wood_dark.png b/graphics/turniwood/turning_platform_wood_dark.png
new file mode 100644
index 0000000..e1c2ab8
Binary files /dev/null and b/graphics/turniwood/turning_platform_wood_dark.png differ
diff --git a/graphics/turniwood/turning_platform_wood_dark.png.import b/graphics/turniwood/turning_platform_wood_dark.png.import
new file mode 100644
index 0000000..678972c
--- /dev/null
+++ b/graphics/turniwood/turning_platform_wood_dark.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turning_platform_wood_dark.png-46a12d83de18f7a7acdb06d2e86d282c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/turniwood/turning_platform_wood_dark.png"
+dest_files=[ "res://.import/turning_platform_wood_dark.png-46a12d83de18f7a7acdb06d2e86d282c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/graphics/turniwood/turning_platform_yellow.png b/graphics/turniwood/turning_platform_yellow.png
index bc5ce12..5ccee02 100644
Binary files a/graphics/turniwood/turning_platform_yellow.png and b/graphics/turniwood/turning_platform_yellow.png differ
diff --git a/graphics/turniwood/turning_platoform_lab.png b/graphics/turniwood/turning_platoform_lab.png
new file mode 100644
index 0000000..55b4fe1
Binary files /dev/null and b/graphics/turniwood/turning_platoform_lab.png differ
diff --git a/graphics/turniwood/turning_platoform_lab.png.import b/graphics/turniwood/turning_platoform_lab.png.import
new file mode 100644
index 0000000..2e53082
--- /dev/null
+++ b/graphics/turniwood/turning_platoform_lab.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/turning_platoform_lab.png-73e519d3a9eb265b437745a0ee008e01.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://graphics/turniwood/turning_platoform_lab.png"
+dest_files=[ "res://.import/turning_platoform_lab.png-73e519d3a9eb265b437745a0ee008e01.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/icon.ico b/icon.ico
new file mode 100644
index 0000000..da5c469
Binary files /dev/null and b/icon.ico differ
diff --git a/icon.xcf b/icon.xcf
new file mode 100644
index 0000000..f79bf7f
Binary files /dev/null and b/icon.xcf differ
diff --git a/ihateyou.bat b/ihateyou.bat
new file mode 100644
index 0000000..6fc81be
--- /dev/null
+++ b/ihateyou.bat
@@ -0,0 +1,6 @@
+git restore tilesets
+git restore graphics/tiles
+git restore shaders
+git restore ui
+git restore project.godot
+git restore default_env.tres
\ No newline at end of file
diff --git a/level_data.gd b/level_data.gd
deleted file mode 100644
index 6885e00..0000000
--- a/level_data.gd
+++ /dev/null
@@ -1,15 +0,0 @@
-tool
-extends Node
-
-export var levels = [] setget set_levels
-
-func set_levels(value):
- levels = value
- for i in levels.size():
- if !levels[i]:
- levels[i] = LevelEntry.new()
- levels[i].resource_name = "New Entry"
-
-func _ready():
- if !Engine.editor_hint:
- print(levels[0].title)
diff --git a/level_data.tscn b/level_data.tscn
deleted file mode 100644
index 633b790..0000000
--- a/level_data.tscn
+++ /dev/null
@@ -1,35 +0,0 @@
-[gd_scene load_steps=9 format=2]
-
-[ext_resource path="res://level_data.gd" type="Script" id=1]
-[ext_resource path="res://maps/map01.tscn" type="PackedScene" id=2]
-[ext_resource path="res://maps/canopy.tscn" type="PackedScene" id=3]
-[ext_resource path="res://maps/cave.tscn" type="PackedScene" id=4]
-[ext_resource path="res://scripts/level_entry.gd" type="Script" id=5]
-
-[sub_resource type="Resource" id=1]
-resource_name = "Verdant Hills"
-script = ExtResource( 5 )
-title = "Verdant Hills"
-shard_titles = [ "Climb the Big Vine", "Next to the Lone Tree", "Slime's Treasure", "The Snake Pit", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
-save_id = "hills"
-scene = ExtResource( 2 )
-
-[sub_resource type="Resource" id=2]
-resource_name = "Shady Canopy"
-script = ExtResource( 5 )
-title = "Shady Canopy"
-shard_titles = [ "Archer and His Friend", "Thirsty Spiders", "Spider's Den", "Dancing Above the Pond", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
-save_id = "canopy"
-scene = ExtResource( 3 )
-
-[sub_resource type="Resource" id=3]
-resource_name = "Blue Ray Cavern"
-script = ExtResource( 5 )
-title = "Blue Ray Cavern"
-shard_titles = [ "Star-Crossed Lovers", "The Snail Cave", "Members Only!", "Over-Head Obstacle Course", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
-save_id = "cave"
-scene = ExtResource( 4 )
-
-[node name="LevelData" type="Node"]
-script = ExtResource( 1 )
-levels = [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ) ]
diff --git a/maps/abyss.tscn b/maps/abyss.tscn
new file mode 100644
index 0000000..f0e06c0
--- /dev/null
+++ b/maps/abyss.tscn
@@ -0,0 +1,332 @@
+[gd_scene load_steps=28 format=2]
+
+[ext_resource path="res://maps/map.gd" type="Script" id=1]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/backgrounds/abyss.png" type="Texture" id=3]
+[ext_resource path="res://shaders/water_ripple.gdshader" type="Shader" id=4]
+[ext_resource path="res://audio/music/moon_trail.ogg" type="AudioStream" id=5]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=6]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=8]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=9]
+[ext_resource path="res://tilesets/t_abyss.tres" type="TileSet" id=10]
+[ext_resource path="res://objects/enemy/mine.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/fish.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/enemy/squig.tscn" type="PackedScene" id=14]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=15]
+[ext_resource path="res://objects/enemy/turtle.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/enemy/eel.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=20]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=21]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/environment/bubble/bubble_spawner.tscn" type="PackedScene" id=24]
+
+[sub_resource type="CanvasItemMaterial" id=12]
+blend_mode = 3
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 4 )
+shader_param/offset = 0.5
+shader_param/speed = 1.0
+shader_param/waves = 32.0
+shader_param/color_amount = 0.3
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 4, 320 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 128, 4 )
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 1 )
+music = ExtResource( 5 )
+
+[node name="Camera2D" parent="." instance=ExtResource( 7 )]
+__meta__ = {
+"_edit_lock_": true
+}
+scroll_h = false
+scroll_v = true
+respawn_h = false
+
+[node name="BackgroundLayer" type="CanvasLayer" parent="."]
+layer = -50
+
+[node name="Background" type="Sprite" parent="BackgroundLayer"]
+texture = ExtResource( 3 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="EffectLayer" type="CanvasLayer" parent="."]
+layer = 50
+follow_viewport_enable = true
+
+[node name="Depth1" type="ColorRect" parent="EffectLayer"]
+material = SubResource( 12 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 192.0
+margin_bottom = 192.0
+color = Color( 0.784314, 0.784314, 0.784314, 1 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Depth2" type="ColorRect" parent="EffectLayer"]
+material = SubResource( 12 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 384.0
+margin_bottom = 384.0
+color = Color( 0.768627, 0.556863, 0.556863, 1 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="WaterRipple" type="ColorRect" parent="EffectLayer"]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_bottom = 384.0
+color = Color( 0.054902, 0.0666667, 0.329412, 1 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="HUD" parent="." instance=ExtResource( 2 )]
+song_name = "♫Moon Trail"
+
+[node name="Player" parent="." instance=ExtResource( 8 )]
+position = Vector2( 16, 40 )
+underwater = true
+
+[node name="LevelBorders" type="StaticBody2D" parent="."]
+__meta__ = {
+"_edit_group_": true,
+"_edit_lock_": true
+}
+
+[node name="LeftWall" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( -4, 256 )
+shape = SubResource( 7 )
+
+[node name="RightWall" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( 260, 256 )
+shape = SubResource( 7 )
+
+[node name="Floor" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( 128, 580 )
+shape = SubResource( 8 )
+
+[node name="Tilemaps" type="Node2D" parent="."]
+
+[node name="Ground" type="TileMap" parent="Tilemaps"]
+z_index = -30
+tile_set = ExtResource( 10 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 327680, 0, 196609, 327681, 0, 196610, 327682, 0, 196610, 327683, 0, 196610, 327684, 0, 196610, 327685, 0, 196610, 327686, 0, 196611, 327704, 0, 1, 327705, 0, 196610, 327706, 0, 196610, 327707, 0, 196610, 327708, 0, 3, 327711, 0, 0, 393240, 0, 65536, 393244, 0, 65536, 393247, 0, 65536, 458776, 0, 65536, 458780, 0, 65536, 458783, 0, 65536, 524303, 0, 196609, 524304, 0, 196610, 524305, 0, 196610, 524306, 0, 196610, 524307, 0, 196610, 524308, 0, 196610, 524309, 0, 196610, 524310, 0, 196610, 524311, 0, 196610, 524312, 0, 131075, 524316, 0, 65536, 524319, 0, 65536, 589830, 0, 196609, 589831, 0, 196610, 589832, 0, 196610, 589833, 0, 196610, 589834, 0, 196610, 589835, 0, 196610, 589836, 0, 3, 589852, 0, 65536, 589855, 0, 65536, 655363, 0, 196608, 655372, 0, 65536, 655388, 0, 65536, 655391, 0, 65536, 720908, 0, 131073, 720909, 0, 3, 720924, 0, 65536, 720927, 0, 65536, 786445, 0, 131073, 786446, 0, 3, 786456, 0, 196608, 786460, 0, 65536, 786463, 0, 65536, 851982, 0, 131073, 851983, 0, 3, 851986, 0, 196609, 851987, 0, 196610, 851988, 0, 196610, 851989, 0, 196611, 851996, 0, 65536, 851999, 0, 65536, 917506, 0, 196609, 917507, 0, 196610, 917508, 0, 196610, 917509, 0, 3, 917519, 0, 65536, 917532, 0, 65536, 917535, 0, 65536, 983045, 0, 65536, 983055, 0, 131073, 983056, 0, 196610, 983057, 0, 196610, 983058, 0, 196610, 983059, 0, 2, 983060, 0, 196610, 983061, 0, 196610, 983062, 0, 196610, 983063, 0, 196610, 983064, 0, 196610, 983065, 0, 196610, 983066, 0, 196610, 983067, 0, 196610, 983068, 0, 131075, 983071, 0, 131072, 1048581, 0, 65536, 1048588, 0, 1, 1048589, 0, 196611, 1048595, 0, 65536, 1114117, 0, 65536, 1114124, 0, 65536, 1114131, 0, 131072, 1179653, 0, 131073, 1179654, 0, 196610, 1179655, 0, 196610, 1179656, 0, 196610, 1179657, 0, 196610, 1179658, 0, 196610, 1179659, 0, 196610, 1179660, 0, 131075, 1310734, 0, 1, 1310735, 0, 196610, 1310736, 0, 196611, 1310739, 0, 196609, 1310740, 0, 196610, 1310741, 0, 196611, 1376258, 0, 196609, 1376259, 0, 196610, 1376260, 0, 196610, 1376261, 0, 3, 1376270, 0, 65536, 1441797, 0, 131073, 1441798, 0, 196610, 1441799, 0, 196610, 1441800, 0, 196611, 1441803, 0, 196609, 1441804, 0, 196610, 1441805, 0, 196610, 1441806, 0, 65539, 1507342, 0, 131073, 1507343, 0, 196610, 1507344, 0, 196610, 1507345, 0, 196610, 1507346, 0, 196610, 1507347, 0, 196610, 1507348, 0, 196610, 1507349, 0, 196610, 1507350, 0, 196610, 1507351, 0, 196610, 1507352, 0, 196610, 1507353, 0, 196610, 1507354, 0, 196610, 1507355, 0, 196611, 1835008, 0, 196609, 1835009, 0, 196610, 1835010, 0, 196610, 1835011, 0, 196610, 1835012, 0, 196610, 1835013, 0, 196610, 1835014, 0, 196610, 1835015, 0, 196610, 1835016, 0, 196610, 1835017, 0, 196610, 1835018, 0, 196610, 1835019, 0, 196610, 1835020, 0, 196610, 1835021, 0, 196610, 1835022, 0, 3, 1835031, 0, 1, 1835032, 0, 196610, 1835033, 0, 196611, 1835035, 0, 196609, 1835036, 0, 196610, 1835037, 0, 196610, 1835038, 0, 196610, 1835039, 0, 196611, 1900558, 0, 131073, 1900559, 0, 3, 1900566, 0, 1, 1900567, 0, 131075, 1966095, 0, 131073, 1966096, 0, 196611, 1966100, 0, 1, 1966101, 0, 196610, 1966102, 0, 131075, 2031636, 0, 65536, 2097172, 0, 131072, 2162702, 0, 1, 2162703, 0, 196610, 2162704, 0, 2, 2162705, 0, 196611, 2228238, 0, 65536, 2228240, 0, 65536, 2293764, 0, 196609, 2293765, 0, 196610, 2293766, 0, 196610, 2293767, 0, 196610, 2293768, 0, 196610, 2293769, 0, 196610, 2293770, 0, 196610, 2293771, 0, 196610, 2293772, 0, 196610, 2293773, 0, 196610, 2293774, 0, 131075, 2293776, 0, 65536, 2359296, 0, 196609, 2359297, 0, 3, 2359312, 0, 65536, 2359316, 0, 196609, 2359317, 0, 196610, 2359318, 0, 196610, 2359319, 0, 196610, 2359320, 0, 196610, 2359321, 0, 196610, 2359322, 0, 196610, 2359323, 0, 196610, 2359324, 0, 196610, 2359325, 0, 196610, 2359326, 0, 196610, 2359327, 0, 196611, 2424833, 0, 65536, 2424848, 0, 65536, 2490369, 0, 65536, 2490384, 0, 65536, 2555905, 0, 65536, 2555920, 0, 65536, 2621441, 0, 65536, 2621456, 0, 65536, 2686977, 0, 65536, 2686992, 0, 65536, 2752513, 0, 65536, 2752516, 0, 1, 2752517, 0, 196610, 2752518, 0, 196610, 2752519, 0, 196610, 2752520, 0, 196610, 2752521, 0, 196610, 2752522, 0, 196610, 2752523, 0, 196610, 2752524, 0, 196610, 2752525, 0, 196610, 2752526, 0, 196610, 2752527, 0, 196610, 2752528, 0, 131075, 2818049, 0, 65536, 2818052, 0, 65536, 2883585, 0, 65536, 2883588, 0, 65536, 2949121, 0, 65536, 2949124, 0, 65536, 3014657, 0, 65536, 3014660, 0, 65536, 3080193, 0, 131072, 3080196, 0, 131072 )
+
+[node name="Ladders" type="TileMap" parent="Tilemaps"]
+z_index = 10
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 655360, 0, 131074, 720896, 0, 131074, 786432, 0, 131074, 851968, 0, 131074, 917504, 0, 131074, 983040, 0, 131074, 1048576, 0, 131074, 1114112, 0, 131074, 1179648, 0, 131074, 1245184, 0, 131074, 1310720, 0, 131074, 1376256, 0, 131074, 1441792, 0, 131074, 1507328, 0, 131074, 1572864, 0, 131074, 1638400, 0, 131074, 1703936, 0, 131074, 1769472, 0, 131074 )
+
+[node name="Death" type="TileMap" parent="Tilemaps" groups=["death"]]
+tile_set = ExtResource( 15 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 458768, 1, 0, 458769, 1, 0, 458770, 1, 0, 458771, 1, 0, 458772, 1, 0, 458773, 1, 0, 458774, 1, 0, 458775, 1, 0, 786452, 1, 0, 917520, 1, 0, 917521, 1, 0, 917522, 1, 0, 917523, 1, 0, 917524, 1, 0, 917525, 1, 0, 917526, 1, 0, 917527, 1, 0, 917528, 1, 0, 917529, 1, 0, 1114121, 1, 0, 1441807, 1, 0, 1441808, 1, 0, 1441809, 1, 0, 1441810, 1, 0, 1441811, 1, 0, 1441812, 1, 0, 1441813, 1, 0, 1441814, 1, 0, 1441815, 1, 0, 1441816, 1, 0, 1441817, 1, 0, 1441818, 1, 0, 1441819, 1, 0, 1769478, 1, 0, 1769485, 1, 0, 2228228, 1, 0, 2228229, 1, 0, 2228230, 1, 0, 2228231, 1, 0, 2228232, 1, 0, 2228233, 1, 0, 2228234, 1, 0, 2228235, 1, 0, 2228236, 1, 0, 2228237, 1, 0 )
+
+[node name="Ladders" type="Node2D" parent="."]
+
+[node name="Ladder" parent="Ladders" instance=ExtResource( 9 )]
+position = Vector2( 0, 80 )
+scale = Vector2( 1, 18 )
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Mines" type="Node2D" parent="Enemies"]
+
+[node name="Mine" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 48, 120 )
+
+[node name="Mine2" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 72, 96 )
+
+[node name="Mine4" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 184, 152 )
+
+[node name="Squigs" type="Node2D" parent="Enemies"]
+
+[node name="Squig" parent="Enemies/Squigs" instance=ExtResource( 14 )]
+position = Vector2( 136, 416 )
+
+[node name="Squig2" parent="Enemies/Squigs" instance=ExtResource( 14 )]
+position = Vector2( 200, 432 )
+
+[node name="Squig3" parent="Enemies/Squigs" instance=ExtResource( 14 )]
+position = Vector2( 88, 528 )
+
+[node name="Turtle" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 56, 40 )
+right_down_boundary = 9.0
+speed = 50
+
+[node name="Turtle2" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 88, 264 )
+left_up_boundary = 10.0
+speed = 30
+
+[node name="Eel" parent="Enemies" instance=ExtResource( 18 )]
+position = Vector2( 152, 96 )
+speed = 50.0
+
+[node name="Eel2" parent="Enemies" instance=ExtResource( 18 )]
+position = Vector2( 144, 256 )
+speed = 50.0
+
+[node name="Eel3" parent="Enemies" instance=ExtResource( 18 )]
+position = Vector2( 40, 112 )
+speed = 50.0
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 88, 136 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 208, 56 )
+color = 1
+
+[node name="Key" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 32, 32 )
+
+[node name="Key2" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 48, 32 )
+
+[node name="Key3" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 40, 104 )
+
+[node name="Key18" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 120, 152 )
+
+[node name="Key15" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 128, 232 )
+
+[node name="Key16" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 80, 216 )
+
+[node name="Key17" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 216 )
+
+[node name="Key5" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 80, 64 )
+
+[node name="Key7" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 192, 32 )
+
+[node name="Key8" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 224, 32 )
+
+[node name="Key12" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 232, 56 )
+
+[node name="Key13" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 232, 88 )
+
+[node name="Key14" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 232, 120 )
+
+[node name="Key9" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 104, 80 )
+
+[node name="Key10" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 88 )
+
+[node name="Key11" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 120, 96 )
+
+[node name="Key6" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 56, 64 )
+
+[node name="Key4" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 16, 104 )
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 22 )]
+position = Vector2( 160, 152 )
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 240, 256 )
+color = 2
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="TurningPlatform" parent="Environment" instance=ExtResource( 20 )]
+position = Vector2( 168, 40 )
+
+[node name="MovingPlatform" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 212, 104 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 4.0
+move_direction = 1
+
+[node name="MovingPlatform2" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 240, 160 )
+scale = Vector2( 2, 1 )
+speed = 40
+left_up_boundary = 8.0
+
+[node name="Rock2" parent="Environment" instance=ExtResource( 23 )]
+position = Vector2( 148, 152 )
+
+[node name="Bubbles" type="Node2D" parent="."]
+
+[node name="BubbleSpawner" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 8, 32 )
+
+[node name="BubbleSpawner2" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 64, 64 )
+
+[node name="BubbleSpawner3" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 96, 120 )
+
+[node name="BubbleSpawner4" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 104 )
+
+[node name="BubbleSpawner5" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 160 )
+
+[node name="BubbleSpawner6" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 120, 152 )
+
+[node name="BubbleSpawner7" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 96, 216 )
+
+[node name="Fish" parent="." instance=ExtResource( 12 )]
+position = Vector2( 72, 64 )
+left_up_boundary = 3.0
+right_down_boundary = 4.0
+
+[node name="Fish2" parent="." instance=ExtResource( 12 )]
+position = Vector2( 40, 216 )
+left_up_boundary = 2.0
+right_down_boundary = 3.0
+
+[node name="Fish3" parent="." instance=ExtResource( 12 )]
+position = Vector2( 96, 216 )
+left_up_boundary = 1.0
+right_down_boundary = 3.0
+
+[editable path="Enemies/Eel"]
+[editable path="Enemies/Eel2"]
+[editable path="Enemies/Eel3"]
diff --git a/maps/abyss_scholar.tscn b/maps/abyss_scholar.tscn
new file mode 100644
index 0000000..f816bc0
--- /dev/null
+++ b/maps/abyss_scholar.tscn
@@ -0,0 +1,751 @@
+[gd_scene load_steps=50 format=2]
+
+[ext_resource path="res://maps/map.gd" type="Script" id=1]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/backgrounds/abyss.png" type="Texture" id=3]
+[ext_resource path="res://shaders/water_ripple.gdshader" type="Shader" id=4]
+[ext_resource path="res://audio/music/moon_trail.ogg" type="AudioStream" id=5]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=6]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=8]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=9]
+[ext_resource path="res://tilesets/t_abyss.tres" type="TileSet" id=10]
+[ext_resource path="res://objects/enemy/mine.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/fish.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/enemy/squig.tscn" type="PackedScene" id=14]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=15]
+[ext_resource path="res://objects/enemy/turtle.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/enemy/eel.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=20]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=21]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/environment/bubble/bubble_spawner.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/respawn_point.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=26]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=27]
+[ext_resource path="res://objects/lore/abyss/crater_of_the_abyss.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/lore/abyss/beel.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/abyss/bullet_fish.tscn" type="PackedScene" id=30]
+[ext_resource path="res://objects/lore/abyss/mine.tscn" type="PackedScene" id=31]
+[ext_resource path="res://objects/lore/abyss/squig.tscn" type="PackedScene" id=32]
+[ext_resource path="res://objects/lore/abyss/turchin.tscn" type="PackedScene" id=33]
+[ext_resource path="res://graphics/particles/pixel.png" type="Texture" id=34]
+
+[sub_resource type="CanvasItemMaterial" id=12]
+blend_mode = 3
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 4 )
+shader_param/offset = 0.5
+shader_param/speed = 1.0
+shader_param/waves = 32.0
+shader_param/color_amount = 0.3
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 4, 320 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 128, 4 )
+
+[sub_resource type="Curve2D" id=13]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, -24, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 24, -72, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 24, -72, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=15]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 40, 8, 0, 0, 0, 0, 40, 16, 0, 0, 0, 0, 32, 24, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, -8, 16, 0, 0, 0, 0, -8, 8, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=14]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -8, 0, 0, 0, 0, 16, -16, 0, 0, 0, 0, 56, -16, 0, 0, 0, 0, 72, -32, 0, 0, 0, 0, 80, -40, 0, 0, 0, 0, 160, -40, 0, 0, 0, 0, 168, -32, 0, 0, 0, 0, 168, -24, 0, 0, 0, 0, 88, -24, 0, 0, 0, 0, 80, -16, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=16]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -32, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 24, -32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 40, -32, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 40, -32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 24, -32, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 8, -32, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=17]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, -16, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 48, -16, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 80, -16, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 48, -16, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 16, -16, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=24]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 16, 40, 0, 0, 0, 0, 24, 48, 0, 0, 0, 0, 24, 56, 0, 0, 0, 0, 16, 64, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 16, 64, 0, 0, 0, 0, 24, 56, 0, 0, 0, 0, 24, 48, 0, 0, 0, 0, 16, 40, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="Curve2D" id=23]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 48, 8, 0, 0, 0, 0, 56, 16, 0, 0, 0, 0, 56, 32, 0, 0, 0, 0, 48, 40, 0, 0, 0, 0, 32, 48, 0, 0, 0, 0, 8, 48, 0, 0, 0, 0, -16, 40, 0, 0, 0, 0, -24, 32, 0, 0, 0, 0, -24, 16, 0, 0, 0, 0, -16, 8, 0, 0, 0, 0, 0, 0 )
+}
+
+[sub_resource type="RectangleShape2D" id=19]
+extents = Vector2( 46.9375, 4 )
+
+[sub_resource type="RectangleShape2D" id=25]
+extents = Vector2( 20, 4 )
+
+[sub_resource type="RectangleShape2D" id=20]
+extents = Vector2( 80.5, 4 )
+
+[sub_resource type="RectangleShape2D" id=21]
+extents = Vector2( 42, 4 )
+
+[node name="Map2" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 1 )
+target_time_any = 60
+target_time_100 = 160
+music = ExtResource( 5 )
+lore_entries = [ ExtResource( 28 ), ExtResource( 29 ), ExtResource( 30 ), ExtResource( 31 ), ExtResource( 32 ), ExtResource( 33 ) ]
+
+[node name="Camera2D" parent="." instance=ExtResource( 7 )]
+position = Vector2( 0, 384 )
+__meta__ = {
+"_edit_lock_": true
+}
+scroll_h = false
+scroll_v = true
+respawn_h = false
+
+[node name="BackgroundLayer" type="CanvasLayer" parent="."]
+layer = -50
+
+[node name="Background" type="Sprite" parent="BackgroundLayer"]
+texture = ExtResource( 3 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="EffectLayer" type="CanvasLayer" parent="."]
+layer = 50
+follow_viewport_enable = true
+
+[node name="Depth1" type="ColorRect" parent="EffectLayer"]
+visible = false
+material = SubResource( 12 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 192.0
+margin_bottom = 192.0
+color = Color( 0.784314, 0.784314, 0.784314, 1 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Depth2" type="ColorRect" parent="EffectLayer"]
+visible = false
+material = SubResource( 12 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 384.0
+margin_bottom = 384.0
+color = Color( 0.768627, 0.556863, 0.556863, 1 )
+
+[node name="WaterRipple" type="ColorRect" parent="EffectLayer"]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_bottom = 384.0
+color = Color( 0.054902, 0.0666667, 0.329412, 1 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="HUD" parent="." instance=ExtResource( 2 )]
+song_name = "♫Moon Trail 2023"
+
+[node name="Depth1" type="Light2D" parent="."]
+position = Vector2( 0, 192 )
+scale = Vector2( 256, 192 )
+z_index = 1
+texture = ExtResource( 34 )
+offset = Vector2( 0.5, 0.5 )
+color = Color( 0.148438, 0.0363846, 0.126981, 1 )
+energy = 0.25
+mode = 2
+range_layer_min = -50
+
+[node name="Depth2" type="Light2D" parent="."]
+position = Vector2( 0, 384 )
+scale = Vector2( 256, 192 )
+z_index = 1
+texture = ExtResource( 34 )
+offset = Vector2( 0.5, 0.5 )
+color = Color( 0.333333, 0.0901961, 0.0901961, 1 )
+energy = 0.5
+mode = 2
+range_layer_min = -50
+
+[node name="Player" parent="." instance=ExtResource( 8 )]
+position = Vector2( 24, 560 )
+underwater = true
+
+[node name="LevelBorders" type="StaticBody2D" parent="."]
+__meta__ = {
+"_edit_group_": true,
+"_edit_lock_": true
+}
+
+[node name="LeftWall" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( -4, 256 )
+shape = SubResource( 7 )
+
+[node name="RightWall" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( 260, 256 )
+shape = SubResource( 7 )
+
+[node name="Floor" type="CollisionShape2D" parent="LevelBorders"]
+position = Vector2( 128, 580 )
+shape = SubResource( 8 )
+
+[node name="Tilemaps" type="Node2D" parent="."]
+
+[node name="Ground" type="TileMap" parent="Tilemaps" groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 27 )
+z_index = -30
+tile_set = ExtResource( 10 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 131095, 2, 2, 131099, 2, 2, 196631, 2, 2, 196633, 2, 1, 196635, 2, 2, 262166, 0, 1, 262167, 0, 196610, 262168, 0, 196610, 262169, 0, 196610, 262170, 0, 196610, 262171, 0, 196610, 262172, 0, 3, 262175, 0, 0, 327680, 0, 196609, 327681, 0, 196610, 327682, 0, 196610, 327683, 0, 196610, 327684, 0, 196610, 327685, 0, 196610, 327686, 0, 196611, 327702, 0, 65536, 327708, 0, 131072, 327711, 0, 65536, 393231, 0, 196609, 393232, 0, 196610, 393233, 0, 196610, 393234, 0, 196610, 393235, 0, 196610, 393236, 0, 196610, 393237, 0, 196610, 393238, 0, 131075, 393244, -1610612733, 0, 393247, 0, 65536, 458759, 5, 0, 458762, 5, 0, 458780, -1610612733, 0, 458783, 0, 65536, 524295, 5, 0, 524298, 5, 0, 524316, -1610612733, 0, 524319, 0, 65536, 589830, 0, 196609, 589831, 0, 196610, 589832, 0, 196610, 589833, 0, 196610, 589834, 0, 196610, 589835, 0, 196610, 589836, 0, 3, 589848, 0, 196608, 589852, -1610612733, 0, 589855, 0, 65536, 655363, 0, 196608, 655372, 0, 65536, 655378, 0, 196609, 655379, 0, 196610, 655380, 0, 196610, 655381, 0, 196611, 655388, 0, 0, 655391, 0, 65536, 720908, 0, 131073, 720909, 0, 3, 720924, 0, 65536, 720927, 0, 65536, 786445, 0, 131073, 786446, 0, 196610, 786447, 0, 196610, 786448, 0, 196610, 786449, 0, 196610, 786450, 0, 196610, 786451, 0, 2, 786452, 0, 196610, 786453, 0, 196610, 786454, 0, 196610, 786455, 0, 196610, 786456, 0, 196610, 786457, 0, 196610, 786458, 0, 196610, 786459, 0, 196610, 786460, 0, 131075, 786463, 0, 131072, 851972, 2, 1, 917506, 0, 196609, 917507, 0, 196610, 917508, 0, 196610, 917509, 0, 3, 983045, 0, 65536, 1048581, 0, 65536, 1048595, 0, 196609, 1048596, 0, 196610, 1048597, 0, 196611, 1114117, 0, 65536, 1114124, 2, 0, 1179653, 0, 131073, 1179654, 0, 196610, 1179655, 0, 196610, 1179656, 0, 196610, 1179657, 0, 196610, 1179658, 0, 196610, 1179659, 0, 196610, 1179660, 0, 196611, 1245202, 0, 196609, 1245203, 0, 196610, 1245204, 0, 196610, 1245205, 0, 196610, 1245206, 0, 196610, 1245207, 0, 196610, 1245208, 0, 196610, 1245209, 0, 196610, 1245210, 0, 196610, 1245211, 0, 196610, 1245212, 0, 196610, 1245213, 0, 196610, 1245214, 0, 196610, 1245215, 0, 196611, 1310724, 2, 1, 1310732, 5, 0, 1310742, -1073741821, 0, 1376259, 0, 196609, 1376260, 0, 196610, 1376261, 0, 3, 1376264, 2, 0, 1376268, 5, 0, 1376274, 5, 0, 1376278, -1073741821, 0, 1376280, 5, 0, 1376283, 5, 0, 1441797, 0, 131073, 1441798, 0, 196610, 1441799, 0, 196610, 1441800, 0, 196611, 1441803, 0, 196609, 1441804, 0, 196610, 1441805, 0, 196610, 1441806, 0, 196610, 1441807, 0, 3, 1441810, 5, 0, 1441814, -1073741821, 0, 1441816, 5, 0, 1441819, 5, 0, 1507343, 0, 131073, 1507344, 0, 196610, 1507345, 0, 196610, 1507346, 0, 196610, 1507347, 0, 196610, 1507348, 0, 196610, 1507349, 0, 196610, 1507350, 0, 196610, 1507351, 0, 196610, 1507352, 0, 196610, 1507353, 0, 196610, 1507354, 0, 196610, 1507355, 0, 196610, 1507356, 0, 196610, 1507357, 0, 196611, 1638402, 5, 0, 1638407, 5, 0, 1638411, 5, 0, 1703938, 5, 0, 1703943, 5, 0, 1703947, 5, 0, 1769474, 5, 0, 1769479, 5, 0, 1769483, 5, 0, 1835008, 0, 196609, 1835009, 0, 196610, 1835010, 0, 196610, 1835011, 0, 196610, 1835012, 0, 196610, 1835013, 0, 196610, 1835014, 0, 196610, 1835015, 0, 196610, 1835016, 0, 196610, 1835017, 0, 196610, 1835018, 0, 196610, 1835019, 0, 196610, 1835020, 0, 196610, 1835021, 0, 196610, 1835022, 0, 3, 1835034, 0, 196609, 1835035, 0, 196610, 1835036, 0, 196610, 1835037, 0, 196610, 1835038, 0, 196610, 1835039, 0, 196611, 1900558, 0, 131073, 1900559, 0, 3, 1966095, 0, 131073, 1966096, 0, 196611, 2031636, 0, 196608, 2097166, 2, 0, 2097169, 2, 0, 2162701, 0, 196609, 2162702, 0, 196610, 2162703, 0, 196610, 2162704, 0, 196610, 2162705, 0, 196610, 2162706, 0, 196611, 2162710, 0, 196609, 2162711, 0, 196610, 2162712, 0, 196611, 2424841, 0, 196609, 2424842, 0, 196611, 2424857, 0, 0, 2424860, 0, 196609, 2424861, 0, 196610, 2424862, 0, 196610, 2424863, 0, 3, 2490372, 2, 0, 2490374, 2, 1, 2490383, 0, 196609, 2490384, 0, 196610, 2490385, 0, 196610, 2490386, 0, 196611, 2490393, 0, 65536, 2490399, 0, 65536, 2555907, 0, 196609, 2555908, 0, 196610, 2555909, 0, 196610, 2555910, 0, 196610, 2555911, 0, 196611, 2555929, 0, 131072, 2555935, 0, 65536, 2621465, -1073741821, 0, 2621469, 0, 196609, 2621470, 0, 196610, 2621471, 0, 131075, 2687001, -1073741821, 0, 2752537, -1073741821, 0, 2818071, 0, 196609, 2818072, 0, 196610, 2818073, 0, 2, 2818074, 0, 196610, 2818075, 0, 196610, 2818076, 0, 196611, 2883609, 0, 65536, 2883614, 0, 196609, 2883615, 0, 3, 2949134, 0, 196609, 2949135, 0, 196610, 2949136, 0, 196610, 2949137, 0, 196610, 2949138, 0, 196610, 2949139, 0, 196611, 2949145, 0, 65536, 2949150, 2, 3, 2949151, 0, 65536, 3014681, 0, 131073, 3014682, 0, 196610, 3014683, 0, 196610, 3014684, 0, 196610, 3014685, 0, 196610, 3014686, 0, 196610, 3014687, 0, 131075, 3342336, 3, 0, 3342337, 3, 0, 3342338, 3, 0, 3342339, 0, 196609, 3342340, 0, 3, 3342341, 2, 0, 3342355, 5, 0, 3342360, 5, 0, 3407876, 0, 65537, 3407877, 0, 3, 3407881, 0, 196608, 3407891, 5, 0, 3407896, 5, 0, 3473412, 0, 65537, 3473413, 0, 131074, 3473414, 0, 3, 3473415, 2, 1, 3473427, 5, 0, 3473432, 5, 0, 3538948, 0, 65536, 3538950, 0, 131073, 3538951, 0, 3, 3538954, 2, 0, 3538960, 2, 1, 3538961, -1073741824, 1, 3538962, 0, 196610, 3538963, 0, 196610, 3538964, 0, 196610, 3538965, 0, 196610, 3538966, 0, 196610, 3538967, 0, 196610, 3538968, 0, 196610, 3538969, 0, 196610, 3538970, 0, 196611, 3604484, 0, 65536, 3604487, 0, 131073, 3604488, 0, 196610, 3604489, 0, 196610, 3604490, 0, 196610, 3604491, 0, 196610, 3604492, 0, 196611, 3604496, 0, 1, 3604497, 0, 131075, 3670020, 0, 65536, 3670030, 2, 1, 3670031, 0, 1, 3670032, 0, 131075, 3735556, 0, 65536, 3735566, 0, 1, 3735567, 0, 131075, 3801091, 0, 1, 3801092, 0, 131075, 3801097, 0, 196609, 3801098, 0, 196610, 3801099, 0, 2, 3801100, 0, 196610, 3801101, 0, 196610, 3801102, 0, 131075, 3866627, 0, 65536, 3866635, 0, 65536, 3866645, 5, 0, 3932163, 0, 65536, 3932167, 0, 196609, 3932168, 0, 196611, 3932171, 0, 65536, 3932175, 2, 0, 3932179, 2, 1, 3932181, 5, 0, 3997699, 0, 65536, 3997707, 0, 131072, 3997709, 0, 196609, 3997710, 0, 196610, 3997711, 0, 196610, 3997712, 0, 196610, 3997713, 0, 196610, 3997714, 0, 196610, 3997715, 0, 196610, 3997716, 0, 196610, 3997717, 0, 196611, 4063235, 0, 65536, 4128771, 0, 65536, 4128794, 0, 196609, 4128795, 0, 196610, 4128796, 0, 2, 4128797, 0, 3, 4194307, 0, 65536, 4194317, 5, 0, 4194324, 5, 0, 4194327, 0, 196609, 4194328, 0, 196611, 4194332, 0, 131073, 4194333, 0, 131075, 4259843, 0, 65536, 4259853, 5, 0, 4259860, 5, 0, 4325379, 0, 131072, 4325387, 0, 1, 4325388, 0, 2, 4325389, 0, 3, 4325393, 0, 1, 4325394, 0, 2, 4325395, 0, 2, 4325396, 0, 2, 4325397, 0, 196610, 4325398, 0, 196610, 4325399, 0, 196610, 4325400, 0, 196610, 4325401, 0, 3, 4390923, 0, 131073, 4390924, 0, 131074, 4390925, 0, 131074, 4390926, 0, 196610, 4390927, 0, 196610, 4390928, 0, 196610, 4390929, 0, 131074, 4390930, 0, 131074, 4390931, 0, 131074, 4390932, 0, 131075, 4390937, 0, 131073, 4390938, 0, 196610, 4390939, 0, 196610, 4390940, 0, 196610, 4390941, 0, 196611, 4390942, 3, 0, 4390943, 3, 0, 4456455, 0, 1, 4456456, 0, 3, 4521990, 0, 1, 4521991, 0, 65538, 4521992, 0, 65539, 4521996, 2, 0, 4522000, 2, 0, 4522004, 2, 0, 4522008, 2, 0, 4522015, 0, 0, 4587520, 0, 1, 4587521, 0, 2, 4587522, 0, 2, 4587523, 0, 2, 4587524, 0, 2, 4587525, 0, 2, 4587526, 0, 65538, 4587527, 0, 65538, 4587528, 0, 65538, 4587529, 0, 2, 4587530, 0, 2, 4587531, 0, 2, 4587532, 0, 2, 4587533, 0, 2, 4587534, 0, 2, 4587535, 0, 2, 4587536, 0, 2, 4587537, 0, 2, 4587538, 0, 2, 4587539, 0, 2, 4587540, 0, 2, 4587541, 0, 2, 4587542, 0, 2, 4587543, 0, 2, 4587544, 0, 2, 4587545, 0, 2, 4587546, 0, 2, 4587547, 0, 2, 4587548, 0, 2, 4587549, 0, 2, 4587550, 0, 2, 4587551, 0, 65539, 4653056, 0, 131073, 4653057, 0, 131074, 4653058, 0, 131074, 4653059, 0, 131074, 4653060, 0, 131074, 4653061, 0, 131074, 4653062, 0, 131074, 4653063, 0, 131074, 4653064, 0, 131074, 4653065, 0, 131074, 4653066, 0, 131074, 4653067, 0, 131074, 4653068, 0, 131074, 4653069, 0, 131074, 4653070, 0, 131074, 4653071, 0, 131074, 4653072, 0, 131074, 4653073, 0, 131074, 4653074, 0, 131074, 4653075, 0, 131074, 4653076, 0, 131074, 4653077, 0, 131074, 4653078, 0, 131074, 4653079, 0, 131074, 4653080, 0, 131074, 4653081, 0, 131074, 4653082, 0, 131074, 4653083, 0, 131074, 4653084, 0, 131074, 4653085, 0, 131074, 4653086, 0, 131074, 4653087, 0, 131075 )
+
+[node name="Cracks" type="TileMap" parent="Tilemaps"]
+tile_set = ExtResource( 10 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 262169, 4, 0, 589832, 4, 0, 917507, 4, 0, 1376259, 4, 0, 1507351, 4, 0, 1507356, 4, 0, 1835016, 4, 0, 2424841, 4, 0, 2424862, 4, 0, 2949137, 4, 0, 3342339, 4, 0, 3538964, 4, 0, 3604491, 4, 0, 4390939, 4, 0, 4587523, 4, 0 )
+
+[node name="Ladders" type="TileMap" parent="Tilemaps"]
+z_index = 10
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 327689, 0, 131074, 393225, 0, 131074, 655360, 0, 131074, 720896, 0, 131074, 786432, 0, 131074, 851968, 0, 131074, 917504, 0, 131074, 983040, 0, 131074, 1048576, 0, 131074, 1114112, 0, 131074, 1179648, 0, 131074, 1245184, 0, 131074, 1310720, 0, 131074, 1376256, 0, 131074, 1441792, 0, 131074, 1441823, 0, 131074, 1507328, 0, 131074, 1507359, 0, 131074, 1572864, 0, 131074, 1572895, 0, 131074, 1638400, 0, 131074, 1638431, 0, 131074, 1703936, 0, 131074, 1703967, 0, 131074, 1769472, 0, 131074, 1769503, 0, 131074, 2097163, 0, 131074, 2162699, 0, 131074, 2228235, 0, 131074, 2555904, 0, 131074, 2555917, 0, 131074, 2621440, 0, 131074, 2621453, 0, 131074, 2686976, 0, 131074, 2686989, 0, 131074, 2752512, 0, 131074, 2818048, 0, 131074, 2883595, 0, 131074, 2949131, 0, 131074, 3014667, 0, 131074, 3080203, 0, 131074, 3145739, 0, 131074, 3211275, 0, 131074, 3276811, 0, 131074, 3342365, 0, 131074, 3407901, 0, 131074, 3473437, 0, 131074, 3538945, 0, 131074, 3538973, 0, 131074, 3604481, 0, 131074, 3604509, 0, 131074, 3670017, 0, 131074, 3670045, 0, 131074, 3735553, 0, 131074, 3735581, 0, 131074, 3801089, 0, 131074, 3801117, 0, 131074, 3866625, 0, 131074, 3866628, 0, 131074, 3866653, 0, 131074, 3932161, 0, 131074, 3932164, 0, 131074, 3932189, 0, 131074, 3997697, 0, 131074, 3997700, 0, 131074, 3997725, 0, 131074, 4063233, 0, 131074, 4063236, 0, 131074, 4063261, 0, 131074, 4128769, 0, 131074, 4128772, 0, 131074, 4194305, 0, 131074, 4194308, 0, 131074, 4259841, 0, 131074, 4259844, 0, 131074, 4325377, 0, 131074, 4325380, 0, 131074, 4390913, 0, 131074, 4456449, 0, 131074 )
+
+[node name="Death" type="TileMap" parent="Tilemaps" groups=["death"]]
+tile_set = ExtResource( 15 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 327695, 1, 0, 327696, 1, 0, 327697, 1, 0, 327698, 1, 0, 327699, 1, 0, 327700, 1, 0, 327701, 1, 0, 720912, 1, 0, 720913, 1, 0, 720914, 1, 0, 720915, 1, 0, 720916, 1, 0, 720917, 1, 0, 720918, 1, 0, 720919, 1, 0, 720920, 1, 0, 720921, 1, 0, 720922, 1, 0, 720923, 1, 0, 1114121, 1, 0, 1179666, 1, 0, 1179667, 1, 0, 1179668, 1, 0, 1179669, 1, 0, 1179670, 1, 0, 1179671, 1, 0, 1179672, 1, 0, 1179673, 1, 0, 1179674, 1, 0, 1179675, 1, 0, 1179676, 1, 0, 1179677, 1, 0, 1179678, 1, 0, 1179679, 1, 0, 1769478, 1, 0, 1769485, 1, 0, 4325390, 1, 0, 4325391, 1, 0, 4325392, 1, 0 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="TurningPlatform" parent="Environment" instance=ExtResource( 20 )]
+position = Vector2( 168, 32 )
+
+[node name="MovingPlatform2" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 240, 136 )
+scale = Vector2( 2, 1 )
+speed = 40
+left_up_boundary = 8.0
+
+[node name="MovingPlatform3" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 184, 240 )
+scale = Vector2( 2, 1 )
+speed = 30
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+move_direction = 1
+
+[node name="FallingBlocks" type="Node2D" parent="Environment"]
+
+[node name="FallingBlock" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 0, 360 )
+
+[node name="FallingBlock2" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 8, 360 )
+
+[node name="FallingBlock3" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 16, 360 )
+
+[node name="FallingBlock4" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 24, 360 )
+
+[node name="FallingBlock5" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 32, 360 )
+
+[node name="FallingBlock6" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 40, 360 )
+
+[node name="FallingBlock7" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 168, 328 )
+
+[node name="FallingBlock9" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 168, 352 )
+
+[node name="FallingBlock8" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 152, 312 )
+
+[node name="FallingBlock10" parent="Environment/FallingBlocks" instance=ExtResource( 13 )]
+position = Vector2( 184, 304 )
+
+[node name="Ladders" type="Node2D" parent="Environment"]
+
+[node name="Ladder" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 0, 80 )
+scale = Vector2( 1, 18 )
+can_climb_left = false
+
+[node name="Ladder2" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 232, 408 )
+scale = Vector2( 1, 12 )
+
+[node name="Ladder6" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 248, 176 )
+scale = Vector2( 1, 6 )
+can_climb_right = false
+
+[node name="Ladder3" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 88, 352 )
+scale = Vector2( 1, 7 )
+
+[node name="Ladder5" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 0, 312 )
+scale = Vector2( 1, 5 )
+can_climb_left = false
+
+[node name="Ladder9" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 88, 256 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder10" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 104, 312 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder8" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 72, 40 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder4" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 32, 472 )
+scale = Vector2( 1, 8 )
+can_climb_left = false
+
+[node name="Ladder7" parent="Environment/Ladders" instance=ExtResource( 9 )]
+position = Vector2( 8, 432 )
+scale = Vector2( 1, 15 )
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Mines" type="Node2D" parent="Enemies"]
+
+[node name="Mine" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 44, 120 )
+
+[node name="Mine2" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 80, 96 )
+
+[node name="Mine4" parent="Enemies/Mines" instance=ExtResource( 11 )]
+position = Vector2( 184, 128 )
+
+[node name="Squigs" type="Node2D" parent="Enemies"]
+
+[node name="Squig2" parent="Enemies/Squigs" instance=ExtResource( 14 )]
+position = Vector2( 132, 352 )
+left_up_boundary = 4.0
+speed = 30
+
+[node name="Squig3" parent="Enemies/Squigs" instance=ExtResource( 14 )]
+position = Vector2( 88, 288 )
+left_up_boundary = 7.0
+speed = 30
+
+[node name="Eels" type="Node2D" parent="Enemies"]
+position = Vector2( 24, 0 )
+
+[node name="Eel4" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( -24, 528 )
+curve = SubResource( 13 )
+speed = 60.0
+
+[node name="Eel" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 120, 72 )
+curve = SubResource( 15 )
+speed = 50.0
+
+[node name="Eel2" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 48, 1472 )
+curve = SubResource( 14 )
+
+[node name="Eel6" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 176, 240 )
+curve = SubResource( 16 )
+speed = 45.0
+
+[node name="Eel7" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 136, 184 )
+curve = SubResource( 17 )
+
+[node name="Eel8" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 192, 296 )
+curve = SubResource( 24 )
+
+[node name="Eel3" parent="Enemies/Eels" instance=ExtResource( 18 )]
+position = Vector2( 40, 104 )
+curve = SubResource( 23 )
+
+[node name="Fishes" type="Node2D" parent="Enemies"]
+
+[node name="Fish" parent="Enemies/Fishes" instance=ExtResource( 12 )]
+position = Vector2( 72, 64 )
+left_up_boundary = 3.0
+right_down_boundary = 4.0
+
+[node name="Fish4" parent="Enemies/Fishes" instance=ExtResource( 12 )]
+position = Vector2( 128, 552 )
+left_up_boundary = 5.0
+right_down_boundary = 8.0
+speed = 40
+
+[node name="Fish5" parent="Enemies/Fishes" instance=ExtResource( 12 )]
+position = Vector2( 120, 520 )
+left_up_boundary = 3.0
+right_down_boundary = 8.0
+speed = 60
+
+[node name="Fish6" parent="Enemies/Fishes" instance=ExtResource( 12 )]
+position = Vector2( 24, 352 )
+left_up_boundary = 3.0
+right_down_boundary = 7.0
+speed = 60
+
+[node name="Turtle" type="Node2D" parent="Enemies"]
+
+[node name="Turtle" parent="Enemies/Turtle" instance=ExtResource( 16 )]
+position = Vector2( 112, 32 )
+left_up_boundary = 7.0
+right_down_boundary = 8.0
+speed = 50
+spike_positions = [ 0.0 ]
+
+[node name="Turtle2" parent="Enemies/Turtle" instance=ExtResource( 16 )]
+position = Vector2( 24, 280 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+speed = 30
+spike_positions = [ 0.0 ]
+
+[node name="Turtle3" parent="Enemies/Turtle" instance=ExtResource( 16 )]
+position = Vector2( 192, 472 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+speed = 30
+spike_positions = [ 0.0 ]
+spike_direction = 1
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 88, 136 )
+color = 3
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 208, 56 )
+color = 4
+
+[node name="Key" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 32, 32 )
+
+[node name="Key2" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 48, 32 )
+
+[node name="Key3" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 40, 104 )
+
+[node name="Key18" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 24, 160 )
+
+[node name="Key15" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 248, 344 )
+
+[node name="Key16" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 96, 432 )
+
+[node name="Key17" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 248, 288 )
+
+[node name="Key5" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 88, 64 )
+
+[node name="Key7" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 160, 240 )
+
+[node name="Key8" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 232, 216 )
+
+[node name="Key12" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 104, 80 )
+
+[node name="Key13" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 24, 72 )
+
+[node name="Key14" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 168 )
+
+[node name="Key9" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 88, 168 )
+
+[node name="Key10" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 136, 176 )
+
+[node name="Key11" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 56, 168 )
+
+[node name="Key6" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 48, 64 )
+
+[node name="Key4" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 16, 104 )
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 22 )]
+position = Vector2( 160, 120 )
+number = 3
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 22 )]
+position = Vector2( 208, 360 )
+number = 1
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 17 )]
+modulate = Color( 0.764706, 0.752941, 1, 1 )
+position = Vector2( 104, 480 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 22 )]
+position = Vector2( 0, 256 )
+number = 2
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 22 )]
+position = Vector2( 232, 552 )
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 17 )]
+modulate = Color( 0.803922, 0.905882, 1, 1 )
+position = Vector2( 8, 424 )
+color = 1
+
+[node name="Key19" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 48, 544 )
+
+[node name="Key20" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 64, 536 )
+
+[node name="Key21" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 80, 552 )
+
+[node name="Key22" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 96, 520 )
+
+[node name="Key23" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 144, 520 )
+
+[node name="Key24" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 184, 504 )
+
+[node name="Key25" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 128, 480 )
+
+[node name="Key26" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 56, 472 )
+
+[node name="Key27" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 72, 456 )
+
+[node name="Key28" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 104, 456 )
+
+[node name="Key29" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 200, 288 )
+
+[node name="Key36" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 352 )
+
+[node name="Key37" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 152, 352 )
+
+[node name="Key38" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 184, 336 )
+
+[node name="Key39" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 208, 496 )
+
+[node name="Key40" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 144, 296 )
+
+[node name="Key41" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 120, 296 )
+
+[node name="Key44" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 144, 256 )
+
+[node name="Key45" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 104, 256 )
+
+[node name="Key46" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 224, 288 )
+
+[node name="Key47" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 208, 216 )
+
+[node name="Key49" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 144, 552 )
+
+[node name="Key50" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 208, 552 )
+
+[node name="Key48" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 184, 256 )
+
+[node name="Key42" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 24, 304 )
+
+[node name="Key43" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 56, 304 )
+
+[node name="Key30" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 64, 432 )
+
+[node name="Key31" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 40, 304 )
+
+[node name="Key33" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 136, 424 )
+
+[node name="Key34" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 176, 424 )
+
+[node name="Key35" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 208, 424 )
+
+[node name="Key32" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 32, 400 )
+
+[node name="Star6" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 184, 176 )
+color = 2
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 23 )]
+position = Vector2( 240, 312 )
+
+[node name="Bubbles" type="Node2D" parent="."]
+
+[node name="BubbleSpawner" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 200, 24 )
+
+[node name="BubbleSpawner2" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 64, 64 )
+
+[node name="BubbleSpawner3" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 88, 136 )
+delay = 1.5
+
+[node name="BubbleSpawner4" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 104 )
+
+[node name="BubbleSpawner5" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 160 )
+
+[node name="BubbleSpawner8" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 552 )
+
+[node name="BubbleSpawner10" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 88, 432 )
+
+[node name="BubbleSpawner13" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 72, 288 )
+
+[node name="BubbleSpawner18" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 136, 352 )
+
+[node name="BubbleSpawner15" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 240, 288 )
+
+[node name="BubbleSpawner16" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 224, 176 )
+
+[node name="BubbleSpawner17" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 184, 176 )
+
+[node name="BubbleSpawner12" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 24, 400 )
+
+[node name="BubbleSpawner11" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 160, 424 )
+
+[node name="BubbleSpawner9" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 216, 528 )
+
+[node name="BubbleSpawner6" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 136, 40 )
+
+[node name="BubbleSpawner7" parent="Bubbles" instance=ExtResource( 24 )]
+position = Vector2( 64, 216 )
+
+[node name="Respawns" type="Node2D" parent="."]
+
+[node name="RespawnPoint" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 88, 400 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint"]
+position = Vector2( -44.9375, 4 )
+shape = SubResource( 19 )
+
+[node name="RespawnPoint2" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 88, 368 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint2"]
+position = Vector2( -44.125, 4 )
+shape = SubResource( 19 )
+
+[node name="RespawnPoint4" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 96, 368 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint4"]
+position = Vector2( 20, 4 )
+shape = SubResource( 25 )
+
+[node name="RespawnPoint3" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 96, 400 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint3"]
+position = Vector2( 79.5, 4 )
+shape = SubResource( 20 )
+
+[node name="RespawnPoint5" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 248, 200 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint5"]
+position = Vector2( -34, 4 )
+shape = SubResource( 21 )
+
+[node name="RespawnPoint6" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 248, 176 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint6"]
+position = Vector2( -32, 4 )
+shape = SubResource( 21 )
+
+[node name="RespawnPoint7" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 8, 208 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint7"]
+position = Vector2( 36, 4 )
+shape = SubResource( 21 )
+
+[node name="RespawnPoint8" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 8, 168 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint8"]
+position = Vector2( 36, 4 )
+shape = SubResource( 21 )
+
+[node name="Exit" parent="." instance=ExtResource( 26 )]
+position = Vector2( 16, 28 )
+cost = 25
diff --git a/maps/boss/boss1_arena.gd b/maps/boss/boss1_arena.gd
new file mode 100644
index 0000000..091ca90
--- /dev/null
+++ b/maps/boss/boss1_arena.gd
@@ -0,0 +1,51 @@
+extends "res://maps/map.gd"
+
+const Text3D = preload("res://objects/hud/3d_text.tscn")
+
+var speccy_can_yap: bool = true
+
+func _ready():
+ Game.current_sector = Vector2.ZERO
+
+func _on_Boss1_died():
+ Game.change_map(load("res://maps/level_select.tscn"))
+
+
+func _on_Boss1_entered_phase(phase):
+ match phase:
+ 2:
+ $DelayedArrow2.start()
+ speccy_can_yap = false
+ 3:
+ $DelayedArrow3.start()
+ 4:
+ $ExitTimer.start()
+ if not Debug.prey_slaughtered:
+ var text_3d = Text3D.instance()
+ text_3d.anim = "victory"
+ self.add_child(text_3d)
+ else:
+ var text_3d = Text3D.instance()
+ text_3d.anim = "prey slaughtered"
+ self.add_child(text_3d)
+ Game.instance_node(load("res://objects/environment/blood_rain/blood_rain.tscn"),0,0,self)
+
+
+func _on_ExitTimer_timeout():
+ Game.can_pause = false
+ Game.save_boss()
+ if Game.marathon_mode:
+ Game.current_level += 1
+ if Game.current_level > LevelData.marathon_end:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(load("res://menus/main_menu.tscn").instance())
+ else:
+ Game.change_map(LevelData.levels[Game.current_level].scene)
+ else:
+ Game.change_map(load("res://menus/level_select_scholar.tscn"))
+
+
+func _on_SpeccyTimer_timeout() -> void:
+ if speccy_can_yap:
+ $Speccy.appear()
diff --git a/maps/boss/boss1_arena.tscn b/maps/boss/boss1_arena.tscn
new file mode 100644
index 0000000..d346699
--- /dev/null
+++ b/maps/boss/boss1_arena.tscn
@@ -0,0 +1,122 @@
+[gd_scene load_steps=19 format=2]
+
+[ext_resource path="res://objects/enemy/boss/scrump.tscn" type="PackedScene" id=1]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/backgrounds/mountain_clouds.png" type="Texture" id=3]
+[ext_resource path="res://graphics/backgrounds/mountain_sunset.png" type="Texture" id=4]
+[ext_resource path="res://tilesets/t_mountain.tres" type="TileSet" id=5]
+[ext_resource path="res://objects/hud/hud_boss.tscn" type="PackedScene" id=6]
+[ext_resource path="res://maps/boss/boss1_arena.gd" type="Script" id=7]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=8]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=9]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=10]
+[ext_resource path="res://audio/music/klystron.ogg" type="AudioStream" id=11]
+[ext_resource path="res://objects/delayed_instance.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/death tile/death_tile.tscn" type="PackedScene" id=13]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=14]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=15]
+[ext_resource path="res://objects/lore/boss/the_scrump.tscn" type="PackedScene" id=16]
+[ext_resource path="res://graphics/turniwood/turning_platform_wood_dark.png" type="Texture" id=17]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=18]
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 7 )
+music = ExtResource( 11 )
+lore_entries = [ ExtResource( 16 ) ]
+
+[node name="BossHUD" parent="." instance=ExtResource( 6 )]
+song_name = "♫Klystron"
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 4 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Sprite2" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 3 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="TileMap" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 2
+material = ExtResource( 15 )
+tile_set = ExtResource( 5 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( -65537, 0, 0, -131072, 0, 0, -131071, 0, 0, -131070, 0, 0, -131069, 0, 0, -131068, 0, 0, -131067, 0, 0, -131066, 0, 0, -131065, 0, 0, -131064, 0, 0, -131063, 0, 0, -131062, 0, 0, -131061, 0, 0, -131060, 0, 0, -131059, 0, 0, -131058, 0, 0, -131057, 0, 0, -131056, 0, 0, -131055, 0, 0, -131054, 0, 0, -131053, 0, 0, -131052, 0, 0, -131051, 0, 0, -131050, 0, 0, -131049, 0, 0, -131048, 0, 0, -131047, 0, 0, -131046, 0, 0, -131045, 0, 0, -131044, 0, 0, -131043, 0, 0, -131042, 0, 0, -131041, 0, 0, -131040, 0, 0, -1, 0, 0, -65504, 0, 0, 65535, 0, 0, 32, 0, 0, 131071, 0, 0, 65568, 0, 0, 196607, 0, 0, 131104, 0, 0, 262143, 0, 0, 196640, 0, 0, 327679, 0, 0, 262176, 0, 0, 393215, 0, 0, 327712, 0, 0, 458751, 0, 0, 393248, 0, 0, 524287, 0, 0, 458784, 0, 0, 589823, 0, 0, 524320, 0, 0, 655359, 0, 0, 589856, 0, 0, 720895, 0, 0, 655370, 0, 65536, 655371, 0, 65537, 655372, 0, 65538, 655392, 0, 0, 786431, 0, 0, 720928, 0, 0, 851967, 0, 0, 786436, 0, 65536, 786437, 0, 65537, 786438, 0, 65538, 786464, 0, 0, 917503, 0, 0, 852000, 0, 0, 983039, 0, 0, 917536, 0, 0, 1048575, 0, 0, 983072, 0, 0, 1114111, 0, 0, 1048608, 0, 0, 1179647, 0, 0, 1114122, 0, 65536, 1114123, 0, 65537, 1114124, 0, 65537, 1114125, 0, 65537, 1114126, 0, 65538, 1114144, 0, 0, 1245183, 0, 0, 1179680, 0, 0, 1310719, 0, 0, 1245216, 0, 0, 1376255, 0, 0, 1310720, 0, 65537, 1310721, 0, 65537, 1310722, 0, 65537, 1310723, 0, 65537, 1310724, 0, 65537, 1310725, 0, 65537, 1310726, 0, 65537, 1310727, 0, 65537, 1310728, 0, 65537, 1310729, 0, 65537, 1310730, 0, 65537, 1310731, 0, 65537, 1310732, 0, 65537, 1310733, 0, 65537, 1310734, 0, 65537, 1310735, 0, 65537, 1310736, 0, 65537, 1310737, 0, 65537, 1310738, 0, 65537, 1310739, 0, 65537, 1310740, 0, 0, 1310752, 0, 0, 1441791, 0, 0, 1376276, 0, 0, 1376288, 0, 0, 1507327, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1572863, 0, 0, 1507360, 0, 0, 1638399, 0, 0, 1572896, 0, 0 )
+
+[node name="Player" parent="." instance=ExtResource( 2 )]
+position = Vector2( 48, 160 )
+use_iframes = true
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 14 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 786440, 0, 2, 851976, 0, 2, 917512, 0, 2 )
+
+[node name="Boss1" parent="." instance=ExtResource( 1 )]
+position = Vector2( 168, 112 )
+left_up_boundary = 10.0
+right_down_boundary = 2.0
+
+[node name="TurningPlatform" parent="." instance=ExtResource( 9 )]
+position = Vector2( 72, 144 )
+texture = ExtResource( 17 )
+
+[node name="TurningPlatform2" parent="." instance=ExtResource( 9 )]
+position = Vector2( 120, 144 )
+texture = ExtResource( 17 )
+
+[node name="Ladder2" parent="." instance=ExtResource( 10 )]
+position = Vector2( 64, 96 )
+scale = Vector2( 1, 3 )
+
+[node name="DelayedArrow" parent="." instance=ExtResource( 12 )]
+delay = 5.0
+autostart = true
+
+[node name="Arrow" parent="DelayedArrow" instance=ExtResource( 8 )]
+position = Vector2( 96, 128 )
+
+[node name="DelayedArrow2" parent="." instance=ExtResource( 12 )]
+delay = 5.0
+
+[node name="Arrow2" parent="DelayedArrow2" instance=ExtResource( 8 )]
+position = Vector2( 40, 88 )
+
+[node name="DelayedArrow3" parent="." instance=ExtResource( 12 )]
+delay = 5.0
+
+[node name="Arrow3" parent="DelayedArrow3" instance=ExtResource( 8 )]
+position = Vector2( 88, 72 )
+
+[node name="DeathTile" parent="." instance=ExtResource( 13 )]
+position = Vector2( 0, 192 )
+scale = Vector2( 32, 1 )
+
+[node name="ExitTimer" type="Timer" parent="."]
+wait_time = 5.0
+one_shot = true
+
+[node name="Speccy" parent="." instance=ExtResource( 18 )]
+position = Vector2( 96, 80 )
+message = "shoot_the_eye"
+
+[node name="SpeccyTimer" type="Timer" parent="."]
+process_mode = 0
+wait_time = 30.0
+one_shot = true
+autostart = true
+
+[connection signal="died" from="Boss1" to="." method="_on_Boss1_died"]
+[connection signal="entered_phase" from="Boss1" to="." method="_on_Boss1_entered_phase"]
+[connection signal="timeout" from="ExitTimer" to="." method="_on_ExitTimer_timeout"]
+[connection signal="timeout" from="SpeccyTimer" to="." method="_on_SpeccyTimer_timeout"]
diff --git a/maps/boss/boss2_arena.gd b/maps/boss/boss2_arena.gd
new file mode 100644
index 0000000..959ee44
--- /dev/null
+++ b/maps/boss/boss2_arena.gd
@@ -0,0 +1,44 @@
+extends "res://maps/map.gd"
+
+const Text3D = preload("res://objects/hud/3d_text.tscn")
+
+var speccy_will_yell: bool = true
+
+func _ready():
+ Game.current_sector = Vector2.ZERO
+
+func _on_2600_entered_phase(phase):
+ match phase:
+ 2:
+ Audio.play_sound(Audio.a_glass_crack,Audio.ac_mech_hurt)
+ $DelayedArrow2.start()
+ speccy_will_yell = false
+ 3:
+ Audio.play_sound(Audio.a_glass_break,Audio.ac_mech_hurt)
+ $DelayedArrow3.start()
+ 4:
+ $ExitTimer.start()
+ var text_3d = Text3D.instance()
+ text_3d.anim = "victory"
+ yield(get_tree(), "idle_frame")
+ self.add_child(text_3d)
+
+
+func _on_ExitTimer_timeout():
+ Game.can_pause = false
+ Game.save_boss()
+ if Game.marathon_mode:
+ Game.current_level += 1
+ if Game.current_level > LevelData.marathon_end:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(load("res://menus/marathon_results.tscn").instance())
+ else:
+ Game.change_map(LevelData.levels[Game.current_level].scene)
+ else:
+ Game.change_map(load("res://menus/level_select_scholar.tscn"))
+
+
+func _on_SpeccyTimer_timeout() -> void:
+ if speccy_will_yell:
+ $Speccy.appear()
diff --git a/maps/boss/boss2_arena.tscn b/maps/boss/boss2_arena.tscn
new file mode 100644
index 0000000..f127836
--- /dev/null
+++ b/maps/boss/boss2_arena.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=20 format=2]
+
+[ext_resource path="res://tilesets/t_factory.tres" type="TileSet" id=1]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2]
+[ext_resource path="res://objects/environment/falling_block/falling_block_lab.tscn" type="PackedScene" id=3]
+[ext_resource path="res://graphics/backgrounds/steel.png" type="Texture" id=4]
+[ext_resource path="res://maps/boss/boss2_arena.gd" type="Script" id=5]
+[ext_resource path="res://objects/hud/hud_boss.tscn" type="PackedScene" id=6]
+[ext_resource path="res://audio/music/klystron_vip.ogg" type="AudioStream" id=7]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=8]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=9]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=10]
+[ext_resource path="res://objects/lore/boss/dr_intelli.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/delayed_instance.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/death tile/death_tile.tscn" type="PackedScene" id=13]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=14]
+[ext_resource path="res://objects/enemy/boss/2600.tscn" type="PackedScene" id=15]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=16]
+[ext_resource path="res://objects/lore/boss/2600.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/lore/boss/steel_factory.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=19]
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 5 )
+music = ExtResource( 7 )
+lore_entries = [ ExtResource( 17 ), ExtResource( 11 ), ExtResource( 18 ) ]
+
+[node name="BossHUD" parent="." instance=ExtResource( 6 )]
+song_name = "♫Klystron VIP"
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 4 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="2600" parent="." instance=ExtResource( 15 )]
+position = Vector2( 152, 8 )
+
+[node name="Ground" type="Node2D" parent="."]
+
+[node name="TileMap" type="TileMap" parent="Ground" groups=["can_stain"]]
+light_mask = 2
+material = ExtResource( 9 )
+tile_set = ExtResource( 1 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 65535, 0, 0, 131071, 0, 0, 196607, 0, 0, 262143, 0, 0, 327679, 0, 0, 393215, 0, 0, 458751, 0, 0, 393228, 0, 0, 393229, 0, 0, 393230, 0, 0, 393231, 0, 0, 524287, 0, 0, 458763, 0, 131074, 458764, 0, 131074, 458765, 0, 131074, 458766, 0, 131074, 589823, 0, 0, 524298, 0, 131074, 524299, 0, 131074, 524300, 0, 131074, 524301, 0, 131074, 524302, 0, 131074, 655359, 0, 0, 589829, 0, 0, 589830, 0, 0, 589833, 0, 0, 589839, 0, 131074, 589840, 0, 131074, 720895, 0, 0, 655376, 0, 131074, 786431, 0, 0, 720909, 0, 131074, 720910, 0, 131074, 720911, 0, 131074, 720912, 0, 131074, 851967, 0, 0, 786447, 0, 131074, 917503, 0, 0, 851971, 0, 0, 851972, 0, 0, 851973, 0, 0, 851974, 0, 0, 851977, 0, 0, 851978, 0, 0, 851979, 0, 0, 983039, 0, 0, 1048575, 0, 0, 983040, 0, 0, 1114111, 0, 0, 1048576, 0, 0, 1048577, 0, 0, 1048583, 0, 131074, 1179647, 0, 0, 1114112, 0, 0, 1114113, 0, 0, 1114114, 0, 0, 1114119, 0, 131074, 1245183, 0, 0, 1179650, 0, 0, 1179651, 0, 0, 1179652, 0, 0, 1179653, 0, 0, 1179654, 0, 0, 1179655, 0, 0, 1179656, 0, 0, 1179657, 0, 0, 1310719, 0, 0, 1376255, 0, 0, 1310734, 0, 0, 1310735, 0, 0, 1441791, 0, 0, 1507327, 0, 0, 1441792, 0, 1, 1441793, 0, 2, 1441794, 0, 2, 1441795, 0, 2, 1441796, 0, 2, 1441797, 0, 2, 1441798, 0, 2, 1441799, 0, 2, 1441800, 0, 2, 1441801, 0, 2, 1441802, 0, 2, 1441803, 0, 2, 1441804, 0, 2, 1441805, 0, 2, 1441806, 0, 2, 1441807, 0, 2, 1441808, 0, 2, 1441809, 0, 2, 1441810, 0, 2, 1441811, 0, 2, 1441812, 0, 2, 1441813, 0, 2, 1441814, 0, 2, 1441815, 0, 2, 1441816, 0, 2, 1441817, 0, 2, 1441818, 0, 2, 1441819, 0, 2, 1441820, 0, 2, 1441821, 0, 2, 1441822, 0, 2, 1441823, 0, 3, 1572863, 0, 0, 1507328, 0, 65536, 1507329, 0, 0, 1507330, 0, 65536, 1507331, 0, 0, 1507332, 0, 65536, 1507333, 0, 0, 1507334, 0, 65536, 1507335, 0, 0, 1507336, 0, 65536, 1507337, 0, 0, 1507338, 0, 65536, 1507339, 0, 0, 1507340, 0, 65536, 1507341, 0, 0, 1507342, 0, 65536, 1507343, 0, 0, 1507344, 0, 65536, 1507345, 0, 0, 1507346, 0, 65536, 1507347, 0, 0, 1507348, 0, 65536, 1507349, 0, 0, 1507350, 0, 65536, 1507351, 0, 0, 1507352, 0, 65536, 1507353, 0, 0, 1507354, 0, 65536, 1507355, 0, 0, 1507356, 0, 65536, 1507357, 0, 0, 1507358, 0, 65536, 1507359, 0, 0 )
+
+[node name="Collapse" type="TileMap" parent="Ground" groups=["can_stain", "delete_on_collapse"]]
+light_mask = 2
+material = ExtResource( 9 )
+tile_set = ExtResource( 1 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 589826, 0, 0, 589827, 0, 0, 589828, 0, 0, 589831, 0, 0, 589832, 0, 0, 851975, 0, 0, 851976, 0, 0 )
+
+[node name="Ladder" type="TileMap" parent="Ground"]
+tile_set = ExtResource( 14 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 655372, 0, 196609, 720908, 0, 196609, 786444, 0, 196609, 851980, 0, 196609 )
+
+[node name="Death" type="TileMap" parent="Ground" groups=["death"]]
+light_mask = 0
+tile_set = ExtResource( 16 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1048578, 1, 0, 1114118, 1, 0, 1179658, -1610612735, 0 )
+
+[node name="FallingBlock2" parent="Ground" instance=ExtResource( 3 )]
+position = Vector2( 96, 152 )
+
+[node name="FallingBlock8" parent="Ground" instance=ExtResource( 3 )]
+position = Vector2( 64, 40 )
+
+[node name="FallingBlock6" parent="Ground" instance=ExtResource( 3 )]
+position = Vector2( 32, 40 )
+
+[node name="FallingBlock4" parent="Ground" instance=ExtResource( 3 )]
+position = Vector2( 8, 56 )
+
+[node name="Player" parent="." instance=ExtResource( 2 )]
+position = Vector2( 24, 176 )
+use_iframes = true
+
+[node name="Ladder2" parent="." instance=ExtResource( 10 )]
+position = Vector2( 96, 80 )
+scale = Vector2( 1, 4 )
+
+[node name="DelayedArrow" parent="." instance=ExtResource( 12 )]
+delay = 0.1
+autostart = true
+
+[node name="Arrow" parent="DelayedArrow" instance=ExtResource( 8 )]
+position = Vector2( 64, 168 )
+
+[node name="DelayedArrow2" parent="." instance=ExtResource( 12 )]
+delay = 0.1
+
+[node name="Arrow2" parent="DelayedArrow2" instance=ExtResource( 8 )]
+position = Vector2( 72, 168 )
+
+[node name="DelayedArrow3" parent="." instance=ExtResource( 12 )]
+delay = 0.1
+
+[node name="Arrow3" parent="DelayedArrow3" instance=ExtResource( 8 )]
+position = Vector2( 80, 168 )
+
+[node name="DeathTile" parent="." instance=ExtResource( 13 )]
+position = Vector2( 0, 192 )
+scale = Vector2( 32, 1 )
+
+[node name="ExitTimer" type="Timer" parent="."]
+wait_time = 5.0
+one_shot = true
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="ColorRect" type="ColorRect" parent="."]
+visible = false
+margin_left = 155.0
+margin_top = 75.0
+margin_right = 163.0
+margin_bottom = 228.0
+rect_rotation = 45.0
+
+[node name="ColorRect3" type="ColorRect" parent="."]
+visible = false
+margin_left = 152.0
+margin_top = 67.0
+margin_right = 160.0
+margin_bottom = 220.0
+rect_rotation = 70.0
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+visible = false
+margin_left = 8.0
+margin_top = 59.0
+margin_right = 152.0
+margin_bottom = 67.0
+
+[node name="Speccy" parent="." instance=ExtResource( 19 )]
+position = Vector2( 152, 176 )
+flip = true
+message = "break_the_glass"
+
+[node name="SpeccyTimer" type="Timer" parent="."]
+process_mode = 0
+wait_time = 45.0
+one_shot = true
+autostart = true
+
+[connection signal="entered_phase" from="2600" to="." method="_on_2600_entered_phase"]
+[connection signal="timeout" from="ExitTimer" to="." method="_on_ExitTimer_timeout"]
+[connection signal="timeout" from="SpeccyTimer" to="." method="_on_SpeccyTimer_timeout"]
diff --git a/maps/boss/boss3_arena.gd b/maps/boss/boss3_arena.gd
new file mode 100644
index 0000000..2c36a93
--- /dev/null
+++ b/maps/boss/boss3_arena.gd
@@ -0,0 +1,100 @@
+extends "res://maps/map.gd"
+
+
+onready var sg_health: TextureProgress = $"%SGHealthBar"
+onready var sg_energy: TextureProgress = $"%SGEnergyBar"
+onready var fami_health: TextureProgress = $"%FamiHealthBar"
+onready var laser_ok: TextureRect = $"%LaserOk"
+onready var sg2083: KinematicBody2D = $"2083"
+onready var famira: Node2D = $Famira
+
+
+func _ready() -> void:
+ sg_energy.max_value = sg2083.max_energy
+ sg2083.state = sg2083.State.INACTIVE
+ famira.animation_player.play("grow", -1.0, 0.0)
+ Audio.play_sound(Audio.a_ominous,Audio.ac_collectible)
+ Audio.play_music(load("res://audio/music/the_dirt_under_the_meadow.ogg"))
+
+
+func _on_2083_health_changed(amount) -> void:
+ sg_health.value = amount - 4
+
+
+func _on_Famira_health_changed(amount) -> void:
+ fami_health.value = ceil(amount) - 3
+
+
+func _on_cutscene_finished() -> void:
+ sg2083.visible = true
+ famira.visible = true
+ famira.animation_player.play("grow")
+ $AnimationPlayer.play("drop-stg")
+ Audio.play_music(load("res://audio/music/rumble_revolution.ogg"))
+ yield(get_tree().create_timer(0.5), "timeout")
+ $FamiCutscene/FamiHuman.visible = false
+
+
+func fade() -> void:
+ Fade.fade_out(0.4)
+ Game.can_pause = true
+ yield(Fade, "fade_finished")
+ sg2083.anims.play("force idle")
+ Fade.fade_in(0.4)
+ $"%GUI".visible = true
+ yield(Fade, "fade_finished")
+ sg2083.state = sg2083.State.STAND
+ $FamiCutscene.queue_free()
+ Game.can_pause = true
+ Game.can_restart = true
+ famira.state_chart.send_event("transformed")
+
+
+func start_fight() -> void:
+ famira.animation_player.state_chart.send_event("transformed")
+
+
+func _on_2083_energy_changed(amount,laser_energy) -> void:
+ sg_energy.value = amount - 3
+ #Display heads up of laser status
+ if amount >= laser_energy:
+ if !Audio.ac_collectible.is_playing() && $"%LaserOk".visible == false: Audio.play_sound(Audio.a_laser_ready,Audio.ac_collectible)
+ $"%LaserOk".visible = true
+ else:
+ $"%LaserOk".visible = false
+
+
+func _on_Famira_died() -> void:
+ sg2083.state = sg2083.State.INACTIVE
+ SpeedrunTimer.timer_running = false
+ Game.can_pause = false
+ var tween = create_tween()
+ tween.set_trans(Tween.TRANS_CUBIC)
+ tween.tween_property($"%Camera", "global_position:x", famira.global_position.x - 128, 0.5)
+ tween.tween_interval(10.0)
+ tween.tween_callback(self, "_on_death_cooldown")
+
+
+func _on_death_cooldown() -> void:
+ Game.can_pause = false
+ if Game.marathon_mode:
+ Game.current_level += 1
+ if Game.current_level > LevelData.marathon_end:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(load("res://menus/marathon_results.tscn").instance())
+ else:
+ Game.change_map(LevelData.levels[Game.current_level].scene)
+ else:
+ Game.change_map(load("res://cutscenes/ending_future.tscn"))
+
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ if !Game.can_pause:
+ Audio.pause_all(true)
+ get_tree().paused = true
+ NOTIFICATION_WM_FOCUS_IN:
+ if !Game.can_pause:
+ Audio.pause_all(false)
+ get_tree().paused = false
diff --git a/maps/boss/boss3_arena.tscn b/maps/boss/boss3_arena.tscn
new file mode 100644
index 0000000..26217b9
--- /dev/null
+++ b/maps/boss/boss3_arena.tscn
@@ -0,0 +1,372 @@
+[gd_scene load_steps=33 format=2]
+
+[ext_resource path="res://objects/enemy/boss/sg2083.tscn" type="PackedScene" id=1]
+[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=2]
+[ext_resource path="res://maps/boss/boss3_arena.gd" type="Script" id=3]
+[ext_resource path="res://objects/enemy/boss/famira.tscn" type="PackedScene" id=4]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=5]
+[ext_resource path="res://tilesets/t_station.tres" type="TileSet" id=6]
+[ext_resource path="res://cutscenes/fami_cutscene.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/lore/boss/fami.tscn" type="PackedScene" id=8]
+[ext_resource path="res://graphics/backgrounds/fami_rooftop.png" type="Texture" id=9]
+[ext_resource path="res://graphics/hud/laser_ok.png" type="Texture" id=10]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=11]
+[ext_resource path="res://graphics/hud/2083_energy_back.png" type="Texture" id=12]
+[ext_resource path="res://graphics/hud/famira_health_filled.png" type="Texture" id=13]
+[ext_resource path="res://graphics/hud/famira_health_back.png" type="Texture" id=14]
+[ext_resource path="res://graphics/hud/2083_energy_filled.png" type="Texture" id=15]
+[ext_resource path="res://graphics/hud/2083_health_filled.png" type="Texture" id=16]
+[ext_resource path="res://graphics/hud/2083_health_back.png" type="Texture" id=17]
+[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=18]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=19]
+[ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=20]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam_gradient.png" type="Texture" id=21]
+[ext_resource path="res://graphics/hud/laser_ok_text.png" type="Texture" id=22]
+[ext_resource path="res://graphics/npc/speccy.png" type="Texture" id=23]
+[ext_resource path="res://objects/lore/boss/sg_2083.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/hills/sg.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/lore/lab/scope.tscn" type="PackedScene" id=26]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=27]
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 19 )
+shader_param/color_1 = Color( 1, 0.282353, 0, 0 )
+shader_param/color_2 = Color( 0.478431, 0.113725, 0, 0.619608 )
+shader_param/checker_size = Vector2( 4, 6 )
+shader_param/pan_speed = Vector2( 4, 6 )
+shader_param/cycle_speed = Vector2( 8, 0 )
+shader_param/cycle_alternation = Vector2( 1, 8 )
+shader_param/uv_transform = Transform2D( 1, 2, 1, 3, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 18 )
+shader_param/animate_noise = true
+shader_param/noise_intensity = 1.0
+shader_param/fps = 60.0
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 20 )
+shader_param/cycle_speed = 3.0
+shader_param/gradient = ExtResource( 21 )
+
+[sub_resource type="Animation" id=1]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("2083:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 12 ) ]
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("2083:position:x")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 0, -0.25, 0, 0.25, 0 ),
+"times": PoolRealArray( 0 )
+}
+tracks/2/type = "bezier"
+tracks/2/path = NodePath("2083:position:y")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"points": PoolRealArray( 12, -0.25, 0, 0.25, 0 ),
+"times": PoolRealArray( 0 )
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("2083:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("CanvasLayer/Sprite:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("FamiCutscene:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "drop-stg"
+length = 4.4
+tracks/0/type = "bezier"
+tracks/0/path = NodePath("2083:position:y")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"points": PoolRealArray( -300, -0.25, 0, 0.2, 0, 12, -0.1, -149.978, 0.25, 0 ),
+"times": PoolRealArray( 3, 3.5 )
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("2083:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 3 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("FamiCutscene")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 3.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "kill_cop"
+} ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("2083")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 3.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ true ],
+"method": "land"
+} ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("FamiCutscene:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 3, 4.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ true, false ]
+}
+tracks/5/type = "method"
+tracks/5/path = NodePath(".")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "fade"
+} ]
+}
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 3 )
+lore_entries = [ ExtResource( 8 ), ExtResource( 25 ), ExtResource( 24 ), ExtResource( 26 ) ]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -11
+
+[node name="Sprite" type="Sprite" parent="CanvasLayer"]
+position = Vector2( 128, 0 )
+texture = ExtResource( 9 )
+centered = false
+offset = Vector2( -128, 0 )
+
+[node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
+material = SubResource( 4 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
+material = SubResource( 3 )
+margin_right = 256.0
+margin_bottom = 192.0
+color = Color( 1, 0, 0, 0.333333 )
+
+[node name="GUI" type="CanvasLayer" parent="."]
+unique_name_in_owner = true
+visible = false
+
+[node name="Control" type="Control" parent="GUI"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 5 )
+
+[node name="Energy" type="Control" parent="GUI/Control"]
+margin_left = 8.0
+margin_top = 167.0
+margin_right = 161.0
+margin_bottom = 178.0
+
+[node name="SGEnergyBar" type="TextureProgress" parent="GUI/Control/Energy"]
+unique_name_in_owner = true
+margin_right = 153.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+value = 100.0
+texture_under = ExtResource( 12 )
+texture_progress = ExtResource( 15 )
+
+[node name="Label" type="Label" parent="GUI/Control/Energy"]
+material = ExtResource( 11 )
+margin_left = -7.0
+margin_top = 11.0
+margin_right = 146.0
+margin_bottom = 21.0
+text = " Energy"
+
+[node name="LaserBack" type="TextureRect" parent="GUI/Control/Energy"]
+margin_left = 60.0
+margin_top = 11.0
+margin_right = 100.0
+margin_bottom = 22.0
+texture = ExtResource( 10 )
+
+[node name="LaserOk" type="TextureRect" parent="GUI/Control/Energy"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 5 )
+margin_left = 60.0
+margin_top = 11.0
+margin_right = 100.0
+margin_bottom = 22.0
+texture = ExtResource( 22 )
+
+[node name="FamiHealth" type="Control" parent="GUI/Control/Energy"]
+margin_left = 140.0
+margin_top = -163.0
+margin_right = 286.0
+margin_bottom = -152.0
+
+[node name="FamiHealthBar" type="TextureProgress" parent="GUI/Control/Energy/FamiHealth"]
+unique_name_in_owner = true
+margin_right = 146.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+value = 100.0
+texture_under = ExtResource( 14 )
+texture_progress = ExtResource( 13 )
+
+[node name="Label" type="Label" parent="GUI/Control/Energy/FamiHealth"]
+material = ExtResource( 11 )
+margin_left = 16.0
+margin_top = 11.0
+margin_right = 162.0
+margin_bottom = 21.0
+text = "Super Famira"
+
+[node name="SGHealth" type="Control" parent="GUI/Control"]
+margin_left = 8.0
+margin_top = 4.0
+margin_right = 407.0
+margin_bottom = 192.0
+
+[node name="SGHealthBar" type="TextureProgress" parent="GUI/Control/SGHealth"]
+unique_name_in_owner = true
+margin_right = 399.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+value = 100.0
+texture_under = ExtResource( 17 )
+texture_progress = ExtResource( 16 )
+
+[node name="Label" type="Label" parent="GUI/Control/SGHealth"]
+material = ExtResource( 11 )
+margin_top = 11.0
+margin_right = 399.0
+margin_bottom = 21.0
+text = "SG-2083"
+
+[node name="TileMap2" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 27 )
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 1506202, 0, 131073, 1506203, 0, 131073, 1506204, 0, 131073, 1506205, 0, 131073, 1506206, 0, 131073, 1506207, 0, 131073, 1506208, 0, 131073, 1506209, 0, 131073, 1506210, 0, 131073, 1506211, 0, 131073, 1506212, 0, 131073, 1506213, 0, 131073, 1506214, 0, 131073, 1506215, 0, 131073, 1506216, 0, 131073, 1506217, 0, 131073, 1506218, 0, 131073, 1506219, 0, 131073, 1506220, 0, 131073, 1506221, 0, 131073, 1506222, 0, 131073, 1506223, 0, 131073, 1506224, 0, 131073, 1506225, 0, 131073, 1506226, 0, 131073, 1506227, 0, 131073, 1506228, 0, 131073, 1506229, 0, 131073, 1506230, 0, 131073, 1506231, 0, 131073, 1506232, 0, 131073, 1506233, 0, 131073, 1506234, 0, 131073, 1506235, 0, 131073, 1506236, 0, 131073, 1506237, 0, 131073, 1506238, 0, 131073, 1506239, 0, 131073, 1506240, 0, 131073, 1506241, 0, 131073, 1506242, 0, 131073, 1506243, 0, 131073, 1506244, 0, 131073, 1506245, 0, 131073, 1506246, 0, 131073, 1506247, 0, 131073, 1506248, 0, 131073, 1506249, 0, 131073, 1506250, 0, 131073, 1506251, 0, 131073, 1506252, 0, 131073, 1506253, 0, 131073, 1506254, 0, 131073, 1506255, 0, 131073, 1506256, 0, 131073, 1506257, 0, 131073, 1506258, 0, 131073, 1506259, 0, 131073, 1506260, 0, 131073, 1506261, 0, 131073, 1506262, 0, 131073, 1506263, 0, 131073, 1506264, 0, 131073, 1506265, 0, 131073, 1506266, 0, 131073, 1506267, 0, 131073, 1506268, 0, 131073, 1506269, 0, 131073, 1506270, 0, 131073, 1506271, 0, 131073, 1506272, 0, 131073, 1506273, 0, 131073, 1506274, 0, 131073, 1506275, 0, 131073, 1506276, 0, 131073, 1506277, 0, 131073, 1506278, 0, 131073, 1506279, 0, 131073, 1506280, 0, 131073, 1506281, 0, 131073, 1506282, 0, 131073, 1506283, 0, 131073, 1506284, 0, 131073, 1506285, 0, 131073, 1506286, 0, 131073, 1506287, 0, 131073, 1506288, 0, 131073, 1506289, 0, 131073, 1506290, 0, 131073, 1506291, 0, 131073, 1506292, 0, 131073, 1506293, 0, 131073, 1506294, 0, 131073, 1506295, 0, 131073, 1506296, 0, 131073, 1506297, 0, 131073, 1506298, 0, 131073, 1506299, 0, 131073, 1506300, 0, 131073, 1506301, 0, 131073, 1506302, 0, 131073, 1506303, 0, 131073, 1506304, 0, 131073, 1506305, 0, 131073, 1506306, 0, 131073, 1506307, 0, 131073, 1506308, 0, 131073, 1506309, 0, 131073, 1506310, 0, 131073, 1506311, 0, 131073, 1506312, 0, 131073, 1506313, 0, 131073, 1506314, 0, 131073, 1506315, 0, 131073, 1506316, 0, 131073, 1506317, 0, 131073, 1506318, 0, 131073, 1506319, 0, 131073, 1506320, 0, 131073, 1506321, 0, 131073, 1506322, 0, 131073, 1506323, 0, 131073, 1506324, 0, 131073, 1506325, 0, 131073, 1506326, 0, 131073, 1506327, 0, 131073, 1506328, 0, 131073, 1506329, 0, 131073, 1506330, 0, 131073, 1506331, 0, 131073, 1506332, 0, 131073, 1506333, 0, 131073, 1506334, 0, 131073, 1506335, 0, 131073, 1506336, 0, 131073, 1506337, 0, 131073, 1506338, 0, 131073, 1506339, 0, 131073, 1506340, 0, 131073, 1506341, 0, 131073, 1506342, 0, 131073, 1506343, 0, 131073, 1506344, 0, 131073, 1506345, 0, 131073, 1506346, 0, 131073, 1506347, 0, 131073, 1506348, 0, 131073, 1506349, 0, 131073, 1506350, 0, 131073, 1506351, 0, 131073, 1506352, 0, 131073, 1506353, 0, 131073, 1506354, 0, 131073, 1506355, 0, 131073, 1506356, 0, 131073, 1506357, 0, 131073, 1506358, 0, 131073, 1506359, 0, 131073, 1506360, 0, 131073, 1506361, 0, 131073, 1506362, 0, 131073, 1506363, 0, 131073, 1506364, 0, 131073, 1506365, 0, 131073, 1506366, 0, 131073, 1506367, 0, 131073, 1506368, 0, 131073, 1506369, 0, 131073, 1506370, 0, 131073, 1506371, 0, 131073, 1506372, 0, 131073, 1506373, 0, 131073, 1506374, 0, 131073, 1506375, 0, 131073, 1506376, 0, 131073, 1506377, 0, 131073, 1506378, 0, 131073, 1506379, 0, 131073, 1506380, 0, 131073, 1506381, 0, 131073, 1506382, 0, 131073, 1506383, 0, 131073, 1506384, 0, 131073, 1506385, 0, 131073, 1506386, 0, 131073, 1506387, 0, 131073, 1506388, 0, 131073, 1506389, 0, 131073, 1506390, 0, 131073, 1506391, 0, 131073, 1506392, 0, 131073, 1506393, 0, 131073, 1506394, 0, 131073, 1506395, 0, 131073, 1506396, 0, 131073, 1506397, 0, 131073, 1506398, 0, 131073, 1506399, 0, 131073, 1506400, 0, 131073, 1506401, 0, 131073, 1506402, 0, 131073, 1506403, 0, 131073, 1506404, 0, 131073, 1506405, 0, 131073, 1506406, 0, 131073, 1506407, 0, 131073, 1506408, 0, 131073, 1506409, 0, 131073, 1506410, 0, 131073, 1506411, 0, 131073, 1506412, 0, 131073, 1506413, 0, 131073, 1506414, 0, 131073, 1506415, 0, 131073, 1506416, 0, 131073, 1506417, 0, 131073, 1506418, 0, 131073, 1506419, 0, 131073, 1506420, 0, 131073, 1506421, 0, 131073, 1506422, 0, 131073, 1506423, 0, 131073, 1506424, 0, 131073, 1506425, 0, 131073, 1506426, 0, 131073, 1506427, 0, 131073, 1506428, 0, 131073, 1506429, 0, 131073, 1506430, 0, 131073, 1506431, 0, 131073, 1506432, 0, 131073, 1506433, 0, 131073, 1506434, 0, 131073, 1506435, 0, 131073, 1506436, 0, 131073, 1506437, 0, 131073, 1506438, 0, 131073, 1506439, 0, 131073, 1506440, 0, 131073, 1506441, 0, 131073, 1506442, 0, 131073, 1506443, 0, 131073, 1506444, 0, 131073, 1506445, 0, 131073, 1506446, 0, 131073, 1506447, 0, 131073, 1506448, 0, 131073, 1506449, 0, 131073, 1506450, 0, 131073, 1506451, 0, 131073, 1506452, 0, 131073, 1506453, 0, 131073, 1506454, 0, 131073, 1506455, 0, 131073, 1506456, 0, 131073, 1506457, 0, 131073, 1506458, 0, 131073, 1506459, 0, 131073, 1506460, 0, 131073, 1506461, 0, 131073, 1506462, 0, 131073, 1506463, 0, 131073, 1506464, 0, 131073, 1506465, 0, 131073, 1506466, 0, 131073, 1506467, 0, 131073, 1506468, 0, 131073, 1506469, 0, 131073, 1506470, 0, 131073, 1506471, 0, 131073, 1506472, 0, 131073, 1506473, 0, 131073, 1506474, 0, 131073, 1506475, 0, 131073, 1506476, 0, 131073, 1506477, 0, 131073, 1506478, 0, 131073, 1506479, 0, 131073, 1506480, 0, 131073, 1506481, 0, 131073, 1506482, 0, 131073, 1506483, 0, 131073, 1506484, 0, 131073, 1506485, 0, 131073, 1506486, 0, 131073, 1506487, 0, 131073, 1506488, 0, 131073, 1506489, 0, 131073, 1506490, 0, 131073, 1506491, 0, 131073, 1506492, 0, 131073, 1506493, 0, 131073, 1506494, 0, 131073, 1506495, 0, 131073, 1506496, 0, 131073, 1506497, 0, 131073, 1506498, 0, 131073, 1506499, 0, 131073, 1506500, 0, 131073, 1506501, 0, 131073, 1506502, 0, 131073, 1506503, 0, 131073, 1506504, 0, 131073, 1506505, 0, 131073, 1506506, 0, 131073, 1506507, 0, 131073, 1506508, 0, 131073, 1506509, 0, 131073, 1506510, 0, 131073, 1506511, 0, 131073, 1506512, 0, 131073, 1506513, 0, 131073, 1506514, 0, 131073, 1506515, 0, 131073, 1506516, 0, 131073, 1506517, 0, 131073, 1506518, 0, 131073, 1506519, 0, 131073, 1506520, 0, 131073, 1506521, 0, 131073, 1506522, 0, 131073, 1506523, 0, 131073, 1506524, 0, 131073, 1506525, 0, 131073, 1506526, 0, 131073, 1506527, 0, 131073, 1506528, 0, 131073, 1506529, 0, 131073, 1506530, 0, 131073, 1506531, 0, 131073, 1506532, 0, 131073, 1506533, 0, 131073, 1506534, 0, 131073, 1506535, 0, 131073, 1506536, 0, 131073, 1506537, 0, 131073, 1506538, 0, 131073, 1506539, 0, 131073, 1506540, 0, 131073, 1506541, 0, 131073, 1506542, 0, 131073, 1506543, 0, 131073, 1506544, 0, 131073, 1506545, 0, 131073, 1506546, 0, 131073, 1506547, 0, 131073, 1506548, 0, 131073, 1506549, 0, 131073, 1506550, 0, 131073, 1506551, 0, 131073, 1506552, 0, 131073, 1506553, 0, 131073, 1506554, 0, 131073, 1506555, 0, 131073, 1506556, 0, 131073, 1506557, 0, 131073, 1506558, 0, 131073, 1506559, 0, 131073, 1506560, 0, 131073, 1506561, 0, 131073, 1506562, 0, 131073, 1506563, 0, 131073, 1506564, 0, 131073, 1506565, 0, 131073, 1506566, 0, 131073, 1506567, 0, 131073, 1506568, 0, 131073, 1506569, 0, 131073, 1506570, 0, 131073, 1506571, 0, 131073, 1506572, 0, 131073, 1506573, 0, 131073, 1506574, 0, 131073, 1506575, 0, 131073, 1506576, 0, 131073, 1506577, 0, 131073, 1506578, 0, 131073, 1506579, 0, 131073, 1506580, 0, 131073, 1506581, 0, 131073, 1506582, 0, 131073, 1506583, 0, 131073, 1506584, 0, 131073, 1506585, 0, 131073, 1506586, 0, 131073, 1506587, 0, 131073, 1506588, 0, 131073, 1506589, 0, 131073, 1506590, 0, 131073, 1506591, 0, 131073, 1506592, 0, 131073, 1506593, 0, 131073, 1506594, 0, 131073, 1506595, 0, 131073, 1506596, 0, 131073, 1506597, 0, 131073, 1506598, 0, 131073, 1506599, 0, 131073, 1506600, 0, 131073, 1506601, 0, 131073, 1506602, 0, 131073, 1506603, 0, 131073, 1506604, 0, 131073, 1506605, 0, 131073, 1506606, 0, 131073, 1506607, 0, 131073, 1506608, 0, 131073, 1506609, 0, 131073, 1506610, 0, 131073, 1506611, 0, 131073, 1506612, 0, 131073, 1506613, 0, 131073, 1506614, 0, 131073, 1506615, 0, 131073, 1506616, 0, 131073, 1506617, 0, 131073, 1506618, 0, 131073, 1506619, 0, 131073, 1506620, 0, 131073, 1506621, 0, 131073, 1506622, 0, 131073, 1506623, 0, 131073, 1506624, 0, 131073, 1506625, 0, 131073, 1506626, 0, 131073, 1506627, 0, 131073, 1506628, 0, 131073, 1506629, 0, 131073, 1506630, 0, 131073, 1506631, 0, 131073, 1506632, 0, 131073, 1506633, 0, 131073, 1506634, 0, 131073, 1506635, 0, 131073, 1506636, 0, 131073, 1506637, 0, 131073, 1506638, 0, 131073, 1506639, 0, 131073, 1506640, 0, 131073, 1506641, 0, 131073, 1506642, 0, 131073, 1506643, 0, 131073, 1506644, 0, 131073, 1506645, 0, 131073, 1506646, 0, 131073, 1506647, 0, 131073, 1506648, 0, 131073, 1506649, 0, 131073, 1506650, 0, 131073, 1506651, 0, 131073, 1506652, 0, 131073, 1506653, 0, 131073, 1506654, 0, 131073, 1506655, 0, 131073, 1506656, 0, 131073, 1506657, 0, 131073, 1506658, 0, 131073, 1506659, 0, 131073, 1506660, 0, 131073, 1506661, 0, 131073, 1506662, 0, 131073, 1506663, 0, 131073, 1506664, 0, 131073, 1506665, 0, 131073, 1506666, 0, 131073, 1506667, 0, 131073, 1506668, 0, 131073, 1506669, 0, 131073, 1506670, 0, 131073, 1506671, 0, 131073, 1506672, 0, 131073, 1506673, 0, 131073, 1506674, 0, 131073, 1506675, 0, 131073, 1506676, 0, 131073, 1506677, 0, 131073, 1506678, 0, 131073, 1506679, 0, 131073, 1506680, 0, 131073, 1506681, 0, 131073, 1506682, 0, 131073, 1506683, 0, 131073, 1506684, 0, 131073, 1506685, 0, 131073, 1506686, 0, 131073, 1506687, 0, 131073, 1506688, 0, 131073, 1506689, 0, 131073, 1506690, 0, 131073, 1506691, 0, 131073, 1506692, 0, 131073, 1506693, 0, 131073, 1506694, 0, 131073, 1506695, 0, 131073, 1506696, 0, 131073, 1506697, 0, 131073, 1506698, 0, 131073, 1506699, 0, 131073, 1506700, 0, 131073, 1506701, 0, 131073, 1506702, 0, 131073, 1506703, 0, 131073, 1506704, 0, 131073, 1506705, 0, 131073, 1506706, 0, 131073, 1506707, 0, 131073, 1506708, 0, 131073, 1506709, 0, 131073, 1506710, 0, 131073, 1506711, 0, 131073, 1506712, 0, 131073, 1506713, 0, 131073, 1506714, 0, 131073, 1506715, 0, 131073, 1506716, 0, 131073, 1506717, 0, 131073, 1506718, 0, 131073, 1506719, 0, 131073, 1506720, 0, 131073, 1506721, 0, 131073, 1506722, 0, 131073, 1506723, 0, 131073, 1506724, 0, 131073, 1506725, 0, 131073, 1506726, 0, 131073, 1506727, 0, 131073, 1506728, 0, 131073, 1506729, 0, 131073, 1506730, 0, 131073, 1506731, 0, 131073, 1506732, 0, 131073, 1506733, 0, 131073, 1506734, 0, 131073, 1506735, 0, 131073, 1506736, 0, 131073, 1506737, 0, 131073, 1506738, 0, 131073, 1506739, 0, 131073, 1506740, 0, 131073, 1506741, 0, 131073, 1506742, 0, 131073, 1506743, 0, 131073, 1506744, 0, 131073, 1506745, 0, 131073, 1506746, 0, 131073, 1506747, 0, 131073, 1506748, 0, 131073, 1506749, 0, 131073, 1506750, 0, 131073, 1506751, 0, 131073, 1506752, 0, 131073, 1506753, 0, 131073, 1506754, 0, 131073, 1506755, 0, 131073, 1506756, 0, 131073, 1506757, 0, 131073, 1506758, 0, 131073, 1506759, 0, 131073, 1506760, 0, 131073, 1506761, 0, 131073, 1506762, 0, 131073, 1506763, 0, 131073, 1506764, 0, 131073, 1506765, 0, 131073, 1506766, 0, 131073, 1506767, 0, 131073, 1506768, 0, 131073, 1506769, 0, 131073, 1506770, 0, 131073, 1506771, 0, 131073, 1506772, 0, 131073, 1506773, 0, 131073, 1506774, 0, 131073, 1506775, 0, 131073, 1506776, 0, 131073, 1506777, 0, 131073, 1506778, 0, 131073, 1506779, 0, 131073, 1506780, 0, 131073, 1506781, 0, 131073, 1506782, 0, 131073, 1506783, 0, 131073, 1506784, 0, 131073, 1506785, 0, 131073, 1506786, 0, 131073, 1506787, 0, 131073, 1506788, 0, 131073, 1506789, 0, 131073, 1506790, 0, 131073, 1506791, 0, 131073, 1506792, 0, 131073, 1506793, 0, 131073, 1506794, 0, 131073, 1506795, 0, 131073, 1506796, 0, 131073, 1506797, 0, 131073, 1506798, 0, 131073, 1506799, 0, 131073, 1506800, 0, 131073, 1506801, 0, 131073, 1506802, 0, 131073, 1506803, 0, 131073, 1506804, 0, 131073, 1506805, 0, 131073, 1506806, 0, 131073, 1506807, 0, 131073, 1506808, 0, 131073, 1506809, 0, 131073, 1506810, 0, 131073, 1506811, 0, 131073, 1506812, 0, 131073, 1506813, 0, 131073, 1506814, 0, 131073, 1506815, 0, 131073, 1506816, 0, 131073, 1506817, 0, 131073, 1506818, 0, 131073, 1506819, 0, 131073, 1506820, 0, 131073, 1506821, 0, 131073, 1506822, 0, 131073, 1506823, 0, 131073, 1506824, 0, 131073, 1506825, 0, 131073, 1506826, 0, 131073, 1506827, 0, 131073, 1506828, 0, 131073, 1506829, 0, 131073, 1506830, 0, 131073, 1506831, 0, 131073, 1506832, 0, 131073, 1506833, 0, 131073, 1506834, 0, 131073, 1506835, 0, 131073, 1506836, 0, 131073, 1506837, 0, 131073, 1506838, 0, 131073, 1506839, 0, 131073, 1506840, 0, 131073, 1506841, 0, 131073, 1506842, 0, 131073, 1506843, 0, 131073, 1506844, 0, 131073, 1506845, 0, 131073, 1506846, 0, 131073, 1506847, 0, 131073, 1506848, 0, 131073, 1506849, 0, 131073, 1506850, 0, 131073, 1506851, 0, 131073, 1506852, 0, 131073, 1506853, 0, 131073, 1506854, 0, 131073, 1506855, 0, 131073, 1506856, 0, 131073, 1506857, 0, 131073, 1506858, 0, 131073, 1506859, 0, 131073, 1506860, 0, 131073, 1506861, 0, 131073, 1506862, 0, 131073, 1506863, 0, 131073, 1506864, 0, 131073, 1506865, 0, 131073, 1506866, 0, 131073, 1506867, 0, 131073, 1506868, 0, 131073, 1506869, 0, 131073, 1506870, 0, 131073, 1506871, 0, 131073, 1506872, 0, 131073, 1506873, 0, 131073, 1506874, 0, 131073, 1506875, 0, 131073, 1506876, 0, 131073, 1506877, 0, 131073, 1506878, 0, 131073, 1506879, 0, 131073, 1506880, 0, 131073, 1506881, 0, 131073, 1506882, 0, 131073, 1506883, 0, 131073, 1506884, 0, 131073, 1506885, 0, 131073, 1506886, 0, 131073, 1506887, 0, 131073, 1506888, 0, 131073, 1506889, 0, 131073, 1506890, 0, 131073, 1506891, 0, 131073, 1506892, 0, 131073, 1506893, 0, 131073, 1506894, 0, 131073, 1506895, 0, 131073, 1506896, 0, 131073, 1506897, 0, 131073, 1506898, 0, 131073, 1506899, 0, 131073, 1506900, 0, 131073, 1506901, 0, 131073, 1506902, 0, 131073, 1506903, 0, 131073, 1506904, 0, 131073, 1506905, 0, 131073, 1506906, 0, 131073, 1506907, 0, 131073, 1506908, 0, 131073, 1506909, 0, 131073, 1506910, 0, 131073, 1506911, 0, 131073, 1506912, 0, 131073, 1506913, 0, 131073, 1506914, 0, 131073, 1506915, 0, 131073, 1506916, 0, 131073, 1506917, 0, 131073, 1506918, 0, 131073, 1506919, 0, 131073, 1506920, 0, 131073, 1506921, 0, 131073, 1506922, 0, 131073, 1506923, 0, 131073, 1506924, 0, 131073, 1506925, 0, 131073, 1506926, 0, 131073, 1506927, 0, 131073, 1506928, 0, 131073, 1506929, 0, 131073, 1506930, 0, 131073, 1506931, 0, 131073, 1506932, 0, 131073, 1506933, 0, 131073, 1506934, 0, 131073, 1506935, 0, 131073, 1506936, 0, 131073, 1506937, 0, 131073, 1506938, 0, 131073, 1506939, 0, 131073, 1506940, 0, 131073, 1506941, 0, 131073, 1506942, 0, 131073, 1506943, 0, 131073, 1506944, 0, 131073, 1506945, 0, 131073, 1506946, 0, 131073, 1506947, 0, 131073, 1506948, 0, 131073, 1506949, 0, 131073, 1506950, 0, 131073, 1506951, 0, 131073, 1506952, 0, 131073, 1506953, 0, 131073, 1506954, 0, 131073, 1506955, 0, 131073, 1506956, 0, 131073, 1506957, 0, 131073, 1506958, 0, 131073, 1506959, 0, 131073, 1506960, 0, 131073, 1506961, 0, 131073, 1506962, 0, 131073, 1506963, 0, 131073, 1506964, 0, 131073, 1506965, 0, 131073, 1506966, 0, 131073, 1506967, 0, 131073, 1506968, 0, 131073, 1506969, 0, 131073, 1506970, 0, 131073, 1506971, 0, 131073, 1506972, 0, 131073, 1506973, 0, 131073, 1506974, 0, 131073, 1506975, 0, 131073, 1506976, 0, 131073, 1506977, 0, 131073, 1506978, 0, 131073, 1506979, 0, 131073, 1506980, 0, 131073, 1506981, 0, 131073, 1506982, 0, 131073, 1506983, 0, 131073, 1506984, 0, 131073, 1506985, 0, 131073, 1506986, 0, 131073, 1506987, 0, 131073, 1506988, 0, 131073, 1506989, 0, 131073, 1506990, 0, 131073, 1506991, 0, 131073, 1506992, 0, 131073, 1506993, 0, 131073, 1506994, 0, 131073, 1506995, 0, 131073, 1506996, 0, 131073, 1506997, 0, 131073, 1506998, 0, 131073, 1506999, 0, 131073, 1507000, 0, 131073, 1507001, 0, 131073, 1507002, 0, 131073, 1507003, 0, 131073, 1507004, 0, 131073, 1507005, 0, 131073, 1507006, 0, 131073, 1507007, 0, 131073, 1507008, 0, 131073, 1507009, 0, 131073, 1507010, 0, 131073, 1507011, 0, 131073, 1507012, 0, 131073, 1507013, 0, 131073, 1507014, 0, 131073, 1507015, 0, 131073, 1507016, 0, 131073, 1507017, 0, 131073, 1507018, 0, 131073, 1507019, 0, 131073, 1507020, 0, 131073, 1507021, 0, 131073, 1507022, 0, 131073, 1507023, 0, 131073, 1507024, 0, 131073, 1507025, 0, 131073, 1507026, 0, 131073, 1507027, 0, 131073, 1507028, 0, 131073, 1507029, 0, 131073, 1507030, 0, 131073, 1507031, 0, 131073, 1507032, 0, 131073, 1507033, 0, 131073, 1507034, 0, 131073, 1507035, 0, 131073, 1507036, 0, 131073, 1507037, 0, 131073, 1507038, 0, 131073, 1507039, 0, 131073, 1507040, 0, 131073, 1507041, 0, 131073, 1507042, 0, 131073, 1507043, 0, 131073, 1507044, 0, 131073, 1507045, 0, 131073, 1507046, 0, 131073, 1507047, 0, 131073, 1507048, 0, 131073, 1507049, 0, 131073, 1507050, 0, 131073, 1507051, 0, 131073, 1507052, 0, 131073, 1507053, 0, 131073, 1507054, 0, 131073, 1507055, 0, 131073, 1507056, 0, 131073, 1507057, 0, 131073, 1507058, 0, 131073, 1507059, 0, 131073, 1507060, 0, 131073, 1507061, 0, 131073, 1507062, 0, 131073, 1507063, 0, 131073, 1507064, 0, 131073, 1507065, 0, 131073, 1507066, 0, 131073, 1507067, 0, 131073, 1507068, 0, 131073, 1507069, 0, 131073, 1507070, 0, 131073, 1507071, 0, 131073, 1507072, 0, 131073, 1507073, 0, 131073, 1507074, 0, 131073, 1507075, 0, 131073, 1507076, 0, 131073, 1507077, 0, 131073, 1507078, 0, 131073, 1507079, 0, 131073, 1507080, 0, 131073, 1507081, 0, 131073, 1507082, 0, 131073, 1507083, 0, 131073, 1507084, 0, 131073, 1507085, 0, 131073, 1507086, 0, 131073, 1507087, 0, 131073, 1507088, 0, 131073, 1507089, 0, 131073, 1507090, 0, 131073, 1507091, 0, 131073, 1507092, 0, 131073, 1507093, 0, 131073, 1507094, 0, 131073, 1507095, 0, 131073, 1507096, 0, 131073, 1507097, 0, 131073, 1507098, 0, 131073, 1507099, 0, 131073, 1507100, 0, 131073, 1507101, 0, 131073, 1507102, 0, 131073, 1507103, 0, 131073, 1507104, 0, 131073, 1507105, 0, 131073, 1507106, 0, 131073, 1507107, 0, 131073, 1507108, 0, 131073, 1507109, 0, 131073, 1507110, 0, 131073, 1507111, 0, 131073, 1507112, 0, 131073, 1507113, 0, 131073, 1507114, 0, 131073, 1507115, 0, 131073, 1507116, 0, 131073, 1507117, 0, 131073, 1507118, 0, 131073, 1507119, 0, 131073, 1507120, 0, 131073, 1507121, 0, 131073, 1507122, 0, 131073, 1507123, 0, 131073, 1507124, 0, 131073, 1507125, 0, 131073, 1507126, 0, 131073, 1507127, 0, 131073, 1507128, 0, 131073, 1507129, 0, 131073, 1507130, 0, 131073, 1507131, 0, 131073, 1507132, 0, 131073, 1507133, 0, 131073, 1507134, 0, 131073, 1507135, 0, 131073, 1507136, 0, 131073, 1507137, 0, 131073, 1507138, 0, 131073, 1507139, 0, 131073, 1507140, 0, 131073, 1507141, 0, 131073, 1507142, 0, 131073, 1507143, 0, 131073, 1507144, 0, 131073, 1507145, 0, 131073, 1507146, 0, 131073, 1507147, 0, 131073, 1507148, 0, 131073, 1507149, 0, 131073, 1507150, 0, 131073, 1507151, 0, 131073, 1507152, 0, 131073, 1507153, 0, 131073, 1507154, 0, 131073, 1507155, 0, 131073, 1507156, 0, 131073, 1507157, 0, 131073, 1507158, 0, 131073, 1507159, 0, 131073, 1507160, 0, 131073, 1507161, 0, 131073, 1507162, 0, 131073, 1507163, 0, 131073, 1507164, 0, 131073, 1507165, 0, 131073, 1507166, 0, 131073, 1507167, 0, 131073, 1507168, 0, 131073, 1507169, 0, 131073, 1507170, 0, 131073, 1507171, 0, 131073, 1507172, 0, 131073, 1507173, 0, 131073, 1507174, 0, 131073, 1507175, 0, 131073, 1507176, 0, 131073, 1507177, 0, 131073, 1507178, 0, 131073, 1507179, 0, 131073, 1507180, 0, 131073, 1507181, 0, 131073, 1507182, 0, 131073, 1507183, 0, 131073, 1507184, 0, 131073, 1507185, 0, 131073, 1507186, 0, 131073, 1507187, 0, 131073, 1507188, 0, 131073, 1507189, 0, 131073, 1507190, 0, 131073, 1507191, 0, 131073, 1507192, 0, 131073, 1507193, 0, 131073, 1507194, 0, 131073, 1507195, 0, 131073, 1507196, 0, 131073, 1507197, 0, 131073, 1507198, 0, 131073, 1507199, 0, 131073, 1507200, 0, 131073, 1507201, 0, 131073, 1507202, 0, 131073, 1507203, 0, 131073, 1507204, 0, 131073, 1507205, 0, 131073, 1507206, 0, 131073, 1507207, 0, 131073, 1507208, 0, 131073, 1507209, 0, 131073, 1507210, 0, 131073, 1507211, 0, 131073, 1507212, 0, 131073, 1507213, 0, 131073, 1507214, 0, 131073, 1507215, 0, 131073, 1507216, 0, 131073, 1507217, 0, 131073, 1507218, 0, 131073, 1507219, 0, 131073, 1507220, 0, 131073, 1507221, 0, 131073, 1507222, 0, 131073, 1507223, 0, 131073, 1507224, 0, 131073, 1507225, 0, 131073, 1507226, 0, 131073, 1507227, 0, 131073, 1507228, 0, 131073, 1507229, 0, 131073, 1507230, 0, 131073, 1507231, 0, 131073, 1507232, 0, 131073, 1507233, 0, 131073, 1507234, 0, 131073, 1507235, 0, 131073, 1507236, 0, 131073, 1507237, 0, 131073, 1507238, 0, 131073, 1507239, 0, 131073, 1507240, 0, 131073, 1507241, 0, 131073, 1507242, 0, 131073, 1507243, 0, 131073, 1507244, 0, 131073, 1507245, 0, 131073, 1507246, 0, 131073, 1507247, 0, 131073, 1507248, 0, 131073, 1507249, 0, 131073, 1507250, 0, 131073, 1507251, 0, 131073, 1507252, 0, 131073, 1507253, 0, 131073, 1507254, 0, 131073, 1507255, 0, 131073, 1507256, 0, 131073, 1507257, 0, 131073, 1507258, 0, 131073, 1507259, 0, 131073, 1507260, 0, 131073, 1507261, 0, 131073, 1507262, 0, 131073, 1507263, 0, 131073, 1507264, 0, 131073, 1507265, 0, 131073, 1507266, 0, 131073, 1507267, 0, 131073, 1507268, 0, 131073, 1507269, 0, 131073, 1507270, 0, 131073, 1507271, 0, 131073, 1507272, 0, 131073, 1507273, 0, 131073, 1507274, 0, 131073, 1507275, 0, 131073, 1507276, 0, 131073, 1507277, 0, 131073, 1507278, 0, 131073, 1507279, 0, 131073, 1507280, 0, 131073, 1507281, 0, 131073, 1507282, 0, 131073, 1507283, 0, 131073, 1507284, 0, 131073, 1507285, 0, 131073, 1507286, 0, 131073, 1507287, 0, 131073, 1507288, 0, 131073, 1507289, 0, 131073, 1507290, 0, 131073, 1507291, 0, 131073, 1507292, 0, 131073, 1507293, 0, 131073, 1507294, 0, 131073, 1507295, 0, 131073, 1507296, 0, 131073, 1507297, 0, 131073, 1507298, 0, 131073, 1507299, 0, 131073, 1507300, 0, 131073, 1507301, 0, 131073, 1507302, 0, 131073, 1507303, 0, 131073, 1507304, 0, 131073, 1507305, 0, 131073, 1507306, 0, 131073, 1507307, 0, 131073, 1507308, 0, 131073, 1507309, 0, 131073, 1507310, 0, 131073, 1507311, 0, 131073, 1507312, 0, 131073, 1507313, 0, 131073, 1507314, 0, 131073, 1507315, 0, 131073, 1507316, 0, 131073, 1507317, 0, 131073, 1507318, 0, 131073, 1507319, 0, 131073, 1507320, 0, 131073, 1507321, 0, 131073, 1507322, 0, 131073, 1507323, 0, 131073, 1507324, 0, 131073, 1507325, 0, 131073, 1507326, 0, 131073, 1507327, 0, 131073, 1441792, 0, 131073, 1441793, 0, 131073, 1441794, 0, 131073, 1441795, 0, 131073, 1441796, 0, 131073, 1441797, 0, 131073, 1441798, 0, 131073, 1441799, 0, 131073, 1441800, 0, 131073, 1441801, 0, 131073, 1441802, 0, 131073, 1441803, 0, 131073, 1441804, 0, 131073, 1441805, 0, 131073, 1441806, 0, 131073, 1441807, 0, 131073, 1441808, 0, 131073, 1441809, 0, 131073, 1441810, 0, 131073, 1441811, 0, 131073, 1441812, 0, 131073, 1441813, 0, 131073, 1441814, 0, 131073, 1441815, 0, 131073, 1441816, 0, 131073, 1441817, 0, 131073, 1441818, 0, 131073, 1441819, 0, 131073, 1441820, 0, 131073, 1441821, 0, 131073, 1441822, 0, 131073, 1441823, 0, 131073, 1441824, 0, 131073, 1441825, 0, 131073, 1441826, 0, 131073, 1441827, 0, 131073, 1441828, 0, 131073, 1441829, 0, 131073, 1441830, 0, 131073, 1441831, 0, 131073, 1441832, 0, 131073, 1441833, 0, 131073, 1441834, 0, 131073, 1441835, 0, 131073, 1441836, 0, 131073, 1441837, 0, 131073, 1441838, 0, 131073, 1441839, 0, 131073, 1441840, 0, 131073, 1441841, 0, 131073, 1441842, 0, 131073, 1441843, 0, 131073, 1441844, 0, 131073, 1441845, 0, 131073, 1441846, 0, 131073, 1441847, 0, 131073, 1441848, 0, 131073, 1441849, 0, 131073, 1441850, 0, 131073, 1441851, 0, 131073, 1441852, 0, 131073, 1441853, 0, 131073, 1441854, 0, 131073, 1441855, 0, 131073, 1441856, 0, 131073, 1441857, 0, 131073, 1441858, 0, 131073, 1441859, 0, 131073, 1441860, 0, 131073, 1441861, 0, 131073, 1441862, 0, 131073, 1441863, 0, 131073, 1441864, 0, 131073, 1441865, 0, 131073, 1441866, 0, 131073, 1441867, 0, 131073, 1441868, 0, 131073, 1441869, 0, 131073, 1441870, 0, 131073, 1441871, 0, 131073, 1441872, 0, 131073, 1441873, 0, 131073, 1441874, 0, 131073, 1441875, 0, 131073, 1441876, 0, 131073, 1441877, 0, 131073, 1441878, 0, 131073, 1441879, 0, 131073, 1441880, 0, 131073, 1441881, 0, 131073, 1441882, 0, 131073, 1441883, 0, 131073, 1441884, 0, 131073, 1441885, 0, 131073, 1441886, 0, 131073, 1441887, 0, 131073, 1572429, 1, 196608, 1638417, 0, 131073, 1638432, 0, 131073 )
+
+[node name="TileMap" type="TileMap" parent="TileMap2" groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 27 )
+tile_set = ExtResource( 2 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 1571738, 1, 1, 1571739, 1, 2, 1571740, 1, 2, 1571741, 1, 2, 1571742, 1, 2, 1571743, 1, 2, 1571744, 1, 2, 1571745, 1, 2, 1571746, 1, 2, 1571747, 1, 2, 1571748, 1, 2, 1571749, 1, 2, 1571750, 1, 2, 1571751, 1, 2, 1571752, 1, 2, 1571753, 1, 2, 1571754, 1, 2, 1571755, 1, 2, 1571756, 1, 2, 1571757, 1, 2, 1571758, 1, 2, 1571759, 1, 2, 1571760, 1, 2, 1571761, 1, 2, 1571762, 1, 2, 1571763, 1, 2, 1571764, 1, 2, 1571765, 1, 2, 1571766, 1, 2, 1571767, 1, 2, 1571768, 1, 2, 1571769, 1, 2, 1571770, 1, 2, 1571771, 1, 2, 1571772, 1, 2, 1571773, 1, 2, 1571774, 1, 2, 1571775, 1, 2, 1571776, 1, 2, 1571777, 1, 2, 1571778, 1, 2, 1571779, 1, 2, 1571780, 1, 2, 1571781, 1, 2, 1571782, 1, 2, 1571783, 1, 2, 1571784, 1, 2, 1571785, 1, 2, 1571786, 1, 2, 1571787, 1, 2, 1571788, 1, 2, 1571789, 1, 2, 1571790, 1, 2, 1571791, 1, 2, 1571792, 1, 2, 1571793, 1, 2, 1571794, 1, 2, 1571795, 1, 2, 1571796, 1, 2, 1571797, 1, 2, 1571798, 1, 2, 1571799, 1, 2, 1571800, 1, 2, 1571801, 1, 2, 1571802, 1, 2, 1571803, 1, 2, 1571804, 1, 2, 1571805, 1, 2, 1571806, 1, 2, 1571807, 1, 2, 1571808, 1, 2, 1571809, 1, 2, 1571810, 1, 2, 1571811, 1, 2, 1571812, 1, 2, 1571813, 1, 2, 1571814, 1, 2, 1571815, 1, 2, 1571816, 1, 2, 1571817, 1, 2, 1571818, 1, 2, 1571819, 1, 2, 1571820, 1, 2, 1571821, 1, 2, 1571822, 1, 2, 1571823, 1, 2, 1571824, 1, 2, 1571825, 1, 2, 1571826, 1, 2, 1571827, 1, 2, 1571828, 1, 2, 1571829, 1, 2, 1571830, 1, 2, 1571831, 1, 2, 1571832, 1, 2, 1571833, 1, 2, 1571834, 1, 2, 1571835, 1, 2, 1571836, 1, 2, 1571837, 1, 2, 1571838, 1, 2, 1571839, 1, 2, 1571840, 1, 2, 1571841, 1, 2, 1571842, 1, 2, 1571843, 1, 2, 1571844, 1, 2, 1571845, 1, 2, 1571846, 1, 2, 1571847, 1, 2, 1571848, 1, 2, 1571849, 1, 2, 1571850, 1, 2, 1571851, 1, 2, 1571852, 1, 2, 1571853, 1, 2, 1571854, 1, 2, 1571855, 1, 2, 1571856, 1, 2, 1571857, 1, 2, 1571858, 1, 2, 1571859, 1, 2, 1571860, 1, 2, 1571861, 1, 2, 1571862, 1, 2, 1571863, 1, 2, 1571864, 1, 2, 1571865, 1, 2, 1571866, 1, 2, 1571867, 1, 2, 1571868, 1, 2, 1571869, 1, 2, 1571870, 1, 2, 1571871, 1, 2, 1571872, 1, 2, 1571873, 1, 2, 1571874, 1, 2, 1571875, 1, 2, 1571876, 1, 2, 1571877, 1, 2, 1571878, 1, 2, 1571879, 1, 2, 1571880, 1, 2, 1571881, 1, 2, 1571882, 1, 2, 1571883, 1, 2, 1571884, 1, 2, 1571885, 1, 2, 1571886, 1, 2, 1571887, 1, 2, 1571888, 1, 2, 1571889, 1, 2, 1571890, 1, 2, 1571891, 1, 2, 1571892, 1, 2, 1571893, 1, 2, 1571894, 1, 2, 1571895, 1, 2, 1571896, 1, 2, 1571897, 1, 2, 1571898, 1, 2, 1571899, 1, 2, 1571900, 1, 2, 1571901, 1, 2, 1571902, 1, 2, 1571903, 1, 2, 1571904, 1, 2, 1571905, 1, 2, 1571906, 1, 2, 1571907, 1, 2, 1571908, 1, 2, 1571909, 1, 2, 1571910, 1, 2, 1571911, 1, 2, 1571912, 1, 2, 1571913, 1, 2, 1571914, 1, 2, 1571915, 1, 2, 1571916, 1, 2, 1571917, 1, 2, 1571918, 1, 2, 1571919, 1, 2, 1571920, 1, 2, 1571921, 1, 2, 1571922, 1, 2, 1571923, 1, 2, 1571924, 1, 2, 1571925, 1, 2, 1571926, 1, 2, 1571927, 1, 2, 1571928, 1, 2, 1571929, 1, 2, 1571930, 1, 2, 1571931, 1, 2, 1571932, 1, 2, 1571933, 1, 2, 1571934, 1, 2, 1571935, 1, 2, 1571936, 1, 2, 1571937, 1, 2, 1571938, 1, 2, 1571939, 1, 2, 1571940, 1, 2, 1571941, 1, 2, 1571942, 1, 2, 1571943, 1, 2, 1571944, 1, 2, 1571945, 1, 2, 1571946, 1, 2, 1571947, 1, 2, 1571948, 1, 2, 1571949, 1, 2, 1571950, 1, 2, 1571951, 1, 2, 1571952, 1, 2, 1571953, 1, 2, 1571954, 1, 2, 1571955, 1, 2, 1571956, 1, 2, 1571957, 1, 2, 1571958, 1, 2, 1571959, 1, 2, 1571960, 1, 2, 1571961, 1, 2, 1571962, 1, 2, 1571963, 1, 2, 1571964, 1, 2, 1571965, 1, 2, 1571966, 1, 2, 1571967, 1, 2, 1571968, 1, 2, 1571969, 1, 2, 1571970, 1, 2, 1571971, 1, 2, 1571972, 1, 2, 1571973, 1, 2, 1571974, 1, 2, 1571975, 1, 2, 1571976, 1, 2, 1571977, 1, 2, 1571978, 1, 2, 1571979, 1, 2, 1571980, 1, 2, 1571981, 1, 2, 1571982, 1, 2, 1571983, 1, 2, 1571984, 1, 2, 1571985, 1, 2, 1571986, 1, 2, 1571987, 1, 2, 1571988, 1, 2, 1571989, 1, 2, 1571990, 1, 2, 1571991, 1, 2, 1571992, 1, 2, 1571993, 1, 2, 1571994, 1, 2, 1571995, 1, 2, 1571996, 1, 2, 1571997, 1, 2, 1571998, 1, 2, 1571999, 1, 2, 1572000, 1, 2, 1572001, 1, 2, 1572002, 1, 2, 1572003, 1, 2, 1572004, 1, 2, 1572005, 1, 2, 1572006, 1, 2, 1572007, 1, 2, 1572008, 1, 2, 1572009, 1, 2, 1572010, 1, 2, 1572011, 1, 2, 1572012, 1, 2, 1572013, 1, 2, 1572014, 1, 2, 1572015, 1, 2, 1572016, 1, 2, 1572017, 1, 2, 1572018, 1, 2, 1572019, 1, 2, 1572020, 1, 2, 1572021, 1, 2, 1572022, 1, 2, 1572023, 1, 2, 1572024, 1, 2, 1572025, 1, 2, 1572026, 1, 2, 1572027, 1, 2, 1572028, 1, 2, 1572029, 1, 2, 1572030, 1, 2, 1572031, 1, 2, 1572032, 1, 2, 1572033, 1, 2, 1572034, 1, 2, 1572035, 1, 2, 1572036, 1, 2, 1572037, 1, 2, 1572038, 1, 2, 1572039, 1, 2, 1572040, 1, 2, 1572041, 1, 2, 1572042, 1, 2, 1572043, 1, 2, 1572044, 1, 2, 1572045, 1, 2, 1572046, 1, 2, 1572047, 1, 2, 1572048, 1, 2, 1572049, 1, 2, 1572050, 1, 2, 1572051, 1, 2, 1572052, 1, 2, 1572053, 1, 2, 1572054, 1, 2, 1572055, 1, 2, 1572056, 1, 2, 1572057, 1, 2, 1572058, 1, 2, 1572059, 1, 2, 1572060, 1, 2, 1572061, 1, 2, 1572062, 1, 2, 1572063, 1, 2, 1572064, 1, 2, 1572065, 1, 2, 1572066, 1, 2, 1572067, 1, 2, 1572068, 1, 2, 1572069, 1, 2, 1572070, 1, 2, 1572071, 1, 2, 1572072, 1, 2, 1572073, 1, 2, 1572074, 1, 2, 1572075, 1, 2, 1572076, 1, 2, 1572077, 1, 2, 1572078, 1, 2, 1572079, 1, 2, 1572080, 1, 2, 1572081, 1, 2, 1572082, 1, 2, 1572083, 1, 2, 1572084, 1, 2, 1572085, 1, 2, 1572086, 1, 2, 1572087, 1, 2, 1572088, 1, 2, 1572089, 1, 2, 1572090, 1, 2, 1572091, 1, 2, 1572092, 1, 2, 1572093, 1, 2, 1572094, 1, 2, 1572095, 1, 2, 1572096, 1, 2, 1572097, 1, 2, 1572098, 1, 2, 1572099, 1, 2, 1572100, 1, 2, 1572101, 1, 2, 1572102, 1, 2, 1572103, 1, 2, 1572104, 1, 2, 1572105, 1, 2, 1572106, 1, 2, 1572107, 1, 2, 1572108, 1, 2, 1572109, 1, 2, 1572110, 1, 2, 1572111, 1, 2, 1572112, 1, 2, 1572113, 1, 2, 1572114, 1, 2, 1572115, 1, 2, 1572116, 1, 2, 1572117, 1, 2, 1572118, 1, 2, 1572119, 1, 2, 1572120, 1, 2, 1572121, 1, 2, 1572122, 1, 2, 1572123, 1, 2, 1572124, 1, 2, 1572125, 1, 2, 1572126, 1, 2, 1572127, 1, 2, 1572128, 1, 2, 1572129, 1, 2, 1572130, 1, 2, 1572131, 1, 2, 1572132, 1, 2, 1572133, 1, 2, 1572134, 1, 2, 1572135, 1, 2, 1572136, 1, 2, 1572137, 1, 2, 1572138, 1, 2, 1572139, 1, 2, 1572140, 1, 2, 1572141, 1, 2, 1572142, 1, 2, 1572143, 1, 2, 1572144, 1, 2, 1572145, 1, 2, 1572146, 1, 2, 1572147, 1, 2, 1572148, 1, 2, 1572149, 1, 2, 1572150, 1, 2, 1572151, 1, 2, 1572152, 1, 2, 1572153, 1, 2, 1572154, 1, 2, 1572155, 1, 2, 1572156, 1, 2, 1572157, 1, 2, 1572158, 1, 2, 1572159, 1, 2, 1572160, 1, 2, 1572161, 1, 2, 1572162, 1, 2, 1572163, 1, 2, 1572164, 1, 2, 1572165, 1, 2, 1572166, 1, 2, 1572167, 1, 2, 1572168, 1, 2, 1572169, 1, 2, 1572170, 1, 2, 1572171, 1, 2, 1572172, 1, 2, 1572173, 1, 2, 1572174, 1, 2, 1572175, 1, 2, 1572176, 1, 2, 1572177, 1, 2, 1572178, 1, 2, 1572179, 1, 2, 1572180, 1, 2, 1572181, 1, 2, 1572182, 1, 2, 1572183, 1, 2, 1572184, 1, 2, 1572185, 1, 2, 1572186, 1, 2, 1572187, 1, 2, 1572188, 1, 2, 1572189, 1, 2, 1572190, 1, 2, 1572191, 1, 2, 1572192, 1, 2, 1572193, 1, 2, 1572194, 1, 2, 1572195, 1, 2, 1572196, 1, 2, 1572197, 1, 2, 1572198, 1, 2, 1572199, 1, 2, 1572200, 1, 2, 1572201, 1, 2, 1572202, 1, 2, 1572203, 1, 2, 1572204, 1, 2, 1572205, 1, 2, 1572206, 1, 2, 1572207, 1, 2, 1572208, 1, 2, 1572209, 1, 2, 1572210, 1, 2, 1572211, 1, 2, 1572212, 1, 2, 1572213, 1, 2, 1572214, 1, 2, 1572215, 1, 2, 1572216, 1, 2, 1572217, 1, 2, 1572218, 1, 2, 1572219, 1, 2, 1572220, 1, 2, 1572221, 1, 2, 1572222, 1, 2, 1572223, 1, 2, 1572224, 1, 2, 1572225, 1, 2, 1572226, 1, 2, 1572227, 1, 2, 1572228, 1, 2, 1572229, 1, 2, 1572230, 1, 2, 1572231, 1, 2, 1572232, 1, 2, 1572233, 1, 2, 1572234, 1, 2, 1572235, 1, 2, 1572236, 1, 2, 1572237, 1, 2, 1572238, 1, 2, 1572239, 1, 2, 1572240, 1, 2, 1572241, 1, 2, 1572242, 1, 2, 1572243, 1, 2, 1572244, 1, 2, 1572245, 1, 2, 1572246, 1, 2, 1572247, 1, 2, 1572248, 1, 2, 1572249, 1, 2, 1572250, 1, 2, 1572251, 1, 2, 1572252, 1, 2, 1572253, 1, 2, 1572254, 1, 2, 1572255, 1, 2, 1572256, 1, 2, 1572257, 1, 2, 1572258, 1, 2, 1572259, 1, 2, 1572260, 1, 2, 1572261, 1, 2, 1572262, 1, 2, 1572263, 1, 2, 1572264, 1, 2, 1572265, 1, 2, 1572266, 1, 2, 1572267, 1, 2, 1572268, 1, 2, 1572269, 1, 2, 1572270, 1, 2, 1572271, 1, 2, 1572272, 1, 2, 1572273, 1, 2, 1572274, 1, 2, 1572275, 1, 2, 1572276, 1, 2, 1572277, 1, 2, 1572278, 1, 2, 1572279, 1, 2, 1572280, 1, 2, 1572281, 1, 2, 1572282, 1, 2, 1572283, 1, 2, 1572284, 1, 2, 1572285, 1, 2, 1572286, 1, 2, 1572287, 1, 2, 1572288, 1, 2, 1572289, 1, 2, 1572290, 1, 2, 1572291, 1, 2, 1572292, 1, 2, 1572293, 1, 2, 1572294, 1, 2, 1572295, 1, 2, 1572296, 1, 2, 1572297, 1, 2, 1572298, 1, 2, 1572299, 1, 2, 1572300, 1, 2, 1572301, 1, 2, 1572302, 1, 2, 1572303, 1, 2, 1572304, 1, 2, 1572305, 1, 2, 1572306, 1, 2, 1572307, 1, 2, 1572308, 1, 2, 1572309, 1, 2, 1572310, 1, 2, 1572311, 1, 2, 1572312, 1, 2, 1572313, 1, 2, 1572314, 1, 2, 1572315, 1, 2, 1572316, 1, 2, 1572317, 1, 2, 1572318, 1, 2, 1572319, 1, 2, 1572320, 1, 2, 1572321, 1, 2, 1572322, 1, 2, 1572323, 1, 2, 1572324, 1, 2, 1572325, 1, 2, 1572326, 1, 2, 1572327, 1, 2, 1572328, 1, 2, 1572329, 1, 2, 1572330, 1, 2, 1572331, 1, 2, 1572332, 1, 2, 1572333, 1, 2, 1572334, 1, 2, 1572335, 1, 2, 1572336, 1, 2, 1572337, 1, 2, 1572338, 1, 2, 1572339, 1, 2, 1572340, 1, 2, 1572341, 1, 2, 1572342, 1, 2, 1572343, 1, 2, 1572344, 1, 2, 1572345, 1, 2, 1572346, 1, 2, 1572347, 1, 2, 1572348, 1, 2, 1572349, 1, 2, 1572350, 1, 2, 1572351, 1, 2, 1572352, 1, 2, 1572353, 1, 2, 1572354, 1, 2, 1572355, 1, 2, 1572356, 1, 2, 1572357, 1, 2, 1572358, 1, 2, 1572359, 1, 2, 1572360, 1, 2, 1572361, 1, 2, 1572362, 1, 2, 1572363, 1, 2, 1572364, 1, 2, 1572365, 1, 2, 1572366, 1, 2, 1572367, 1, 2, 1572368, 1, 2, 1572369, 1, 2, 1572370, 1, 2, 1572371, 1, 2, 1572372, 1, 2, 1572373, 1, 2, 1572374, 1, 2, 1572375, 1, 2, 1572376, 1, 2, 1572377, 1, 2, 1572378, 1, 2, 1572379, 1, 2, 1572380, 1, 2, 1572381, 1, 2, 1572382, 1, 2, 1572383, 1, 2, 1572384, 1, 2, 1572385, 1, 2, 1572386, 1, 2, 1572387, 1, 2, 1572388, 1, 2, 1572389, 1, 2, 1572390, 1, 2, 1572391, 1, 2, 1572392, 1, 2, 1572393, 1, 2, 1572394, 1, 2, 1572395, 1, 2, 1572396, 1, 2, 1572397, 1, 2, 1572398, 1, 2, 1572399, 1, 2, 1572400, 1, 2, 1572401, 1, 2, 1572402, 1, 2, 1572403, 1, 2, 1572404, 1, 2, 1572405, 1, 2, 1572406, 1, 2, 1572407, 1, 2, 1572408, 1, 2, 1572409, 1, 2, 1572410, 1, 2, 1572411, 1, 2, 1572412, 1, 2, 1572413, 1, 2, 1572414, 1, 2, 1572415, 1, 2, 1572416, 1, 2, 1572417, 1, 2, 1572418, 1, 2, 1572419, 1, 2, 1572420, 1, 2, 1572421, 1, 2, 1572422, 1, 2, 1572423, 1, 2, 1572424, 1, 2, 1572425, 1, 2, 1572426, 1, 2, 1572427, 1, 2, 1572428, 1, 2, 1572429, 1, 2, 1572430, 1, 2, 1572431, 1, 2, 1572432, 1, 2, 1572433, 1, 2, 1572434, 1, 2, 1572435, 1, 2, 1572436, 1, 2, 1572437, 1, 2, 1572438, 1, 2, 1572439, 1, 2, 1572440, 1, 2, 1572441, 1, 2, 1572442, 1, 2, 1572443, 1, 2, 1572444, 1, 2, 1572445, 1, 2, 1572446, 1, 2, 1572447, 1, 2, 1572448, 1, 2, 1572449, 1, 2, 1572450, 1, 2, 1572451, 1, 2, 1572452, 1, 2, 1572453, 1, 2, 1572454, 1, 2, 1572455, 1, 2, 1572456, 1, 2, 1572457, 1, 2, 1572458, 1, 2, 1572459, 1, 2, 1572460, 1, 2, 1572461, 1, 2, 1572462, 1, 2, 1572463, 1, 2, 1572464, 1, 2, 1572465, 1, 2, 1572466, 1, 2, 1572467, 1, 2, 1572468, 1, 2, 1572469, 1, 2, 1572470, 1, 2, 1572471, 1, 2, 1572472, 1, 2, 1572473, 1, 2, 1572474, 1, 2, 1572475, 1, 2, 1572476, 1, 2, 1572477, 1, 2, 1572478, 1, 2, 1572479, 1, 2, 1572480, 1, 2, 1572481, 1, 2, 1572482, 1, 2, 1572483, 1, 2, 1572484, 1, 2, 1572485, 1, 2, 1572486, 1, 2, 1572487, 1, 2, 1572488, 1, 2, 1572489, 1, 2, 1572490, 1, 2, 1572491, 1, 2, 1572492, 1, 2, 1572493, 1, 2, 1572494, 1, 2, 1572495, 1, 2, 1572496, 1, 2, 1572497, 1, 2, 1572498, 1, 2, 1572499, 1, 2, 1572500, 1, 2, 1572501, 1, 2, 1572502, 1, 2, 1572503, 1, 2, 1572504, 1, 2, 1572505, 1, 2, 1572506, 1, 2, 1572507, 1, 2, 1572508, 1, 2, 1572509, 1, 2, 1572510, 1, 2, 1572511, 1, 2, 1572512, 1, 2, 1572513, 1, 2, 1572514, 1, 2, 1572515, 1, 2, 1572516, 1, 2, 1572517, 1, 2, 1572518, 1, 2, 1572519, 1, 2, 1572520, 1, 2, 1572521, 1, 2, 1572522, 1, 2, 1572523, 1, 2, 1572524, 1, 2, 1572525, 1, 2, 1572526, 1, 2, 1572527, 1, 2, 1572528, 1, 2, 1572529, 1, 2, 1572530, 1, 2, 1572531, 1, 2, 1572532, 1, 2, 1572533, 1, 2, 1572534, 1, 2, 1572535, 1, 2, 1572536, 1, 2, 1572537, 1, 2, 1572538, 1, 2, 1572539, 1, 2, 1572540, 1, 2, 1572541, 1, 2, 1572542, 1, 2, 1572543, 1, 2, 1572544, 1, 2, 1572545, 1, 2, 1572546, 1, 2, 1572547, 1, 2, 1572548, 1, 2, 1572549, 1, 2, 1572550, 1, 2, 1572551, 1, 2, 1572552, 1, 2, 1572553, 1, 2, 1572554, 1, 2, 1572555, 1, 2, 1572556, 1, 2, 1572557, 1, 2, 1572558, 1, 2, 1572559, 1, 2, 1572560, 1, 2, 1572561, 1, 2, 1572562, 1, 2, 1572563, 1, 2, 1572564, 1, 2, 1572565, 1, 2, 1572566, 1, 2, 1572567, 1, 2, 1572568, 1, 2, 1572569, 1, 2, 1572570, 1, 2, 1572571, 1, 2, 1572572, 1, 2, 1572573, 1, 2, 1572574, 1, 2, 1572575, 1, 2, 1572576, 1, 2, 1572577, 1, 2, 1572578, 1, 2, 1572579, 1, 2, 1572580, 1, 2, 1572581, 1, 2, 1572582, 1, 2, 1572583, 1, 2, 1572584, 1, 2, 1572585, 1, 2, 1572586, 1, 2, 1572587, 1, 2, 1572588, 1, 2, 1572589, 1, 2, 1572590, 1, 2, 1572591, 1, 2, 1572592, 1, 2, 1572593, 1, 2, 1572594, 1, 2, 1572595, 1, 2, 1572596, 1, 2, 1572597, 1, 2, 1572598, 1, 2, 1572599, 1, 2, 1572600, 1, 2, 1572601, 1, 2, 1572602, 1, 2, 1572603, 1, 2, 1572604, 1, 2, 1572605, 1, 2, 1572606, 1, 2, 1572607, 1, 2, 1572608, 1, 2, 1572609, 1, 2, 1572610, 1, 2, 1572611, 1, 2, 1572612, 1, 2, 1572613, 1, 2, 1572614, 1, 2, 1572615, 1, 2, 1572616, 1, 2, 1572617, 1, 2, 1572618, 1, 2, 1572619, 1, 2, 1572620, 1, 2, 1572621, 1, 2, 1572622, 1, 2, 1572623, 1, 2, 1572624, 1, 2, 1572625, 1, 2, 1572626, 1, 2, 1572627, 1, 2, 1572628, 1, 2, 1572629, 1, 2, 1572630, 1, 2, 1572631, 1, 2, 1572632, 1, 2, 1572633, 1, 2, 1572634, 1, 2, 1572635, 1, 2, 1572636, 1, 2, 1572637, 1, 2, 1572638, 1, 2, 1572639, 1, 2, 1572640, 1, 2, 1572641, 1, 2, 1572642, 1, 2, 1572643, 1, 2, 1572644, 1, 2, 1572645, 1, 2, 1572646, 1, 2, 1572647, 1, 2, 1572648, 1, 2, 1572649, 1, 2, 1572650, 1, 2, 1572651, 1, 2, 1572652, 1, 2, 1572653, 1, 2, 1572654, 1, 2, 1572655, 1, 2, 1572656, 1, 2, 1572657, 1, 2, 1572658, 1, 2, 1572659, 1, 2, 1572660, 1, 2, 1572661, 1, 2, 1572662, 1, 2, 1572663, 1, 2, 1572664, 1, 2, 1572665, 1, 2, 1572666, 1, 2, 1572667, 1, 2, 1572668, 1, 2, 1572669, 1, 2, 1572670, 1, 2, 1572671, 1, 2, 1572672, 1, 2, 1572673, 1, 2, 1572674, 1, 2, 1572675, 1, 2, 1572676, 1, 2, 1572677, 1, 2, 1572678, 1, 2, 1572679, 1, 2, 1572680, 1, 2, 1572681, 1, 2, 1572682, 1, 2, 1572683, 1, 2, 1572684, 1, 2, 1572685, 1, 2, 1572686, 1, 2, 1572687, 1, 2, 1572688, 1, 2, 1572689, 1, 2, 1572690, 1, 2, 1572691, 1, 2, 1572692, 1, 2, 1572693, 1, 2, 1572694, 1, 2, 1572695, 1, 2, 1572696, 1, 2, 1572697, 1, 2, 1572698, 1, 2, 1572699, 1, 2, 1572700, 1, 2, 1572701, 1, 2, 1572702, 1, 2, 1572703, 1, 2, 1572704, 1, 2, 1572705, 1, 2, 1572706, 1, 2, 1572707, 1, 2, 1572708, 1, 2, 1572709, 1, 2, 1572710, 1, 2, 1572711, 1, 2, 1572712, 1, 2, 1572713, 1, 2, 1572714, 1, 2, 1572715, 1, 2, 1572716, 1, 2, 1572717, 1, 2, 1572718, 1, 2, 1572719, 1, 2, 1572720, 1, 2, 1572721, 1, 2, 1572722, 1, 2, 1572723, 1, 2, 1572724, 1, 2, 1572725, 1, 2, 1572726, 1, 2, 1572727, 1, 2, 1572728, 1, 2, 1572729, 1, 2, 1572730, 1, 2, 1572731, 1, 2, 1572732, 1, 2, 1572733, 1, 2, 1572734, 1, 2, 1572735, 1, 2, 1572736, 1, 2, 1572737, 1, 2, 1572738, 1, 2, 1572739, 1, 2, 1572740, 1, 2, 1572741, 1, 2, 1572742, 1, 2, 1572743, 1, 2, 1572744, 1, 2, 1572745, 1, 2, 1572746, 1, 2, 1572747, 1, 2, 1572748, 1, 2, 1572749, 1, 2, 1572750, 1, 2, 1572751, 1, 2, 1572752, 1, 2, 1572753, 1, 2, 1572754, 1, 2, 1572755, 1, 2, 1572756, 1, 2, 1572757, 1, 2, 1572758, 1, 2, 1572759, 1, 2, 1572760, 1, 2, 1572761, 1, 2, 1572762, 1, 2, 1572763, 1, 2, 1572764, 1, 2, 1572765, 1, 2, 1572766, 1, 2, 1572767, 1, 2, 1572768, 1, 2, 1572769, 1, 2, 1572770, 1, 2, 1572771, 1, 2, 1572772, 1, 2, 1572773, 1, 2, 1572774, 1, 2, 1572775, 1, 2, 1572776, 1, 2, 1572777, 1, 2, 1572778, 1, 2, 1572779, 1, 2, 1572780, 1, 2, 1572781, 1, 2, 1572782, 1, 2, 1572783, 1, 2, 1572784, 1, 2, 1572785, 1, 2, 1572786, 1, 2, 1572787, 1, 2, 1572788, 1, 2, 1572789, 1, 2, 1572790, 1, 2, 1572791, 1, 2, 1572792, 1, 2, 1572793, 1, 2, 1572794, 1, 2, 1572795, 1, 2, 1572796, 1, 2, 1572797, 1, 2, 1572798, 1, 2, 1572799, 1, 2, 1572800, 1, 2, 1572801, 1, 2, 1572802, 1, 2, 1572803, 1, 2, 1572804, 1, 2, 1572805, 1, 2, 1572806, 1, 2, 1572807, 1, 2, 1572808, 1, 2, 1572809, 1, 2, 1572810, 1, 2, 1572811, 1, 2, 1572812, 1, 2, 1572813, 1, 2, 1572814, 1, 2, 1572815, 1, 2, 1572816, 1, 2, 1572817, 1, 2, 1572818, 1, 2, 1572819, 1, 2, 1572820, 1, 2, 1572821, 1, 2, 1572822, 1, 2, 1572823, 1, 2, 1572824, 1, 2, 1572825, 1, 2, 1572826, 1, 2, 1572827, 1, 2, 1572828, 1, 2, 1572829, 1, 2, 1572830, 1, 2, 1572831, 1, 2, 1572832, 1, 2, 1572833, 1, 2, 1572834, 1, 2, 1572835, 1, 2, 1572836, 1, 2, 1572837, 1, 2, 1572838, 1, 2, 1572839, 1, 2, 1572840, 1, 2, 1572841, 1, 2, 1572842, 1, 2, 1572843, 1, 2, 1572844, 1, 2, 1572845, 1, 2, 1572846, 1, 2, 1572847, 1, 2, 1572848, 1, 2, 1572849, 1, 2, 1572850, 1, 2, 1572851, 1, 2, 1572852, 1, 2, 1572853, 1, 2, 1572854, 1, 2, 1572855, 1, 2, 1572856, 1, 2, 1572857, 1, 2, 1572858, 1, 2, 1572859, 1, 2, 1572860, 1, 2, 1572861, 1, 2, 1572862, 1, 2, 1572863, 1, 2, 1507328, 1, 2, 1507329, 1, 2, 1507330, 1, 2, 1507331, 1, 2, 1507332, 1, 2, 1507333, 1, 2, 1507334, 1, 2, 1507335, 1, 2, 1507336, 1, 2, 1507337, 1, 2, 1507338, 1, 2, 1507339, 1, 2, 1507340, 1, 2, 1507341, 1, 2, 1507342, 1, 2, 1507343, 1, 2, 1507344, 1, 2, 1507345, 1, 2, 1507346, 1, 2, 1507347, 1, 2, 1507348, 1, 2, 1507349, 1, 2, 1507350, 1, 2, 1507351, 1, 2, 1507352, 1, 2, 1507353, 1, 2, 1507354, 1, 2, 1507355, 1, 2, 1507356, 1, 2, 1507357, 1, 2, 1507358, 1, 2, 1507359, 1, 2, 1507360, 1, 2, 1507361, 1, 2, 1507362, 1, 2, 1507363, 1, 2, 1507364, 1, 2, 1507365, 1, 2, 1507366, 1, 2, 1507367, 1, 2, 1507368, 1, 2, 1507369, 1, 2, 1507370, 1, 2, 1507371, 1, 2, 1507372, 1, 2, 1507373, 1, 2, 1507374, 1, 2, 1507375, 1, 2, 1507376, 1, 2, 1507377, 1, 2, 1507378, 1, 2, 1507379, 1, 2, 1507380, 1, 2, 1507381, 1, 2, 1507382, 1, 2, 1507383, 1, 2, 1507384, 1, 2, 1507385, 1, 2, 1507386, 1, 2, 1507387, 1, 2, 1507388, 1, 2, 1507389, 1, 2, 1507390, 1, 2, 1507391, 1, 2, 1507392, 1, 2, 1507393, 1, 2, 1507394, 1, 2, 1507395, 1, 2, 1507396, 1, 2, 1507397, 1, 2, 1507398, 1, 2, 1507399, 1, 2, 1507400, 1, 2, 1507401, 1, 2, 1507402, 1, 2, 1507403, 1, 2, 1507404, 1, 2, 1507405, 1, 2, 1507406, 1, 2, 1507407, 1, 2, 1507408, 1, 2, 1507409, 1, 2, 1507410, 1, 2, 1507411, 1, 2, 1507412, 1, 2, 1507413, 1, 2, 1507414, 1, 2, 1507415, 1, 2, 1507416, 1, 2, 1507417, 1, 2, 1507418, 1, 2, 1507419, 1, 2, 1507420, 1, 2, 1507421, 1, 2, 1507422, 1, 2, 1507423, 1, 3, 1637274, 1, 65537, 1637275, 1, 65538, 1637276, 1, 65538, 1637277, 1, 65538, 1637278, 1, 65538, 1637279, 1, 65538, 1637280, 1, 65538, 1637281, 1, 65538, 1637282, 1, 65538, 1637283, 1, 65538, 1637284, 1, 65538, 1637285, 1, 65538, 1637286, 1, 65538, 1637287, 1, 65538, 1637288, 1, 65538, 1637289, 1, 65538, 1637290, 1, 65538, 1637291, 1, 65538, 1637292, 1, 65538, 1637293, 1, 65538, 1637294, 1, 65538, 1637295, 1, 65538, 1637296, 1, 65538, 1637297, 1, 65538, 1637298, 1, 65538, 1637299, 1, 65538, 1637300, 1, 65538, 1637301, 1, 65538, 1637302, 1, 65538, 1637303, 1, 65538, 1637304, 1, 65538, 1637305, 1, 65538, 1637306, 1, 65538, 1637307, 1, 65538, 1637308, 1, 65538, 1637309, 1, 65538, 1637310, 1, 65538, 1637311, 1, 65538, 1637312, 1, 65538, 1637313, 1, 65538, 1637314, 1, 65538, 1637315, 1, 65538, 1637316, 1, 65538, 1637317, 1, 65538, 1637318, 1, 65538, 1637319, 1, 65538, 1637320, 1, 65538, 1637321, 1, 65538, 1637322, 1, 65538, 1637323, 1, 65538, 1637324, 1, 65538, 1637325, 1, 65538, 1637326, 1, 65538, 1637327, 1, 65538, 1637328, 1, 65538, 1637329, 1, 65538, 1637330, 1, 65538, 1637331, 1, 65538, 1637332, 1, 65538, 1637333, 1, 65538, 1637334, 1, 65538, 1637335, 1, 65538, 1637336, 1, 65538, 1637337, 1, 65538, 1637338, 1, 65538, 1637339, 1, 65538, 1637340, 1, 65538, 1637341, 1, 65538, 1637342, 1, 65538, 1637343, 1, 65538, 1637344, 1, 65538, 1637345, 1, 65538, 1637346, 1, 65538, 1637347, 1, 65538, 1637348, 1, 65538, 1637349, 1, 65538, 1637350, 1, 65538, 1637351, 1, 65538, 1637352, 1, 65538, 1637353, 1, 65538, 1637354, 1, 65538, 1637355, 1, 65538, 1637356, 1, 65538, 1637357, 1, 65538, 1637358, 1, 65538, 1637359, 1, 65538, 1637360, 1, 65538, 1637361, 1, 65538, 1637362, 1, 65538, 1637363, 1, 65538, 1637364, 1, 65538, 1637365, 1, 65538, 1637366, 1, 65538, 1637367, 1, 65538, 1637368, 1, 65538, 1637369, 1, 65538, 1637370, 1, 65538, 1637371, 1, 65538, 1637372, 1, 65538, 1637373, 1, 65538, 1637374, 1, 65538, 1637375, 1, 65538, 1637376, 1, 65538, 1637377, 1, 65538, 1637378, 1, 65538, 1637379, 1, 65538, 1637380, 1, 65538, 1637381, 1, 65538, 1637382, 1, 65538, 1637383, 1, 65538, 1637384, 1, 65538, 1637385, 1, 65538, 1637386, 1, 65538, 1637387, 1, 65538, 1637388, 1, 65538, 1637389, 1, 65538, 1637390, 1, 65538, 1637391, 1, 65538, 1637392, 1, 65538, 1637393, 1, 65538, 1637394, 1, 65538, 1637395, 1, 65538, 1637396, 1, 65538, 1637397, 1, 65538, 1637398, 1, 65538, 1637399, 1, 65538, 1637400, 1, 65538, 1637401, 1, 65538, 1637402, 1, 65538, 1637403, 1, 65538, 1637404, 1, 65538, 1637405, 1, 65538, 1637406, 1, 65538, 1637407, 1, 65538, 1637408, 1, 65538, 1637409, 1, 65538, 1637410, 1, 65538, 1637411, 1, 65538, 1637412, 1, 65538, 1637413, 1, 65538, 1637414, 1, 65538, 1637415, 1, 65538, 1637416, 1, 65538, 1637417, 1, 65538, 1637418, 1, 65538, 1637419, 1, 65538, 1637420, 1, 65538, 1637421, 1, 65538, 1637422, 1, 65538, 1637423, 1, 65538, 1637424, 1, 65538, 1637425, 1, 65538, 1637426, 1, 65538, 1637427, 1, 65538, 1637428, 1, 65538, 1637429, 1, 65538, 1637430, 1, 65538, 1637431, 1, 65538, 1637432, 1, 65538, 1637433, 1, 65538, 1637434, 1, 65538, 1637435, 1, 65538, 1637436, 1, 65538, 1637437, 1, 65538, 1637438, 1, 65538, 1637439, 1, 65538, 1637440, 1, 65538, 1637441, 1, 65538, 1637442, 1, 65538, 1637443, 1, 65538, 1637444, 1, 65538, 1637445, 1, 65538, 1637446, 1, 65538, 1637447, 1, 65538, 1637448, 1, 65538, 1637449, 1, 65538, 1637450, 1, 65538, 1637451, 1, 65538, 1637452, 1, 65538, 1637453, 1, 65538, 1637454, 1, 65538, 1637455, 1, 65538, 1637456, 1, 65538, 1637457, 1, 65538, 1637458, 1, 65538, 1637459, 1, 65538, 1637460, 1, 65538, 1637461, 1, 65538, 1637462, 1, 65538, 1637463, 1, 65538, 1637464, 1, 65538, 1637465, 1, 65538, 1637466, 1, 65538, 1637467, 1, 65538, 1637468, 1, 65538, 1637469, 1, 65538, 1637470, 1, 65538, 1637471, 1, 65538, 1637472, 1, 65538, 1637473, 1, 65538, 1637474, 1, 65538, 1637475, 1, 65538, 1637476, 1, 65538, 1637477, 1, 65538, 1637478, 1, 65538, 1637479, 1, 65538, 1637480, 1, 65538, 1637481, 1, 65538, 1637482, 1, 65538, 1637483, 1, 65538, 1637484, 1, 65538, 1637485, 1, 65538, 1637486, 1, 65538, 1637487, 1, 65538, 1637488, 1, 65538, 1637489, 1, 65538, 1637490, 1, 65538, 1637491, 1, 65538, 1637492, 1, 65538, 1637493, 1, 65538, 1637494, 1, 65538, 1637495, 1, 65538, 1637496, 1, 65538, 1637497, 1, 65538, 1637498, 1, 65538, 1637499, 1, 65538, 1637500, 1, 65538, 1637501, 1, 65538, 1637502, 1, 65538, 1637503, 1, 65538, 1637504, 1, 65538, 1637505, 1, 65538, 1637506, 1, 65538, 1637507, 1, 65538, 1637508, 1, 65538, 1637509, 1, 65538, 1637510, 1, 65538, 1637511, 1, 65538, 1637512, 1, 65538, 1637513, 1, 65538, 1637514, 1, 65538, 1637515, 1, 65538, 1637516, 1, 65538, 1637517, 1, 65538, 1637518, 1, 65538, 1637519, 1, 65538, 1637520, 1, 65538, 1637521, 1, 65538, 1637522, 1, 65538, 1637523, 1, 65538, 1637524, 1, 65538, 1637525, 1, 65538, 1637526, 1, 65538, 1637527, 1, 65538, 1637528, 1, 65538, 1637529, 1, 65538, 1637530, 1, 65538, 1637531, 1, 65538, 1637532, 1, 65538, 1637533, 1, 65538, 1637534, 1, 65538, 1637535, 1, 65538, 1637536, 1, 65538, 1637537, 1, 65538, 1637538, 1, 65538, 1637539, 1, 65538, 1637540, 1, 65538, 1637541, 1, 65538, 1637542, 1, 65538, 1637543, 1, 65538, 1637544, 1, 65538, 1637545, 1, 65538, 1637546, 1, 65538, 1637547, 1, 65538, 1637548, 1, 65538, 1637549, 1, 65538, 1637550, 1, 65538, 1637551, 1, 65538, 1637552, 1, 65538, 1637553, 1, 65538, 1637554, 1, 65538, 1637555, 1, 65538, 1637556, 1, 65538, 1637557, 1, 65538, 1637558, 1, 65538, 1637559, 1, 65538, 1637560, 1, 65538, 1637561, 1, 65538, 1637562, 1, 65538, 1637563, 1, 65538, 1637564, 1, 65538, 1637565, 1, 65538, 1637566, 1, 65538, 1637567, 1, 65538, 1637568, 1, 65538, 1637569, 1, 65538, 1637570, 1, 65538, 1637571, 1, 65538, 1637572, 1, 65538, 1637573, 1, 65538, 1637574, 1, 65538, 1637575, 1, 65538, 1637576, 1, 65538, 1637577, 1, 65538, 1637578, 1, 65538, 1637579, 1, 65538, 1637580, 1, 65538, 1637581, 1, 65538, 1637582, 1, 65538, 1637583, 1, 65538, 1637584, 1, 65538, 1637585, 1, 65538, 1637586, 1, 65538, 1637587, 1, 65538, 1637588, 1, 65538, 1637589, 1, 65538, 1637590, 1, 65538, 1637591, 1, 65538, 1637592, 1, 65538, 1637593, 1, 65538, 1637594, 1, 65538, 1637595, 1, 65538, 1637596, 1, 65538, 1637597, 1, 65538, 1637598, 1, 65538, 1637599, 1, 65538, 1637600, 1, 65538, 1637601, 1, 65538, 1637602, 1, 65538, 1637603, 1, 65538, 1637604, 1, 65538, 1637605, 1, 65538, 1637606, 1, 65538, 1637607, 1, 65538, 1637608, 1, 65538, 1637609, 1, 65538, 1637610, 1, 65538, 1637611, 1, 65538, 1637612, 1, 65538, 1637613, 1, 65538, 1637614, 1, 65538, 1637615, 1, 65538, 1637616, 1, 65538, 1637617, 1, 65538, 1637618, 1, 65538, 1637619, 1, 65538, 1637620, 1, 65538, 1637621, 1, 65538, 1637622, 1, 65538, 1637623, 1, 65538, 1637624, 1, 65538, 1637625, 1, 65538, 1637626, 1, 65538, 1637627, 1, 65538, 1637628, 1, 65538, 1637629, 1, 65538, 1637630, 1, 65538, 1637631, 1, 65538, 1637632, 1, 65538, 1637633, 1, 65538, 1637634, 1, 65538, 1637635, 1, 65538, 1637636, 1, 65538, 1637637, 1, 65538, 1637638, 1, 65538, 1637639, 1, 65538, 1637640, 1, 65538, 1637641, 1, 65538, 1637642, 1, 65538, 1637643, 1, 65538, 1637644, 1, 65538, 1637645, 1, 65538, 1637646, 1, 65538, 1637647, 1, 65538, 1637648, 1, 65538, 1637649, 1, 65538, 1637650, 1, 65538, 1637651, 1, 65538, 1637652, 1, 65538, 1637653, 1, 65538, 1637654, 1, 65538, 1637655, 1, 65538, 1637656, 1, 65538, 1637657, 1, 65538, 1637658, 1, 65538, 1637659, 1, 65538, 1637660, 1, 65538, 1637661, 1, 65538, 1637662, 1, 65538, 1637663, 1, 65538, 1637664, 1, 65538, 1637665, 1, 65538, 1637666, 1, 65538, 1637667, 1, 65538, 1637668, 1, 65538, 1637669, 1, 65538, 1637670, 1, 65538, 1637671, 1, 65538, 1637672, 1, 65538, 1637673, 1, 65538, 1637674, 1, 65538, 1637675, 1, 65538, 1637676, 1, 65538, 1637677, 1, 65538, 1637678, 1, 65538, 1637679, 1, 65538, 1637680, 1, 65538, 1637681, 1, 65538, 1637682, 1, 65538, 1637683, 1, 65538, 1637684, 1, 65538, 1637685, 1, 65538, 1637686, 1, 65538, 1637687, 1, 65538, 1637688, 1, 65538, 1637689, 1, 65538, 1637690, 1, 65538, 1637691, 1, 65538, 1637692, 1, 65538, 1637693, 1, 65538, 1637694, 1, 65538, 1637695, 1, 65538, 1637696, 1, 65538, 1637697, 1, 65538, 1637698, 1, 65538, 1637699, 1, 65538, 1637700, 1, 65538, 1637701, 1, 65538, 1637702, 1, 65538, 1637703, 1, 65538, 1637704, 1, 65538, 1637705, 1, 65538, 1637706, 1, 65538, 1637707, 1, 65538, 1637708, 1, 65538, 1637709, 1, 65538, 1637710, 1, 65538, 1637711, 1, 65538, 1637712, 1, 65538, 1637713, 1, 65538, 1637714, 1, 65538, 1637715, 1, 65538, 1637716, 1, 65538, 1637717, 1, 65538, 1637718, 1, 65538, 1637719, 1, 65538, 1637720, 1, 65538, 1637721, 1, 65538, 1637722, 1, 65538, 1637723, 1, 65538, 1637724, 1, 65538, 1637725, 1, 65538, 1637726, 1, 65538, 1637727, 1, 65538, 1637728, 1, 65538, 1637729, 1, 65538, 1637730, 1, 65538, 1637731, 1, 65538, 1637732, 1, 65538, 1637733, 1, 65538, 1637734, 1, 65538, 1637735, 1, 65538, 1637736, 1, 65538, 1637737, 1, 65538, 1637738, 1, 65538, 1637739, 1, 65538, 1637740, 1, 65538, 1637741, 1, 65538, 1637742, 1, 65538, 1637743, 1, 65538, 1637744, 1, 65538, 1637745, 1, 65538, 1637746, 1, 65538, 1637747, 1, 65538, 1637748, 1, 65538, 1637749, 1, 65538, 1637750, 1, 65538, 1637751, 1, 65538, 1637752, 1, 65538, 1637753, 1, 65538, 1637754, 1, 65538, 1637755, 1, 65538, 1637756, 1, 65538, 1637757, 1, 65538, 1637758, 1, 65538, 1637759, 1, 65538, 1637760, 1, 65538, 1637761, 1, 65538, 1637762, 1, 65538, 1637763, 1, 65538, 1637764, 1, 65538, 1637765, 1, 65538, 1637766, 1, 65538, 1637767, 1, 65538, 1637768, 1, 65538, 1637769, 1, 65538, 1637770, 1, 65538, 1637771, 1, 65538, 1637772, 1, 65538, 1637773, 1, 65538, 1637774, 1, 65538, 1637775, 1, 65538, 1637776, 1, 65538, 1637777, 1, 65538, 1637778, 1, 65538, 1637779, 1, 65538, 1637780, 1, 65538, 1637781, 1, 65538, 1637782, 1, 65538, 1637783, 1, 65538, 1637784, 1, 65538, 1637785, 1, 65538, 1637786, 1, 65538, 1637787, 1, 65538, 1637788, 1, 65538, 1637789, 1, 65538, 1637790, 1, 65538, 1637791, 1, 65538, 1637792, 1, 65538, 1637793, 1, 65538, 1637794, 1, 65538, 1637795, 1, 65538, 1637796, 1, 65538, 1637797, 1, 65538, 1637798, 1, 65538, 1637799, 1, 65538, 1637800, 1, 65538, 1637801, 1, 65538, 1637802, 1, 65538, 1637803, 1, 65538, 1637804, 1, 65538, 1637805, 1, 65538, 1637806, 1, 65538, 1637807, 1, 65538, 1637808, 1, 65538, 1637809, 1, 65538, 1637810, 1, 65538, 1637811, 1, 65538, 1637812, 1, 65538, 1637813, 1, 65538, 1637814, 1, 65538, 1637815, 1, 65538, 1637816, 1, 65538, 1637817, 1, 65538, 1637818, 1, 65538, 1637819, 1, 65538, 1637820, 1, 65538, 1637821, 1, 65538, 1637822, 1, 65538, 1637823, 1, 65538, 1637824, 1, 65538, 1637825, 1, 65538, 1637826, 1, 65538, 1637827, 1, 65538, 1637828, 1, 65538, 1637829, 1, 65538, 1637830, 1, 65538, 1637831, 1, 65538, 1637832, 1, 65538, 1637833, 1, 65538, 1637834, 1, 65538, 1637835, 1, 65538, 1637836, 1, 65538, 1637837, 1, 65538, 1637838, 1, 65538, 1637839, 1, 65538, 1637840, 1, 65538, 1637841, 1, 65538, 1637842, 1, 65538, 1637843, 1, 65538, 1637844, 1, 65538, 1637845, 1, 65538, 1637846, 1, 65538, 1637847, 1, 65538, 1637848, 1, 65538, 1637849, 1, 65538, 1637850, 1, 65538, 1637851, 1, 65538, 1637852, 1, 65538, 1637853, 1, 65538, 1637854, 1, 65538, 1637855, 1, 65538, 1637856, 1, 65538, 1637857, 1, 65538, 1637858, 1, 65538, 1637859, 1, 65538, 1637860, 1, 65538, 1637861, 1, 65538, 1637862, 1, 65538, 1637863, 1, 65538, 1637864, 1, 65538, 1637865, 1, 65538, 1637866, 1, 65538, 1637867, 1, 65538, 1637868, 1, 65538, 1637869, 1, 65538, 1637870, 1, 65538, 1637871, 1, 65538, 1637872, 1, 65538, 1637873, 1, 65538, 1637874, 1, 65538, 1637875, 1, 65538, 1637876, 1, 65538, 1637877, 1, 65538, 1637878, 1, 65538, 1637879, 1, 65538, 1637880, 1, 65538, 1637881, 1, 65538, 1637882, 1, 65538, 1637883, 1, 65538, 1637884, 1, 65538, 1637885, 1, 65538, 1637886, 1, 65538, 1637887, 1, 65538, 1637888, 1, 65538, 1637889, 1, 65538, 1637890, 1, 65538, 1637891, 1, 65538, 1637892, 1, 65538, 1637893, 1, 65538, 1637894, 1, 65538, 1637895, 1, 65538, 1637896, 1, 65538, 1637897, 1, 65538, 1637898, 1, 65538, 1637899, 1, 65538, 1637900, 1, 65538, 1637901, 1, 65538, 1637902, 1, 65538, 1637903, 1, 65538, 1637904, 1, 65538, 1637905, 1, 65538, 1637906, 1, 65538, 1637907, 1, 65538, 1637908, 1, 65538, 1637909, 1, 65538, 1637910, 1, 65538, 1637911, 1, 65538, 1637912, 1, 65538, 1637913, 1, 65538, 1637914, 1, 65538, 1637915, 1, 65538, 1637916, 1, 65538, 1637917, 1, 65538, 1637918, 1, 65538, 1637919, 1, 65538, 1637920, 1, 65538, 1637921, 1, 65538, 1637922, 1, 65538, 1637923, 1, 65538, 1637924, 1, 65538, 1637925, 1, 65538, 1637926, 1, 65538, 1637927, 1, 65538, 1637928, 1, 65538, 1637929, 1, 65538, 1637930, 1, 65538, 1637931, 1, 65538, 1637932, 1, 65538, 1637933, 1, 65538, 1637934, 1, 65538, 1637935, 1, 65538, 1637936, 1, 65538, 1637937, 1, 65538, 1637938, 1, 65538, 1637939, 1, 65538, 1637940, 1, 65538, 1637941, 1, 65538, 1637942, 1, 65538, 1637943, 1, 65538, 1637944, 1, 65538, 1637945, 1, 65538, 1637946, 1, 65538, 1637947, 1, 65538, 1637948, 1, 65538, 1637949, 1, 65538, 1637950, 1, 65538, 1637951, 1, 65538, 1637952, 1, 65538, 1637953, 1, 65538, 1637954, 1, 65538, 1637955, 1, 65538, 1637956, 1, 65538, 1637957, 1, 65538, 1637958, 1, 65538, 1637959, 1, 65538, 1637960, 1, 65538, 1637961, 1, 65538, 1637962, 1, 65538, 1637963, 1, 65538, 1637964, 1, 65538, 1637965, 1, 65538, 1637966, 1, 65538, 1637967, 1, 65538, 1637968, 1, 65538, 1637969, 1, 65538, 1637970, 1, 65538, 1637971, 1, 65538, 1637972, 1, 65538, 1637973, 1, 65538, 1637974, 1, 65538, 1637975, 1, 65538, 1637976, 1, 65538, 1637977, 1, 65538, 1637978, 1, 65538, 1637979, 1, 65538, 1637980, 1, 65538, 1637981, 1, 65538, 1637982, 1, 65538, 1637983, 1, 65538, 1637984, 1, 65538, 1637985, 1, 65538, 1637986, 1, 65538, 1637987, 1, 65538, 1637988, 1, 65538, 1637989, 1, 65538, 1637990, 1, 65538, 1637991, 1, 65538, 1637992, 1, 65538, 1637993, 1, 65538, 1637994, 1, 65538, 1637995, 1, 65538, 1637996, 1, 65538, 1637997, 1, 65538, 1637998, 1, 65538, 1637999, 1, 65538, 1638000, 1, 65538, 1638001, 1, 65538, 1638002, 1, 65538, 1638003, 1, 65538, 1638004, 1, 65538, 1638005, 1, 65538, 1638006, 1, 65538, 1638007, 1, 65538, 1638008, 1, 65538, 1638009, 1, 65538, 1638010, 1, 65538, 1638011, 1, 65538, 1638012, 1, 65538, 1638013, 1, 65538, 1638014, 1, 65538, 1638015, 1, 65538, 1638016, 1, 65538, 1638017, 1, 65538, 1638018, 1, 65538, 1638019, 1, 65538, 1638020, 1, 65538, 1638021, 1, 65538, 1638022, 1, 65538, 1638023, 1, 65538, 1638024, 1, 65538, 1638025, 1, 65538, 1638026, 1, 65538, 1638027, 1, 65538, 1638028, 1, 65538, 1638029, 1, 65538, 1638030, 1, 65538, 1638031, 1, 65538, 1638032, 1, 65538, 1638033, 1, 65538, 1638034, 1, 65538, 1638035, 1, 65538, 1638036, 1, 65538, 1638037, 1, 65538, 1638038, 1, 65538, 1638039, 1, 65538, 1638040, 1, 65538, 1638041, 1, 65538, 1638042, 1, 65538, 1638043, 1, 65538, 1638044, 1, 65538, 1638045, 1, 65538, 1638046, 1, 65538, 1638047, 1, 65538, 1638048, 1, 65538, 1638049, 1, 65538, 1638050, 1, 65538, 1638051, 1, 65538, 1638052, 1, 65538, 1638053, 1, 65538, 1638054, 1, 65538, 1638055, 1, 65538, 1638056, 1, 65538, 1638057, 1, 65538, 1638058, 1, 65538, 1638059, 1, 65538, 1638060, 1, 65538, 1638061, 1, 65538, 1638062, 1, 65538, 1638063, 1, 65538, 1638064, 1, 65538, 1638065, 1, 65538, 1638066, 1, 65538, 1638067, 1, 65538, 1638068, 1, 65538, 1638069, 1, 65538, 1638070, 1, 65538, 1638071, 1, 65538, 1638072, 1, 65538, 1638073, 1, 65538, 1638074, 1, 65538, 1638075, 1, 65538, 1638076, 1, 65538, 1638077, 1, 65538, 1638078, 1, 65538, 1638079, 1, 65538, 1638080, 1, 65538, 1638081, 1, 65538, 1638082, 1, 65538, 1638083, 1, 65538, 1638084, 1, 65538, 1638085, 1, 65538, 1638086, 1, 65538, 1638087, 1, 65538, 1638088, 1, 65538, 1638089, 1, 65538, 1638090, 1, 65538, 1638091, 1, 65538, 1638092, 1, 65538, 1638093, 1, 65538, 1638094, 1, 65538, 1638095, 1, 65538, 1638096, 1, 65538, 1638097, 1, 65538, 1638098, 1, 65538, 1638099, 1, 65538, 1638100, 1, 65538, 1638101, 1, 65538, 1638102, 1, 65538, 1638103, 1, 65538, 1638104, 1, 65538, 1638105, 1, 65538, 1638106, 1, 65538, 1638107, 1, 65538, 1638108, 1, 65538, 1638109, 1, 65538, 1638110, 1, 65538, 1638111, 1, 65538, 1638112, 1, 65538, 1638113, 1, 65538, 1638114, 1, 65538, 1638115, 1, 65538, 1638116, 1, 65538, 1638117, 1, 65538, 1638118, 1, 65538, 1638119, 1, 65538, 1638120, 1, 65538, 1638121, 1, 65538, 1638122, 1, 65538, 1638123, 1, 65538, 1638124, 1, 65538, 1638125, 1, 65538, 1638126, 1, 65538, 1638127, 1, 65538, 1638128, 1, 65538, 1638129, 1, 65538, 1638130, 1, 65538, 1638131, 1, 65538, 1638132, 1, 65538, 1638133, 1, 65538, 1638134, 1, 65538, 1638135, 1, 65538, 1638136, 1, 65538, 1638137, 1, 65538, 1638138, 1, 65538, 1638139, 1, 65538, 1638140, 1, 65538, 1638141, 1, 65538, 1638142, 1, 65538, 1638143, 1, 65538, 1638144, 1, 65538, 1638145, 1, 65538, 1638146, 1, 65538, 1638147, 1, 65538, 1638148, 1, 65538, 1638149, 1, 65538, 1638150, 1, 65538, 1638151, 1, 65538, 1638152, 1, 65538, 1638153, 1, 65538, 1638154, 1, 65538, 1638155, 1, 65538, 1638156, 1, 65538, 1638157, 1, 65538, 1638158, 1, 65538, 1638159, 1, 65538, 1638160, 1, 65538, 1638161, 1, 65538, 1638162, 1, 65538, 1638163, 1, 65538, 1638164, 1, 65538, 1638165, 1, 65538, 1638166, 1, 65538, 1638167, 1, 65538, 1638168, 1, 65538, 1638169, 1, 65538, 1638170, 1, 65538, 1638171, 1, 65538, 1638172, 1, 65538, 1638173, 1, 65538, 1638174, 1, 65538, 1638175, 1, 65538, 1638176, 1, 65538, 1638177, 1, 65538, 1638178, 1, 65538, 1638179, 1, 65538, 1638180, 1, 65538, 1638181, 1, 65538, 1638182, 1, 65538, 1638183, 1, 65538, 1638184, 1, 65538, 1638185, 1, 65538, 1638186, 1, 65538, 1638187, 1, 65538, 1638188, 1, 65538, 1638189, 1, 65538, 1638190, 1, 65538, 1638191, 1, 65538, 1638192, 1, 65538, 1638193, 1, 65538, 1638194, 1, 65538, 1638195, 1, 65538, 1638196, 1, 65538, 1638197, 1, 65538, 1638198, 1, 65538, 1638199, 1, 65538, 1638200, 1, 65538, 1638201, 1, 65538, 1638202, 1, 65538, 1638203, 1, 65538, 1638204, 1, 65538, 1638205, 1, 65538, 1638206, 1, 65538, 1638207, 1, 65538, 1638208, 1, 65538, 1638209, 1, 65538, 1638210, 1, 65538, 1638211, 1, 65538, 1638212, 1, 65538, 1638213, 1, 65538, 1638214, 1, 65538, 1638215, 1, 65538, 1638216, 1, 65538, 1638217, 1, 65538, 1638218, 1, 65538, 1638219, 1, 65538, 1638220, 1, 65538, 1638221, 1, 65538, 1638222, 1, 65538, 1638223, 1, 65538, 1638224, 1, 65538, 1638225, 1, 65538, 1638226, 1, 65538, 1638227, 1, 65538, 1638228, 1, 65538, 1638229, 1, 65538, 1638230, 1, 65538, 1638231, 1, 65538, 1638232, 1, 65538, 1638233, 1, 65538, 1638234, 1, 65538, 1638235, 1, 65538, 1638236, 1, 65538, 1638237, 1, 65538, 1638238, 1, 65538, 1638239, 1, 65538, 1638240, 1, 65538, 1638241, 1, 65538, 1638242, 1, 65538, 1638243, 1, 65538, 1638244, 1, 65538, 1638245, 1, 65538, 1638246, 1, 65538, 1638247, 1, 65538, 1638248, 1, 65538, 1638249, 1, 65538, 1638250, 1, 65538, 1638251, 1, 65538, 1638252, 1, 65538, 1638253, 1, 65538, 1638254, 1, 65538, 1638255, 1, 65538, 1638256, 1, 65538, 1638257, 1, 65538, 1638258, 1, 65538, 1638259, 1, 65538, 1638260, 1, 65538, 1638261, 1, 65538, 1638262, 1, 65538, 1638263, 1, 65538, 1638264, 1, 65538, 1638265, 1, 65538, 1638266, 1, 65538, 1638267, 1, 65538, 1638268, 1, 65538, 1638269, 1, 65538, 1638270, 1, 65538, 1638271, 1, 65538, 1638272, 1, 65538, 1638273, 1, 65538, 1638274, 1, 65538, 1638275, 1, 65538, 1638276, 1, 65538, 1638277, 1, 65538, 1638278, 1, 65538, 1638279, 1, 65538, 1638280, 1, 65538, 1638281, 1, 65538, 1638282, 1, 65538, 1638283, 1, 65538, 1638284, 1, 65538, 1638285, 1, 65538, 1638286, 1, 65538, 1638287, 1, 65538, 1638288, 1, 65538, 1638289, 1, 65538, 1638290, 1, 65538, 1638291, 1, 65538, 1638292, 1, 65538, 1638293, 1, 65538, 1638294, 1, 65538, 1638295, 1, 65538, 1638296, 1, 65538, 1638297, 1, 65538, 1638298, 1, 65538, 1638299, 1, 65538, 1638300, 1, 65538, 1638301, 1, 65538, 1638302, 1, 65538, 1638303, 1, 65538, 1638304, 1, 65538, 1638305, 1, 65538, 1638306, 1, 65538, 1638307, 1, 65538, 1638308, 1, 65538, 1638309, 1, 65538, 1638310, 1, 65538, 1638311, 1, 65538, 1638312, 1, 65538, 1638313, 1, 65538, 1638314, 1, 65538, 1638315, 1, 65538, 1638316, 1, 65538, 1638317, 1, 65538, 1638318, 1, 65538, 1638319, 1, 65538, 1638320, 1, 65538, 1638321, 1, 65538, 1638322, 1, 65538, 1638323, 1, 65538, 1638324, 1, 65538, 1638325, 1, 65538, 1638326, 1, 65538, 1638327, 1, 65538, 1638328, 1, 65538, 1638329, 1, 65538, 1638330, 1, 65538, 1638331, 1, 65538, 1638332, 1, 65538, 1638333, 1, 65538, 1638334, 1, 65538, 1638335, 1, 65538, 1638336, 1, 65538, 1638337, 1, 65538, 1638338, 1, 65538, 1638339, 1, 65538, 1638340, 1, 65538, 1638341, 1, 65538, 1638342, 1, 65538, 1638343, 1, 65538, 1638344, 1, 65538, 1638345, 1, 65538, 1638346, 1, 65538, 1638347, 1, 65538, 1638348, 1, 65538, 1638349, 1, 65538, 1638350, 1, 65538, 1638351, 1, 65538, 1638352, 1, 65538, 1638353, 1, 65538, 1638354, 1, 65538, 1638355, 1, 65538, 1638356, 1, 65538, 1638357, 1, 65538, 1638358, 1, 65538, 1638359, 1, 65538, 1638360, 1, 65538, 1638361, 1, 65538, 1638362, 1, 65538, 1638363, 1, 65538, 1638364, 1, 65538, 1638365, 1, 65538, 1638366, 1, 65538, 1638367, 1, 65538, 1638368, 1, 65538, 1638369, 1, 65538, 1638370, 1, 65538, 1638371, 1, 65538, 1638372, 1, 65538, 1638373, 1, 65538, 1638374, 1, 65538, 1638375, 1, 65538, 1638376, 1, 65538, 1638377, 1, 65538, 1638378, 1, 65538, 1638379, 1, 65538, 1638380, 1, 65538, 1638381, 1, 65538, 1638382, 1, 65538, 1638383, 1, 65538, 1638384, 1, 65538, 1638385, 1, 65538, 1638386, 1, 65538, 1638387, 1, 65538, 1638388, 1, 65538, 1638389, 1, 65538, 1638390, 1, 65538, 1638391, 1, 65538, 1638392, 1, 65538, 1638393, 1, 65538, 1638394, 1, 65538, 1638395, 1, 65538, 1638396, 1, 65538, 1638397, 1, 65538, 1638398, 1, 65538, 1638399, 1, 65538, 1572864, 1, 65538, 1572865, 1, 65538, 1572866, 1, 65538, 1572867, 1, 65538, 1572868, 1, 65538, 1572869, 1, 65538, 1572870, 1, 65538, 1572871, 1, 65538, 1572872, 1, 65538, 1572873, 1, 65538, 1572874, 1, 65538, 1572875, 1, 65538, 1572876, 1, 65538, 1572877, 1, 65538, 1572878, 1, 65538, 1572879, 1, 65538, 1572880, 1, 65538, 1572881, 1, 65538, 1572882, 1, 65538, 1572883, 1, 65538, 1572884, 1, 65538, 1572885, 1, 65538, 1572886, 1, 65538, 1572887, 1, 65538, 1572888, 1, 65538, 1572889, 1, 65538, 1572890, 1, 65538, 1572891, 1, 65538, 1572892, 1, 65538, 1572893, 1, 65538, 1572894, 1, 65538, 1572895, 1, 65538, 1572896, 1, 65538, 1572897, 1, 65538, 1572898, 1, 65538, 1572899, 1, 65538, 1572900, 1, 65538, 1572901, 1, 65538, 1572902, 1, 65538, 1572903, 1, 65538, 1572904, 1, 65538, 1572905, 1, 65538, 1572906, 1, 65538, 1572907, 1, 65538, 1572908, 1, 65538, 1572909, 1, 65538, 1572910, 1, 65538, 1572911, 1, 65538, 1572912, 1, 65538, 1572913, 1, 65538, 1572914, 1, 65538, 1572915, 1, 65538, 1572916, 1, 65538, 1572917, 1, 65538, 1572918, 1, 65538, 1572919, 1, 65538, 1572920, 1, 65538, 1572921, 1, 65538, 1572922, 1, 65538, 1572923, 1, 65538, 1572924, 1, 65538, 1572925, 1, 65538, 1572926, 1, 65538, 1572927, 1, 65538, 1572928, 1, 65538, 1572929, 1, 65538, 1572930, 1, 65538, 1572931, 1, 65538, 1572932, 1, 65538, 1572933, 1, 65538, 1572934, 1, 65538, 1572935, 1, 65538, 1572936, 1, 65538, 1572937, 1, 65538, 1572938, 1, 65538, 1572939, 1, 65538, 1572940, 1, 65538, 1572941, 1, 65538, 1572942, 1, 65538, 1572943, 1, 65538, 1572944, 1, 65538, 1572945, 1, 65538, 1572946, 1, 65538, 1572947, 1, 65538, 1572948, 1, 65538, 1572949, 1, 65538, 1572950, 1, 65538, 1572951, 1, 65538, 1572952, 1, 65538, 1572953, 1, 65538, 1572954, 1, 65538, 1572955, 1, 65538, 1572956, 1, 65538, 1572957, 1, 65538, 1572958, 1, 65538, 1572959, 1, 65539, 1702810, 1, 131073, 1702811, 1, 131074, 1702812, 1, 131074, 1702813, 1, 131074, 1702814, 1, 131074, 1702815, 1, 131074, 1702816, 1, 131074, 1702817, 1, 131074, 1702818, 1, 131074, 1702819, 1, 131074, 1702820, 1, 131074, 1702821, 1, 131074, 1702822, 1, 131074, 1702823, 1, 131074, 1702824, 1, 131074, 1702825, 1, 131074, 1702826, 1, 131074, 1702827, 1, 131074, 1702828, 1, 131074, 1702829, 1, 131074, 1702830, 1, 131074, 1702831, 1, 131074, 1702832, 1, 131074, 1702833, 1, 131074, 1702834, 1, 131074, 1702835, 1, 131074, 1702836, 1, 131074, 1702837, 1, 131074, 1702838, 1, 131074, 1702839, 1, 131074, 1702840, 1, 131074, 1702841, 1, 131074, 1702842, 1, 131074, 1702843, 1, 131074, 1702844, 1, 131074, 1702845, 1, 131074, 1702846, 1, 131074, 1702847, 1, 131074, 1702848, 1, 131074, 1702849, 1, 131074, 1702850, 1, 131074, 1702851, 1, 131074, 1702852, 1, 131074, 1702853, 1, 131074, 1702854, 1, 131074, 1702855, 1, 131074, 1702856, 1, 131074, 1702857, 1, 131074, 1702858, 1, 131074, 1702859, 1, 131074, 1702860, 1, 131074, 1702861, 1, 131074, 1702862, 1, 131074, 1702863, 1, 131074, 1702864, 1, 131074, 1702865, 1, 131074, 1702866, 1, 131074, 1702867, 1, 131074, 1702868, 1, 131074, 1702869, 1, 131074, 1702870, 1, 131074, 1702871, 1, 131074, 1702872, 1, 131074, 1702873, 1, 131074, 1702874, 1, 131074, 1702875, 1, 131074, 1702876, 1, 131074, 1702877, 1, 131074, 1702878, 1, 131074, 1702879, 1, 131074, 1702880, 1, 131074, 1702881, 1, 131074, 1702882, 1, 131074, 1702883, 1, 131074, 1702884, 1, 131074, 1702885, 1, 131074, 1702886, 1, 131074, 1702887, 1, 131074, 1702888, 1, 131074, 1702889, 1, 131074, 1702890, 1, 131074, 1702891, 1, 131074, 1702892, 1, 131074, 1702893, 1, 131074, 1702894, 1, 131074, 1702895, 1, 131074, 1702896, 1, 131074, 1702897, 1, 131074, 1702898, 1, 131074, 1702899, 1, 131074, 1702900, 1, 131074, 1702901, 1, 131074, 1702902, 1, 131074, 1702903, 1, 131074, 1702904, 1, 131074, 1702905, 1, 131074, 1702906, 1, 131074, 1702907, 1, 131074, 1702908, 1, 131074, 1702909, 1, 131074, 1702910, 1, 131074, 1702911, 1, 131074, 1702912, 1, 131074, 1702913, 1, 131074, 1702914, 1, 131074, 1702915, 1, 131074, 1702916, 1, 131074, 1702917, 1, 131074, 1702918, 1, 131074, 1702919, 1, 131074, 1702920, 1, 131074, 1702921, 1, 131074, 1702922, 1, 131074, 1702923, 1, 131074, 1702924, 1, 131074, 1702925, 1, 131074, 1702926, 1, 131074, 1702927, 1, 131074, 1702928, 1, 131074, 1702929, 1, 131074, 1702930, 1, 131074, 1702931, 1, 131074, 1702932, 1, 131074, 1702933, 1, 131074, 1702934, 1, 131074, 1702935, 1, 131074, 1702936, 1, 131074, 1702937, 1, 131074, 1702938, 1, 131074, 1702939, 1, 131074, 1702940, 1, 131074, 1702941, 1, 131074, 1702942, 1, 131074, 1702943, 1, 131074, 1702944, 1, 131074, 1702945, 1, 131074, 1702946, 1, 131074, 1702947, 1, 131074, 1702948, 1, 131074, 1702949, 1, 131074, 1702950, 1, 131074, 1702951, 1, 131074, 1702952, 1, 131074, 1702953, 1, 131074, 1702954, 1, 131074, 1702955, 1, 131074, 1702956, 1, 131074, 1702957, 1, 131074, 1702958, 1, 131074, 1702959, 1, 131074, 1702960, 1, 131074, 1702961, 1, 131074, 1702962, 1, 131074, 1702963, 1, 131074, 1702964, 1, 131074, 1702965, 1, 131074, 1702966, 1, 131074, 1702967, 1, 131074, 1702968, 1, 131074, 1702969, 1, 131074, 1702970, 1, 131074, 1702971, 1, 131074, 1702972, 1, 131074, 1702973, 1, 131074, 1702974, 1, 131074, 1702975, 1, 131074, 1702976, 1, 131074, 1702977, 1, 131074, 1702978, 1, 131074, 1702979, 1, 131074, 1702980, 1, 131074, 1702981, 1, 131074, 1702982, 1, 131074, 1702983, 1, 131074, 1702984, 1, 131074, 1702985, 1, 131074, 1702986, 1, 131074, 1702987, 1, 131074, 1702988, 1, 131074, 1702989, 1, 131074, 1702990, 1, 131074, 1702991, 1, 131074, 1702992, 1, 131074, 1702993, 1, 131074, 1702994, 1, 131074, 1702995, 1, 131074, 1702996, 1, 131074, 1702997, 1, 131074, 1702998, 1, 131074, 1702999, 1, 131074, 1703000, 1, 131074, 1703001, 1, 131074, 1703002, 1, 131074, 1703003, 1, 131074, 1703004, 1, 131074, 1703005, 1, 131074, 1703006, 1, 131074, 1703007, 1, 131074, 1703008, 1, 131074, 1703009, 1, 131074, 1703010, 1, 131074, 1703011, 1, 131074, 1703012, 1, 131074, 1703013, 1, 131074, 1703014, 1, 131074, 1703015, 1, 131074, 1703016, 1, 131074, 1703017, 1, 131074, 1703018, 1, 131074, 1703019, 1, 131074, 1703020, 1, 131074, 1703021, 1, 131074, 1703022, 1, 131074, 1703023, 1, 131074, 1703024, 1, 131074, 1703025, 1, 131074, 1703026, 1, 131074, 1703027, 1, 131074, 1703028, 1, 131074, 1703029, 1, 131074, 1703030, 1, 131074, 1703031, 1, 131074, 1703032, 1, 131074, 1703033, 1, 131074, 1703034, 1, 131074, 1703035, 1, 131074, 1703036, 1, 131074, 1703037, 1, 131074, 1703038, 1, 131074, 1703039, 1, 131074, 1703040, 1, 131074, 1703041, 1, 131074, 1703042, 1, 131074, 1703043, 1, 131074, 1703044, 1, 131074, 1703045, 1, 131074, 1703046, 1, 131074, 1703047, 1, 131074, 1703048, 1, 131074, 1703049, 1, 131074, 1703050, 1, 131074, 1703051, 1, 131074, 1703052, 1, 131074, 1703053, 1, 131074, 1703054, 1, 131074, 1703055, 1, 131074, 1703056, 1, 131074, 1703057, 1, 131074, 1703058, 1, 131074, 1703059, 1, 131074, 1703060, 1, 131074, 1703061, 1, 131074, 1703062, 1, 131074, 1703063, 1, 131074, 1703064, 1, 131074, 1703065, 1, 131074, 1703066, 1, 131074, 1703067, 1, 131074, 1703068, 1, 131074, 1703069, 1, 131074, 1703070, 1, 131074, 1703071, 1, 131074, 1703072, 1, 131074, 1703073, 1, 131074, 1703074, 1, 131074, 1703075, 1, 131074, 1703076, 1, 131074, 1703077, 1, 131074, 1703078, 1, 131074, 1703079, 1, 131074, 1703080, 1, 131074, 1703081, 1, 131074, 1703082, 1, 131074, 1703083, 1, 131074, 1703084, 1, 131074, 1703085, 1, 131074, 1703086, 1, 131074, 1703087, 1, 131074, 1703088, 1, 131074, 1703089, 1, 131074, 1703090, 1, 131074, 1703091, 1, 131074, 1703092, 1, 131074, 1703093, 1, 131074, 1703094, 1, 131074, 1703095, 1, 131074, 1703096, 1, 131074, 1703097, 1, 131074, 1703098, 1, 131074, 1703099, 1, 131074, 1703100, 1, 131074, 1703101, 1, 131074, 1703102, 1, 131074, 1703103, 1, 131074, 1703104, 1, 131074, 1703105, 1, 131074, 1703106, 1, 131074, 1703107, 1, 131074, 1703108, 1, 131074, 1703109, 1, 131074, 1703110, 1, 131074, 1703111, 1, 131074, 1703112, 1, 131074, 1703113, 1, 131074, 1703114, 1, 131074, 1703115, 1, 131074, 1703116, 1, 131074, 1703117, 1, 131074, 1703118, 1, 131074, 1703119, 1, 131074, 1703120, 1, 131074, 1703121, 1, 131074, 1703122, 1, 131074, 1703123, 1, 131074, 1703124, 1, 131074, 1703125, 1, 131074, 1703126, 1, 131074, 1703127, 1, 131074, 1703128, 1, 131074, 1703129, 1, 131074, 1703130, 1, 131074, 1703131, 1, 131074, 1703132, 1, 131074, 1703133, 1, 131074, 1703134, 1, 131074, 1703135, 1, 131074, 1703136, 1, 131074, 1703137, 1, 131074, 1703138, 1, 131074, 1703139, 1, 131074, 1703140, 1, 131074, 1703141, 1, 131074, 1703142, 1, 131074, 1703143, 1, 131074, 1703144, 1, 131074, 1703145, 1, 131074, 1703146, 1, 131074, 1703147, 1, 131074, 1703148, 1, 131074, 1703149, 1, 131074, 1703150, 1, 131074, 1703151, 1, 131074, 1703152, 1, 131074, 1703153, 1, 131074, 1703154, 1, 131074, 1703155, 1, 131074, 1703156, 1, 131074, 1703157, 1, 131074, 1703158, 1, 131074, 1703159, 1, 131074, 1703160, 1, 131074, 1703161, 1, 131074, 1703162, 1, 131074, 1703163, 1, 131074, 1703164, 1, 131074, 1703165, 1, 131074, 1703166, 1, 131074, 1703167, 1, 131074, 1703168, 1, 131074, 1703169, 1, 131074, 1703170, 1, 131074, 1703171, 1, 131074, 1703172, 1, 131074, 1703173, 1, 131074, 1703174, 1, 131074, 1703175, 1, 131074, 1703176, 1, 131074, 1703177, 1, 131074, 1703178, 1, 131074, 1703179, 1, 131074, 1703180, 1, 131074, 1703181, 1, 131074, 1703182, 1, 131074, 1703183, 1, 131074, 1703184, 1, 131074, 1703185, 1, 131074, 1703186, 1, 131074, 1703187, 1, 131074, 1703188, 1, 131074, 1703189, 1, 131074, 1703190, 1, 131074, 1703191, 1, 131074, 1703192, 1, 131074, 1703193, 1, 131074, 1703194, 1, 131074, 1703195, 1, 131074, 1703196, 1, 131074, 1703197, 1, 131074, 1703198, 1, 131074, 1703199, 1, 131074, 1703200, 1, 131074, 1703201, 1, 131074, 1703202, 1, 131074, 1703203, 1, 131074, 1703204, 1, 131074, 1703205, 1, 131074, 1703206, 1, 131074, 1703207, 1, 131074, 1703208, 1, 131074, 1703209, 1, 131074, 1703210, 1, 131074, 1703211, 1, 131074, 1703212, 1, 131074, 1703213, 1, 131074, 1703214, 1, 131074, 1703215, 1, 131074, 1703216, 1, 131074, 1703217, 1, 131074, 1703218, 1, 131074, 1703219, 1, 131074, 1703220, 1, 131074, 1703221, 1, 131074, 1703222, 1, 131074, 1703223, 1, 131074, 1703224, 1, 131074, 1703225, 1, 131074, 1703226, 1, 131074, 1703227, 1, 131074, 1703228, 1, 131074, 1703229, 1, 131074, 1703230, 1, 131074, 1703231, 1, 131074, 1703232, 1, 131074, 1703233, 1, 131074, 1703234, 1, 131074, 1703235, 1, 131074, 1703236, 1, 131074, 1703237, 1, 131074, 1703238, 1, 131074, 1703239, 1, 131074, 1703240, 1, 131074, 1703241, 1, 131074, 1703242, 1, 131074, 1703243, 1, 131074, 1703244, 1, 131074, 1703245, 1, 131074, 1703246, 1, 131074, 1703247, 1, 131074, 1703248, 1, 131074, 1703249, 1, 131074, 1703250, 1, 131074, 1703251, 1, 131074, 1703252, 1, 131074, 1703253, 1, 131074, 1703254, 1, 131074, 1703255, 1, 131074, 1703256, 1, 131074, 1703257, 1, 131074, 1703258, 1, 131074, 1703259, 1, 131074, 1703260, 1, 131074, 1703261, 1, 131074, 1703262, 1, 131074, 1703263, 1, 131074, 1703264, 1, 131074, 1703265, 1, 131074, 1703266, 1, 131074, 1703267, 1, 131074, 1703268, 1, 131074, 1703269, 1, 131074, 1703270, 1, 131074, 1703271, 1, 131074, 1703272, 1, 131074, 1703273, 1, 131074, 1703274, 1, 131074, 1703275, 1, 131074, 1703276, 1, 131074, 1703277, 1, 131074, 1703278, 1, 131074, 1703279, 1, 131074, 1703280, 1, 131074, 1703281, 1, 131074, 1703282, 1, 131074, 1703283, 1, 131074, 1703284, 1, 131074, 1703285, 1, 131074, 1703286, 1, 131074, 1703287, 1, 131074, 1703288, 1, 131074, 1703289, 1, 131074, 1703290, 1, 131074, 1703291, 1, 131074, 1703292, 1, 131074, 1703293, 1, 131074, 1703294, 1, 131074, 1703295, 1, 131074, 1703296, 1, 131074, 1703297, 1, 131074, 1703298, 1, 131074, 1703299, 1, 131074, 1703300, 1, 131074, 1703301, 1, 131074, 1703302, 1, 131074, 1703303, 1, 131074, 1703304, 1, 131074, 1703305, 1, 131074, 1703306, 1, 131074, 1703307, 1, 131074, 1703308, 1, 131074, 1703309, 1, 131074, 1703310, 1, 131074, 1703311, 1, 131074, 1703312, 1, 131074, 1703313, 1, 131074, 1703314, 1, 131074, 1703315, 1, 131074, 1703316, 1, 131074, 1703317, 1, 131074, 1703318, 1, 131074, 1703319, 1, 131074, 1703320, 1, 131074, 1703321, 1, 131074, 1703322, 1, 131074, 1703323, 1, 131074, 1703324, 1, 131074, 1703325, 1, 131074, 1703326, 1, 131074, 1703327, 1, 131074, 1703328, 1, 131074, 1703329, 1, 131074, 1703330, 1, 131074, 1703331, 1, 131074, 1703332, 1, 131074, 1703333, 1, 131074, 1703334, 1, 131074, 1703335, 1, 131074, 1703336, 1, 131074, 1703337, 1, 131074, 1703338, 1, 131074, 1703339, 1, 131074, 1703340, 1, 131074, 1703341, 1, 131074, 1703342, 1, 131074, 1703343, 1, 131074, 1703344, 1, 131074, 1703345, 1, 131074, 1703346, 1, 131074, 1703347, 1, 131074, 1703348, 1, 131074, 1703349, 1, 131074, 1703350, 1, 131074, 1703351, 1, 131074, 1703352, 1, 131074, 1703353, 1, 131074, 1703354, 1, 131074, 1703355, 1, 131074, 1703356, 1, 131074, 1703357, 1, 131074, 1703358, 1, 131074, 1703359, 1, 131074, 1703360, 1, 131074, 1703361, 1, 131074, 1703362, 1, 131074, 1703363, 1, 131074, 1703364, 1, 131074, 1703365, 1, 131074, 1703366, 1, 131074, 1703367, 1, 131074, 1703368, 1, 131074, 1703369, 1, 131074, 1703370, 1, 131074, 1703371, 1, 131074, 1703372, 1, 131074, 1703373, 1, 131074, 1703374, 1, 131074, 1703375, 1, 131074, 1703376, 1, 131074, 1703377, 1, 131074, 1703378, 1, 131074, 1703379, 1, 131074, 1703380, 1, 131074, 1703381, 1, 131074, 1703382, 1, 131074, 1703383, 1, 131074, 1703384, 1, 131074, 1703385, 1, 131074, 1703386, 1, 131074, 1703387, 1, 131074, 1703388, 1, 131074, 1703389, 1, 131074, 1703390, 1, 131074, 1703391, 1, 131074, 1703392, 1, 131074, 1703393, 1, 131074, 1703394, 1, 131074, 1703395, 1, 131074, 1703396, 1, 131074, 1703397, 1, 131074, 1703398, 1, 131074, 1703399, 1, 131074, 1703400, 1, 131074, 1703401, 1, 131074, 1703402, 1, 131074, 1703403, 1, 131074, 1703404, 1, 131074, 1703405, 1, 131074, 1703406, 1, 131074, 1703407, 1, 131074, 1703408, 1, 131074, 1703409, 1, 131074, 1703410, 1, 131074, 1703411, 1, 131074, 1703412, 1, 131074, 1703413, 1, 131074, 1703414, 1, 131074, 1703415, 1, 131074, 1703416, 1, 131074, 1703417, 1, 131074, 1703418, 1, 131074, 1703419, 1, 131074, 1703420, 1, 131074, 1703421, 1, 131074, 1703422, 1, 131074, 1703423, 1, 131074, 1703424, 1, 131074, 1703425, 1, 131074, 1703426, 1, 131074, 1703427, 1, 131074, 1703428, 1, 131074, 1703429, 1, 131074, 1703430, 1, 131074, 1703431, 1, 131074, 1703432, 1, 131074, 1703433, 1, 131074, 1703434, 1, 131074, 1703435, 1, 131074, 1703436, 1, 131074, 1703437, 1, 131074, 1703438, 1, 131074, 1703439, 1, 131074, 1703440, 1, 131074, 1703441, 1, 131074, 1703442, 1, 131074, 1703443, 1, 131074, 1703444, 1, 131074, 1703445, 1, 131074, 1703446, 1, 131074, 1703447, 1, 131074, 1703448, 1, 131074, 1703449, 1, 131074, 1703450, 1, 131074, 1703451, 1, 131074, 1703452, 1, 131074, 1703453, 1, 131074, 1703454, 1, 131074, 1703455, 1, 131074, 1703456, 1, 131074, 1703457, 1, 131074, 1703458, 1, 131074, 1703459, 1, 131074, 1703460, 1, 131074, 1703461, 1, 131074, 1703462, 1, 131074, 1703463, 1, 131074, 1703464, 1, 131074, 1703465, 1, 131074, 1703466, 1, 131074, 1703467, 1, 131074, 1703468, 1, 131074, 1703469, 1, 131074, 1703470, 1, 131074, 1703471, 1, 131074, 1703472, 1, 131074, 1703473, 1, 131074, 1703474, 1, 131074, 1703475, 1, 131074, 1703476, 1, 131074, 1703477, 1, 131074, 1703478, 1, 131074, 1703479, 1, 131074, 1703480, 1, 131074, 1703481, 1, 131074, 1703482, 1, 131074, 1703483, 1, 131074, 1703484, 1, 131074, 1703485, 1, 131074, 1703486, 1, 131074, 1703487, 1, 131074, 1703488, 1, 131074, 1703489, 1, 131074, 1703490, 1, 131074, 1703491, 1, 131074, 1703492, 1, 131074, 1703493, 1, 131074, 1703494, 1, 131074, 1703495, 1, 131074, 1703496, 1, 131074, 1703497, 1, 131074, 1703498, 1, 131074, 1703499, 1, 131074, 1703500, 1, 131074, 1703501, 1, 131074, 1703502, 1, 131074, 1703503, 1, 131074, 1703504, 1, 131074, 1703505, 1, 131074, 1703506, 1, 131074, 1703507, 1, 131074, 1703508, 1, 131074, 1703509, 1, 131074, 1703510, 1, 131074, 1703511, 1, 131074, 1703512, 1, 131074, 1703513, 1, 131074, 1703514, 1, 131074, 1703515, 1, 131074, 1703516, 1, 131074, 1703517, 1, 131074, 1703518, 1, 131074, 1703519, 1, 131074, 1703520, 1, 131074, 1703521, 1, 131074, 1703522, 1, 131074, 1703523, 1, 131074, 1703524, 1, 131074, 1703525, 1, 131074, 1703526, 1, 131074, 1703527, 1, 131074, 1703528, 1, 131074, 1703529, 1, 131074, 1703530, 1, 131074, 1703531, 1, 131074, 1703532, 1, 131074, 1703533, 1, 131074, 1703534, 1, 131074, 1703535, 1, 131074, 1703536, 1, 131074, 1703537, 1, 131074, 1703538, 1, 131074, 1703539, 1, 131074, 1703540, 1, 131074, 1703541, 1, 131074, 1703542, 1, 131074, 1703543, 1, 131074, 1703544, 1, 131074, 1703545, 1, 131074, 1703546, 1, 131074, 1703547, 1, 131074, 1703548, 1, 131074, 1703549, 1, 131074, 1703550, 1, 131074, 1703551, 1, 131074, 1703552, 1, 131074, 1703553, 1, 131074, 1703554, 1, 131074, 1703555, 1, 131074, 1703556, 1, 131074, 1703557, 1, 131074, 1703558, 1, 131074, 1703559, 1, 131074, 1703560, 1, 131074, 1703561, 1, 131074, 1703562, 1, 131074, 1703563, 1, 131074, 1703564, 1, 131074, 1703565, 1, 131074, 1703566, 1, 131074, 1703567, 1, 131074, 1703568, 1, 131074, 1703569, 1, 131074, 1703570, 1, 131074, 1703571, 1, 131074, 1703572, 1, 131074, 1703573, 1, 131074, 1703574, 1, 131074, 1703575, 1, 131074, 1703576, 1, 131074, 1703577, 1, 131074, 1703578, 1, 131074, 1703579, 1, 131074, 1703580, 1, 131074, 1703581, 1, 131074, 1703582, 1, 131074, 1703583, 1, 131074, 1703584, 1, 131074, 1703585, 1, 131074, 1703586, 1, 131074, 1703587, 1, 131074, 1703588, 1, 131074, 1703589, 1, 131074, 1703590, 1, 131074, 1703591, 1, 131074, 1703592, 1, 131074, 1703593, 1, 131074, 1703594, 1, 131074, 1703595, 1, 131074, 1703596, 1, 131074, 1703597, 1, 131074, 1703598, 1, 131074, 1703599, 1, 131074, 1703600, 1, 131074, 1703601, 1, 131074, 1703602, 1, 131074, 1703603, 1, 131074, 1703604, 1, 131074, 1703605, 1, 131074, 1703606, 1, 131074, 1703607, 1, 131074, 1703608, 1, 131074, 1703609, 1, 131074, 1703610, 1, 131074, 1703611, 1, 131074, 1703612, 1, 131074, 1703613, 1, 131074, 1703614, 1, 131074, 1703615, 1, 131074, 1703616, 1, 131074, 1703617, 1, 131074, 1703618, 1, 131074, 1703619, 1, 131074, 1703620, 1, 131074, 1703621, 1, 131074, 1703622, 1, 131074, 1703623, 1, 131074, 1703624, 1, 131074, 1703625, 1, 131074, 1703626, 1, 131074, 1703627, 1, 131074, 1703628, 1, 131074, 1703629, 1, 131074, 1703630, 1, 131074, 1703631, 1, 131074, 1703632, 1, 131074, 1703633, 1, 131074, 1703634, 1, 131074, 1703635, 1, 131074, 1703636, 1, 131074, 1703637, 1, 131074, 1703638, 1, 131074, 1703639, 1, 131074, 1703640, 1, 131074, 1703641, 1, 131074, 1703642, 1, 131074, 1703643, 1, 131074, 1703644, 1, 131074, 1703645, 1, 131074, 1703646, 1, 131074, 1703647, 1, 131074, 1703648, 1, 131074, 1703649, 1, 131074, 1703650, 1, 131074, 1703651, 1, 131074, 1703652, 1, 131074, 1703653, 1, 131074, 1703654, 1, 131074, 1703655, 1, 131074, 1703656, 1, 131074, 1703657, 1, 131074, 1703658, 1, 131074, 1703659, 1, 131074, 1703660, 1, 131074, 1703661, 1, 131074, 1703662, 1, 131074, 1703663, 1, 131074, 1703664, 1, 131074, 1703665, 1, 131074, 1703666, 1, 131074, 1703667, 1, 131074, 1703668, 1, 131074, 1703669, 1, 131074, 1703670, 1, 131074, 1703671, 1, 131074, 1703672, 1, 131074, 1703673, 1, 131074, 1703674, 1, 131074, 1703675, 1, 131074, 1703676, 1, 131074, 1703677, 1, 131074, 1703678, 1, 131074, 1703679, 1, 131074, 1703680, 1, 131074, 1703681, 1, 131074, 1703682, 1, 131074, 1703683, 1, 131074, 1703684, 1, 131074, 1703685, 1, 131074, 1703686, 1, 131074, 1703687, 1, 131074, 1703688, 1, 131074, 1703689, 1, 131074, 1703690, 1, 131074, 1703691, 1, 131074, 1703692, 1, 131074, 1703693, 1, 131074, 1703694, 1, 131074, 1703695, 1, 131074, 1703696, 1, 131074, 1703697, 1, 131074, 1703698, 1, 131074, 1703699, 1, 131074, 1703700, 1, 131074, 1703701, 1, 131074, 1703702, 1, 131074, 1703703, 1, 131074, 1703704, 1, 131074, 1703705, 1, 131074, 1703706, 1, 131074, 1703707, 1, 131074, 1703708, 1, 131074, 1703709, 1, 131074, 1703710, 1, 131074, 1703711, 1, 131074, 1703712, 1, 131074, 1703713, 1, 131074, 1703714, 1, 131074, 1703715, 1, 131074, 1703716, 1, 131074, 1703717, 1, 131074, 1703718, 1, 131074, 1703719, 1, 131074, 1703720, 1, 131074, 1703721, 1, 131074, 1703722, 1, 131074, 1703723, 1, 131074, 1703724, 1, 131074, 1703725, 1, 131074, 1703726, 1, 131074, 1703727, 1, 131074, 1703728, 1, 131074, 1703729, 1, 131074, 1703730, 1, 131074, 1703731, 1, 131074, 1703732, 1, 131074, 1703733, 1, 131074, 1703734, 1, 131074, 1703735, 1, 131074, 1703736, 1, 131074, 1703737, 1, 131074, 1703738, 1, 131074, 1703739, 1, 131074, 1703740, 1, 131074, 1703741, 1, 131074, 1703742, 1, 131074, 1703743, 1, 131074, 1703744, 1, 131074, 1703745, 1, 131074, 1703746, 1, 131074, 1703747, 1, 131074, 1703748, 1, 131074, 1703749, 1, 131074, 1703750, 1, 131074, 1703751, 1, 131074, 1703752, 1, 131074, 1703753, 1, 131074, 1703754, 1, 131074, 1703755, 1, 131074, 1703756, 1, 131074, 1703757, 1, 131074, 1703758, 1, 131074, 1703759, 1, 131074, 1703760, 1, 131074, 1703761, 1, 131074, 1703762, 1, 131074, 1703763, 1, 131074, 1703764, 1, 131074, 1703765, 1, 131074, 1703766, 1, 131074, 1703767, 1, 131074, 1703768, 1, 131074, 1703769, 1, 131074, 1703770, 1, 131074, 1703771, 1, 131074, 1703772, 1, 131074, 1703773, 1, 131074, 1703774, 1, 131074, 1703775, 1, 131074, 1703776, 1, 131074, 1703777, 1, 131074, 1703778, 1, 131074, 1703779, 1, 131074, 1703780, 1, 131074, 1703781, 1, 131074, 1703782, 1, 131074, 1703783, 1, 131074, 1703784, 1, 131074, 1703785, 1, 131074, 1703786, 1, 131074, 1703787, 1, 131074, 1703788, 1, 131074, 1703789, 1, 131074, 1703790, 1, 131074, 1703791, 1, 131074, 1703792, 1, 131074, 1703793, 1, 131074, 1703794, 1, 131074, 1703795, 1, 131074, 1703796, 1, 131074, 1703797, 1, 131074, 1703798, 1, 131074, 1703799, 1, 131074, 1703800, 1, 131074, 1703801, 1, 131074, 1703802, 1, 131074, 1703803, 1, 131074, 1703804, 1, 131074, 1703805, 1, 131074, 1703806, 1, 131074, 1703807, 1, 131074, 1703808, 1, 131074, 1703809, 1, 131074, 1703810, 1, 131074, 1703811, 1, 131074, 1703812, 1, 131074, 1703813, 1, 131074, 1703814, 1, 131074, 1703815, 1, 131074, 1703816, 1, 131074, 1703817, 1, 131074, 1703818, 1, 131074, 1703819, 1, 131074, 1703820, 1, 131074, 1703821, 1, 131074, 1703822, 1, 131074, 1703823, 1, 131074, 1703824, 1, 131074, 1703825, 1, 131074, 1703826, 1, 131074, 1703827, 1, 131074, 1703828, 1, 131074, 1703829, 1, 131074, 1703830, 1, 131074, 1703831, 1, 131074, 1703832, 1, 131074, 1703833, 1, 131074, 1703834, 1, 131074, 1703835, 1, 131074, 1703836, 1, 131074, 1703837, 1, 131074, 1703838, 1, 131074, 1703839, 1, 131074, 1703840, 1, 131074, 1703841, 1, 131074, 1703842, 1, 131074, 1703843, 1, 131074, 1703844, 1, 131074, 1703845, 1, 131074, 1703846, 1, 131074, 1703847, 1, 131074, 1703848, 1, 131074, 1703849, 1, 131074, 1703850, 1, 131074, 1703851, 1, 131074, 1703852, 1, 131074, 1703853, 1, 131074, 1703854, 1, 131074, 1703855, 1, 131074, 1703856, 1, 131074, 1703857, 1, 131074, 1703858, 1, 131074, 1703859, 1, 131074, 1703860, 1, 131074, 1703861, 1, 131074, 1703862, 1, 131074, 1703863, 1, 131074, 1703864, 1, 131074, 1703865, 1, 131074, 1703866, 1, 131074, 1703867, 1, 131074, 1703868, 1, 131074, 1703869, 1, 131074, 1703870, 1, 131074, 1703871, 1, 131074, 1703872, 1, 131074, 1703873, 1, 131074, 1703874, 1, 131074, 1703875, 1, 131074, 1703876, 1, 131074, 1703877, 1, 131074, 1703878, 1, 131074, 1703879, 1, 131074, 1703880, 1, 131074, 1703881, 1, 131074, 1703882, 1, 131074, 1703883, 1, 131074, 1703884, 1, 131074, 1703885, 1, 131074, 1703886, 1, 131074, 1703887, 1, 131074, 1703888, 1, 131074, 1703889, 1, 131074, 1703890, 1, 131074, 1703891, 1, 131074, 1703892, 1, 131074, 1703893, 1, 131074, 1703894, 1, 131074, 1703895, 1, 131074, 1703896, 1, 131074, 1703897, 1, 131074, 1703898, 1, 131074, 1703899, 1, 131074, 1703900, 1, 131074, 1703901, 1, 131074, 1703902, 1, 131074, 1703903, 1, 131074, 1703904, 1, 131074, 1703905, 1, 131074, 1703906, 1, 131074, 1703907, 1, 131074, 1703908, 1, 131074, 1703909, 1, 131074, 1703910, 1, 131074, 1703911, 1, 131074, 1703912, 1, 131074, 1703913, 1, 131074, 1703914, 1, 131074, 1703915, 1, 131074, 1703916, 1, 131074, 1703917, 1, 131074, 1703918, 1, 131074, 1703919, 1, 131074, 1703920, 1, 131074, 1703921, 1, 131074, 1703922, 1, 131074, 1703923, 1, 131074, 1703924, 1, 131074, 1703925, 1, 131074, 1703926, 1, 131074, 1703927, 1, 131074, 1703928, 1, 131074, 1703929, 1, 131074, 1703930, 1, 131074, 1703931, 1, 131074, 1703932, 1, 131074, 1703933, 1, 131074, 1703934, 1, 131074, 1703935, 1, 131074, 1638400, 1, 131074, 1638401, 1, 131074, 1638402, 1, 131074, 1638403, 1, 131074, 1638404, 1, 131074, 1638405, 1, 131074, 1638406, 1, 131074, 1638407, 1, 131074, 1638408, 1, 131074, 1638409, 1, 131074, 1638410, 1, 131074, 1638411, 1, 131074, 1638412, 1, 131074, 1638413, 1, 131074, 1638414, 1, 131074, 1638415, 1, 131074, 1638416, 1, 131074, 1638417, 1, 131074, 1638418, 1, 131074, 1638419, 1, 131074, 1638420, 1, 131074, 1638421, 1, 131074, 1638422, 1, 131074, 1638423, 1, 131074, 1638424, 1, 131074, 1638425, 1, 131074, 1638426, 1, 131074, 1638427, 1, 131074, 1638428, 1, 131074, 1638429, 1, 131074, 1638430, 1, 131074, 1638431, 1, 131074, 1638432, 1, 131074, 1638433, 1, 131074, 1638434, 1, 131074, 1638435, 1, 131074, 1638436, 1, 131074, 1638437, 1, 131074, 1638438, 1, 131074, 1638439, 1, 131074, 1638440, 1, 131074, 1638441, 1, 131074, 1638442, 1, 131074, 1638443, 1, 131074, 1638444, 1, 131074, 1638445, 1, 131074, 1638446, 1, 131074, 1638447, 1, 131074, 1638448, 1, 131074, 1638449, 1, 131074, 1638450, 1, 131074, 1638451, 1, 131074, 1638452, 1, 131074, 1638453, 1, 131074, 1638454, 1, 131074, 1638455, 1, 131074, 1638456, 1, 131074, 1638457, 1, 131074, 1638458, 1, 131074, 1638459, 1, 131074, 1638460, 1, 131074, 1638461, 1, 131074, 1638462, 1, 131074, 1638463, 1, 131074, 1638464, 1, 131074, 1638465, 1, 131074, 1638466, 1, 131074, 1638467, 1, 131074, 1638468, 1, 131074, 1638469, 1, 131074, 1638470, 1, 131074, 1638471, 1, 131074, 1638472, 1, 131074, 1638473, 1, 131074, 1638474, 1, 131074, 1638475, 1, 131074, 1638476, 1, 131074, 1638477, 1, 131074, 1638478, 1, 131074, 1638479, 1, 131074, 1638480, 1, 131074, 1638481, 1, 131074, 1638482, 1, 131074, 1638483, 1, 131074, 1638484, 1, 131074, 1638485, 1, 131074, 1638486, 1, 131074, 1638487, 1, 131074, 1638488, 1, 131074, 1638489, 1, 131074, 1638490, 1, 131074, 1638491, 1, 131074, 1638492, 1, 131074, 1638493, 1, 131074, 1638494, 1, 131074, 1638495, 1, 131075 )
+
+[node name="FamiCutscene" parent="." instance=ExtResource( 7 )]
+
+[node name="2083" parent="." instance=ExtResource( 1 )]
+visible = false
+position = Vector2( 0, 12 )
+famira_path = NodePath("../Famira")
+
+[node name="Camera" type="Camera2D" parent="2083"]
+unique_name_in_owner = true
+position = Vector2( 0, -4 )
+offset = Vector2( 0, -8 )
+anchor_mode = 0
+current = true
+limit_top = 8
+limit_bottom = 192
+limit_smoothed = true
+
+[node name="Famira" parent="." instance=ExtResource( 4 )]
+visible = false
+position = Vector2( 160, 179 )
+sg2083_path = NodePath("../2083")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 1 )
+anims/drop-stg = SubResource( 2 )
+
+[node name="Speccy" type="Sprite" parent="."]
+position = Vector2( -9001, 167 )
+texture = ExtResource( 23 )
+
+[connection signal="cutscene_finished" from="FamiCutscene" to="." method="_on_cutscene_finished"]
+[connection signal="energy_changed" from="2083" to="." method="_on_2083_energy_changed"]
+[connection signal="health_changed" from="2083" to="." method="_on_2083_health_changed"]
+[connection signal="died" from="Famira" to="." method="_on_Famira_died"]
+[connection signal="health_changed" from="Famira" to="." method="_on_Famira_health_changed"]
diff --git a/maps/bug_teleporter.gd b/maps/bug_teleporter.gd
new file mode 100644
index 0000000..3ecf5ca
--- /dev/null
+++ b/maps/bug_teleporter.gd
@@ -0,0 +1,7 @@
+extends Area2D
+
+
+
+func _on_Area2D_area_entered(area):
+ Audio.ac_music.stop()
+ Game.change_map(load("res://menus/bug_world.tscn"))
diff --git a/maps/canopy.tscn b/maps/canopy.tscn
index 55cc6f2..bbb9863 100644
--- a/maps/canopy.tscn
+++ b/maps/canopy.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=24 format=2]
+[gd_scene load_steps=35 format=2]
[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=1]
[ext_resource path="res://maps/map.gd" type="Script" id=2]
@@ -10,7 +10,7 @@
[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=8]
[ext_resource path="res://objects/enemy/spider.tscn" type="PackedScene" id=9]
[ext_resource path="res://objects/enemy/jumping_spider.tscn" type="PackedScene" id=10]
-[ext_resource path="res://objects/collectibles/gold.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=11]
[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=12]
[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=13]
[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=14]
@@ -18,51 +18,96 @@
[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=16]
[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=17]
[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=18]
-[ext_resource path="res://objects/environment/death tile/death_tile.tscn" type="PackedScene" id=19]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=19]
[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=20]
[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=21]
-[ext_resource path="res://audio/music/dusk_park.mp3" type="AudioStream" id=22]
+[ext_resource path="res://audio/music/dusk_park.ogg" type="AudioStream" id=22]
+[ext_resource path="res://objects/lore/canopy/skelarcher.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/lore/canopy/chipit.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/canopy/sabrespighter.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/lore/canopy/shady_canopy.tscn" type="PackedScene" id=26]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=27]
+[ext_resource path="res://scripts/has_splash.gd" type="Script" id=28]
+[ext_resource path="res://maps/bug_teleporter.gd" type="Script" id=29]
+[ext_resource path="res://graphics/turniwood/turning_platform_wood.png" type="Texture" id=30]
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 7.5, 20 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 224, 36 )
+
+[sub_resource type="RectangleShape2D" id=4]
+extents = Vector2( 18, 108 )
[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2( 4, 128 )
+extents = Vector2( 32, 108 )
-[node name="Map" type="Node2D" groups=["map"]]
+[node name="Map2" type="Node2D" groups=["map"]]
pause_mode = 1
script = ExtResource( 2 )
target_time_any = 80
target_time_100 = 180
music = ExtResource( 22 )
+lore_entries = [ ExtResource( 23 ), ExtResource( 24 ), ExtResource( 25 ), ExtResource( 26 ) ]
[node name="Camera2D" parent="." instance=ExtResource( 1 )]
[node name="Sprite" type="Sprite" parent="Camera2D"]
position = Vector2( 128, 96 )
-z_index = -2
+z_index = -260
texture = ExtResource( 3 )
__meta__ = {
"_edit_lock_": true
}
-[node name="Ground" type="TileMap" parent="."]
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 27 )
tile_set = ExtResource( 4 )
cell_size = Vector2( 8, 8 )
format = 1
-tile_data = PoolIntArray( 9, 0, 65537, 65545, 0, 1, 131081, 0, 1, 196617, -1610612736, 65538, 262161, 0, 65536, 262162, 0, 65537, 262163, 0, 65537, 262164, 0, 65537, 262165, 0, 65537, 262166, 0, 65537, 262167, 0, 65537, 262168, 0, 65537, 262169, 0, 65537, 262170, 0, 65537, 262171, 0, 65537, 262172, 0, 65537, 262173, 0, 65537, 262174, 0, 65537, 262175, 0, 65537, 262176, 0, 65537, 262177, 0, 65538, 262189, 0, 65536, 262190, 0, 65537, 262191, 0, 65537, 262192, 0, 65537, 262193, 0, 65537, 262194, 0, 65537, 262195, 0, 65537, 262196, 0, 65537, 262197, 0, 65538, 393216, 0, 65537, 393217, 0, 65537, 393218, 0, 65537, 393219, 0, 65537, 393220, 0, 65537, 393221, 0, 65537, 393222, 0, 65538, 393254, 0, 65536, 393255, 0, 65537, 393256, 0, 65537, 393257, 0, 65537, 393258, 0, 65538, 393306, -1610612736, 2, 393307, 0, 65537, 393308, 0, 65537, 393309, 0, 65537, 393310, 0, 65537, 393311, 0, 65538, 458774, 0, 65536, 458775, 0, 65537, 458776, 0, 65537, 458777, 0, 65537, 458778, 0, 65537, 458779, 0, 65537, 458780, 0, 65537, 458781, 0, 65537, 458782, 0, 65537, 458783, 0, 65537, 458784, 0, 65537, 458785, 0, 65538, 458842, 0, 1, 524297, 0, 65536, 524298, 0, 65537, 524299, 0, 65537, 524300, 1610612736, 2, 524361, -1610612736, 2, 524362, 0, 65537, 524363, 0, 65537, 524364, 0, 65537, 524365, 0, 65537, 524366, 0, 65537, 524367, 0, 65537, 524368, 0, 65537, 524369, 1610612736, 3, 524378, 0, 1, 589836, 0, 1, 589870, -1610612736, 2, 589871, 0, 65537, 589872, 0, 65537, 589873, 0, 65537, 589874, 0, 65537, 589875, 0, 65537, 589876, 0, 65537, 589877, 0, 65537, 589878, 0, 65537, 589879, 0, 65537, 589880, 0, 65537, 589881, 0, 65538, 589889, -1610612736, 2, 589890, 0, 65537, 589891, 1610612736, 3, 589897, 0, 1, 589905, 0, 3, 589906, 0, 65537, 589907, 1610612736, 2, 589914, 0, 1, 655372, 0, 3, 655373, 0, 65537, 655374, 0, 65538, 655406, 0, 1, 655423, -1610612736, 2, 655424, 0, 65537, 655425, 536870912, 3, 655427, 0, 2, 655428, 0, 65537, 655429, 0, 65537, 655430, 0, 65537, 655431, 0, 65537, 655432, 0, 65537, 655433, 536870912, 3, 655443, 0, 1, 655450, 0, 1, 720942, 0, 1, 720958, -1610612736, 2, 720959, 536870912, 3, 720979, 0, 3, 720980, 0, 65537, 720981, 1610612736, 3, 720986, 0, 1, 786433, 0, 65537, 786434, 0, 65537, 786435, 0, 65537, 786436, 0, 65538, 786450, 0, 65536, 786451, 0, 65537, 786452, 0, 65537, 786453, 0, 65537, 786454, 0, 65537, 786455, 0, 65537, 786456, 0, 65537, 786457, 0, 65537, 786458, 0, 65537, 786459, 0, 65537, 786460, 0, 65537, 786461, 0, 65537, 786462, 0, 65537, 786463, 0, 65537, 786464, 0, 65537, 786465, 0, 65537, 786466, 0, 65537, 786467, 0, 65537, 786468, 0, 65537, 786469, 0, 65537, 786470, 0, 65537, 786471, 0, 65537, 786472, 0, 65537, 786473, 0, 65537, 786474, 0, 65537, 786475, 0, 65537, 786476, 0, 65537, 786477, 0, 65537, 786478, 536870912, 2, 786480, 0, 65536, 786481, 0, 65537, 786482, 0, 65537, 786483, 0, 65537, 786484, 0, 65537, 786485, 0, 65537, 786486, 0, 65537, 786487, 0, 65537, 786488, 0, 65537, 786489, 0, 65537, 786490, 0, 65538, 786493, 0, 65536, 786494, 536870912, 3, 786517, 536870912, 1, 786522, 0, 1, 852053, 536870912, 1, 852058, 0, 1, 917585, 1073741824, 3, 917586, 0, 65537, 917587, 0, 65538, 917589, -1073741824, 65536, 917593, 0, 65536, 917594, 536870912, 3, 983065, -1610612736, 2, 983066, 0, 65537, 983067, 0, 65537, 983068, 0, 65538, 983107, -1610612736, 2, 983108, 0, 65537, 983109, 0, 65537, 983110, 0, 65537, 983111, 0, 65537, 983112, 0, 65537, 983113, 0, 65537, 983114, 0, 65537, 983115, 0, 65537, 983116, 0, 65537, 983117, 0, 65537, 983118, 0, 65537, 983119, 0, 65537, 983120, 0, 65537, 983121, 536870912, 3, 1048586, -1610612736, 65536, 1048601, 536870912, 1, 1048606, -1610612736, 2, 1048607, 0, 65537, 1048608, 0, 65537, 1048609, 0, 65537, 1048610, 0, 65537, 1048611, 0, 65537, 1048612, 0, 65537, 1048613, 0, 65538, 1048635, 0, 65536, 1048636, 0, 65537, 1048637, 0, 65537, 1048638, 0, 65537, 1048639, 0, 65537, 1048640, 0, 65537, 1048641, 0, 65537, 1048642, 0, 65537, 1048643, 536870912, 3, 1114112, 0, 65537, 1114113, 0, 65537, 1114114, 0, 65537, 1114115, 0, 65537, 1114116, 0, 65537, 1114117, 0, 65537, 1114118, 0, 65537, 1114119, 0, 65537, 1114120, 0, 65537, 1114121, 0, 65537, 1114122, 536870912, 2, 1114137, 536870912, 1, 1114142, 0, 1, 1179662, 0, 65536, 1179663, 0, 65537, 1179664, 0, 65537, 1179665, 0, 65537, 1179666, 0, 65537, 1179667, 0, 65537, 1179668, 0, 65537, 1179672, 0, 65536, 1179673, 536870912, 3, 1179678, 0, 1, 1179692, 0, 65536, 1179693, 0, 65537, 1179694, 0, 65537, 1179695, 0, 65538, 1179701, 0, 65536, 1179702, 1610612736, 3, 1179717, -1610612736, 2, 1179718, 0, 65537, 1179719, 0, 65537, 1179720, 0, 65537, 1179721, 0, 65537, 1179722, 0, 65537, 1179723, 0, 65537, 1179724, 0, 65537, 1179725, 0, 65537, 1179726, 0, 65537, 1179727, 0, 65537, 1179728, 0, 65537, 1179729, 0, 65537, 1179730, 0, 65537, 1179731, 1610612736, 2, 1245214, 0, 1, 1245238, 0, 2, 1245239, 0, 65537, 1245240, 0, 65538, 1245243, 0, 65536, 1245244, 0, 65537, 1245245, 0, 65537, 1245246, 0, 65537, 1245247, 0, 65537, 1245248, 0, 65537, 1245249, 0, 65537, 1245250, 0, 65537, 1245251, 0, 65537, 1245252, 0, 65537, 1245253, 536870912, 3, 1245267, 0, 1, 1310750, 0, 1, 1310803, 0, 1, 1376286, -1610612736, 65538, 1376339, -1610612736, 65538, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441836, 0, 0, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1441878, 0, 0, 1441879, 0, 0, 1441880, 0, 0, 1441881, 0, 0, 1441882, 0, 0, 1507328, 0, 65537, 1507329, 0, 65537, 1507330, 0, 65537, 1507331, 0, 65537, 1507332, 0, 65537, 1507333, 0, 65537, 1507334, 0, 65537, 1507335, 0, 65537, 1507336, 0, 65537, 1507337, 0, 65537, 1507338, 0, 65537, 1507339, 0, 65537, 1507340, 0, 65537, 1507341, 0, 65537, 1507342, 0, 65537, 1507343, 0, 65537, 1507344, 0, 65537, 1507345, 0, 65537, 1507346, 0, 65537, 1507347, 0, 65537, 1507348, 0, 65537, 1507349, 0, 65537, 1507350, 0, 65537, 1507351, 0, 65537, 1507352, 0, 65537, 1507353, 0, 65537, 1507354, 0, 65537, 1507355, 0, 65537, 1507356, 0, 65537, 1507357, 0, 65537, 1507358, 0, 65537, 1507359, 0, 65537, 1507372, 0, 65537, 1507373, 0, 65537, 1507374, 0, 65537, 1507375, 0, 65537, 1507376, 0, 65537, 1507377, 0, 65537, 1507378, 0, 65537, 1507379, 0, 65537, 1507380, 0, 65537, 1507381, 0, 65537, 1507382, 0, 65537, 1507383, 0, 65537, 1507384, 0, 65537, 1507385, 0, 65537, 1507386, 0, 65537, 1507387, 0, 65537, 1507388, 0, 65537, 1507389, 0, 65537, 1507390, 0, 65537, 1507391, 0, 65537, 1507392, 0, 65537, 1507393, 0, 65537, 1507394, 0, 65537, 1507395, 0, 65537, 1507396, 0, 65537, 1507397, 0, 65537, 1507398, 0, 65537, 1507399, 0, 65537, 1507403, 0, 65537, 1507404, 0, 65537, 1507408, 0, 65537, 1507409, 0, 65537, 1507410, 0, 65537, 1507411, 0, 65537, 1507412, 0, 65537, 1507413, 0, 65537, 1507414, 0, 65537, 1507415, 0, 65537, 1507416, 0, 65537, 1507417, 0, 65537, 1507418, 0, 65537 )
+tile_data = PoolIntArray( 9, 0, 65537, 65545, 2, 0, 131081, 2, 65536, 196617, 2, 131072, 196629, 1, 0, 196633, 1, 0, 196655, 1, 0, 196659, 1, 0, 262161, 2, 196609, 262162, 2, 196610, 262163, 2, 196610, 262164, 2, 196610, 262165, 2, 196610, 262166, 2, 196610, 262167, 2, 196610, 262168, 2, 196610, 262169, 2, 196610, 262170, 2, 196610, 262171, 2, 196610, 262172, 2, 196610, 262173, 2, 196610, 262174, 2, 196610, 262175, 2, 196610, 262176, 2, 196610, 262177, 2, 196611, 262189, 2, 196609, 262190, 2, 196610, 262191, 2, 196610, 262192, 2, 196610, 262193, 2, 196610, 262194, 2, 196610, 262195, 2, 196610, 262196, 2, 196610, 262197, 2, 196611, 458751, 2, 196609, 393216, 2, 196610, 393217, 2, 196610, 393218, 2, 196610, 393219, 2, 196610, 393220, 2, 196610, 393221, 2, 196610, 393222, 2, 196611, 393306, 2, 1, 393307, 2, 196610, 393308, 2, 196610, 393309, 2, 196610, 393310, 2, 196610, 393311, 2, 196610, 458763, 1, 0, 458773, 2, 196609, 458774, 2, 196610, 458775, 2, 3, 458782, 2, 196609, 458783, 2, 196610, 458784, 2, 196610, 458785, 2, 196610, 458786, 2, 196611, 458790, 2, 196609, 458791, 2, 196610, 458792, 2, 196610, 458793, 2, 196610, 458794, 2, 196610, 458795, 2, 196611, 458825, 1, 0, 458832, 1, 0, 458842, 2, 65536, 524297, 2, 196609, 524298, 2, 196610, 524299, 2, 196610, 524300, 2, 3, 524311, 2, 131073, 524312, 2, 196611, 524335, 1, 0, 524341, 1, 0, 524361, 2, 1, 524362, 2, 196610, 524363, 2, 196610, 524364, 2, 196610, 524365, 2, 196610, 524366, 2, 196610, 524367, 2, 196610, 524368, 2, 196610, 524369, 2, 3, 524378, 2, 65536, 589836, 2, 131073, 589837, 2, 196610, 589838, 2, 196611, 589870, 2, 1, 589871, 2, 196610, 589872, 2, 196610, 589873, 2, 196610, 589874, 2, 196610, 589875, 2, 196610, 589876, 2, 196610, 589877, 2, 196610, 589878, 2, 196610, 589879, 2, 196610, 589880, 2, 196610, 589881, 2, 196611, 589889, 2, 1, 589890, 2, 196610, 589891, 2, 3, 589894, 1, 0, 589897, 2, 65536, 589905, 2, 131073, 589906, 2, 196610, 589907, 2, 3, 589914, 2, 65536, 655406, 2, 65536, 655423, 2, 1, 655424, 2, 196610, 655425, 2, 131075, 655427, 2, 131073, 655428, 2, 196610, 655429, 2, 196610, 655430, 2, 196610, 655431, 2, 196610, 655432, 2, 196610, 655433, 2, 131075, 655443, 2, 65536, 655450, 2, 65536, 720917, 1, 0, 720922, 1, 0, 720932, 1, 0, 720937, 1, 0, 720942, 2, 65536, 720950, 1, 0, 720958, 2, 1, 720959, 2, 131075, 720979, 2, 131073, 720980, 2, 196610, 720981, 2, 3, 720986, 2, 65536, 786433, 2, 196609, 786434, 2, 196610, 786435, 2, 196610, 786436, 2, 196611, 786448, 2, 1, 786449, 2, 196610, 786450, 2, 196610, 786451, 2, 196610, 786452, 2, 196610, 786453, 2, 196610, 786454, 2, 196610, 786455, 2, 196610, 786456, 2, 196610, 786457, 2, 196610, 786458, 2, 196610, 786459, 2, 196610, 786460, 2, 196610, 786461, 2, 196610, 786462, 2, 196610, 786463, 2, 196610, 786464, 2, 196610, 786465, 2, 196610, 786466, 2, 196610, 786467, 2, 196610, 786468, 2, 196610, 786469, 2, 196610, 786470, 2, 196610, 786471, 2, 196610, 786472, 2, 196610, 786473, 2, 196610, 786474, 2, 196610, 786475, 2, 196611, 786477, 2, 196609, 786478, 2, 131075, 786480, 2, 196609, 786481, 2, 196610, 786482, 2, 196610, 786483, 2, 196610, 786484, 2, 196610, 786485, 2, 196610, 786486, 2, 196610, 786487, 2, 196610, 786488, 2, 196610, 786489, 2, 196610, 786490, 2, 196611, 786493, 2, 196609, 786494, 2, 131075, 786517, 2, 65536, 786522, 2, 65536, 851983, 2, 196609, 851984, 2, 131075, 852053, 2, 65536, 852058, 2, 65536, 917579, 1, 0, 917585, 2, 1, 917586, 2, 196610, 917587, 2, 196611, 917589, 2, 131072, 917593, 2, 196609, 917594, 2, 131075, 983065, 2, 1, 983066, 2, 196610, 983067, 2, 196610, 983068, 2, 196611, 983105, 1, 0, 983107, 2, 1, 983108, 2, 196610, 983109, 2, 196610, 983110, 2, 196610, 983111, 2, 196610, 983112, 2, 196610, 983113, 2, 196610, 983114, 2, 196610, 983115, 2, 196610, 983116, 2, 196610, 983117, 2, 196610, 983118, 2, 196610, 983119, 2, 196610, 983120, 2, 196610, 983121, 2, 131075, 1048586, 2, 0, 1048601, 2, 65536, 1048606, 2, 1, 1048607, 2, 196610, 1048608, 2, 196610, 1048609, 2, 196610, 1048610, 2, 196610, 1048611, 2, 196610, 1048612, 2, 196610, 1048613, 2, 196611, 1048635, 2, 196609, 1048636, 2, 196610, 1048637, 2, 196610, 1048638, 2, 196610, 1048639, 2, 196610, 1048640, 2, 196610, 1048641, 2, 196610, 1048642, 2, 196610, 1048643, 2, 131075, 1179647, 2, 196609, 1114112, 2, 196610, 1114113, 2, 196610, 1114114, 2, 196610, 1114115, 2, 196610, 1114116, 2, 196610, 1114117, 2, 196610, 1114118, 2, 196610, 1114119, 2, 196610, 1114120, 2, 196610, 1114121, 2, 2, 1114122, 2, 131075, 1114137, 2, 65536, 1114142, 2, 65536, 1179662, 2, 196609, 1179663, 2, 196610, 1179664, 2, 196610, 1179665, 2, 196610, 1179666, 2, 196610, 1179667, 2, 196610, 1179668, 2, 196611, 1179672, 2, 196609, 1179673, 2, 131075, 1179678, 2, 65536, 1179692, 2, 196609, 1179693, 2, 196610, 1179694, 2, 196610, 1179695, 2, 196611, 1179701, 2, 196609, 1179702, 2, 3, 1179717, 2, 1, 1179718, 2, 196610, 1179719, 2, 196610, 1179720, 2, 196610, 1179721, 2, 196610, 1179722, 2, 196610, 1179723, 2, 196610, 1179724, 2, 196610, 1179725, 2, 196610, 1179726, 2, 196610, 1179727, 2, 196610, 1179728, 2, 196610, 1179729, 2, 196610, 1179730, 2, 196610, 1179731, 2, 3, 1245214, 2, 65536, 1245238, 2, 131073, 1245239, 2, 196610, 1245240, 2, 196611, 1245243, 2, 196609, 1245244, 2, 196610, 1245245, 2, 196610, 1245246, 2, 196610, 1245247, 2, 196610, 1245248, 2, 196610, 1245249, 2, 196610, 1245250, 2, 196610, 1245251, 2, 196610, 1245252, 2, 196610, 1245253, 2, 131075, 1245267, 2, 65536, 1310750, 2, 65536, 1310803, 2, 65536, 1376257, 1, 0, 1376261, 1, 0, 1376265, 1, 0, 1376269, 1, 0, 1376280, 1, 0, 1376284, 1, 0, 1376286, 2, 65537, 1376301, 1, 0, 1376305, 1, 0, 1376309, 1, 0, 1376313, 1, 0, 1376317, 1, 0, 1376321, 1, 0, 1376325, 1, 0, 1376339, 2, 65537, 1376341, 1, 0, 1376345, 1, 0, 1507327, 3, 0, 1441792, 3, 1, 1441793, 3, 1, 1441794, 3, 1, 1441795, 3, 1, 1441796, 3, 1, 1441797, 3, 1, 1441798, 3, 1, 1441799, 3, 1, 1441800, 3, 1, 1441801, 3, 1, 1441802, 3, 1, 1441803, 3, 1, 1441804, 3, 1, 1441805, 3, 1, 1441806, 3, 1, 1441807, 3, 1, 1441808, 3, 1, 1441809, 3, 1, 1441810, 3, 1, 1441811, 3, 1, 1441812, 3, 1, 1441813, 3, 1, 1441814, 3, 1, 1441815, 3, 1, 1441816, 3, 1, 1441817, 3, 1, 1441818, 3, 1, 1441819, 3, 1, 1441820, 3, 1, 1441821, 3, 1, 1441822, 3, 1, 1441823, 3, 1, 1441836, 3, 0, 1441837, 3, 1, 1441838, 3, 1, 1441839, 3, 1, 1441840, 3, 1, 1441841, 3, 1, 1441842, 3, 1, 1441843, 3, 1, 1441844, 3, 1, 1441845, 3, 1, 1441846, 3, 1, 1441847, 3, 1, 1441848, 3, 1, 1441849, 3, 1, 1441850, 3, 1, 1441851, 3, 1, 1441852, 3, 1, 1441853, 3, 1, 1441854, 3, 1, 1441855, 3, 1, 1441856, 3, 1, 1441857, 3, 1, 1441858, 3, 1, 1441859, 3, 1, 1441860, 3, 1, 1441861, 3, 1, 1441862, 3, 1, 1441863, 3, 2, 1441867, 3, 0, 1441868, 3, 2, 1441872, 3, 0, 1441873, 3, 1, 1441874, 3, 1, 1441875, 3, 1, 1441876, 3, 1, 1441877, 3, 1, 1441878, 3, 1, 1441879, 3, 1, 1441880, 3, 1, 1441881, 3, 1, 1441882, 3, 2, 1572863, 3, 65536, 1507328, 3, 65537, 1507329, 3, 65537, 1507330, 3, 65537, 1507331, 3, 65537, 1507332, 3, 65537, 1507333, 3, 65537, 1507334, 3, 65537, 1507335, 3, 65537, 1507336, 3, 65537, 1507337, 3, 65537, 1507338, 3, 65537, 1507339, 3, 65537, 1507340, 3, 65537, 1507341, 3, 65537, 1507342, 3, 65537, 1507343, 3, 65537, 1507344, 3, 65537, 1507345, 3, 65537, 1507346, 3, 65537, 1507347, 3, 65537, 1507348, 3, 65537, 1507349, 3, 65537, 1507350, 3, 65537, 1507351, 3, 65537, 1507352, 3, 65537, 1507353, 3, 65537, 1507354, 3, 65537, 1507355, 3, 65537, 1507356, 3, 65537, 1507357, 3, 65537, 1507358, 3, 65537, 1507359, 3, 65537, 1507372, 3, 65536, 1507373, 3, 65537, 1507374, 3, 65537, 1507375, 3, 65537, 1507376, 3, 65537, 1507377, 3, 65537, 1507378, 3, 65537, 1507379, 3, 65537, 1507380, 3, 65537, 1507381, 3, 65537, 1507382, 3, 65537, 1507383, 3, 65537, 1507384, 3, 65537, 1507385, 3, 65537, 1507386, 3, 65537, 1507387, 3, 65537, 1507388, 3, 65537, 1507389, 3, 65537, 1507390, 3, 65537, 1507391, 3, 65537, 1507392, 3, 65537, 1507393, 3, 65537, 1507394, 3, 65537, 1507395, 3, 65537, 1507396, 3, 65537, 1507397, 3, 65537, 1507398, 3, 65537, 1507399, 3, 65538, 1507403, 3, 65536, 1507404, 3, 65538, 1507408, 3, 65536, 1507409, 3, 65537, 1507410, 3, 65537, 1507411, 3, 65537, 1507412, 3, 65537, 1507413, 3, 65537, 1507414, 3, 65537, 1507415, 3, 65537, 1507416, 3, 65537, 1507417, 3, 65537, 1507418, 3, 65538 )
[node name="Player" parent="." instance=ExtResource( 6 )]
-position = Vector2( 24, 166 )
+position = Vector2( 24, 176 )
+
+[node name="StaticBody2D2" type="StaticBody2D" parent="."]
+position = Vector2( 752, 8 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D2"]
+position = Vector2( 8.5, 20 )
+shape = SubResource( 2 )
+
+[node name="Area2D" type="Area2D" parent="."]
+position = Vector2( 832, 224 )
+script = ExtResource( 29 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2( 224, 36 )
+shape = SubResource( 3 )
[node name="Ladder" type="TileMap" parent="."]
-tile_set = ExtResource( 4 )
+tile_set = ExtResource( 19 )
cell_size = Vector2( 8, 8 )
format = 1
-tile_data = PoolIntArray( 393303, 0, 196608, 458839, 0, 196608, 524375, 0, 196608, 589911, 0, 196608, 655367, 0, 196608, 655447, 0, 196608, 720903, 0, 196608, 720983, 0, 196608, 786519, 0, 196608, 852055, 0, 196608, 917516, 0, 196608, 917591, 0, 196608, 983052, 0, 196608, 983127, 0, 196608, 1048588, 0, 196608, 1048663, 0, 196608, 1114199, 0, 196608, 1179735, 0, 196608, 1245271, 0, 196608 )
+tile_data = PoolIntArray( 393303, 0, 1, 458839, 0, 1, 524375, 0, 1, 589911, 0, 1, 655367, 0, 1, 655447, 0, 1, 720903, 0, 1, 720983, 0, 1, 786519, 0, 1, 852055, 0, 1, 917516, 0, 1, 917591, 0, 1, 983052, 0, 1, 983127, 0, 1, 1048588, 0, 1, 1048663, 0, 1, 1114199, 0, 1, 1179735, 0, 1, 1245271, 0, 1 )
-[node name="Death" type="TileMap" parent="."]
+[node name="Death" type="TileMap" parent="." groups=["death", "no_blood"]]
+tile_set = ExtResource( 18 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1507360, 3, 0, 1507361, 3, 0, 1507362, 3, 0, 1507363, 3, 0, 1507364, 3, 0, 1507365, 3, 0, 1507366, 3, 0, 1507367, 3, 0, 1507368, 3, 0, 1507369, 3, 0, 1507370, 3, 0, 1507371, 3, 0, 1507400, 3, 0, 1507401, 3, 0, 1507402, 3, 0, 1507405, 3, 0, 1507406, 3, 0, 1507407, 3, 0, 1507419, 3, 0, 1507420, 3, 0, 1507421, 3, 0, 1507422, 3, 0, 1507423, 3, 0 )
+script = ExtResource( 28 )
+splash_color = Color( 0.227451, 0.627451, 1, 1 )
+
+[node name="DeathBackground" type="TileMap" parent="Death"]
+z_index = -11
tile_set = ExtResource( 18 )
cell_size = Vector2( 8, 8 )
format = 1
-tile_data = PoolIntArray( 589892, 1, 0, 589893, 1, 0, 589894, 1, 0, 589895, 1, 0, 589896, 1, 0, 720916, 1, 0, 720932, 1, 0, 720938, 1, 0, 720939, 1, 0, 720940, 1, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1507360, 3, 0, 1507361, 3, 0, 1507362, 3, 0, 1507363, 3, 0, 1507364, 3, 0, 1507365, 3, 0, 1507366, 3, 0, 1507367, 3, 0, 1507368, 3, 0, 1507369, 3, 0, 1507370, 3, 0, 1507371, 3, 0, 1507400, 3, 0, 1507401, 3, 0, 1507402, 3, 0, 1507405, 3, 0, 1507406, 3, 0, 1507407, 3, 0, 1507419, 3, 0, 1507420, 3, 0, 1507421, 3, 0, 1507422, 3, 0, 1507423, 3, 0 )
+tile_data = PoolIntArray( 1441836, 0, 0, 1441863, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441872, 0, 0, 1441882, 0, 0, 1507372, 3, 0, 1507399, 3, 0, 1507403, 3, 0, 1507404, 3, 0, 1507408, 3, 0, 1507418, 3, 0 )
[node name="Platforms" type="Node2D" parent="."]
@@ -80,100 +125,140 @@ scale = Vector2( 1, 14 )
[node name="Turniwood" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 0, 96 )
+texture = ExtResource( 30 )
[node name="Turniwood2" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 72, 104 )
+texture = ExtResource( 30 )
+
+[node name="Turniwood30" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 216, 72 )
+time = 20.0
+texture = ExtResource( 30 )
[node name="Turniwood5" parent="Platforms" instance=ExtResource( 13 )]
-position = Vector2( 344, 80 )
+position = Vector2( 352, 80 )
+texture = ExtResource( 30 )
[node name="Turniwood12" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 464, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood24" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 456, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood25" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 448, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood13" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 472, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood14" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 480, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood15" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 488, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood16" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 496, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood17" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 504, 24 )
time = 30.0
+texture = ExtResource( 30 )
[node name="Turniwood20" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 736, 160 )
+texture = ExtResource( 30 )
[node name="Turniwood21" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 752, 144 )
delay = 0.5
+texture = ExtResource( 30 )
[node name="Turniwood22" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 736, 128 )
delay = 1.0
+texture = ExtResource( 30 )
[node name="Turniwood23" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 752, 120 )
delay = 1.5
+texture = ExtResource( 30 )
[node name="Turniwood26" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 736, 104 )
delay = 2.0
+texture = ExtResource( 30 )
[node name="Turniwood27" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 752, 88 )
delay = 2.5
+texture = ExtResource( 30 )
[node name="Turniwood10" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 448, 128 )
+texture = ExtResource( 30 )
[node name="Turniwood6" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 560, 64 )
+texture = ExtResource( 30 )
[node name="Turniwood3" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 96, 160 )
+texture = ExtResource( 30 )
+
+[node name="Turniwood28" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 176, 152 )
+texture = ExtResource( 30 )
[node name="Turniwood9" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 120, 48 )
+texture = ExtResource( 30 )
[node name="Turniwood4" parent="Platforms" instance=ExtResource( 13 )]
-position = Vector2( 128, 104 )
+position = Vector2( 136, 80 )
+texture = ExtResource( 30 )
[node name="Turniwood11" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 336, 136 )
+texture = ExtResource( 30 )
[node name="Turniwood19" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 400, 144 )
+texture = ExtResource( 30 )
+
+[node name="Turniwood29" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 328, 40 )
+texture = ExtResource( 30 )
[node name="Turniwood18" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 312, 136 )
delay = 1.0
+texture = ExtResource( 30 )
[node name="Turniwood7" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 456, 152 )
time = 90.0
+texture = ExtResource( 30 )
[node name="Turniwood8" parent="Platforms" instance=ExtResource( 13 )]
position = Vector2( 464, 152 )
time = 90.0
+texture = ExtResource( 30 )
[node name="Barrier" parent="Platforms" instance=ExtResource( 15 )]
position = Vector2( 164, 152 )
@@ -193,27 +278,15 @@ cost = 30
[node name="Rock" parent="Platforms" instance=ExtResource( 17 )]
position = Vector2( 200, 112 )
-[node name="Enemies" type="Node2D" parent="."]
+[node name="Rock2" parent="Platforms" instance=ExtResource( 17 )]
+position = Vector2( 232, 88 )
-[node name="JumpingSpider" parent="Enemies" instance=ExtResource( 10 )]
-position = Vector2( 56, 168 )
-left_boundary = 2
-right_boundary = 4
+[node name="Enemies" type="Node2D" parent="."]
[node name="JumpingSpider5" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 16, 40 )
left_boundary = 2
-right_boundary = 3
-
-[node name="JumpingSpider4" parent="Enemies" instance=ExtResource( 10 )]
-position = Vector2( 208, 88 )
-left_boundary = 2
-right_boundary = 3
-
-[node name="JumpingSpider7" parent="Enemies" instance=ExtResource( 10 )]
-position = Vector2( 216, 48 )
-left_boundary = 2
-right_boundary = 3
+right_boundary = 4
[node name="JumpingSpider8" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 392, 24 )
@@ -223,50 +296,37 @@ right_boundary = 4
[node name="Skelarcher" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 200, 136 )
scale = Vector2( -1, 1 )
-shoot_time = 2.0
-arrow_speed = 80.0
[node name="Skelarcher10" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 456, 64 )
scale = Vector2( -1, 1 )
-arrow_speed = 80.0
+shoot_time = 3.0
[node name="Skelarcher8" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 240, 24 )
scale = Vector2( -1, 1 )
-arrow_speed = 100.0
-
-[node name="Skelarcher6" parent="Enemies" instance=ExtResource( 5 )]
-position = Vector2( 96, 56 )
-scale = Vector2( -1, 1 )
-shoot_time = 2.0
-arrow_speed = 80.0
+shoot_time = 3.0
[node name="Skelarcher4" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 616, 56 )
scale = Vector2( -1, 1 )
-shoot_time = 2.0
-arrow_speed = 80.0
+shoot_time = 3.0
[node name="Skelarcher7" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 648, 112 )
scale = Vector2( -1, 1 )
-shoot_time = 2.0
-arrow_speed = 80.0
+shoot_time = 3.0
[node name="Skelarcher5" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 384, 88 )
-arrow_speed = 80.0
+shoot_time = 4.0
-[node name="Skelarcher11" parent="Enemies" instance=ExtResource( 5 )]
+[node name="Telstar" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 352, 136 )
shoot_time = 6.0
-arrow_speed = 80.0
[node name="Skelarcher2" parent="Enemies" instance=ExtResource( 5 )]
position = Vector2( 16, 128 )
-shoot_time = 1.0
-arrow_speed = 80.0
[node name="JumpingSpider2" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 144, 168 )
@@ -279,14 +339,19 @@ speed = 50.0
down_boundary = 5
[node name="Spider2" parent="Enemies" instance=ExtResource( 9 )]
-position = Vector2( 184, 64 )
-down_boundary = 3
+position = Vector2( 216, 40 )
+speed = 20.0
+down_boundary = 6
[node name="Spider7" parent="Enemies" instance=ExtResource( 9 )]
position = Vector2( 16, 56 )
speed = 50.0
down_boundary = 4
+[node name="Spider12" parent="Enemies" instance=ExtResource( 9 )]
+position = Vector2( 48, 144 )
+down_boundary = 3
+
[node name="Spider3" parent="Enemies" instance=ExtResource( 9 )]
position = Vector2( 536, 88 )
speed = 40.0
@@ -344,7 +409,7 @@ position = Vector2( 152, 136 )
position = Vector2( 232, 128 )
[node name="Gold11" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 216, 112 )
+position = Vector2( 232, 160 )
[node name="Gold10" parent="Collectibles" instance=ExtResource( 11 )]
position = Vector2( 232, 144 )
@@ -359,7 +424,7 @@ position = Vector2( 32, 40 )
position = Vector2( 152, 24 )
[node name="Gold45" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 112, 72 )
+position = Vector2( 112, 64 )
[node name="Gold46" parent="Collectibles" instance=ExtResource( 11 )]
position = Vector2( 24, 88 )
@@ -383,16 +448,16 @@ position = Vector2( 184, 24 )
position = Vector2( 216, 24 )
[node name="Gold17" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 208, 48 )
+position = Vector2( 192, 56 )
[node name="Gold18" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 232, 48 )
+position = Vector2( 240, 48 )
[node name="Gold23" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 184, 88 )
+position = Vector2( 96, 56 )
[node name="Gold24" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 320, 40 )
+position = Vector2( 344, 48 )
[node name="Gold25" parent="Collectibles" instance=ExtResource( 11 )]
position = Vector2( 312, 88 )
@@ -437,7 +502,7 @@ position = Vector2( 560, 56 )
position = Vector2( 640, 136 )
[node name="Gold36" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 608, 136 )
+position = Vector2( 304, 48 )
[node name="Gold51" parent="Collectibles" instance=ExtResource( 11 )]
position = Vector2( 632, 56 )
@@ -464,7 +529,7 @@ position = Vector2( 416, 24 )
position = Vector2( 368, 24 )
[node name="Gold44" parent="Collectibles" instance=ExtResource( 11 )]
-position = Vector2( 232, 88 )
+position = Vector2( 72, 56 )
[node name="Gold22" parent="Collectibles" instance=ExtResource( 11 )]
position = Vector2( 536, 112 )
@@ -495,7 +560,7 @@ position = Vector2( 0, 88 )
color = 1
[node name="Star4" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 184, 48 )
+position = Vector2( 168, 48 )
color = 2
[node name="Star3" parent="Collectibles" instance=ExtResource( 14 )]
@@ -506,7 +571,8 @@ color = 3
position = Vector2( 496, 16 )
color = 4
-[node name="CanvasLayer" parent="." instance=ExtResource( 7 )]
+[node name="HUD" parent="." instance=ExtResource( 7 )]
+song_name = "♫Dusk Park"
[node name="ColorRect" type="ColorRect" parent="."]
margin_left = 256.0
@@ -531,46 +597,16 @@ __meta__ = {
[node name="StaticBody2D" type="StaticBody2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
-position = Vector2( -4, 96 )
-shape = SubResource( 1 )
+position = Vector2( -18, 96 )
+shape = SubResource( 4 )
[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
-position = Vector2( 772, 96 )
+position = Vector2( 800, 116 )
shape = SubResource( 1 )
[node name="Exit" parent="." instance=ExtResource( 21 )]
position = Vector2( 746, 36 )
-cost = 2
-
-[node name="DeathTile" parent="." instance=ExtResource( 19 )]
-position = Vector2( 544, 72 )
-scale = Vector2( 5, 1 )
-
-[node name="DeathTile5" parent="." instance=ExtResource( 19 )]
-position = Vector2( 728, 192 )
-scale = Vector2( 5, 2 )
-
-[node name="DeathTile6" parent="." instance=ExtResource( 19 )]
-position = Vector2( 616, 192 )
-scale = Vector2( 3, 2 )
-
-[node name="DeathTile7" parent="." instance=ExtResource( 19 )]
-position = Vector2( 576, 192 )
-scale = Vector2( 3, 2 )
-
-[node name="DeathTile8" parent="." instance=ExtResource( 19 )]
-position = Vector2( 256, 192 )
-scale = Vector2( 12, 2 )
-
-[node name="DeathTile2" parent="." instance=ExtResource( 19 )]
-position = Vector2( 336, 88 )
-scale = Vector2( 3, 1 )
-
-[node name="DeathTile3" parent="." instance=ExtResource( 19 )]
-position = Vector2( 288, 88 )
-
-[node name="DeathTile4" parent="." instance=ExtResource( 19 )]
-position = Vector2( 160, 88 )
+cost = 25
[node name="Shard" parent="." instance=ExtResource( 20 )]
position = Vector2( 656, 104 )
@@ -586,3 +622,5 @@ number = 1
[node name="Shard4" parent="." instance=ExtResource( 20 )]
position = Vector2( 264, 120 )
+
+[connection signal="area_entered" from="Area2D" to="Area2D" method="_on_Area2D_area_entered"]
diff --git a/maps/cave.tscn b/maps/cave.tscn
index 4086676..66b0830 100644
--- a/maps/cave.tscn
+++ b/maps/cave.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=26 format=2]
+[gd_scene load_steps=32 format=2]
[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1]
[ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2]
@@ -11,29 +11,36 @@
[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=9]
[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=10]
[ext_resource path="res://maps/map.gd" type="Script" id=11]
-[ext_resource path="res://audio/music/smokestack.mp3" type="AudioStream" id=12]
+[ext_resource path="res://audio/music/smokestack.ogg" type="AudioStream" id=12]
[ext_resource path="res://objects/enemy/rolling_fiend.tscn" type="PackedScene" id=13]
-[ext_resource path="res://objects/collectibles/gold.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=14]
[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=15]
[ext_resource path="res://objects/enemy/tentacle.tscn" type="PackedScene" id=16]
[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=17]
-[ext_resource path="res://objects/environment/falling_block/falling_block.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=18]
[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=19]
[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=20]
[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=21]
-[ext_resource path="res://objects/environment/death tile/death_tile.tscn" type="PackedScene" id=22]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=22]
[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=23]
[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=24]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=25]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/lore/cave/shedge.tscn" type="PackedScene" id=27]
+[ext_resource path="res://objects/lore/cave/the_scrumps_tongue.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/lore/cave/blue_ray_cavern.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/mountain/rolling_fiend.tscn" type="PackedScene" id=30]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 4, 96 )
-[node name="Map2" type="Node2D" groups=["map"]]
+[node name="Map" type="Node2D" groups=["map"]]
pause_mode = 1
script = ExtResource( 11 )
target_time_any = 80
target_time_100 = 180
music = ExtResource( 12 )
+lore_entries = [ ExtResource( 29 ), ExtResource( 27 ), ExtResource( 28 ), ExtResource( 30 ), ExtResource( 26 ) ]
[node name="Camera2D" parent="." instance=ExtResource( 6 )]
@@ -45,28 +52,34 @@ __meta__ = {
"_edit_lock_": true
}
-[node name="CanvasLayer" parent="." instance=ExtResource( 4 )]
+[node name="HUD" parent="." instance=ExtResource( 4 )]
+song_name = "♫Smokestack"
-[node name="Ground" type="TileMap" parent="."]
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 25 )
tile_set = ExtResource( 2 )
cell_size = Vector2( 8, 8 )
collision_layer = 9
format = 1
-tile_data = PoolIntArray( 36, 0, 0, 65572, 0, 0, 131108, 0, 0, 131155, 0, 65537, 131156, 0, 65537, 196644, 0, 65537, 196645, 0, 65537, 196646, 0, 65537, 196697, 0, 262145, 262153, 0, 65537, 262154, 0, 65537, 262155, 0, 65537, 262156, 0, 0, 262159, 0, 65537, 262160, 0, 65537, 262161, 0, 65537, 262162, 0, 65537, 262163, 0, 65537, 262164, 0, 65537, 262165, 0, 65537, 262216, 0, 65537, 262217, 0, 65537, 262218, 0, 65537, 262229, 0, 65537, 262230, 0, 65537, 262231, 0, 65537, 262232, 0, 65537, 262233, 0, 65537, 262234, 0, 65537, 327685, 0, 65537, 327686, 0, 65537, 327687, 0, 65537, 327692, 0, 0, 327734, 0, 262144, 327738, 0, 262145, 327748, 0, 262145, 327771, 0, 65537, 327772, 0, 65537, 327773, 0, 65537, 393228, 0, 0, 393240, 0, 262145, 393249, 0, 262145, 393258, 0, 65537, 393259, 0, 65537, 393260, 0, 65537, 393263, 0, 65537, 393264, 0, 65537, 393265, 0, 65537, 393269, 0, 65537, 393270, 0, 65537, 393271, 0, 65537, 393272, 0, 65537, 393273, 0, 65537, 393274, 0, 65537, 393275, 0, 65537, 393276, 0, 65537, 393277, 0, 65537, 393279, 0, 0, 393280, 0, 65537, 393281, 0, 65537, 393282, 0, 65537, 393283, 0, 65537, 393284, 0, 65537, 393285, 0, 65537, 393292, 0, 65537, 458763, 0, 65537, 458764, 0, 65537, 458774, 0, 65537, 458775, 0, 65537, 458776, 0, 65537, 458777, 0, 65537, 458778, 0, 65537, 458779, 0, 65537, 458782, 0, 65537, 458783, 0, 65537, 458784, 0, 65537, 458785, 0, 65537, 458786, 0, 65537, 458787, 0, 65537, 458815, 0, 0, 524351, 0, 0, 655365, 0, 262145, 720896, 0, 65537, 720897, 0, 65537, 720898, 0, 65537, 720899, 0, 65537, 720900, 0, 65537, 720901, 0, 65537, 720902, 0, 65537, 720903, 0, 65537, 720904, 0, 65537, 720919, 0, 0, 720931, 0, 262145, 720954, 0, 262144, 720972, 0, 262145, 720982, 0, 262145, 786448, 0, 262144, 786452, 0, 262145, 786455, 0, 65537, 786456, 0, 65537, 786457, 0, 65537, 786458, 0, 0, 786464, 0, 65537, 786465, 0, 65537, 786466, 0, 65537, 786467, 0, 65537, 786468, 0, 65537, 786469, 0, 65537, 786477, 0, 65537, 786478, 0, 65537, 786479, 0, 65537, 786480, 0, 65537, 786481, 0, 65537, 786485, 0, 65537, 786486, 0, 65537, 786487, 0, 65537, 786488, 0, 65537, 786489, 0, 65537, 786490, 0, 65537, 786491, 0, 65537, 786494, 0, 0, 786495, 0, 0, 786496, 0, 65537, 786497, 0, 65537, 786498, 0, 65537, 786499, 0, 65537, 786500, 0, 65537, 786501, 0, 65537, 786502, 0, 65537, 786503, 0, 65537, 786504, 0, 65537, 786505, 0, 65537, 786506, 0, 65537, 786507, 0, 65537, 786508, 0, 65537, 786509, 0, 65537, 786510, 0, 65537, 786511, 0, 65537, 786512, 0, 65537, 786513, 0, 65537, 786514, 0, 65537, 786515, 0, 65537, 786516, 0, 65537, 786517, 0, 65537, 786518, 0, 65537, 786519, 0, 65537, 786520, 0, 65537, 786521, 0, 0, 786522, 0, 196610, 786526, 0, 65537, 786527, 0, 65537, 851983, 0, 65537, 851984, 0, 65537, 851985, 0, 65537, 851986, 0, 65537, 851987, 0, 65537, 851988, 0, 65537, 851989, 0, 65537, 851994, 0, 0, 852030, 0, 0, 852031, 0, 0, 852057, 0, 0, 852058, 0, 196608, 917509, 0, 262144, 917530, 0, 0, 917566, 0, 0, 917567, 0, 0, 917593, 0, 0, 917594, 0, 196608, 983040, 0, 65537, 983043, 0, 0, 983044, 0, 65537, 983045, 0, 65537, 983046, 0, 65537, 983047, 0, 65537, 983048, 0, 65537, 983049, 0, 65537, 983050, 0, 65537, 983051, 0, 65537, 983066, 0, 0, 983084, 0, 262145, 983102, 0, 0, 983103, 0, 0, 983113, 0, 262144, 983129, 0, 0, 983130, 0, 196609, 1048579, 0, 0, 1048591, 0, 65537, 1048592, 0, 65537, 1048593, 0, 65537, 1048594, 0, 65537, 1048595, 0, 65537, 1048596, 0, 65537, 1048597, 0, 65537, 1048598, 0, 65537, 1048599, 0, 65537, 1048600, 0, 65537, 1048601, 0, 65537, 1048602, 0, 65537, 1048607, 0, 131072, 1048608, 0, 0, 1048609, 0, 0, 1048610, 0, 0, 1048611, 0, 0, 1048612, 0, 0, 1048613, 0, 131073, 1048617, 0, 131072, 1048618, 0, 0, 1048619, 0, 0, 1048620, 0, 0, 1048621, 0, 0, 1048622, 0, 0, 1048623, 0, 0, 1048624, 0, 0, 1048625, 0, 0, 1048626, 0, 0, 1048627, 0, 0, 1048628, 0, 0, 1048629, 0, 0, 1048630, 0, 0, 1048631, 0, 131073, 1048633, 0, 196610, 1048638, 0, 0, 1048639, 0, 0, 1048648, 0, 65537, 1048649, 0, 65537, 1048650, 0, 65537, 1048651, 0, 65537, 1048665, 0, 65537, 1048666, 0, 65537, 1048667, 0, 65537, 1048668, 0, 65537, 1048669, 0, 65537, 1048670, 0, 65537, 1048671, 0, 65537, 1114115, 0, 0, 1114143, 0, 0, 1114144, 0, 0, 1114145, 0, 0, 1114146, 0, 0, 1114147, 0, 0, 1114148, 0, 0, 1114149, 0, 0, 1114153, 0, 0, 1114154, 0, 0, 1114155, 0, 0, 1114156, 0, 0, 1114157, 0, 0, 1114158, 0, 0, 1114159, 0, 65537, 1114160, 0, 65537, 1114161, 0, 0, 1114162, 0, 0, 1114163, 0, 0, 1114164, 0, 65537, 1114165, 0, 65537, 1114166, 0, 0, 1114167, 0, 0, 1114168, 0, 131073, 1114169, 0, 196608, 1114174, 0, 0, 1114175, 0, 0, 1114190, 0, 65537, 1114191, 0, 65537, 1114192, 0, 65537, 1114197, 0, 65537, 1114198, 0, 0, 1179649, 0, 65537, 1179650, 0, 65537, 1179651, 0, 65537, 1179678, 0, 131072, 1179679, 0, 0, 1179680, 0, 0, 1179681, 0, 0, 1179682, 0, 0, 1179683, 0, 0, 1179684, 0, 0, 1179685, 0, 0, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 0, 1179693, 0, 0, 1179694, 0, 0, 1179697, 0, 0, 1179698, 0, 0, 1179699, 0, 0, 1179702, 0, 0, 1179703, 0, 0, 1179704, 0, 0, 1179705, 0, 196608, 1179710, 0, 0, 1179711, 0, 0, 1179734, 0, 0, 1179741, 0, 262145, 1245192, 0, 65537, 1245193, 0, 65537, 1245194, 0, 65537, 1245195, 0, 65537, 1245213, 0, 131072, 1245214, 0, 0, 1245215, 0, 0, 1245216, 0, 0, 1245217, 0, 0, 1245218, 0, 0, 1245219, 0, 0, 1245220, 0, 0, 1245221, 0, 0, 1245225, 0, 65537, 1245226, 0, 65537, 1245227, 0, 65537, 1245228, 0, 65537, 1245229, 0, 65537, 1245230, 0, 65537, 1245233, 0, 65537, 1245234, 0, 65537, 1245235, 0, 65537, 1245238, 0, 0, 1245239, 0, 0, 1245240, 0, 0, 1245241, 0, 196608, 1245270, 0, 65537, 1245271, 0, 65537, 1245272, 0, 65537, 1245273, 0, 65537, 1245274, 0, 65537, 1245275, 0, 65537, 1245276, 0, 65537, 1245277, 0, 65537, 1245278, 0, 65537, 1245279, 0, 65537, 1310749, 0, 0, 1310750, 0, 0, 1310751, 0, 0, 1310752, 0, 0, 1310753, 0, 0, 1310754, 0, 0, 1310755, 0, 0, 1310756, 0, 0, 1310757, 0, 0, 1310774, 0, 0, 1310775, 0, 0, 1310776, 0, 0, 1310777, 0, 196608, 1376268, 0, 262144, 1376285, 0, 0, 1376286, 0, 0, 1376287, 0, 0, 1376288, 0, 0, 1376289, 0, 0, 1376290, 0, 0, 1376291, 0, 0, 1376292, 0, 0, 1376293, 0, 0, 1376298, 0, 262145, 1376303, 0, 262144, 1376310, 0, 0, 1376311, 0, 0, 1376312, 0, 0, 1376313, 0, 196609, 1376325, 0, 262144, 1376332, 0, 262144, 1376340, 0, 262144, 1376345, 0, 262145, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441836, 0, 0, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1441878, 0, 0, 1441879, 0, 0, 1441880, 0, 0, 1441881, 0, 0, 1441882, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0, 1507360, 0, 0, 1507361, 0, 0, 1507362, 0, 0, 1507363, 0, 0, 1507364, 0, 0, 1507365, 0, 0, 1507366, 0, 0, 1507367, 0, 0, 1507368, 0, 0, 1507369, 0, 0, 1507370, 0, 0, 1507371, 0, 0, 1507372, 0, 0, 1507373, 0, 0, 1507374, 0, 0, 1507375, 0, 0, 1507376, 0, 0, 1507377, 0, 0, 1507378, 0, 0, 1507379, 0, 0, 1507380, 0, 0, 1507381, 0, 0, 1507382, 0, 0, 1507383, 0, 0, 1507384, 0, 0, 1507385, 0, 0, 1507386, 0, 0, 1507387, 0, 0, 1507388, 0, 0, 1507389, 0, 0, 1507390, 0, 0, 1507391, 0, 0, 1507392, 0, 0, 1507393, 0, 0, 1507394, 0, 0, 1507395, 0, 0, 1507396, 0, 0, 1507397, 0, 0, 1507398, 0, 0, 1507399, 0, 0, 1507400, 0, 0, 1507401, 0, 0, 1507402, 0, 0, 1507403, 0, 0, 1507404, 0, 0, 1507405, 0, 0, 1507406, 0, 0, 1507407, 0, 0, 1507408, 0, 0, 1507409, 0, 0, 1507410, 0, 0, 1507411, 0, 0, 1507412, 0, 0, 1507413, 0, 0, 1507414, 0, 0, 1507415, 0, 0, 1507416, 0, 0, 1507417, 0, 0, 1507418, 0, 0, 1507419, 0, 0, 1507420, 0, 0, 1507421, 0, 0, 1507422, 0, 0, 1507423, 0, 0 )
+tile_data = PoolIntArray( 65571, 0, 0, 131107, 0, 0, 131155, 0, 65537, 131156, 0, 65537, 196643, 0, 0, 196697, 0, 262145, 262153, 0, 65537, 262154, 0, 65537, 262155, 0, 65537, 262156, 0, 131073, 262159, 0, 65537, 262160, 0, 65537, 262161, 0, 65537, 262162, 0, 65537, 262163, 0, 65537, 262164, 0, 65537, 262165, 0, 65537, 262179, 0, 65537, 262180, 0, 65537, 262181, 0, 65537, 262182, 0, 65537, 262216, 0, 65537, 262217, 0, 65537, 262218, 0, 65537, 262229, 0, 65537, 262230, 0, 65537, 262231, 0, 65537, 262232, 0, 65537, 262233, 0, 65537, 262234, 0, 65537, 327685, 0, 65537, 327686, 0, 65537, 327687, 0, 65537, 327692, 0, 0, 327727, 0, 65537, 327728, 0, 65537, 327729, 0, 65537, 327734, 0, 262144, 327738, 0, 262145, 327748, 0, 262145, 327771, 0, 65537, 327772, 0, 65537, 327773, 0, 65537, 393228, 0, 0, 393240, 0, 262145, 393258, 0, 65537, 393259, 0, 65537, 393260, 0, 65537, 393269, 0, 65537, 393270, 0, 65537, 393271, 0, 65537, 393272, 0, 65537, 393273, 0, 65537, 393274, 0, 65537, 393275, 0, 65537, 393276, 0, 65537, 393277, 0, 65537, 393279, 0, 131072, 393280, 0, 65537, 393281, 0, 65537, 393282, 0, 65537, 393283, 0, 65537, 393284, 0, 65537, 393285, 0, 65537, 393292, 0, 65537, 458763, 0, 65537, 458764, 0, 65537, 458774, 0, 65537, 458775, 0, 65537, 458776, 0, 65537, 458777, 0, 65537, 458778, 0, 65537, 458779, 0, 65537, 458785, 0, 262145, 458815, 0, 0, 524318, 0, 65537, 524319, 0, 65537, 524320, 0, 65537, 524321, 0, 65537, 524322, 0, 65537, 524323, 0, 65537, 524351, 0, 0, 655365, 0, 262145, 786431, 0, 65537, 720896, 0, 65537, 720897, 0, 65537, 720898, 0, 65537, 720899, 0, 65537, 720900, 0, 65537, 720901, 0, 65537, 720902, 0, 65537, 720903, 0, 65537, 720904, 0, 65537, 720905, 0, 65537, 720919, 0, 0, 720931, 0, 262145, 720954, 0, 262144, 720972, 0, 262145, 720982, 0, 262145, 786448, 0, 262144, 786452, 0, 262145, 786455, 0, 65537, 786456, 0, 65537, 786457, 0, 65537, 786458, 0, 131073, 786462, 0, 65537, 786463, 0, 65537, 786464, 0, 65537, 786465, 0, 65537, 786466, 0, 65537, 786467, 0, 65537, 786468, 0, 65537, 786469, 0, 65537, 786477, 0, 65537, 786478, 0, 65537, 786479, 0, 65537, 786480, 0, 65537, 786481, 0, 65537, 786485, 0, 65537, 786486, 0, 65537, 786487, 0, 65537, 786488, 0, 65537, 786489, 0, 65537, 786490, 0, 65537, 786491, 0, 65537, 786494, 0, 131072, 786495, 0, 0, 786496, 0, 65537, 786497, 0, 65537, 786498, 0, 65537, 786499, 0, 65537, 786500, 0, 65537, 786501, 0, 65537, 786502, 0, 65537, 786503, 0, 65537, 786504, 0, 65537, 786505, 0, 65537, 786506, 0, 65537, 786507, 0, 65537, 786508, 0, 65537, 786509, 0, 65537, 786510, 0, 65537, 786511, 0, 65537, 786512, 0, 65537, 786513, 0, 65537, 786514, 0, 65537, 786515, 0, 65537, 786516, 0, 65537, 786517, 0, 65537, 786518, 0, 65537, 786519, 0, 65537, 786520, 0, 65537, 786521, 0, 131073, 786525, 0, 65537, 786526, 0, 65537, 786527, 0, 65537, 786528, 0, 65537, 851984, 0, 65537, 851985, 0, 65537, 851986, 0, 65537, 851987, 0, 65537, 851988, 0, 65537, 851989, 0, 65537, 851994, 0, 0, 852030, 0, 0, 852031, 0, 0, 852057, 0, 0, 917509, 0, 262144, 917530, 0, 0, 917566, 0, 0, 917567, 0, 0, 917593, 0, 0, 1048575, 0, 65537, 983040, 0, 65537, 983043, 0, 131072, 983044, 0, 65537, 983045, 0, 65537, 983046, 0, 65537, 983047, 0, 65537, 983048, 0, 65537, 983049, 0, 65537, 983050, 0, 65537, 983051, 0, 65537, 983066, 0, 0, 983084, 0, 262145, 983102, 0, 0, 983103, 0, 0, 983113, 0, 262144, 983129, 0, 0, 1048579, 0, 0, 1048592, 0, 65537, 1048593, 0, 65537, 1048594, 0, 65537, 1048595, 0, 65537, 1048596, 0, 65537, 1048597, 0, 65537, 1048598, 0, 65537, 1048599, 0, 65537, 1048600, 0, 65537, 1048601, 0, 65537, 1048602, 0, 65537, 1048607, 0, 131072, 1048608, 0, 0, 1048609, 0, 0, 1048610, 0, 0, 1048611, 0, 0, 1048612, 0, 0, 1048613, 0, 131073, 1048617, 0, 131072, 1048618, 0, 0, 1048619, 0, 0, 1048620, 0, 0, 1048621, 0, 0, 1048622, 0, 0, 1048623, 0, 0, 1048624, 0, 0, 1048625, 0, 0, 1048626, 0, 0, 1048627, 0, 0, 1048628, 0, 0, 1048629, 0, 0, 1048630, 0, 0, 1048631, 0, 131073, 1048638, 0, 0, 1048639, 0, 0, 1048648, 0, 65537, 1048649, 0, 65537, 1048650, 0, 65537, 1048651, 0, 65537, 1048665, 0, 65537, 1048666, 0, 65537, 1048667, 0, 65537, 1048668, 0, 65537, 1048669, 0, 65537, 1048670, 0, 65537, 1048671, 0, 65537, 1048672, 0, 65537, 1114115, 0, 0, 1114143, 0, 0, 1114144, 0, 0, 1114145, 0, 0, 1114146, 0, 0, 1114147, 0, 0, 1114148, 0, 0, 1114149, 0, 0, 1114153, 0, 0, 1114154, 0, 0, 1114155, 0, 0, 1114156, 0, 0, 1114157, 0, 0, 1114158, 0, 0, 1114159, 0, 65537, 1114160, 0, 65537, 1114161, 0, 0, 1114162, 0, 0, 1114163, 0, 0, 1114164, 0, 65537, 1114165, 0, 65537, 1114166, 0, 0, 1114167, 0, 0, 1114168, 0, 131073, 1114174, 0, 0, 1114175, 0, 0, 1114190, 0, 65537, 1114191, 0, 65537, 1114192, 0, 65537, 1114197, 0, 65537, 1114198, 0, 131073, 1179649, 0, 65537, 1179650, 0, 65537, 1179651, 0, 65537, 1179678, 0, 131072, 1179679, 0, 0, 1179680, 0, 0, 1179681, 0, 0, 1179682, 0, 0, 1179683, 0, 0, 1179684, 0, 0, 1179685, 0, 0, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 0, 1179693, 0, 0, 1179694, 0, 0, 1179697, 0, 0, 1179698, 0, 0, 1179699, 0, 0, 1179702, 0, 0, 1179703, 0, 0, 1179704, 0, 0, 1179710, 0, 0, 1179711, 0, 0, 1179734, 0, 0, 1179741, 0, 262145, 1245192, 0, 65537, 1245193, 0, 65537, 1245194, 0, 65537, 1245195, 0, 65537, 1245213, 0, 131072, 1245214, 0, 0, 1245215, 0, 0, 1245216, 0, 0, 1245217, 0, 0, 1245218, 0, 0, 1245219, 0, 0, 1245220, 0, 0, 1245221, 0, 0, 1245225, 0, 65537, 1245226, 0, 65537, 1245227, 0, 65537, 1245228, 0, 65537, 1245229, 0, 65537, 1245230, 0, 65537, 1245233, 0, 65537, 1245234, 0, 65537, 1245235, 0, 65537, 1245238, 0, 0, 1245239, 0, 0, 1245240, 0, 0, 1245270, 0, 65537, 1245271, 0, 65537, 1245272, 0, 65537, 1245273, 0, 65537, 1245274, 0, 65537, 1245275, 0, 65537, 1245276, 0, 65537, 1245277, 0, 65537, 1245278, 0, 65537, 1245279, 0, 65537, 1245280, 0, 65537, 1310749, 0, 0, 1310750, 0, 0, 1310751, 0, 0, 1310752, 0, 0, 1310753, 0, 0, 1310754, 0, 0, 1310755, 0, 0, 1310756, 0, 0, 1310757, 0, 0, 1310774, 0, 0, 1310775, 0, 0, 1310776, 0, 0, 1376268, 0, 262144, 1376274, 0, 262144, 1376284, 0, 262144, 1376285, 0, 0, 1376286, 0, 0, 1376287, 0, 0, 1376288, 0, 0, 1376289, 0, 0, 1376290, 0, 0, 1376291, 0, 0, 1376292, 0, 0, 1376293, 0, 0, 1376299, 0, 262144, 1376303, 0, 262145, 1376310, 0, 0, 1376311, 0, 0, 1376312, 0, 0, 1376325, 0, 262144, 1376332, 0, 262145, 1376340, 0, 262144, 1376345, 0, 262145, 1507327, 0, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441836, 0, 0, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1441878, 0, 0, 1441879, 0, 0, 1441880, 0, 0, 1441881, 0, 0, 1441882, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1441888, 0, 0, 1572863, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0, 1507360, 0, 0, 1507361, 0, 0, 1507362, 0, 0, 1507363, 0, 0, 1507364, 0, 0, 1507365, 0, 0, 1507366, 0, 0, 1507367, 0, 0, 1507368, 0, 0, 1507369, 0, 0, 1507370, 0, 0, 1507371, 0, 0, 1507372, 0, 0, 1507373, 0, 0, 1507374, 0, 0, 1507375, 0, 0, 1507376, 0, 0, 1507377, 0, 0, 1507378, 0, 0, 1507379, 0, 0, 1507380, 0, 0, 1507381, 0, 0, 1507382, 0, 0, 1507383, 0, 0, 1507384, 0, 0, 1507385, 0, 0, 1507386, 0, 0, 1507387, 0, 0, 1507388, 0, 0, 1507389, 0, 0, 1507390, 0, 0, 1507391, 0, 0, 1507392, 0, 0, 1507393, 0, 0, 1507394, 0, 0, 1507395, 0, 0, 1507396, 0, 0, 1507397, 0, 0, 1507398, 0, 0, 1507399, 0, 0, 1507400, 0, 0, 1507401, 0, 0, 1507402, 0, 0, 1507403, 0, 0, 1507404, 0, 0, 1507405, 0, 0, 1507406, 0, 0, 1507407, 0, 0, 1507408, 0, 0, 1507409, 0, 0, 1507410, 0, 0, 1507411, 0, 0, 1507412, 0, 0, 1507413, 0, 0, 1507414, 0, 0, 1507415, 0, 0, 1507416, 0, 0, 1507417, 0, 0, 1507418, 0, 0, 1507419, 0, 0, 1507420, 0, 0, 1507421, 0, 0, 1507422, 0, 0, 1507423, 0, 0, 1507424, 0, 0, 1638399, 0, 0, 1572864, 0, 0, 1572865, 0, 0, 1572866, 0, 0, 1572867, 0, 0, 1572868, 0, 0, 1572869, 0, 0, 1572870, 0, 0, 1572871, 0, 0, 1572872, 0, 0, 1572873, 0, 0, 1572874, 0, 0, 1572875, 0, 0, 1572876, 0, 0, 1572877, 0, 0, 1572878, 0, 0, 1572879, 0, 0, 1572880, 0, 0, 1572881, 0, 0, 1572882, 0, 0, 1572883, 0, 0, 1572884, 0, 0, 1572885, 0, 0, 1572886, 0, 0, 1572887, 0, 0, 1572888, 0, 0, 1572889, 0, 0, 1572890, 0, 0, 1572891, 0, 0, 1572892, 0, 0, 1572893, 0, 0, 1572894, 0, 0, 1572895, 0, 0, 1572896, 0, 0, 1572897, 0, 0, 1572898, 0, 0, 1572899, 0, 0, 1572900, 0, 0, 1572901, 0, 0, 1572902, 0, 0, 1572903, 0, 0, 1572904, 0, 0, 1572905, 0, 0, 1572906, 0, 0, 1572907, 0, 0, 1572908, 0, 0, 1572909, 0, 0, 1572910, 0, 0, 1572911, 0, 0, 1572912, 0, 0, 1572913, 0, 0, 1572914, 0, 0, 1572915, 0, 0, 1572916, 0, 0, 1572917, 0, 0, 1572918, 0, 0, 1572919, 0, 0, 1572920, 0, 0, 1572921, 0, 0, 1572922, 0, 0, 1572923, 0, 0, 1572924, 0, 0, 1572925, 0, 0, 1572926, 0, 0, 1572927, 0, 0, 1572928, 0, 0, 1572929, 0, 0, 1572930, 0, 0, 1572931, 0, 0, 1572932, 0, 0, 1572933, 0, 0, 1572934, 0, 0, 1572935, 0, 0, 1572936, 0, 0, 1572937, 0, 0, 1572938, 0, 0, 1572939, 0, 0, 1572940, 0, 0, 1572941, 0, 0, 1572942, 0, 0, 1572943, 0, 0, 1572944, 0, 0, 1572945, 0, 0, 1572946, 0, 0, 1572947, 0, 0, 1572948, 0, 0, 1572949, 0, 0, 1572950, 0, 0, 1572951, 0, 0, 1572952, 0, 0, 1572953, 0, 0, 1572954, 0, 0, 1572955, 0, 0, 1572956, 0, 0, 1572957, 0, 0, 1572958, 0, 0, 1572959, 0, 0, 1572960, 0, 0 )
[node name="Player" parent="." instance=ExtResource( 1 )]
-position = Vector2( 32, 166 )
+position = Vector2( 32, 176 )
+beta_gameplay = true
[node name="Ladder" type="TileMap" parent="."]
-tile_set = ExtResource( 2 )
+tile_set = ExtResource( 22 )
cell_size = Vector2( 8, 8 )
collision_layer = 9
format = 1
-tile_data = PoolIntArray( 393236, 0, 196610, 458772, 0, 196608, 524308, 0, 196608, 589844, 0, 196608, 786445, 0, 196610, 786460, 0, 196610, 851981, 0, 196608, 851996, 0, 196608, 917517, 0, 196608, 917532, 0, 196608, 983053, 0, 196608, 983068, 0, 196608, 983078, 0, 196610, 1048589, 0, 196608, 1048604, 0, 196608, 1048614, 0, 196608, 1114125, 0, 196608, 1114150, 0, 196608, 1179661, 0, 196608, 1179686, 0, 196608, 1245197, 0, 196608, 1245222, 0, 196608, 1310733, 0, 196608, 1310758, 0, 196608, 1376268, 0, 262144, 1376269, 0, 196609, 1376274, 0, 262144, 1376284, 0, 262144, 1376294, 0, 196609 )
+tile_data = PoolIntArray( 393236, 0, 65536, 458772, 0, 65537, 524308, 0, 65537, 589844, 0, 65537, 786445, 0, 65536, 786460, 0, 65536, 851981, 0, 65537, 851996, 0, 65537, 852058, 0, 65536, 917517, 0, 65537, 917532, 0, 65537, 917594, 0, 65537, 983053, 0, 65537, 983068, 0, 65537, 983130, 0, 65538, 1048589, 0, 65537, 1048604, 0, 65537, 1048614, 0, 65536, 1048633, 0, 65536, 1114125, 0, 65537, 1114150, 0, 65537, 1114169, 0, 65537, 1179661, 0, 65537, 1179686, 0, 65537, 1179705, 0, 65537, 1245197, 0, 65537, 1245222, 0, 65537, 1245241, 0, 65537, 1310733, 0, 65537, 1310758, 0, 65537, 1310777, 0, 65537, 1376269, 0, 65538, 1376294, 0, 65538, 1376313, 0, 65538 )
-[node name="Death" type="TileMap" parent="."]
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+light_mask = 0
tile_set = ExtResource( 5 )
cell_size = Vector2( 8, 8 )
+collision_layer = 32
format = 1
tile_data = PoolIntArray( 720951, 1, 0, 720952, 1, 0, 720977, 1, 0, 720978, 1, 0, 983091, 1, 0 )
@@ -85,22 +98,28 @@ position = Vector2( 160, 48 )
scale = Vector2( 1, 4 )
[node name="Ladder3" parent="Platforms" instance=ExtResource( 9 )]
-position = Vector2( 304, 120 )
-scale = Vector2( 1, 7 )
+position = Vector2( 304, 128 )
+scale = Vector2( 1, 6 )
+can_climb_left = false
[node name="Ladder4" parent="Platforms" instance=ExtResource( 9 )]
+position = Vector2( 456, 136 )
+scale = Vector2( 1, 5 )
+can_climb_left = false
+
+[node name="Ladder6" parent="Platforms" instance=ExtResource( 9 )]
position = Vector2( 456, 128 )
-scale = Vector2( 1, 6 )
[node name="Ladder8" parent="Platforms" instance=ExtResource( 9 )]
-position = Vector2( 720, 96 )
-scale = Vector2( 1, 4 )
+position = Vector2( 720, 104 )
+scale = Vector2( 1, 3 )
+can_climb_left = false
[node name="Rock2" parent="Platforms" instance=ExtResource( 3 )]
position = Vector2( 208, 88 )
[node name="Rock3" parent="Platforms" instance=ExtResource( 3 )]
-position = Vector2( 272, 48 )
+position = Vector2( 272, 56 )
[node name="FallingBlock" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 56, 72 )
@@ -108,26 +127,17 @@ position = Vector2( 56, 72 )
[node name="FallingBlock4" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 64, 40 )
-[node name="FallingBlock6" parent="Platforms" instance=ExtResource( 18 )]
-position = Vector2( 240, 96 )
-
-[node name="FallingBlock19" parent="Platforms" instance=ExtResource( 18 )]
-position = Vector2( 248, 96 )
-
[node name="FallingBlock7" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 352, 96 )
-fall_speed = 1.0
[node name="FallingBlock8" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 344, 96 )
-fall_speed = 1.0
[node name="FallingBlock11" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 536, 144 )
[node name="FallingBlock17" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 552, 128 )
-fall_speed = 1.0
[node name="FallingBlock9" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 312, 72 )
@@ -137,22 +147,18 @@ position = Vector2( 328, 56 )
[node name="FallingBlock12" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 616, 32 )
-fall_speed = 1.0
[node name="FallingBlock13" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 624, 32 )
-fall_speed = 1.0
[node name="FallingBlock18" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 576, 80 )
[node name="FallingBlock14" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 632, 32 )
-fall_speed = 1.0
[node name="FallingBlock22" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 648, 24 )
-fall_speed = 1.0
[node name="FallingBlock20" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 728, 64 )
@@ -162,11 +168,9 @@ position = Vector2( 720, 64 )
[node name="FallingBlock15" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 752, 40 )
-fall_speed = 1.0
[node name="FallingBlock16" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 760, 40 )
-fall_speed = 1.0
[node name="FallingBlock2" parent="Platforms" instance=ExtResource( 18 )]
position = Vector2( 40, 64 )
@@ -186,17 +190,6 @@ position = Vector2( 528, 160 )
[node name="Turniwood2" parent="Platforms" instance=ExtResource( 21 )]
position = Vector2( 320, 32 )
-[node name="Area2D2" parent="Platforms" instance=ExtResource( 22 )]
-position = Vector2( 440, 88 )
-scale = Vector2( 2, 1 )
-
-[node name="Area2D5" parent="Platforms" instance=ExtResource( 22 )]
-position = Vector2( 648, 88 )
-scale = Vector2( 2, 1 )
-
-[node name="Area2D4" parent="Platforms" instance=ExtResource( 22 )]
-position = Vector2( 408, 120 )
-
[node name="Barrier" parent="Platforms" instance=ExtResource( 23 )]
position = Vector2( 496, 152 )
scale = Vector2( 1, 24 )
@@ -204,7 +197,7 @@ cost = 30
[node name="Barrier2" parent="Platforms" instance=ExtResource( 23 )]
position = Vector2( 308, 0 )
-scale = Vector2( 1, 24 )
+scale = Vector2( 1, 32 )
cost = 25
label_offset = Vector2( 0, 10 )
@@ -212,99 +205,89 @@ label_offset = Vector2( 0, 10 )
[node name="Snail" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 168, 168 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
+left_up_boundary = 3.0
+right_down_boundary = 7.0
[node name="Snail3" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 312, 168 )
-right_down_boundry = 15.0
+right_down_boundary = 15.0
slower_speed = 40
faster_speed = 100
[node name="Snail4" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 696, 24 )
-left_up_boundry = 2.0
-right_down_boundry = 3.0
+left_up_boundary = 2.0
+right_down_boundary = 3.0
slower_speed = 40
faster_speed = 100
[node name="Snail6" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 568, 88 )
-left_up_boundry = 2.0
-right_down_boundry = 3.0
+left_up_boundary = 2.0
+right_down_boundary = 3.0
slower_speed = 40
faster_speed = 100
[node name="Snail8" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 704, 144 )
-left_up_boundry = 1.0
-right_down_boundry = 7.0
+left_up_boundary = 1.0
+right_down_boundary = 7.0
slower_speed = 40
faster_speed = 100
[node name="Snail10" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 648, 168 )
-left_up_boundry = 5.0
-right_down_boundry = 5.0
+left_up_boundary = 5.0
+right_down_boundary = 5.0
slower_speed = 40
faster_speed = 100
[node name="Snail2" parent="Enemies" instance=ExtResource( 7 )]
position = Vector2( 64, 112 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
+left_up_boundary = 3.0
+right_down_boundary = 3.0
faster_speed = 70
-[node name="Bat" parent="Enemies" instance=ExtResource( 10 )]
-position = Vector2( 120, 96 )
-right_down_boundry = 10.0
-
[node name="Bat4" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 80, 16 )
-right_down_boundry = 7.0
+right_down_boundary = 7.0
speed = 30
-[node name="Bat6" parent="Enemies" instance=ExtResource( 10 )]
-position = Vector2( 368, 48 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
-speed = 60
-
[node name="Bat8" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 568, 40 )
-left_up_boundry = 4.0
-right_down_boundry = 3.0
+left_up_boundary = 4.0
+right_down_boundary = 3.0
[node name="Bat10" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 640, 80 )
-left_up_boundry = 5.0
-right_down_boundry = 3.0
+left_up_boundary = 5.0
+right_down_boundary = 3.0
speed = 60
[node name="Bat9" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 688, 16 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
+left_up_boundary = 3.0
+right_down_boundary = 3.0
[node name="Bat12" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 720, 56 )
-left_up_boundry = 1.0
-right_down_boundry = 6.0
+left_up_boundary = 1.0
+right_down_boundary = 6.0
[node name="Bat7" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 376, 88 )
-left_up_boundry = 1.0
-right_down_boundry = 3.0
-speed = 80
+left_up_boundary = 1.0
+right_down_boundary = 3.0
[node name="Bat2" parent="Enemies" instance=ExtResource( 10 )]
position = Vector2( 16, 120 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
+left_up_boundary = 3.0
+right_down_boundary = 3.0
speed = 60
[node name="RollingFiend" parent="Enemies" instance=ExtResource( 13 )]
position = Vector2( 144, 96 )
+clockwise = true
[node name="RollingFiend3" parent="Enemies" instance=ExtResource( 13 )]
position = Vector2( 128, 24 )
@@ -315,7 +298,7 @@ position = Vector2( 160, 38 )
move_speed = 70.0
[node name="RollingFiend6" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 384, 40 )
+position = Vector2( 384, 32 )
[node name="RollingFiend7" parent="Enemies" instance=ExtResource( 13 )]
position = Vector2( 432, 88 )
@@ -353,7 +336,7 @@ position = Vector2( 160, 120 )
position = Vector2( 344, 40 )
[node name="Gold25" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 384, 40 )
+position = Vector2( 384, 32 )
[node name="Gold32" parent="Collectibles" instance=ExtResource( 14 )]
position = Vector2( 440, 40 )
@@ -368,7 +351,7 @@ position = Vector2( 624, 88 )
position = Vector2( 672, 88 )
[node name="Gold26" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 240, 48 )
+position = Vector2( 240, 56 )
[node name="Gold29" parent="Collectibles" instance=ExtResource( 14 )]
position = Vector2( 264, 120 )
@@ -389,7 +372,7 @@ position = Vector2( 184, 168 )
position = Vector2( 264, 88 )
[node name="Gold52" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 288, 88 )
+position = Vector2( 296, 88 )
[node name="Gold35" parent="Collectibles" instance=ExtResource( 14 )]
position = Vector2( 368, 120 )
@@ -464,10 +447,10 @@ position = Vector2( 128, 24 )
position = Vector2( 160, 24 )
[node name="Gold16" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 16, 80 )
+position = Vector2( 40, 32 )
[node name="Gold17" parent="Collectibles" instance=ExtResource( 14 )]
-position = Vector2( 32, 80 )
+position = Vector2( 56, 32 )
[node name="Gold14" parent="Collectibles" instance=ExtResource( 14 )]
position = Vector2( 40, 56 )
@@ -486,10 +469,11 @@ position = Vector2( 64, 112 )
[node name="Star" parent="Collectibles" instance=ExtResource( 15 )]
position = Vector2( 192, 120 )
+color = 1
[node name="Star3" parent="Collectibles" instance=ExtResource( 15 )]
-position = Vector2( 296, 16 )
-color = 1
+position = Vector2( 288, 24 )
+color = 2
[node name="Star6" parent="Collectibles" instance=ExtResource( 15 )]
position = Vector2( 752, 168 )
@@ -501,11 +485,6 @@ color = 3
[node name="Star2" parent="Collectibles" instance=ExtResource( 15 )]
position = Vector2( 88, 48 )
-color = 1
-
-[node name="Star4" parent="Collectibles" instance=ExtResource( 15 )]
-position = Vector2( 144, 24 )
-color = 2
[node name="Shard" parent="Collectibles" instance=ExtResource( 17 )]
position = Vector2( 8, 136 )
@@ -523,13 +502,13 @@ position = Vector2( 720, 144 )
number = 2
[node name="Arrow" parent="Collectibles" instance=ExtResource( 20 )]
-position = Vector2( 96, 24 )
+position = Vector2( 144, 24 )
[node name="Arrow3" parent="Collectibles" instance=ExtResource( 20 )]
position = Vector2( 728, 32 )
[node name="Arrow5" parent="Collectibles" instance=ExtResource( 20 )]
-position = Vector2( 288, -8 )
+position = Vector2( 280, 0 )
[node name="Arrow4" parent="Collectibles" instance=ExtResource( 20 )]
position = Vector2( 208, 168 )
@@ -568,5 +547,5 @@ __meta__ = {
}
[node name="Exit" parent="." instance=ExtResource( 24 )]
-position = Vector2( 760, 116 )
-cost = 2
+position = Vector2( 752, 116 )
+cost = 25
diff --git a/maps/cave_scholar.tscn b/maps/cave_scholar.tscn
new file mode 100644
index 0000000..3542bfd
--- /dev/null
+++ b/maps/cave_scholar.tscn
@@ -0,0 +1,1177 @@
+[gd_scene load_steps=38 format=2]
+
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1]
+[ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2]
+[ext_resource path="res://objects/environment/stalactite/stalactite.tscn" type="PackedScene" id=3]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=4]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=5]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://objects/enemy/snail.tscn" type="PackedScene" id=7]
+[ext_resource path="res://graphics/backgrounds/cave_scholar.png" type="Texture" id=8]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=9]
+[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=10]
+[ext_resource path="res://maps/map.gd" type="Script" id=11]
+[ext_resource path="res://audio/music/sleet.ogg" type="AudioStream" id=12]
+[ext_resource path="res://objects/enemy/rolling_fiend.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/enemy/tentacle.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=18]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=19]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=20]
+[ext_resource path="res://scripts/fix_parallax_background.gd" type="Script" id=21]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=22]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=24]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=25]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/lore/cave/shedge.tscn" type="PackedScene" id=27]
+[ext_resource path="res://objects/lore/cave/the_scrumps_tongue.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/lore/cave/blue_ray_cavern.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/mountain/rolling_fiend.tscn" type="PackedScene" id=30]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=31]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=32]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=33]
+[ext_resource path="res://maps/cave_speccy_detector.gd" type="Script" id=34]
+
+[sub_resource type="Curve" id=2]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 96 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 20, 20 )
+
+[node name="Map2" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 11 )
+target_time_any = 40
+target_time_100 = 170
+music = ExtResource( 12 )
+lore_entries = [ ExtResource( 29 ), ExtResource( 27 ), ExtResource( 28 ), ExtResource( 30 ), ExtResource( 26 ) ]
+
+[node name="ParallaxBackground" type="ParallaxBackground" parent="."]
+script = ExtResource( 21 )
+
+[node name="ParallaxLayer" type="ParallaxLayer" parent="ParallaxBackground"]
+motion_scale = Vector2( 0.5, 1 )
+
+[node name="Background" type="Sprite" parent="ParallaxBackground/ParallaxLayer"]
+texture = ExtResource( 8 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Camera2D" parent="." instance=ExtResource( 6 )]
+
+[node name="HUD" parent="." instance=ExtResource( 4 )]
+song_name = "♫Sleet"
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 25 )
+tile_set = ExtResource( 2 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 9
+format = 1
+tile_data = PoolIntArray( 0, 1, 1, 1, 1, 2, 2, 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6, 1, 2, 7, 1, 2, 8, 1, 2, 9, 1, 2, 10, 1, 2, 11, 1, 2, 12, 1, 2, 13, 1, 2, 14, 1, 2, 15, 1, 2, 16, 1, 2, 17, 1, 2, 18, 1, 2, 19, 1, 2, 20, 1, 2, 21, 1, 2, 22, 1, 2, 23, 1, 2, 24, 1, 2, 25, 1, 2, 26, 1, 2, 27, 1, 2, 28, 1, 2, 29, 1, 2, 30, 1, 2, 31, 1, 2, 32, 1, 2, 33, 1, 2, 34, 1, 2, 35, 1, 2, 36, 1, 2, 37, 1, 2, 38, 1, 2, 39, 1, 2, 40, 1, 2, 41, 1, 2, 42, 1, 2, 43, 1, 2, 44, 1, 2, 45, 1, 2, 46, 1, 2, 47, 1, 2, 48, 1, 2, 49, 1, 2, 50, 1, 2, 51, 1, 2, 52, 1, 2, 53, 1, 2, 54, 1, 2, 55, 1, 2, 56, 1, 2, 57, 1, 2, 58, 1, 2, 59, 1, 2, 60, 1, 2, 61, 1, 2, 62, 1, 2, 63, 1, 2, 64, 1, 2, 65, 1, 2, 66, 1, 2, 67, 1, 2, 68, 1, 2, 69, 1, 2, 70, 1, 2, 71, 1, 2, 72, 1, 2, 73, 1, 2, 74, 1, 2, 75, 1, 2, 76, 1, 2, 77, 1, 2, 78, 1, 2, 79, 1, 2, 80, 1, 2, 81, 1, 2, 82, 1, 2, 83, 1, 2, 84, 1, 2, 85, 1, 2, 86, 1, 2, 87, 1, 2, 88, 1, 2, 89, 1, 2, 90, 1, 2, 91, 1, 2, 92, 1, 2, 93, 1, 2, 94, 1, 2, 95, 1, 3, 65536, 1, 131073, 65537, 1, 131074, 65538, 1, 131074, 65539, 1, 131074, 65540, 1, 131074, 65541, 1, 131074, 65542, 1, 131074, 65543, 1, 131074, 65544, 1, 131074, 65545, 1, 131074, 65546, 1, 131074, 65547, 1, 131074, 65548, 1, 131074, 65549, 1, 131074, 65550, 1, 131074, 65551, 1, 131074, 65552, 1, 131074, 65553, 1, 131074, 65554, 1, 131074, 65555, 1, 131074, 65556, 1, 131074, 65557, 1, 131074, 65558, 1, 131074, 65559, 1, 131074, 65560, 1, 131074, 65561, 1, 131074, 65562, 1, 131074, 65563, 1, 131074, 65564, 1, 131074, 65565, 1, 131074, 65566, 1, 131074, 65567, 1, 131074, 65568, 1, 131074, 65569, 1, 131074, 65570, 1, 131074, 65571, 1, 131074, 65572, 1, 131074, 65573, 1, 131074, 65574, 1, 131074, 65575, 1, 131074, 65576, 1, 131074, 65577, 1, 131074, 65578, 1, 131074, 65579, 1, 131074, 65580, 1, 131074, 65581, 1, 131074, 65582, 1, 131074, 65583, 1, 131074, 65584, 1, 131074, 65585, 1, 131074, 65586, 1, 131074, 65587, 1, 131074, 65588, 1, 131074, 65589, 1, 131074, 65590, 1, 131074, 65591, 1, 131074, 65592, 1, 131074, 65593, 1, 131074, 65594, 1, 131074, 65595, 1, 131074, 65596, 1, 131074, 65597, 1, 131074, 65598, 1, 131074, 65599, 1, 131074, 65600, 1, 131074, 65601, 1, 131074, 65602, 1, 131074, 65603, 1, 131074, 65604, 1, 131074, 65605, 1, 131074, 65606, 1, 131074, 65607, 1, 131074, 65608, 1, 131074, 65609, 1, 131074, 65610, 1, 131074, 65611, 1, 131074, 65612, 1, 131074, 65613, 1, 131074, 65614, 1, 131074, 65615, 1, 131074, 65616, 1, 131074, 65617, 1, 131074, 65618, 1, 131074, 65619, 1, 131074, 65620, 1, 131074, 65621, 1, 131074, 65622, 1, 131074, 65623, 1, 131074, 65624, 1, 131074, 65625, 1, 131074, 65626, 1, 131074, 65627, 1, 131074, 65628, 1, 131074, 65629, 1, 131074, 65630, 1, 131074, 65631, 1, 131075, 327763, 1, 196609, 327764, 1, 196611, 393221, 1, 196609, 393222, 1, 196610, 393223, 1, 196610, 393224, 1, 196610, 393225, 1, 196610, 393226, 1, 196611, 393229, 1, 196609, 393230, 1, 196610, 393231, 1, 196610, 393232, 1, 196610, 393233, 1, 196610, 393234, 1, 196611, 393251, 3, 0, 393259, 3, 0, 393268, 3, 0, 393278, 3, 0, 393289, 1, 196609, 393290, 1, 196610, 393291, 1, 196611, 458775, 1, 196609, 458776, 1, 196610, 458777, 1, 196611, 458780, 1, 1, 458781, 1, 2, 458782, 1, 2, 458783, 1, 2, 458784, 1, 2, 458785, 1, 2, 458786, 1, 2, 458787, 1, 2, 458788, 1, 2, 458789, 1, 196610, 458790, 1, 196611, 458791, 0, 196608, 458792, 0, 196608, 458793, 0, 196608, 458794, 0, 196608, 458795, 1, 1, 458796, 1, 3, 458801, 1, 196609, 458802, 1, 196610, 458803, 1, 196610, 458804, 1, 196610, 458805, 1, 196610, 458806, 1, 196610, 458807, 1, 2, 458808, 1, 2, 458809, 1, 2, 458810, 1, 196610, 458811, 1, 196610, 458812, 1, 196610, 458813, 1, 196610, 458814, 1, 2, 458815, 1, 2, 458816, 1, 2, 458817, 1, 3, 458818, 0, 196608, 458819, 0, 196608, 458820, 1, 0, 458823, 1, 196608, 458837, 1, 196609, 458838, 1, 196610, 458839, 1, 196610, 458840, 1, 196610, 458841, 1, 196610, 458842, 1, 196610, 458843, 1, 196610, 458844, 1, 196611, 458847, 1, 0, 524316, 1, 65537, 524317, 1, 65538, 524318, 1, 65538, 524319, 1, 65538, 524320, 1, 131074, 524321, 1, 131074, 524322, 1, 131074, 524323, 1, 131074, 524324, 1, 131075, 524331, 1, 65537, 524332, 1, 65539, 524343, 1, 131073, 524344, 1, 131074, 524345, 1, 131075, 524350, 1, 65537, 524351, 1, 65538, 524352, 1, 131074, 524353, 1, 131075, 524356, 1, 65536, 524364, 1, 196608, 524383, 1, 65536, 589839, 1, 1, 589840, 1, 196610, 589841, 1, 196610, 589842, 1, 196611, 589851, 1, 1, 589852, 1, 65538, 589853, 1, 131074, 589854, 1, 131074, 589855, 1, 131075, 589867, 1, 65537, 589868, 1, 65539, 589886, 1, 131073, 589887, 1, 131075, 589892, 1, 65536, 589907, 3, 0, 589917, 3, 0, 589919, 1, 65536, 655364, 1, 196609, 655365, 1, 196611, 655369, 1, 196609, 655370, 1, 196611, 655375, 1, 65536, 655380, 3, 0, 655386, 3, 0, 655387, 1, 65537, 655388, 1, 65539, 655403, 1, 65537, 655404, 1, 65539, 655428, 1, 65536, 655441, 1, 196609, 655442, 1, 196610, 655443, 1, 2, 655444, 1, 196610, 655445, 1, 196610, 655446, 1, 196610, 655447, 1, 196610, 655448, 1, 196610, 655449, 1, 196610, 655450, 1, 196610, 655451, 1, 196610, 655452, 1, 196610, 655453, 1, 196610, 655454, 1, 196610, 655455, 1, 131075, 720911, 1, 65536, 720916, 1, 1, 720917, 1, 196610, 720918, 1, 196610, 720919, 1, 196610, 720920, 1, 196610, 720921, 1, 196610, 720922, 1, 196610, 720923, 1, 131074, 720924, 1, 131075, 720939, 1, 65537, 720940, 1, 65539, 720964, 1, 65536, 720979, 1, 65536, 786447, 1, 131073, 786448, 1, 196610, 786449, 1, 196610, 786450, 1, 196610, 786451, 1, 196610, 786452, 1, 131075, 786475, 1, 65537, 786476, 1, 65539, 786500, 1, 65536, 786515, 1, 65536, 852002, 1, 0, 852004, 1, 196609, 852005, 1, 196610, 852006, 1, 196611, 852011, 1, 65537, 852012, 1, 65538, 852013, 1, 2, 852014, 1, 2, 852015, 1, 2, 852016, 1, 2, 852017, 1, 3, 852020, 1, 196609, 852021, 1, 196610, 852022, 1, 196610, 852023, 1, 196611, 852036, 1, 65536, 852051, 1, 65536, 917510, 3, 0, 917514, 3, 0, 917534, 1, 1, 917535, 1, 2, 917536, 1, 196610, 917537, 1, 196610, 917538, 1, 131075, 917544, 1, 196609, 917545, 1, 2, 917546, 1, 2, 917547, 1, 65538, 917548, 1, 65538, 917549, 1, 131074, 917550, 1, 131074, 917551, 1, 131074, 917552, 1, 131074, 917553, 1, 131075, 917572, 1, 65536, 917583, 1, 196609, 917584, 1, 196610, 917585, 1, 196610, 917586, 1, 196610, 917587, 1, 131075, 1048575, 1, 196609, 983040, 1, 196611, 983043, 1, 1, 983044, 1, 196610, 983045, 1, 196610, 983046, 1, 196610, 983047, 1, 196610, 983048, 1, 196610, 983049, 1, 196610, 983050, 1, 196610, 983051, 1, 196611, 983060, 3, 0, 983066, 3, 0, 983070, 1, 65537, 983071, 1, 65539, 983081, 1, 131073, 983082, 1, 131074, 983083, 1, 131074, 983084, 1, 131075, 983099, 1, 196609, 983100, 1, 196610, 983101, 1, 196610, 983102, 1, 196610, 983103, 1, 196610, 983104, 1, 196610, 983105, 1, 196610, 983106, 1, 196610, 983107, 1, 196610, 983108, 1, 131074, 983109, 1, 196610, 983110, 1, 196610, 983111, 1, 196610, 983112, 1, 196611, 983113, 0, 196608, 983114, 0, 196608, 983115, 1, 0, 983133, 1, 196609, 983134, 1, 196610, 983135, 1, 196611, 1048579, 1, 65536, 1048591, 1, 196609, 1048592, 1, 196610, 1048593, 1, 196610, 1048594, 1, 196610, 1048595, 1, 196610, 1048596, 1, 196610, 1048597, 1, 196610, 1048598, 1, 196610, 1048599, 1, 196610, 1048600, 1, 196610, 1048601, 1, 196610, 1048602, 1, 196610, 1048603, 1, 196610, 1048604, 1, 196610, 1048605, 1, 196610, 1048606, 1, 131074, 1048607, 1, 131075, 1048651, 1, 65536, 1048661, 1, 1, 1048662, 1, 2, 1048663, 1, 3, 1048665, 1, 196609, 1048666, 1, 196611, 1114115, 1, 65536, 1114187, 1, 65536, 1114191, 1, 1, 1114192, 1, 2, 1114193, 1, 2, 1114194, 1, 2, 1114195, 1, 2, 1114196, 1, 196610, 1114197, 1, 131074, 1114198, 1, 65538, 1114199, 1, 65539, 1114204, 1, 1, 1114205, 1, 196610, 1114206, 1, 196610, 1114207, 1, 196611, 1179649, 1, 196609, 1179650, 1, 196610, 1179651, 1, 131075, 1179697, 3, 0, 1179723, 1, 65536, 1179727, 1, 65537, 1179728, 1, 65538, 1179729, 1, 65538, 1179730, 1, 65538, 1179731, 1, 65539, 1179734, 1, 65537, 1179735, 1, 65538, 1179736, 1, 2, 1179737, 1, 2, 1179738, 1, 2, 1179739, 1, 2, 1179740, 1, 65539, 1245230, 1, 196609, 1245231, 1, 196610, 1245232, 1, 196610, 1245233, 1, 196610, 1245234, 1, 196611, 1245259, 1, 65536, 1245263, 1, 131073, 1245264, 1, 131074, 1245265, 1, 131074, 1245266, 1, 131074, 1245267, 1, 131075, 1245270, 1, 131073, 1245271, 1, 131074, 1245272, 1, 131074, 1245273, 1, 131074, 1245274, 1, 131074, 1245275, 1, 131074, 1245276, 1, 131075, 1310756, 1, 1, 1310757, 1, 2, 1310758, 1, 2, 1310759, 1, 2, 1310760, 1, 2, 1310761, 1, 2, 1310762, 1, 2, 1310763, 1, 2, 1310764, 1, 3, 1310776, 1, 196609, 1310777, 1, 196610, 1310778, 1, 196610, 1310779, 1, 196611, 1310781, 3, 0, 1310795, 1, 65536, 1376263, 3, 0, 1376274, 3, 0, 1376282, 3, 0, 1376291, 1, 1, 1376292, 1, 65538, 1376293, 1, 65538, 1376294, 1, 65538, 1376295, 1, 65538, 1376296, 1, 65538, 1376297, 1, 65538, 1376298, 1, 65538, 1376299, 1, 65538, 1376300, 1, 65539, 1376307, 1, 1, 1376308, 1, 2, 1376309, 1, 2, 1376310, 1, 3, 1376317, 1, 1, 1376318, 1, 3, 1376331, 1, 65536, 1507327, 1, 1, 1441792, 1, 2, 1441793, 1, 2, 1441794, 1, 2, 1441795, 1, 2, 1441796, 1, 2, 1441797, 1, 2, 1441798, 1, 2, 1441799, 1, 2, 1441800, 1, 2, 1441801, 1, 2, 1441802, 1, 2, 1441803, 1, 2, 1441804, 1, 2, 1441805, 1, 2, 1441806, 1, 2, 1441807, 1, 2, 1441808, 1, 2, 1441809, 1, 2, 1441810, 1, 2, 1441811, 1, 2, 1441812, 1, 2, 1441813, 1, 2, 1441814, 1, 2, 1441815, 1, 2, 1441816, 1, 2, 1441817, 1, 2, 1441818, 1, 2, 1441819, 1, 2, 1441820, 1, 2, 1441821, 1, 2, 1441822, 1, 2, 1441823, 1, 2, 1441824, 1, 2, 1441825, 1, 2, 1441826, 1, 2, 1441827, 1, 65538, 1441828, 1, 65538, 1441829, 1, 65538, 1441830, 1, 65538, 1441831, 1, 65538, 1441832, 1, 65538, 1441833, 1, 65538, 1441834, 1, 65538, 1441835, 1, 65538, 1441836, 1, 65538, 1441837, 1, 2, 1441838, 1, 2, 1441839, 1, 2, 1441840, 1, 2, 1441841, 1, 2, 1441842, 1, 2, 1441843, 1, 65538, 1441844, 1, 65538, 1441845, 1, 65538, 1441846, 1, 65538, 1441847, 1, 2, 1441848, 1, 2, 1441849, 1, 2, 1441850, 1, 2, 1441851, 1, 2, 1441852, 1, 2, 1441853, 1, 65538, 1441854, 1, 65538, 1441855, 1, 2, 1441856, 1, 2, 1441857, 1, 2, 1441858, 1, 2, 1441859, 1, 2, 1441860, 1, 2, 1441861, 1, 2, 1441862, 1, 2, 1441863, 1, 2, 1441864, 1, 2, 1441865, 1, 2, 1441866, 1, 2, 1441867, 1, 65538, 1441868, 1, 2, 1441869, 1, 2, 1441870, 1, 2, 1441871, 1, 2, 1441872, 1, 2, 1441873, 1, 2, 1441874, 1, 2, 1441875, 1, 2, 1441876, 1, 2, 1441877, 1, 2, 1441878, 1, 2, 1441879, 1, 2, 1441880, 1, 2, 1441881, 1, 2, 1441882, 1, 2, 1441883, 1, 2, 1441884, 1, 2, 1441885, 1, 2, 1441886, 1, 2, 1441887, 1, 2, 1441888, 1, 3, 1572863, 1, 65537, 1507328, 1, 65538, 1507329, 1, 65538, 1507330, 1, 65538, 1507331, 1, 65538, 1507332, 1, 65538, 1507333, 1, 65538, 1507334, 1, 65538, 1507335, 1, 65538, 1507336, 1, 65538, 1507337, 1, 65538, 1507338, 1, 65538, 1507339, 1, 65538, 1507340, 1, 65538, 1507341, 1, 65538, 1507342, 1, 65538, 1507343, 1, 65538, 1507344, 1, 65538, 1507345, 1, 65538, 1507346, 1, 65538, 1507347, 1, 65538, 1507348, 1, 65538, 1507349, 1, 65538, 1507350, 1, 65538, 1507351, 1, 65538, 1507352, 1, 65538, 1507353, 1, 65538, 1507354, 1, 65538, 1507355, 1, 65538, 1507356, 1, 65538, 1507357, 1, 65538, 1507358, 1, 65538, 1507359, 1, 65538, 1507360, 1, 65538, 1507361, 1, 65538, 1507362, 1, 65538, 1507363, 1, 65538, 1507364, 1, 65538, 1507365, 1, 65538, 1507366, 1, 65538, 1507367, 1, 65538, 1507368, 1, 65538, 1507369, 1, 65538, 1507370, 1, 65538, 1507371, 1, 65538, 1507372, 1, 65538, 1507373, 1, 65538, 1507374, 1, 65538, 1507375, 1, 65538, 1507376, 1, 65538, 1507377, 1, 65538, 1507378, 1, 65538, 1507379, 1, 65538, 1507380, 1, 65538, 1507381, 1, 65538, 1507382, 1, 65538, 1507383, 1, 65538, 1507384, 1, 65538, 1507385, 1, 65538, 1507386, 1, 65538, 1507387, 1, 65538, 1507388, 1, 65538, 1507389, 1, 65538, 1507390, 1, 65538, 1507391, 1, 65538, 1507392, 1, 65538, 1507393, 1, 65538, 1507394, 1, 65538, 1507395, 1, 65538, 1507396, 1, 65538, 1507397, 1, 65538, 1507398, 1, 65538, 1507399, 1, 65538, 1507400, 1, 65538, 1507401, 1, 65538, 1507402, 1, 65538, 1507403, 1, 65538, 1507404, 1, 65538, 1507405, 1, 65538, 1507406, 1, 65538, 1507407, 1, 65538, 1507408, 1, 65538, 1507409, 1, 65538, 1507410, 1, 65538, 1507411, 1, 65538, 1507412, 1, 65538, 1507413, 1, 65538, 1507414, 1, 65538, 1507415, 1, 65538, 1507416, 1, 65538, 1507417, 1, 65538, 1507418, 1, 65538, 1507419, 1, 65538, 1507420, 1, 65538, 1507421, 1, 65538, 1507422, 1, 65538, 1507423, 1, 65538, 1507424, 1, 65539, 1638399, 1, 131073, 1572864, 1, 131074, 1572865, 1, 131074, 1572866, 1, 131074, 1572867, 1, 131074, 1572868, 1, 131074, 1572869, 1, 131074, 1572870, 1, 131074, 1572871, 1, 131074, 1572872, 1, 131074, 1572873, 1, 131074, 1572874, 1, 131074, 1572875, 1, 131074, 1572876, 1, 131074, 1572877, 1, 131074, 1572878, 1, 131074, 1572879, 1, 131074, 1572880, 1, 131074, 1572881, 1, 131074, 1572882, 1, 131074, 1572883, 1, 131074, 1572884, 1, 131074, 1572885, 1, 131074, 1572886, 1, 131074, 1572887, 1, 131074, 1572888, 1, 131074, 1572889, 1, 131074, 1572890, 1, 131074, 1572891, 1, 131074, 1572892, 1, 131074, 1572893, 1, 131074, 1572894, 1, 131074, 1572895, 1, 131074, 1572896, 1, 131074, 1572897, 1, 131074, 1572898, 1, 131074, 1572899, 1, 131074, 1572900, 1, 131074, 1572901, 1, 131074, 1572902, 1, 131074, 1572903, 1, 131074, 1572904, 1, 131074, 1572905, 1, 131074, 1572906, 1, 131074, 1572907, 1, 131074, 1572908, 1, 131074, 1572909, 1, 131074, 1572910, 1, 131074, 1572911, 1, 131074, 1572912, 1, 131074, 1572913, 1, 131074, 1572914, 1, 131074, 1572915, 1, 131074, 1572916, 1, 131074, 1572917, 1, 131074, 1572918, 1, 131074, 1572919, 1, 131074, 1572920, 1, 131074, 1572921, 1, 131074, 1572922, 1, 131074, 1572923, 1, 131074, 1572924, 1, 131074, 1572925, 1, 131074, 1572926, 1, 131074, 1572927, 1, 131074, 1572928, 1, 131074, 1572929, 1, 131074, 1572930, 1, 131074, 1572931, 1, 131074, 1572932, 1, 131074, 1572933, 1, 131074, 1572934, 1, 131074, 1572935, 1, 131074, 1572936, 1, 131074, 1572937, 1, 131074, 1572938, 1, 131074, 1572939, 1, 131074, 1572940, 1, 131074, 1572941, 1, 131074, 1572942, 1, 131074, 1572943, 1, 131074, 1572944, 1, 131074, 1572945, 1, 131074, 1572946, 1, 131074, 1572947, 1, 131074, 1572948, 1, 131074, 1572949, 1, 131074, 1572950, 1, 131074, 1572951, 1, 131074, 1572952, 1, 131074, 1572953, 1, 131074, 1572954, 1, 131074, 1572955, 1, 131074, 1572956, 1, 131074, 1572957, 1, 131074, 1572958, 1, 131074, 1572959, 1, 131074, 1572960, 1, 131075, 2490371, 1, 0, 2490386, 1, 0, 2555907, 1, 65536, 2555922, 1, 65536, 2621441, 1, 196609, 2621442, 1, 196610, 2621443, 1, 131075, 2621448, 1, 196608, 2621453, 1, 196608, 2621458, 1, 131073, 2621459, 1, 196610, 2621460, 1, 196611, 2686980, 1, 0, 2686993, 1, 0, 2752516, 1, 131072, 2752529, 1, 131072, 2818053, 1, 196608, 2818064, 1, 196608, 2883590, 1, 196609, 2883591, 1, 196610, 2883592, 1, 2, 2883593, 1, 196610, 2883594, 1, 196610, 2883595, 1, 2, 2883596, 1, 196610, 2883597, 1, 2, 2883598, 1, 196610, 2883599, 1, 196611, 2949128, 1, 65536, 2949131, 1, 65536, 2949133, 1, 65536, 3014664, 1, 65536, 3014667, 1, 131072, 3014669, 1, 65536, 3080200, 1, 65536, 3080205, 1, 65536, 3145736, 1, 131072, 3145741, 1, 131072, 3211273, 1, 196609, 3211274, 1, 196610, 3211275, 1, 196610, 3211276, 1, 196611 )
+
+[node name="Ore" type="TileMap" parent="."]
+tile_set = ExtResource( 2 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 524320, 0, 196610, 524323, 0, 196609, 524324, 0, 196609, 524350, 0, 196610, 589854, 0, 196609, 852014, 0, 196610, 917547, 0, 196609, 917552, 0, 196609, 983071, 0, 196610, 1114198, 0, 196610, 1179728, 0, 196609, 1179729, 0, 196609, 1179737, 0, 196610, 1376294, 0, 196609, 1376295, 0, 196609, 1376298, 0, 196610, 1441828, 0, 196609, 1441846, 0, 196610, 1441851, 0, 196610, 1441860, 0, 196610, 1441876, 0, 196610, 1507337, 0, 196609, 1507341, 0, 196609, 1507346, 0, 196609, 1507347, 0, 196610, 1507354, 0, 196610, 1507364, 0, 196609, 1507365, 0, 196609, 1507370, 0, 196609, 1507373, 0, 196610, 1507376, 0, 196609, 1507377, 0, 196609, 1507378, 0, 196609, 1507386, 0, 196609, 1507393, 0, 196609, 1507401, 0, 196609, 1507402, 0, 196609, 1507406, 0, 196610, 1507409, 0, 196609, 1507410, 0, 196609, 1507418, 0, 196609, 1507421, 0, 196610 )
+
+[node name="Player" parent="." instance=ExtResource( 1 )]
+position = Vector2( 32, 176 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 22 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 9
+format = 1
+tile_data = PoolIntArray( 524330, 0, 65536, 524333, 0, 65536, 589866, 0, 65537, 589869, 0, 65537, 589891, 0, 65536, 589893, 0, 65536, 655402, 0, 65537, 655405, 0, 65537, 655427, 0, 65537, 655429, 0, 65537, 720938, 0, 65537, 720941, 0, 65537, 720963, 0, 65537, 720965, 0, 65537, 786445, 0, 65536, 786474, 0, 65537, 786477, 0, 65538, 786499, 0, 65537, 786501, 0, 65537, 851981, 0, 65537, 852010, 0, 65538, 852035, 0, 65537, 852037, 0, 65537, 917517, 0, 65537, 917571, 0, 65538, 917573, 0, 65538, 983053, 0, 65537, 1048589, 0, 65537, 1048650, 0, 65536, 1048652, 0, 65536, 1114125, 0, 65537, 1114186, 0, 65537, 1114188, 0, 65537, 1179661, 0, 65537, 1179722, 0, 65537, 1179724, 0, 65537, 1245197, 0, 65537, 1245258, 0, 65537, 1245260, 0, 65537, 1310733, 0, 65537, 1310794, 0, 65537, 1310796, 0, 65537, 1376269, 0, 65538, 1376330, 0, 65538, 1376332, 0, 65538 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+light_mask = 0
+tile_set = ExtResource( 5 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1179695, 1, 0, 1245226, 1, 0, 1245240, 1, 0, 1245243, 1, 0 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="FallingBlock" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 0, 144 )
+
+[node name="FallingBlock2" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 64, 80 )
+
+[node name="FallingBlock9" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 616, 48 )
+
+[node name="FallingBlock12" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 648, 40 )
+
+[node name="FallingBlock10" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 624, 48 )
+
+[node name="FallingBlock11" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 632, 48 )
+
+[node name="FallingBlock3" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 56, 80 )
+
+[node name="FallingBlock7" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 456, 112 )
+
+[node name="FallingBlock6" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 168, 56 )
+
+[node name="FallingBlock8" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 376, 56 )
+
+[node name="FallingBlock5" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 16, 64 )
+
+[node name="FallingBlock4" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 48, 80 )
+
+[node name="Ladder" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 104, 96 )
+scale = Vector2( 1, 10 )
+
+[node name="Ladder2" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 336, 64 )
+scale = Vector2( 1, 6 )
+can_climb_right = false
+
+[node name="Ladder4" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 536, 72 )
+scale = Vector2( 1, 6 )
+can_climb_right = false
+
+[node name="Ladder5" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 552, 72 )
+scale = Vector2( 1, 6 )
+can_climb_left = false
+
+[node name="Ladder6" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 592, 128 )
+scale = Vector2( 1, 6 )
+can_climb_right = false
+
+[node name="Ladder7" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 608, 128 )
+scale = Vector2( 1, 6 )
+can_climb_left = false
+
+[node name="Ladder3" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 360, 64 )
+scale = Vector2( 1, 5 )
+can_climb_left = false
+
+[node name="Stalactite" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 64, 16 )
+
+[node name="Stalactite6" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 64, 128 )
+
+[node name="Stalactite2" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 120, 16 )
+
+[node name="Stalactite4" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 136, 136 )
+
+[node name="Stalactite3" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 192, 16 )
+
+[node name="Stalactite7" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 176, 96 )
+
+[node name="Stalactite11" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 320, 120 )
+
+[node name="Stalactite9" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 296, 64 )
+
+[node name="Stalactite10" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 424, 64 )
+
+[node name="Stalactite13" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 528, 128 )
+
+[node name="Stalactite14" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 544, 128 )
+
+[node name="Stalactite15" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 560, 128 )
+
+[node name="Stalactite12" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 408, 16 )
+
+[node name="Stalactite16" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 712, 88 )
+
+[node name="Stalactite17" parent="Environment" instance=ExtResource( 3 )]
+position = Vector2( 720, 88 )
+
+[node name="Barrier" parent="Environment" instance=ExtResource( 23 )]
+position = Vector2( 144, 80 )
+scale = Vector2( 1, 16 )
+cost = 20
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Bat2" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 16, 120 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+
+[node name="Bat4" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 480, 104 )
+left_up_boundary = 5.0
+right_down_boundary = 2.0
+
+[node name="Bat3" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 20, 64 )
+left_up_boundary = 3.0
+right_down_boundary = 4.0
+speed = 60
+
+[node name="RollingFiend2" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 112, 40 )
+
+[node name="RollingFiend3" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 296, 96 )
+
+[node name="RollingFiend4" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 432, 96 )
+
+[node name="RollingFiend6" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 456, 152 )
+
+[node name="RollingFiend7" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 592, 40 )
+
+[node name="RollingFiend8" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 712, 120 )
+
+[node name="RollingFiend5" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 376, 160 )
+
+[node name="Snail" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 64, 112 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+
+[node name="Snail2" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 192, 168 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+
+[node name="Snail6" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 632, 168 )
+right_down_boundary = 14.0
+
+[node name="Snail4" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 400, 48 )
+right_down_boundary = 6.0
+
+[node name="Snail3" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 192, 120 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+
+[node name="Tentacle" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 568, 152 )
+
+[node name="Bat8" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 576, 40 )
+left_up_boundary = 4.0
+right_down_boundary = 5.0
+
+[node name="Snail5" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 696, 48 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+slower_speed = 40
+faster_speed = 100
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 8, 136 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 520, 112 )
+number = 1
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 728, 48 )
+number = 2
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 760, 168 )
+number = 3
+
+[node name="Key" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 144, 120 )
+
+[node name="Key3" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 48, 168 )
+
+[node name="Key4" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 80, 168 )
+
+[node name="Key28" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 264, 168 )
+
+[node name="Key29" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 280, 160 )
+
+[node name="Key30" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 304, 152 )
+
+[node name="Key31" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 344, 152 )
+
+[node name="Key32" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 520, 168 )
+
+[node name="Key33" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 400, 144 )
+
+[node name="Key34" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 408, 160 )
+
+[node name="Key8" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 40, 40 )
+
+[node name="Key9" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 80, 40 )
+
+[node name="Key10" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 80, 72 )
+
+[node name="Key11" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 32, 72 )
+
+[node name="Key12" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 104, 40 )
+
+[node name="Key13" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 144, 40 )
+
+[node name="Key14" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 192, 48 )
+
+[node name="Key15" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 224, 48 )
+
+[node name="Key16" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 248, 48 )
+
+[node name="Key17" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 272, 48 )
+
+[node name="Key18" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 296, 48 )
+
+[node name="Key19" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 544, 168 )
+
+[node name="Key20" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 216, 120 )
+
+[node name="Key21" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 240, 104 )
+
+[node name="Key22" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 376, 96 )
+
+[node name="Key25" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 376, 48 )
+
+[node name="Key26" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 408, 48 )
+
+[node name="Key27" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 440, 48 )
+
+[node name="Key35" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 472, 48 )
+
+[node name="Key36" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 504, 48 )
+
+[node name="Key37" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 496, 160 )
+
+[node name="Key38" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 432, 160 )
+
+[node name="Key39" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 632, 128 )
+
+[node name="Key40" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 672, 128 )
+
+[node name="Key48" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 120, 168 )
+
+[node name="Key49" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 168, 168 )
+
+[node name="Key50" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 224, 168 )
+
+[node name="Key41" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 688, 120 )
+
+[node name="Key42" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 592, 40 )
+
+[node name="Key43" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 664, 32 )
+
+[node name="Key44" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 664, 168 )
+
+[node name="Key46" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 696, 168 )
+
+[node name="Key47" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 728, 168 )
+
+[node name="Key45" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 632, 168 )
+
+[node name="Key24" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 496, 112 )
+
+[node name="Key23" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 424, 96 )
+
+[node name="Key5" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 88, 112 )
+
+[node name="Key6" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 24, 112 )
+
+[node name="Key7" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 56, 112 )
+
+[node name="Key2" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 632, 104 )
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 128, 88 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 392, 168 )
+color = 2
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 320, 104 )
+color = 1
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 584, 168 )
+color = 3
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 124, 40 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 720, 72 )
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 752, 112 )
+color = 4
+
+[node name="Sparkles" type="Node2D" parent="."]
+
+[node name="Green" type="Node2D" parent="Sparkles"]
+
+[node name="Sparkles" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 108, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles2" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 148, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles3" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 76, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles4" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 292, 180 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles5" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 300, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles6" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 292, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles7" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 308, 172 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles8" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 316, 172 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles9" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 340, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles10" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 388, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles11" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 396, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles12" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 404, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles13" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 468, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles14" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 588, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles15" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 596, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles16" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 652, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles17" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 660, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles18" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 724, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles19" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 652, 148 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles20" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 644, 148 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles21" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 292, 68 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles22" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 284, 68 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles23" type="CPUParticles2D" parent="Sparkles/Green"]
+position = Vector2( 244, 76 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 0.709804, 1, 0.74902, 1 )
+script = ExtResource( 31 )
+
+[node name="Red" type="Node2D" parent="Sparkles"]
+
+[node name="Sparkles24" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 156, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles25" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 212, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles26" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 260, 68 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles27" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 252, 124 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles28" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 372, 108 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles29" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 340, 172 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles30" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 364, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles31" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 436, 180 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles32" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 476, 180 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles33" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 500, 68 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles34" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 548, 180 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles35" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 628, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles36" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 676, 180 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles37" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 748, 188 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles38" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 716, 148 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="Sparkles39" type="CPUParticles2D" parent="Sparkles/Red"]
+position = Vector2( 692, 140 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 32 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 31 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( -4, 96 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 772, 96 )
+shape = SubResource( 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 0, 1, 0.180392, 0.0627451 )
+script = ExtResource( 19 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0, 0.890196, 0.0627451 )
+script = ExtResource( 19 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Exit" parent="." instance=ExtResource( 24 )]
+position = Vector2( 656, 100 )
+cost = 25
+
+[node name="SpeccyArea" type="Area2D" parent="."]
+position = Vector2( 536, 176 )
+collision_layer = 0
+collision_mask = 128
+monitorable = false
+script = ExtResource( 34 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="SpeccyArea"]
+position = Vector2( 4, -20 )
+shape = SubResource( 3 )
+
+[node name="Speccy" parent="SpeccyArea" instance=ExtResource( 33 )]
+position = Vector2( 64, -56 )
+flip = true
+message = "shoot_that_thing"
+
+[connection signal="body_entered" from="SpeccyArea" to="SpeccyArea" method="_on_body_entered"]
diff --git a/maps/cave_speccy_detector.gd b/maps/cave_speccy_detector.gd
new file mode 100644
index 0000000..192e595
--- /dev/null
+++ b/maps/cave_speccy_detector.gd
@@ -0,0 +1,10 @@
+extends Area2D
+
+
+var speccy_urgent_warning: bool = true
+
+
+func _on_body_entered(body: Node) -> void:
+ if speccy_urgent_warning:
+ $Speccy.appear()
+ speccy_urgent_warning = false
diff --git a/maps/copper.tscn b/maps/copper.tscn
deleted file mode 100644
index 962580d..0000000
--- a/maps/copper.tscn
+++ /dev/null
@@ -1,28 +0,0 @@
-[gd_scene load_steps=6 format=2]
-
-[ext_resource path="res://graphics/backgrounds/copper.png" type="Texture" id=1]
-[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2]
-[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=3]
-[ext_resource path="res://maps/map.gd" type="Script" id=4]
-[ext_resource path="res://tilesets/t_copper.tres" type="TileSet" id=5]
-
-[node name="Map" type="Node2D" groups=["map"]]
-pause_mode = 1
-script = ExtResource( 4 )
-save_location = 3
-
-[node name="Camera2D" parent="." instance=ExtResource( 3 )]
-
-[node name="Sprite" type="Sprite" parent="Camera2D"]
-position = Vector2( 128, 96 )
-z_index = -2
-texture = ExtResource( 1 )
-
-[node name="Player" parent="." instance=ExtResource( 2 )]
-position = Vector2( 32, 152 )
-
-[node name="TileMap" type="TileMap" parent="."]
-tile_set = ExtResource( 5 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 1310731, 0, 65536, 1310732, 0, 65537, 1310733, 0, 65537, 1310734, 0, 65538, 1441792, 0, 65539, 1441793, 0, 65539, 1441794, 0, 65539, 1441795, 0, 65539, 1441796, 0, 65539, 1441797, 0, 65539, 1441798, 0, 65539, 1441799, 0, 65539, 1441800, 0, 65539, 1441801, 0, 65539, 1441802, 0, 65539, 1441803, 0, 65539, 1441804, 0, 65539, 1441805, 0, 65539, 1441806, 0, 65539, 1441807, 0, 65539, 1441808, 0, 65539, 1441809, 0, 65539, 1441810, 0, 65539, 1441811, 0, 65539, 1441812, 0, 65539, 1441813, 0, 65539, 1441814, 0, 65539, 1441815, 0, 65539, 1441816, 0, 65539, 1441817, 0, 65539, 1441818, 0, 65539, 1441819, 0, 65539, 1441820, 0, 65539, 1441821, 0, 65539, 1441822, 0, 65539, 1441823, 0, 65539, 1507328, 0, 65539, 1507329, 0, 65539, 1507330, 0, 65539, 1507331, 0, 65539, 1507332, 0, 65539, 1507333, 0, 65539, 1507334, 0, 65539, 1507335, 0, 65539, 1507336, 0, 65539, 1507337, 0, 65539, 1507338, 0, 65539, 1507339, 0, 65539, 1507340, 0, 65539, 1507341, 0, 65539, 1507342, 0, 65539, 1507343, 0, 65539, 1507344, 0, 65539, 1507345, 0, 65539, 1507346, 0, 65539, 1507347, 0, 65539, 1507348, 0, 65539, 1507349, 0, 65539, 1507350, 0, 65539, 1507351, 0, 65539, 1507352, 0, 65539, 1507353, 0, 65539, 1507354, 0, 65539, 1507355, 0, 65539, 1507356, 0, 65539, 1507357, 0, 65539, 1507358, 0, 65539, 1507359, 0, 65539 )
diff --git a/maps/demo_end.tscn b/maps/demo_end.tscn
deleted file mode 100644
index 51e4a54..0000000
--- a/maps/demo_end.tscn
+++ /dev/null
@@ -1,30 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://maps/demo_end.gd" type="Script" id=1]
-
-[node name="DemoEnd" type="Node2D"]
-script = ExtResource( 1 )
-
-[node name="ColorRect" type="ColorRect" parent="."]
-margin_right = 259.0
-margin_bottom = 196.0
-color = Color( 0, 0, 0, 1 )
-
-[node name="Label" type="Label" parent="."]
-margin_left = 13.0
-margin_top = 24.0
-margin_right = 112.0
-margin_bottom = 38.0
-text = "Congratulations! you beat the demo!
-Your high score is:
-
-
-
-Press \"R\" to play again!"
-
-[node name="Score" type="Label" parent="."]
-margin_left = 136.0
-margin_top = 41.0
-margin_right = 235.0
-margin_bottom = 55.0
-text = "000000"
diff --git a/maps/factory.tscn b/maps/factory.tscn
deleted file mode 100644
index 911a72b..0000000
--- a/maps/factory.tscn
+++ /dev/null
@@ -1,115 +0,0 @@
-[gd_scene load_steps=11 format=2]
-
-[ext_resource path="res://maps/map.gd" type="Script" id=1]
-[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=2]
-[ext_resource path="res://graphics/backgrounds/factory.png" type="Texture" id=3]
-[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=4]
-[ext_resource path="res://tilesets/t_factory.tres" type="TileSet" id=5]
-[ext_resource path="res://objects/environment/tube/tube_entrance.tscn" type="PackedScene" id=6]
-[ext_resource path="res://objects/environment/tube/tube_exit.tscn" type="PackedScene" id=7]
-[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=9]
-[ext_resource path="res://objects/environment/turret/turret.tscn" type="PackedScene" id=10]
-
-[sub_resource type="RectangleShape2D" id=5]
-extents = Vector2( 8, 16 )
-
-[node name="Map" type="Node2D" groups=["map"]]
-script = ExtResource( 1 )
-
-[node name="Sectors" type="CanvasLayer" parent="."]
-layer = -100
-visible = false
-
-[node name="ColorRect" type="ColorRect" parent="Sectors"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_left = 256.0
-margin_right = 256.0
-color = Color( 1, 0, 0.960784, 0.121569 )
-
-[node name="ColorRect4" type="ColorRect" parent="Sectors"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_left = 256.0
-margin_top = 192.0
-margin_right = 256.0
-margin_bottom = 192.0
-color = Color( 0.101961, 1, 0, 0.121569 )
-
-[node name="ColorRect3" type="ColorRect" parent="Sectors"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_left = 256.0
-margin_top = -192.0
-margin_right = 256.0
-margin_bottom = -192.0
-color = Color( 1, 0, 0, 0.121569 )
-
-[node name="ColorRect2" type="ColorRect" parent="Sectors"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_left = 512.0
-margin_right = 512.0
-color = Color( 0, 0.0627451, 1, 0.121569 )
-
-[node name="BackgroundLayer" type="CanvasLayer" parent="."]
-layer = -50
-
-[node name="Sprite" type="Sprite" parent="BackgroundLayer"]
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Camera2D" parent="." instance=ExtResource( 2 )]
-scroll_v = true
-
-[node name="Player" parent="." instance=ExtResource( 4 )]
-position = Vector2( 24, 136 )
-__meta__ = {
-"_edit_group_": true
-}
-
-[node name="Ground" type="TileMap" parent="."]
-tile_set = ExtResource( 5 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( -65523, 1610612739, 0, -65512, 1610612738, 0, -65509, 1610612737, 0, -65508, 1610612737, 0, -65507, 1610612737, 0, -65506, 1610612737, 0, -65505, 1610612737, 0, -65504, 1610612737, 0, -65503, 1610612737, 0, -65502, 1610612737, 0, 13, 1610612739, 0, 65549, 1610612739, 0, 65554, 0, 0, 65555, 0, 2, 65556, 0, 0, 131085, 1610612739, 0, 131090, -1073741824, 2, 131091, 0, 65536, 131092, -1073741824, 2, 131096, 3, 0, 196621, 1610612739, 0, 196626, 0, 0, 196627, 0, 2, 196628, 0, 0, 196632, 3, 0, 262145, 1610612738, 0, 262148, 1, 0, 262149, 1, 0, 262150, 1, 0, 262151, 1, 0, 262152, 1, 0, 262153, 1, 0, 262154, 1, 0, 262155, 1, 0, 262156, 1, 0, 262157, 2, 0, 262168, 3, 0, 327696, 1610612738, 0, 327699, 1, 0, 327700, 1, 0, 327701, 1, 0, 327702, 1, 0, 327703, 1, 0, 327704, 2, 0, 393233, 0, 65536, 393241, 0, 0, 458753, 1610612739, 0, 524289, 1610612739, 0, 524292, 1610612738, 0, 524295, 1, 0, 524296, 1, 0, 524297, 1, 0, 524298, 1, 0, 524299, 1, 0, 524300, 1, 0, 524301, 1, 0, 524302, 1, 0, 524303, 1, 0, 524304, 1, 0, 524305, 1, 0, 524306, 1, 0, 524307, 1, 0, 524308, 1, 0, 524309, -1073741822, 0, 589825, 1610612739, 0, 655361, 1610612739, 0, 720897, 1610612739, 0, 720900, 3, 0, 720917, 3, 0, 786433, 1610612739, 0, 786436, 3, 0, 786453, 3, 0, 851969, 1610612739, 0, 851989, 3, 0, 917517, 1, 0, 917518, 1, 0, 917519, 1, 0, 917520, 1, 0, 917521, 1, 0, 917522, 1, 0, 917523, 1, 0, 917524, 1, 0, 917525, 2, 0, 1114122, 0, 0, 1114123, 0, 2, 1114124, 0, 2, 1114125, 0, 0, 1179658, -1073741824, 2, 1179659, 0, 65536, 1179660, 0, 65536, 1179661, -1073741824, 2, 1245194, 0, 0, 1245195, 0, 2, 1245196, 0, 2, 1245197, 0, 0, 1310721, 0, 1, 1310722, 0, 2, 1310723, 0, 2, 1310724, 0, 2, 1310725, 0, 2, 1310726, 0, 2, 1310727, 0, 2, 1310728, 0, 2, 1310729, 0, 3 )
-
-[node name="Ladder2" type="TileMap" parent="."]
-tile_set = ExtResource( 5 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 1114119, 0, 131072, 1179655, 0, 131072, 1245191, 0, 131072 )
-
-[node name="Ladder" parent="." instance=ExtResource( 9 )]
-position = Vector2( 56, 136 )
-scale = Vector2( 1, 3 )
-
-[node name="Turret" parent="." instance=ExtResource( 10 )]
-position = Vector2( 96, 160 )
-
-[node name="Area2D" type="Area2D" parent="."]
-position = Vector2( 8, 160 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
-position = Vector2( 0, -16 )
-shape = SubResource( 5 )
-
-[node name="TubeEntrance" parent="." instance=ExtResource( 6 )]
-position = Vector2( 104, 120 )
-
-[node name="TubeEntrance2" parent="." instance=ExtResource( 6 )]
-position = Vector2( 176, 120 )
-direction = Vector2( 0, -1 )
-
-[node name="TubeEntrance3" parent="." instance=ExtResource( 6 )]
-position = Vector2( 176, 72 )
-direction = Vector2( -1, 0 )
-
-[node name="TubeEntrance4" parent="." instance=ExtResource( 6 )]
-position = Vector2( 40, 72 )
-direction = Vector2( 0, 1 )
-
-[node name="TubeExit" parent="." instance=ExtResource( 7 )]
-position = Vector2( 40, 104 )
-
-[connection signal="tree_entered" from="Sectors" to="Sectors" method="set_visible" binds= [ false ]]
diff --git a/maps/graffiti.gd b/maps/graffiti.gd
new file mode 100644
index 0000000..6bbcbd6
--- /dev/null
+++ b/maps/graffiti.gd
@@ -0,0 +1,7 @@
+extends Node2D
+
+func _ready():
+ var save = Save.current_file
+ var id = LevelData.levels[Game.current_level].save_id
+ if !save.levels[id].shards_collected[1]:
+ visible = false
diff --git a/maps/graveyard.tscn b/maps/graveyard.tscn
new file mode 100644
index 0000000..16134a4
--- /dev/null
+++ b/maps/graveyard.tscn
@@ -0,0 +1,612 @@
+[gd_scene load_steps=27 format=2]
+
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1]
+[ext_resource path="res://maps/map.gd" type="Script" id=2]
+[ext_resource path="res://graphics/backgrounds/night.png" type="Texture" id=3]
+[ext_resource path="res://tilesets/t_horror.tres" type="TileSet" id=4]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=5]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=6]
+[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/enemy/artificial_soul.tscn" type="PackedScene" id=8]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=9]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=10]
+[ext_resource path="res://audio/music/precision_parasite.ogg" type="AudioStream" id=11]
+[ext_resource path="res://objects/enemy/hellarcher.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/falling_block/falling_block_graveyard.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=20]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=21]
+[ext_resource path="res://scripts/has_splash.gd" type="Script" id=22]
+[ext_resource path="res://objects/lore/graveyard/hellarcher.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/lore/graveyard/woeful_soul.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/graveyard/graveyard.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/lore/graveyard/artificial_soul.tscn" type="PackedScene" id=26]
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 2 )
+target_time_any = 40
+target_time_100 = 145
+music = ExtResource( 11 )
+lore_entries = [ ExtResource( 25 ), ExtResource( 26 ), ExtResource( 23 ), ExtResource( 24 ) ]
+
+[node name="Background" type="CanvasLayer" parent="."]
+layer = -1
+
+[node name="Sprite" type="Sprite" parent="Background"]
+position = Vector2( 128, 96 )
+texture = ExtResource( 3 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 21 )
+tile_set = ExtResource( 4 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( -65537, 1, 0, -130976, 1, 0, -1, 1, 65536, -65492, 0, 0, -65440, 1, 65536, 65535, 1, 65536, 31, 0, 0, 44, 0, 65536, 96, 1, 65536, 131071, 1, 65536, 65567, 0, 65536, 65580, 0, 65536, 65632, 1, 65536, 196607, 1, 65536, 131103, 0, 65536, 131116, 0, 65536, 131134, 2, 65536, 131168, 1, 65536, 262143, 1, 65536, 196610, 0, 196609, 196611, 0, 196610, 196612, 0, 196610, 196613, 0, 196610, 196614, 0, 196610, 196615, 0, 196610, 196616, 0, 196610, 196617, 0, 196610, 196618, 0, 196610, 196619, 0, 196610, 196620, 0, 196611, 196639, 0, 65536, 196652, 0, 65536, 196659, 2, 65536, 196661, 2, 65537, 196663, 2, 65536, 196665, 2, 65539, 196667, 2, 65536, 196668, 1, 1, 196669, 1, 2, 196670, 1, 2, 196671, 1, 2, 196672, 1, 2, 196673, 1, 3, 196695, 1, 196608, 196699, 1, 196609, 196700, 1, 196610, 196701, 1, 196610, 196702, 1, 196611, 196704, 1, 65536, 327679, 1, 131072, 262159, 0, 196609, 262160, 0, 196610, 262161, 0, 196611, 262164, 0, 196609, 262165, 0, 196610, 262166, 0, 196610, 262167, 0, 196610, 262168, 0, 196610, 262169, 0, 196610, 262170, 0, 196611, 262175, 0, 131072, 262188, 0, 65536, 262190, 1, 196609, 262191, 1, 196610, 262192, 1, 196610, 262193, 1, 196610, 262194, 1, 196610, 262195, 1, 196610, 262196, 1, 196610, 262197, 1, 196610, 262198, 1, 196610, 262199, 1, 196610, 262200, 1, 196610, 262201, 1, 196610, 262202, 1, 196610, 262203, 1, 196610, 262204, 1, 131074, 262205, 1, 131074, 262206, 1, 131074, 262207, 1, 131074, 262208, 1, 131074, 262209, 1, 131075, 262218, 2, 65537, 262224, 1, 196609, 262225, 1, 196610, 262226, 1, 196610, 262227, 1, 196611, 262240, 1, 65536, 393215, 0, 196609, 327680, 0, 196611, 327724, 0, 65536, 327752, 1, 196609, 327753, 1, 196610, 327754, 1, 196610, 327755, 1, 196610, 327756, 1, 196611, 327776, 1, 65536, 458751, 1, 0, 393255, 0, 1, 393256, 0, 196610, 393257, 0, 196610, 393258, 0, 196610, 393259, 0, 196610, 393260, 0, 131075, 393279, 2, 65536, 393312, 1, 65536, 524287, 1, 65536, 458752, 0, 196609, 458753, 0, 196610, 458754, 0, 196611, 458757, 0, 196609, 458758, 0, 196610, 458759, 0, 196611, 458788, 0, 1, 458789, 0, 196610, 458790, 0, 196610, 458791, 0, 131075, 458811, 2, 65536, 458813, 1, 1, 458814, 1, 196610, 458815, 1, 196610, 458816, 1, 196610, 458817, 1, 196610, 458818, 1, 196611, 458845, 2, 65536, 458848, 1, 65536, 589823, 1, 65536, 524321, 0, 1, 524322, 0, 196610, 524323, 0, 196610, 524324, 0, 131075, 524346, 1, 196609, 524347, 1, 196610, 524348, 1, 196610, 524349, 1, 131075, 524365, 2, 65539, 524379, 1, 1, 524380, 1, 2, 524381, 1, 2, 524382, 1, 2, 524383, 1, 2, 524384, 1, 65539, 655359, 1, 65536, 589854, 0, 1, 589855, 0, 196610, 589856, 0, 196610, 589857, 0, 131075, 589900, 1, 1, 589901, 1, 3, 589915, 1, 131073, 589916, 1, 131074, 589917, 1, 131074, 589918, 1, 131074, 589919, 1, 131074, 589920, 1, 65539, 720895, 1, 65536, 655374, 0, 196609, 655375, 0, 196610, 655376, 0, 196610, 655377, 0, 196610, 655378, 0, 196610, 655379, 0, 196610, 655380, 0, 196610, 655381, 0, 196610, 655382, 0, 196610, 655383, 0, 196610, 655384, 0, 196610, 655385, 0, 196610, 655386, 0, 196611, 655389, 0, 196609, 655390, 0, 131075, 655406, 2, 65536, 655408, 2, 65538, 655410, 2, 65536, 655432, 2, 65539, 655436, 1, 65537, 655437, 1, 65539, 655442, 1, 196609, 655443, 1, 196611, 655456, 1, 65536, 786431, 1, 65536, 720939, 1, 1, 720940, 1, 2, 720941, 1, 2, 720942, 1, 2, 720943, 1, 2, 720944, 1, 2, 720945, 1, 2, 720946, 1, 2, 720947, 1, 2, 720948, 1, 2, 720949, 1, 3, 720955, 2, 65536, 720958, 2, 65536, 720966, 1, 1, 720967, 1, 2, 720968, 1, 3, 720972, 1, 131073, 720973, 1, 131075, 720981, 2, 65537, 720992, 1, 65536, 851967, 1, 65536, 786442, 0, 196609, 786443, 0, 196610, 786444, 0, 196611, 786471, 2, 65536, 786475, 1, 131073, 786476, 1, 131074, 786477, 1, 131074, 786478, 1, 131074, 786479, 1, 131074, 786480, 1, 65538, 786481, 1, 65538, 786482, 1, 131074, 786483, 1, 131074, 786484, 1, 131074, 786485, 1, 131075, 786490, 1, 196609, 786491, 1, 196610, 786492, 1, 196610, 786493, 1, 196610, 786494, 1, 196610, 786495, 1, 2, 786496, 1, 2, 786497, 1, 3, 786502, 1, 131073, 786503, 1, 131074, 786504, 1, 131075, 786517, 1, 1, 786518, 1, 3, 786528, 1, 65536, 917503, 1, 65536, 852007, 1, 1, 852008, 1, 3, 852016, 1, 65537, 852017, 1, 65539, 852031, 1, 65537, 852032, 1, 65538, 852033, 1, 131074, 852034, 1, 196611, 852040, 0, 0, 852053, 1, 131073, 852054, 1, 131074, 852055, 1, 196610, 852056, 1, 196610, 852057, 1, 196610, 852058, 1, 196610, 852059, 1, 196610, 852060, 1, 196610, 852061, 1, 196610, 852062, 1, 196610, 852063, 1, 196610, 852064, 1, 65539, 983039, 1, 65536, 917512, 2, 65536, 917515, 2, 65538, 917518, 2, 65536, 917528, 0, 196609, 917529, 0, 196610, 917530, 0, 196611, 917543, 1, 131073, 917544, 1, 131075, 917552, 1, 65537, 917553, 1, 65539, 917567, 1, 65537, 917568, 1, 65539, 917576, 0, 131073, 917577, 0, 196610, 917578, 0, 196610, 917579, 0, 196610, 917580, 0, 3, 917600, 1, 65536, 1048575, 1, 65536, 983048, 1, 1, 983049, 1, 2, 983050, 1, 2, 983051, 1, 2, 983052, 1, 2, 983053, 1, 2, 983054, 1, 3, 983075, 1, 1, 983076, 1, 3, 983088, 1, 65537, 983089, 1, 65539, 983103, 1, 65537, 983104, 1, 65539, 983116, 0, 131073, 983117, 0, 196610, 983118, 0, 196610, 983119, 0, 196611, 983136, 1, 65536, 1114111, 1, 65536, 1048584, 1, 131073, 1048585, 1, 131074, 1048586, 1, 131074, 1048587, 1, 131074, 1048588, 1, 131074, 1048589, 1, 131074, 1048590, 1, 131075, 1048605, 2, 65537, 1048609, 2, 65536, 1048611, 1, 65537, 1048612, 1, 65539, 1048624, 1, 131073, 1048625, 1, 131075, 1048627, 1, 196609, 1048628, 1, 196610, 1048629, 1, 196610, 1048630, 1, 196610, 1048631, 1, 196610, 1048632, 1, 196610, 1048633, 1, 196610, 1048634, 1, 196610, 1048635, 1, 196610, 1048636, 1, 196610, 1048637, 1, 196610, 1048638, 1, 196610, 1048639, 1, 131074, 1048640, 1, 65539, 1048672, 1, 65536, 1179647, 1, 65536, 1114141, 1, 1, 1114142, 1, 2, 1114143, 1, 2, 1114144, 1, 2, 1114145, 1, 2, 1114146, 1, 2, 1114147, 1, 65538, 1114148, 1, 65539, 1114176, 1, 131073, 1114177, 1, 196610, 1114178, 1, 196610, 1114179, 1, 196611, 1114196, 2, 65536, 1114198, 2, 65538, 1114200, 2, 65536, 1114204, 2, 65536, 1114205, 2, 65537, 1114208, 1, 65536, 1245183, 1, 65536, 1179652, 0, 196609, 1179653, 0, 196610, 1179654, 0, 196611, 1179675, 1, 196609, 1179676, 1, 196610, 1179677, 1, 131074, 1179678, 1, 131074, 1179679, 1, 131074, 1179680, 1, 131074, 1179681, 1, 131074, 1179682, 1, 131074, 1179683, 1, 131074, 1179684, 1, 131075, 1179732, 1, 196609, 1179733, 1, 196610, 1179734, 1, 196610, 1179735, 1, 196610, 1179736, 1, 196610, 1179737, 1, 196610, 1179738, 1, 196610, 1179739, 1, 196610, 1179740, 1, 196610, 1179741, 1, 196610, 1179742, 1, 196610, 1179743, 1, 196610, 1179744, 1, 65539, 1310719, 1, 65536, 1245280, 1, 65536, 1376255, 1, 65536, 1310720, 0, 196609, 1310721, 0, 196611, 1310732, 2, 65536, 1310734, 2, 65539, 1310736, 2, 65536, 1310742, 2, 65536, 1310757, 2, 65537, 1310816, 1, 65536, 1441791, 1, 65536, 1376258, 2, 65538, 1376262, 2, 65536, 1376266, 1, 1, 1376267, 1, 2, 1376268, 1, 2, 1376269, 1, 2, 1376270, 1, 2, 1376271, 1, 2, 1376272, 1, 2, 1376273, 1, 2, 1376274, 1, 2, 1376275, 1, 2, 1376276, 1, 2, 1376277, 1, 2, 1376278, 1, 3, 1376281, 3, 1, 1376283, 2, 65536, 1376287, 2, 65537, 1376289, 2, 65536, 1376290, 2, 65536, 1376291, 2, 65536, 1376292, 1, 1, 1376293, 1, 2, 1376294, 1, 3, 1376301, 2, 65536, 1376303, 2, 65539, 1376304, 2, 65536, 1376305, 2, 65539, 1376308, 2, 65536, 1376322, 2, 65536, 1376324, 2, 65538, 1376326, 2, 65536, 1376336, 2, 65536, 1376338, 2, 65539, 1376340, 2, 65536, 1376342, 2, 65539, 1376344, 2, 65536, 1376352, 1, 65536, 1507327, 1, 65537, 1441792, 1, 2, 1441793, 1, 2, 1441794, 1, 2, 1441795, 1, 2, 1441796, 1, 2, 1441797, 1, 2, 1441798, 1, 2, 1441799, 1, 2, 1441800, 1, 2, 1441801, 1, 2, 1441802, 1, 65538, 1441803, 1, 65538, 1441804, 1, 65538, 1441805, 1, 65538, 1441806, 1, 65538, 1441807, 1, 65538, 1441808, 1, 65538, 1441809, 1, 65538, 1441810, 1, 65538, 1441811, 1, 65538, 1441812, 1, 65538, 1441813, 1, 65538, 1441814, 1, 65538, 1441815, 1, 2, 1441816, 1, 2, 1441817, 1, 2, 1441818, 1, 2, 1441819, 1, 2, 1441820, 1, 2, 1441821, 1, 2, 1441822, 1, 2, 1441823, 1, 2, 1441824, 1, 2, 1441825, 1, 2, 1441826, 1, 2, 1441827, 1, 2, 1441828, 1, 65538, 1441829, 1, 65538, 1441830, 1, 65539, 1441836, 1, 1, 1441837, 1, 2, 1441838, 1, 2, 1441839, 1, 2, 1441840, 1, 2, 1441841, 1, 2, 1441842, 1, 2, 1441843, 1, 2, 1441844, 1, 2, 1441845, 1, 3, 1441851, 1, 1, 1441852, 1, 2, 1441853, 1, 2, 1441854, 1, 2, 1441855, 1, 2, 1441856, 1, 2, 1441857, 1, 2, 1441858, 1, 2, 1441859, 1, 2, 1441860, 1, 2, 1441861, 1, 2, 1441862, 1, 2, 1441863, 1, 2, 1441864, 1, 3, 1441870, 1, 1, 1441871, 1, 2, 1441872, 1, 2, 1441873, 1, 2, 1441874, 1, 2, 1441875, 1, 2, 1441876, 1, 2, 1441877, 1, 2, 1441878, 1, 2, 1441879, 1, 2, 1441880, 1, 2, 1441881, 1, 2, 1441882, 1, 2, 1441883, 1, 2, 1441884, 1, 2, 1441885, 1, 2, 1441886, 1, 2, 1441887, 1, 2, 1441888, 1, 65539, 1572863, 1, 65537, 1507328, 1, 65538, 1507329, 1, 65538, 1507330, 1, 65538, 1507331, 1, 65538, 1507332, 1, 65538, 1507333, 1, 65538, 1507334, 1, 65538, 1507335, 1, 65538, 1507336, 1, 65538, 1507337, 1, 65538, 1507338, 1, 65538, 1507339, 1, 65538, 1507340, 1, 65538, 1507341, 1, 65538, 1507342, 1, 65538, 1507343, 1, 65538, 1507344, 1, 65538, 1507345, 1, 65538, 1507346, 1, 65538, 1507347, 1, 65538, 1507348, 1, 65538, 1507349, 1, 65538, 1507350, 1, 65538, 1507351, 1, 65538, 1507352, 1, 65538, 1507353, 1, 65538, 1507354, 1, 65538, 1507355, 1, 65538, 1507356, 1, 65538, 1507357, 1, 65538, 1507358, 1, 65538, 1507359, 1, 65538, 1507360, 1, 65538, 1507361, 1, 65538, 1507362, 1, 65538, 1507363, 1, 65538, 1507364, 1, 65538, 1507365, 1, 65538, 1507366, 1, 65539, 1507372, 1, 65537, 1507373, 1, 65538, 1507374, 1, 65538, 1507375, 1, 65538, 1507376, 1, 65538, 1507377, 1, 65538, 1507378, 1, 65538, 1507379, 1, 65538, 1507380, 1, 65538, 1507381, 1, 65539, 1507387, 1, 65537, 1507388, 1, 65538, 1507389, 1, 65538, 1507390, 1, 65538, 1507391, 1, 65538, 1507392, 1, 65538, 1507393, 1, 65538, 1507394, 1, 65538, 1507395, 1, 65538, 1507396, 1, 65538, 1507397, 1, 65538, 1507398, 1, 65538, 1507399, 1, 65538, 1507400, 1, 65539, 1507406, 1, 65537, 1507407, 1, 65538, 1507408, 1, 65538, 1507409, 1, 65538, 1507410, 1, 65538, 1507411, 1, 65538, 1507412, 1, 65538, 1507413, 1, 65538, 1507414, 1, 65538, 1507415, 1, 65538, 1507416, 1, 65538, 1507417, 1, 65538, 1507418, 1, 65538, 1507419, 1, 65538, 1507420, 1, 65538, 1507421, 1, 65538, 1507422, 1, 65538, 1507423, 1, 65538, 1507424, 1, 65539, 1638399, 1, 131073, 1572864, 1, 131074, 1572865, 1, 131074, 1572866, 1, 131074, 1572867, 1, 131074, 1572868, 1, 131074, 1572869, 1, 131074, 1572870, 1, 131074, 1572871, 1, 131074, 1572872, 1, 131074, 1572873, 1, 131074, 1572874, 1, 131074, 1572875, 1, 131074, 1572876, 1, 131074, 1572877, 1, 131074, 1572878, 1, 131074, 1572879, 1, 131074, 1572880, 1, 131074, 1572881, 1, 131074, 1572882, 1, 131074, 1572883, 1, 131074, 1572884, 1, 131074, 1572885, 1, 131074, 1572886, 1, 131074, 1572887, 1, 131074, 1572888, 1, 131074, 1572889, 1, 131074, 1572890, 1, 131074, 1572891, 1, 131074, 1572892, 1, 131074, 1572893, 1, 131074, 1572894, 1, 131074, 1572895, 1, 131074, 1572896, 1, 131074, 1572897, 1, 131074, 1572898, 1, 131074, 1572899, 1, 131074, 1572900, 1, 131074, 1572901, 1, 131074, 1572902, 1, 131075, 1572908, 1, 131073, 1572909, 1, 131074, 1572910, 1, 131074, 1572911, 1, 131074, 1572912, 1, 131074, 1572913, 1, 131074, 1572914, 1, 131074, 1572915, 1, 131074, 1572916, 1, 131074, 1572917, 1, 131075, 1572923, 1, 131073, 1572924, 1, 131074, 1572925, 1, 131074, 1572926, 1, 131074, 1572927, 1, 131074, 1572928, 1, 131074, 1572929, 1, 131074, 1572930, 1, 131074, 1572931, 1, 131074, 1572932, 1, 131074, 1572933, 1, 131074, 1572934, 1, 131074, 1572935, 1, 131074, 1572936, 1, 131075, 1572942, 1, 131073, 1572943, 1, 131074, 1572944, 1, 131074, 1572945, 1, 131074, 1572946, 1, 131074, 1572947, 1, 131074, 1572948, 1, 131074, 1572949, 1, 131074, 1572950, 1, 131074, 1572951, 1, 131074, 1572952, 1, 131074, 1572953, 1, 131074, 1572954, 1, 131074, 1572955, 1, 131074, 1572956, 1, 131074, 1572957, 1, 131074, 1572958, 1, 131074, 1572959, 1, 131074, 1572960, 1, 131075 )
+
+[node name="Player" parent="." instance=ExtResource( 1 )]
+position = Vector2( 32, 176 )
+
+[node name="Camera2D" parent="." instance=ExtResource( 17 )]
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 9 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 131140, 1, 0, 196676, 1, 65536, 262212, 1, 65536, 327748, 1, 65536, 393284, 1, 131072, 458831, 1, 0, 524367, 1, 65536, 589903, 1, 65536, 655439, 1, 65536, 720901, 1, 0, 720975, 1, 65536, 786437, 1, 65536, 786511, 1, 131072, 851973, 1, 65536, 917509, 1, 65536, 983045, 1, 131072, 983122, 1, 0, 1048658, 1, 65536, 1114194, 1, 65536, 1179730, 1, 65536, 1245266, 1, 131072 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+light_mask = 0
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+collision_mask = 0
+format = 1
+tile_data = PoolIntArray( 196694, -1073741823, 0, 196696, -1610612735, 0, 262228, -1610612735, 0, 589914, -1073741823, 0, 720938, -1073741823, 0, 720971, -1073741823, 0, 786474, -1073741823, 0, 786520, 1, 0, 852006, -1073741823, 0, 917542, -1073741823, 0, 1048643, 1, 0 )
+
+[node name="DeathNoBlood" type="TileMap" parent="." groups=["death", "has_splash", "no_blood"]]
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+collision_mask = 0
+format = 1
+tile_data = PoolIntArray( 1441831, 8, 0, 1441832, 8, 0, 1441833, 8, 0, 1441834, 8, 0, 1441835, 8, 0, 1441846, 8, 0, 1441847, 8, 0, 1441848, 8, 0, 1441849, 8, 0, 1441850, 8, 0, 1441865, 8, 0, 1441866, 8, 0, 1441867, 8, 0, 1441868, 8, 0, 1441869, 8, 0, 1507367, 9, 0, 1507368, 9, 0, 1507369, 9, 0, 1507370, 9, 0, 1507371, 9, 0, 1507382, 9, 0, 1507383, 9, 0, 1507384, 9, 0, 1507385, 9, 0, 1507386, 9, 0, 1507401, 9, 0, 1507402, 9, 0, 1507403, 9, 0, 1507404, 9, 0, 1507405, 9, 0 )
+script = ExtResource( 22 )
+splash_color = Color( 0.552941, 0.14902, 0.180392, 1 )
+
+[node name="DeathBackground" type="TileMap" parent="DeathNoBlood"]
+z_index = -11
+tile_set = ExtResource( 6 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 0
+collision_mask = 0
+format = 1
+tile_data = PoolIntArray( 1441830, 8, 0, 1441836, 8, 0, 1441845, 8, 0, 1441851, 8, 0, 1441864, 8, 0, 1441870, 8, 0, 1507366, 9, 0, 1507372, 9, 0, 1507381, 9, 0, 1507387, 9, 0, 1507400, 9, 0, 1507406, 9, 0 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="Ladder" parent="Environment" instance=ExtResource( 10 )]
+position = Vector2( 40, 88 )
+scale = Vector2( 1, 5 )
+
+[node name="Ladder2" parent="Environment" instance=ExtResource( 10 )]
+position = Vector2( 544, 16 )
+scale = Vector2( 1, 5 )
+
+[node name="Ladder3" parent="Environment" instance=ExtResource( 10 )]
+position = Vector2( 632, 56 )
+scale = Vector2( 1, 6 )
+
+[node name="Ladder4" parent="Environment" instance=ExtResource( 10 )]
+position = Vector2( 656, 120 )
+scale = Vector2( 1, 5 )
+
+[node name="Rock2" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 368, 24 )
+
+[node name="Rock4" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 752, 16 )
+
+[node name="Rock3" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 408, 168 )
+
+[node name="FallingBlock" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 200, 152 )
+
+[node name="FallingBlock2" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 96, 80 )
+
+[node name="FallingBlock4" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 320, 32 )
+
+[node name="FallingBlock11" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 304, 24 )
+
+[node name="FallingBlock13" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 600, 168 )
+
+[node name="FallingBlock12" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 272, 24 )
+
+[node name="FallingBlock5" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 368, 152 )
+
+[node name="FallingBlock8" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 440, 72 )
+
+[node name="FallingBlock7" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 456, 168 )
+
+[node name="FallingBlock6" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 352, 136 )
+
+[node name="FallingBlock10" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 328, 168 )
+
+[node name="FallingBlock3" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 80, 64 )
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 464, 120 )
+number = 2
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 272, 16 )
+number = 1
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 192, 24 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 736, 16 )
+number = 3
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 200, 104 )
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 752, 136 )
+color = 4
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 376, 104 )
+color = 1
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 520, 128 )
+color = 2
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 15 )]
+position = Vector2( 736, 96 )
+color = 3
+
+[node name="Key" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 56, 168 )
+
+[node name="Key2" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 144, 160 )
+
+[node name="Key19" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 288, 112 )
+
+[node name="Key20" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 320, 96 )
+
+[node name="Key21" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 344, 80 )
+
+[node name="Key22" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 232, 72 )
+
+[node name="Key24" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 264, 56 )
+
+[node name="Key23" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 424, 80 )
+
+[node name="Key25" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 480, 16 )
+
+[node name="Key26" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 520, 16 )
+
+[node name="Key27" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 464, 56 )
+
+[node name="Key28" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 488, 48 )
+
+[node name="Key31" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 688, 88 )
+
+[node name="Key33" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 720, 96 )
+
+[node name="Key32" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 696, 136 )
+
+[node name="Key41" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 672, 136 )
+
+[node name="Key42" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 400, 168 )
+
+[node name="Key50" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 528, 48 )
+
+[node name="Key43" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 616, 112 )
+
+[node name="Key34" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 208, 24 )
+
+[node name="Key35" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 656, 72 )
+
+[node name="Key36" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 216, 136 )
+
+[node name="Key37" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 528, 96 )
+
+[node name="Key38" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 584, 32 )
+
+[node name="Key39" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 640, 24 )
+
+[node name="Key40" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 664, 24 )
+
+[node name="Key29" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 464, 88 )
+
+[node name="Key30" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 504, 88 )
+
+[node name="Key14" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 192, 168 )
+
+[node name="Key16" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 56, 16 )
+
+[node name="Key17" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 96, 72 )
+
+[node name="Key18" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 208, 72 )
+
+[node name="Key44" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 240, 128 )
+
+[node name="Key45" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 600, 32 )
+
+[node name="Key46" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 160, 24 )
+
+[node name="Key47" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 128, 24 )
+
+[node name="Key48" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 88, 16 )
+
+[node name="Key49" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 368, 168 )
+
+[node name="Key15" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 232, 168 )
+
+[node name="Key3" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 40, 136 )
+
+[node name="Key4" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 8, 152 )
+
+[node name="Key5" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 272, 168 )
+
+[node name="Key7" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 24, 16 )
+
+[node name="Key9" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 304, 160 )
+
+[node name="Key10" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 736, 56 )
+
+[node name="Key11" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 88, 88 )
+
+[node name="Key12" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 48, 48 )
+
+[node name="Key13" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 80, 56 )
+
+[node name="Key8" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 88, 160 )
+
+[node name="Key6" parent="Collectibles" instance=ExtResource( 16 )]
+position = Vector2( 16, 48 )
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 368, 40 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 528, 168 )
+
+[node name="Enemy" type="Node2D" parent="."]
+
+[node name="ArtificialSoul" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 88, 88 )
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul" instance=ExtResource( 8 )]
+initial_angle = 1.0
+
+[node name="ArtificialSoul3" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 216, 96 )
+radius = 1.0
+speed = 6.0
+
+[node name="ArtificialSoul2" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 168, 72 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul2" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul2" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul2" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 6.0
+
+[node name="ArtificialSoul12" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 128, 32 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+speed = 2.286
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul12" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+speed = 2.286
+
+[node name="ArtificialSoul5" parent="Enemy/ArtificialSoul12" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 3.0
+speed = 2.286
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul12" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+speed = 2.286
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul12" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 6.0
+speed = 2.286
+
+[node name="ArtificialSoul6" parent="Enemy/ArtificialSoul12" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 7.0
+speed = 2.286
+
+[node name="ArtificialSoul11" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 32, 48 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul11" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+
+[node name="ArtificialSoul5" parent="Enemy/ArtificialSoul11" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 3.0
+
+[node name="ArtificialSoul7" parent="Enemy/ArtificialSoul11" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 9.0
+
+[node name="ArtificialSoul9" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 296, 56 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 2.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul9" instance=ExtResource( 8 )]
+radius = 2.0
+initial_angle = 2.0
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul9" instance=ExtResource( 8 )]
+radius = 2.0
+initial_angle = 6.0
+
+[node name="ArtificialSoul5" parent="Enemy/ArtificialSoul9" instance=ExtResource( 8 )]
+radius = 2.0
+initial_angle = 12.0
+
+[node name="ArtificialSoul5" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 384, 88 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+speed = 1.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul5" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+speed = 1.0
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul5" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+speed = 1.0
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul5" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 6.0
+speed = 1.0
+
+[node name="ArtificialSoul4" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 584, 96 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul4" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul4" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul4" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 6.0
+
+[node name="ArtificialSoul13" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 600, 168 )
+z_index = 10
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul13" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+
+[node name="ArtificialSoul8" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 696, 32 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+speed = 3.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul8" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 2.0
+speed = 3.0
+
+[node name="ArtificialSoul3" parent="Enemy/ArtificialSoul8" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 4.0
+speed = 3.0
+
+[node name="ArtificialSoul4" parent="Enemy/ArtificialSoul8" instance=ExtResource( 8 )]
+radius = 3.0
+initial_angle = 6.0
+speed = 3.0
+
+[node name="ArtificialSoul10" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 712, 128 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 2.0
+speed = 8.0
+
+[node name="ArtificialSoul2" parent="Enemy/ArtificialSoul10" instance=ExtResource( 8 )]
+radius = 2.0
+initial_angle = 2.0
+speed = 8.0
+
+[node name="ArtificialSoul6" parent="Enemy" instance=ExtResource( 8 )]
+position = Vector2( 544, 32 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 1.0
+speed = 3.0
+
+[node name="Jerry" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 184, 26 )
+scale = Vector2( -1, 1 )
+shoot_time = 3.5
+bones_amount = 24
+
+[node name="Skelarcher3" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 168, 160 )
+scale = Vector2( -1, 1 )
+
+[node name="Skelarcher8" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 353, 42 )
+scale = Vector2( -1, 1 )
+shoot_time = 3.0
+
+[node name="Skelarcher2" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 392, 24 )
+shoot_time = 1.0
+
+[node name="Skelarcher6" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 760, 96 )
+scale = Vector2( -1, 1 )
+
+[node name="Skelarcher7" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 768, 56 )
+scale = Vector2( -1, 1 )
+
+[node name="Skelarcher4" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 496, 120 )
+scale = Vector2( -1, 1 )
+shoot_time = 0.1
+
+[node name="Skelarcher5" parent="Enemy" instance=ExtResource( 12 )]
+position = Vector2( 480, 168 )
+scale = Vector2( -1, 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 0, 1, 0.811765, 0.054902 )
+script = ExtResource( 5 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0, 0.913725, 0.054902 )
+script = ExtResource( 5 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Exit" parent="." instance=ExtResource( 18 )]
+position = Vector2( 752, 164 )
+cost = 25
+
+[node name="HUD" parent="." instance=ExtResource( 19 )]
+song_name = "♫Precision Parasite"
diff --git a/maps/hills.tscn b/maps/hills.tscn
new file mode 100644
index 0000000..a06cddd
--- /dev/null
+++ b/maps/hills.tscn
@@ -0,0 +1,496 @@
+[gd_scene load_steps=29 format=2]
+
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=1]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2]
+[ext_resource path="res://audio/music/rumble_loop.ogg" type="AudioStream" id=3]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=4]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=5]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://graphics/backgrounds/blue_sky.png" type="Texture" id=7]
+[ext_resource path="res://tilesets/t_grass.tres" type="TileSet" id=8]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=9]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=10]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/enemy/slime.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=17]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=18]
+[ext_resource path="res://maps/map.gd" type="Script" id=19]
+[ext_resource path="res://objects/lore/hills/speccy.tscn" type="PackedScene" id=20]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=21]
+[ext_resource path="res://objects/lore/hills/bioslime.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/lore/hills/eviscerator.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/hills/verdant_hills.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/lore/hills/sg.tscn" type="PackedScene" id=27]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 8, 128 )
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 19 )
+target_time_any = 70
+target_time_100 = 180
+music = ExtResource( 3 )
+lore_entries = [ ExtResource( 25 ), ExtResource( 24 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 27 ), ExtResource( 20 ) ]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -2
+
+[node name="Background" type="Sprite" parent="CanvasLayer"]
+z_index = -2
+texture = ExtResource( 7 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Camera2D" parent="." instance=ExtResource( 6 )]
+
+[node name="BackgroundTiles" type="TileMap" parent="."]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 720943, 0, 0, 720944, 0, 0, 720945, 0, 0, 720946, 0, 0, 720947, 0, 0, 720948, 0, 0, 720949, 0, 0, 720950, 0, 0, 720951, 0, 0, 720952, 0, 0, 720953, 0, 0, 720954, 0, 0, 720955, 0, 0, 720956, 0, 0, 720957, 0, 0, 720958, 0, 0, 720959, 0, 0, 720960, 0, 0, 720961, 0, 0, 720962, 0, 0, 720963, 0, 0, 720964, 0, 0, 720965, 0, 0, 720966, 0, 0, 720967, 0, 0, 720968, 0, 0, 786503, 0, 3, 786504, 0, 3, 852039, 0, 3, 852040, 0, 3, 917572, 0, 3, 917573, 0, 3, 917574, 0, 3, 917575, 0, 3, 917576, 0, 3, 983108, 0, 3, 983111, 0, 3, 983112, 0, 3, 1048641, 0, 3, 1048642, 0, 3, 1048643, 0, 3, 1048647, 0, 3, 1048648, 0, 3, 1114164, 0, 3, 1114165, 0, 0, 1179692, 0, 3, 1310771, 0, 3 )
+
+[node name="Ground" type="TileMap" parent="."]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 196660, 2, 2, 196661, 2, 2, 196668, 0, 0, 196669, 0, 0, 196670, 0, 0, 196671, 0, 0, 196672, 0, 0, 196673, 0, 131073, 196675, 2, 3, 262194, 0, 65536, 262195, 0, 65537, 262196, 0, 65537, 262197, 0, 65537, 262198, 0, 65537, 262199, 0, 65538, 262204, 0, 3, 262205, 0, 3, 262206, 0, 3, 262207, 0, 3, 262208, 0, 1, 262209, 0, 131074, 262210, 0, 0, 262211, 0, 0, 262212, 0, 131073, 327683, 0, 65536, 327684, 0, 65537, 327685, 0, 65537, 327686, 0, 65537, 327687, 0, 65537, 327688, 0, 65537, 327689, 0, 65537, 327690, 0, 65537, 327691, 0, 65538, 327696, 2, 2, 327702, 2, 3, 327703, 2, 3, 327715, 2, 2, 327719, 2, 1, 327740, 0, 3, 327741, 0, 3, 327742, 0, 3, 327743, 0, 3, 327744, 0, 3, 327745, 0, 3, 327746, 0, 3, 327747, 0, 3, 327748, 0, 131074, 327749, 0, 131073, 327755, 2, 2, 327763, 2, 1, 327765, 2, 0, 327769, 2, 1, 327771, 2, 0, 393231, 0, 65536, 393232, 0, 65537, 393233, 0, 65538, 393236, 0, 65536, 393237, 0, 65537, 393238, 0, 65537, 393239, 0, 65537, 393240, 0, 65537, 393241, 0, 65538, 393244, 0, 65536, 393245, 0, 65537, 393246, 0, 65537, 393247, 0, 65537, 393248, 0, 65537, 393249, 0, 65537, 393250, 0, 65537, 393251, 0, 65537, 393252, 0, 65537, 393253, 0, 65537, 393254, 0, 65537, 393255, 0, 65537, 393256, 0, 65537, 393257, 0, 65537, 393258, 0, 65537, 393259, 0, 65538, 393276, 0, 3, 393277, 0, 3, 393278, 0, 3, 393279, 0, 3, 393280, 0, 3, 393281, 0, 3, 393282, 0, 3, 393283, 0, 3, 393284, 0, 3, 393285, 0, 3, 393290, 0, 65536, 393291, 0, 65537, 393292, 0, 65538, 393299, 0, 65536, 393300, 0, 65537, 393301, 0, 65537, 393302, 0, 65537, 393303, 0, 65537, 393304, 0, 65537, 393305, 0, 65537, 393306, 0, 65537, 393307, 0, 65537, 393308, 0, 65537, 393309, 0, 65537, 393310, 0, 65537, 393311, 0, 65537, 458812, 0, 3, 458813, 0, 3, 458814, 0, 3, 458815, 0, 3, 458816, 0, 3, 458817, 0, 3, 458818, 0, 3, 458819, 0, 3, 458820, 0, 3, 458821, 0, 3, 524348, 0, 3, 524349, 0, 3, 524350, 0, 3, 524351, 0, 3, 524352, 0, 3, 524353, 0, 3, 524354, 0, 3, 524355, 0, 3, 524356, 0, 3, 524357, 0, 3, 589844, 0, 65536, 589845, 0, 65537, 589846, 0, 65537, 589847, 0, 65537, 589848, 0, 65537, 589849, 0, 65538, 589854, 0, 65536, 589855, 0, 65537, 589856, 0, 65537, 589857, 0, 65537, 589858, 0, 65538, 589884, 0, 3, 589885, 0, 3, 589886, 0, 3, 589887, 0, 3, 589888, 0, 3, 589889, 0, 3, 589890, 0, 3, 589891, 0, 3, 589892, 0, 3, 589893, 0, 3, 655367, 0, 65536, 655368, 0, 65537, 655369, 0, 65537, 655370, 0, 65537, 655371, 0, 65537, 655372, 0, 65537, 655373, 0, 65538, 655407, 2, 1, 655410, 2, 3, 655413, 2, 2, 655416, 2, 0, 655420, 0, 3, 655421, 0, 3, 655422, 0, 3, 655423, 0, 3, 655424, 0, 3, 655425, 0, 3, 655426, 0, 3, 655427, 0, 3, 655428, 0, 3, 655429, 0, 3, 655431, 2, 2, 655443, 0, 65536, 655444, 0, 65537, 655445, 0, 65538, 720906, 0, 196611, 720942, 0, 131072, 720943, 0, 0, 720944, 0, 0, 720945, 0, 0, 720946, 0, 0, 720947, 0, 0, 720948, 0, 0, 720949, 0, 0, 720950, 0, 0, 720951, 0, 0, 720952, 0, 0, 720953, 0, 0, 720954, 0, 0, 720955, 0, 0, 720956, 0, 0, 720957, 0, 0, 720958, 0, 0, 720959, 0, 0, 720960, 0, 0, 720961, 0, 0, 720962, 0, 0, 720963, 0, 0, 720964, 0, 0, 720965, 0, 0, 720966, 0, 0, 720967, 0, 0, 720968, 0, 0, 720979, 2, 3, 720981, 2, 3, 720990, 2, 0, 786442, 0, 196610, 786477, 0, 131072, 786478, 0, 131075, 786479, 0, 3, 786480, 0, 3, 786481, 0, 3, 786482, 0, 3, 786483, 0, 3, 786484, 0, 3, 786485, 0, 3, 786486, 0, 3, 786487, 0, 3, 786488, 0, 3, 786489, 0, 3, 786490, 0, 3, 786491, 0, 3, 786492, 0, 3, 786493, 0, 3, 786494, 0, 3, 786495, 0, 3, 786496, 0, 3, 786497, 0, 3, 786498, 0, 3, 786499, 0, 3, 786500, 0, 3, 786501, 0, 3, 786502, 0, 3, 786513, 0, 65536, 786514, 0, 65537, 786515, 0, 65537, 786516, 0, 65537, 786517, 0, 65537, 786518, 0, 65537, 786519, 0, 65538, 786524, 0, 65536, 786525, 0, 65537, 786526, 0, 65537, 786527, 0, 65537, 851968, 0, 65537, 851969, 0, 65537, 851970, 0, 65537, 851971, 0, 65537, 851972, 0, 65537, 851973, 0, 65538, 851978, 0, 65539, 851989, 2, 2, 852006, 2, 1, 852008, 2, 1, 852010, 2, 1, 852012, 0, 131072, 852013, 0, 131075, 852014, 0, 3, 852015, 0, 3, 852016, 0, 3, 852017, 0, 3, 852018, 0, 3, 852019, 0, 3, 852020, 0, 3, 852021, 0, 3, 852022, 0, 3, 852023, 0, 3, 852024, 0, 3, 852025, 0, 3, 852026, 0, 3, 852027, 0, 3, 852028, 0, 3, 852029, 0, 3, 852030, 0, 3, 852031, 0, 3, 852032, 0, 3, 852033, 0, 3, 852034, 0, 3, 852035, 0, 3, 852036, 0, 3, 852037, 0, 3, 852038, 0, 3, 917514, 0, 65536, 917515, 0, 65537, 917516, 0, 65537, 917517, 0, 65537, 917518, 0, 65537, 917519, 0, 65537, 917520, 0, 65537, 917521, 0, 65538, 917525, 0, 65536, 917526, 0, 65537, 917527, 0, 65537, 917528, 0, 65537, 917529, 0, 65537, 917530, 0, 65537, 917531, 0, 65537, 917532, 0, 65537, 917533, 0, 65537, 917534, 0, 65537, 917535, 0, 65537, 917536, 0, 65537, 917537, 0, 65537, 917538, 0, 65538, 917541, 0, 65536, 917542, 0, 65537, 917543, 0, 65537, 917544, 0, 65537, 917545, 0, 65537, 917546, 0, 65537, 917547, 0, 65537, 917548, 0, 131075, 917549, 0, 3, 917550, 0, 3, 917551, 0, 3, 917552, 0, 3, 917553, 0, 3, 917554, 0, 3, 917555, 0, 3, 917556, 0, 3, 917557, 0, 3, 917558, 0, 3, 917559, 0, 3, 917560, 0, 3, 917561, 0, 3, 917562, 0, 3, 917563, 0, 3, 917564, 0, 3, 917565, 0, 3, 917566, 0, 3, 917567, 0, 3, 917568, 0, 3, 917569, 0, 3, 917570, 0, 3, 917571, 0, 3, 917573, 0, 131072, 917574, 0, 131073, 983084, 0, 3, 983085, 0, 3, 983086, 0, 3, 983087, 0, 3, 983088, 0, 3, 983089, 0, 3, 983090, 0, 3, 983091, 0, 3, 983092, 0, 3, 983093, 0, 3, 983094, 0, 3, 983095, 0, 3, 983096, 0, 3, 983097, 0, 3, 983098, 0, 3, 983099, 0, 3, 983100, 0, 3, 983101, 0, 3, 983102, 0, 3, 983103, 0, 3, 983104, 0, 3, 983105, 0, 3, 983106, 0, 3, 983107, 0, 3, 983108, 0, 131072, 983109, 0, 131075, 983110, 536870912, 2, 1048598, 2, 0, 1048600, 2, 1, 1048603, 2, 3, 1048606, 2, 2, 1048620, 0, 3, 1048621, 0, 3, 1048622, 0, 3, 1048623, 0, 3, 1048624, 0, 3, 1048625, 0, 3, 1048626, 0, 3, 1048627, 0, 3, 1048628, 0, 3, 1048629, 0, 3, 1048630, 0, 3, 1048631, 0, 3, 1048632, 0, 3, 1048633, 0, 3, 1048634, 0, 3, 1048635, 0, 3, 1048636, 0, 3, 1048637, 0, 3, 1048638, 0, 3, 1048639, 0, 3, 1048640, 0, 3, 1048641, 0, 3, 1048642, 0, 3, 1048643, 0, 131072, 1048644, 0, 131075, 1048645, 0, 1, 1048646, 536870912, 2, 1048657, 2, 2, 1048658, 2, 2, 1048660, 2, 2, 1048661, 2, 2, 1048669, 2, 2, 1114133, 0, 65536, 1114134, 0, 65537, 1114135, 0, 65537, 1114136, 0, 65537, 1114137, 0, 65537, 1114138, 0, 65537, 1114139, 0, 65537, 1114140, 0, 65537, 1114141, 0, 65537, 1114142, 0, 65537, 1114143, 0, 65537, 1114144, 0, 65537, 1114145, 0, 65537, 1114146, 0, 65538, 1114154, 2, 2, 1114156, 0, 3, 1114157, 0, 3, 1114158, 0, 3, 1114159, 0, 3, 1114160, 0, 3, 1114161, 0, 3, 1114162, 0, 3, 1114163, 0, 3, 1114165, 0, 65536, 1114166, 0, 0, 1114167, 0, 0, 1114168, 0, 0, 1114169, 0, 0, 1114170, 0, 0, 1114171, 0, 0, 1114172, 0, 0, 1114173, 0, 0, 1114174, 0, 0, 1114175, 0, 0, 1114176, 536870912, 0, 1114177, 536870912, 0, 1114178, 536870912, 0, 1114179, 0, 131075, 1114180, 0, 1, 1114181, 0, 1, 1114182, 0, 131074, 1114183, 0, 0, 1114184, 536870912, 0, 1114193, 0, 65536, 1114194, 0, 65537, 1114195, 0, 65537, 1114196, 0, 65537, 1114197, 0, 65538, 1114204, 0, 65536, 1114205, 0, 65537, 1114206, 0, 65537, 1114207, 0, 65537, 1179649, 0, 65536, 1179650, 0, 65537, 1179651, 0, 65538, 1179654, 0, 65536, 1179655, 0, 65537, 1179656, 0, 65537, 1179657, 0, 65537, 1179658, 0, 65537, 1179659, 0, 65537, 1179660, 0, 65537, 1179661, 0, 65537, 1179662, 0, 65538, 1179688, 0, 131072, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 131073, 1179693, 0, 3, 1179694, 0, 3, 1179695, 0, 3, 1179696, 0, 3, 1179697, 0, 3, 1179698, 0, 3, 1179699, 0, 3, 1179700, 0, 3, 1179701, 0, 3, 1179702, 0, 3, 1179703, 0, 3, 1179704, 0, 3, 1179705, 0, 3, 1179706, 0, 3, 1179707, 0, 3, 1179708, 0, 3, 1179709, 0, 3, 1179710, 0, 3, 1179711, 536870912, 1, 1179712, 0, 1, 1179713, 536870912, 3, 1179714, 536870912, 3, 1179715, 536870912, 3, 1179716, 536870912, 3, 1179717, 536870912, 3, 1179718, 536870912, 3, 1179719, 536870912, 3, 1179720, 536870912, 3, 1245202, 2, 2, 1245224, 0, 2, 1245225, 0, 1, 1245226, 0, 1, 1245227, 0, 1, 1245228, 536870912, 2, 1245229, 0, 3, 1245230, 0, 3, 1245231, 0, 3, 1245232, 0, 3, 1245233, 0, 3, 1245234, 0, 3, 1245235, 0, 3, 1245236, 0, 3, 1245237, 0, 3, 1245238, 0, 3, 1245239, 0, 3, 1245240, 0, 3, 1245241, 0, 3, 1245242, 0, 3, 1245243, 0, 3, 1245244, 0, 3, 1245245, 0, 3, 1245246, 0, 3, 1245247, 536870912, 1, 1245248, 0, 1, 1245249, 536870912, 3, 1245250, 536870912, 3, 1245251, 536870912, 3, 1245252, 536870912, 3, 1245253, 536870912, 3, 1245254, 536870912, 3, 1245255, 536870912, 3, 1245256, 536870912, 3, 1310736, 0, 131072, 1310737, 536870912, 0, 1310738, 536870912, 0, 1310739, 536870912, 0, 1310740, 0, 131073, 1310760, 0, 2, 1310761, 0, 1, 1310762, 0, 1, 1310763, 0, 1, 1310764, 536870912, 2, 1310765, 0, 3, 1310766, 0, 3, 1310767, 0, 3, 1310768, 0, 3, 1310769, 0, 3, 1310770, 0, 3, 1310772, 0, 3, 1310773, 0, 3, 1310774, 0, 3, 1310775, 0, 3, 1310776, 0, 3, 1310777, 0, 3, 1310778, 0, 3, 1310779, 0, 3, 1310780, 0, 3, 1310781, 0, 3, 1310782, 0, 3, 1310783, 536870912, 1, 1310784, 0, 1, 1310785, 536870912, 3, 1310786, 536870912, 3, 1310787, 536870912, 3, 1310788, 536870912, 3, 1310789, 536870912, 3, 1310790, 536870912, 3, 1310791, 536870912, 3, 1310792, 536870912, 3, 1376257, 2, 0, 1376261, 2, 1, 1376263, 2, 2, 1376266, 2, 2, 1376269, 2, 3, 1376271, 0, 131072, 1376272, 0, 131075, 1376273, 536870912, 1, 1376274, 536870912, 1, 1376275, 536870912, 1, 1376276, 0, 131074, 1376277, 0, 131073, 1376279, 2, 3, 1376281, 2, 1, 1376283, 2, 3, 1376285, 2, 0, 1376296, 0, 2, 1376297, 0, 1, 1376298, 0, 1, 1376299, 0, 1, 1376300, 536870912, 2, 1376301, 0, 3, 1376302, 0, 3, 1376303, 0, 3, 1376304, 0, 3, 1376305, 0, 3, 1376306, 0, 3, 1376307, 0, 3, 1376308, 0, 3, 1376309, 0, 3, 1376310, 0, 3, 1376311, 0, 3, 1376312, 0, 3, 1376313, 0, 3, 1376314, 0, 3, 1376315, 0, 3, 1376316, 0, 3, 1376317, 0, 3, 1376318, 0, 3, 1376319, 536870912, 1, 1376320, 0, 1, 1376321, 536870912, 3, 1376322, 536870912, 3, 1376323, 536870912, 3, 1376324, 536870912, 3, 1376325, 536870912, 3, 1376326, 536870912, 3, 1376327, 536870912, 3, 1376328, 536870912, 3, 1376331, 2, 2, 1376333, 2, 0, 1376336, 2, 3, 1376338, 2, 2, 1376340, 2, 1, 1376342, 2, 0, 1376344, 2, 2, 1376346, 2, 3, 1376349, 2, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 131075, 1441808, 0, 1, 1441809, 0, 1, 1441810, 0, 1, 1441811, 0, 1, 1441812, 0, 1, 1441813, 0, 131074, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 131075, 1441833, 0, 1, 1441834, 0, 1, 1441835, 0, 1, 1441836, 0, 131074, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1441878, 0, 0, 1441879, 0, 0, 1441880, 0, 0, 1441881, 0, 0, 1441882, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1507328, 0, 1, 1507329, 0, 1, 1507330, 0, 1, 1507331, 0, 1, 1507332, 0, 1, 1507333, 0, 1, 1507334, 0, 1, 1507335, 0, 1, 1507336, 0, 1, 1507337, 0, 1, 1507338, 0, 1, 1507339, 0, 1, 1507340, 0, 1, 1507341, 0, 1, 1507342, 0, 1, 1507343, 0, 1, 1507344, 0, 1, 1507345, 0, 1, 1507346, 0, 1, 1507347, 0, 1, 1507348, 0, 1, 1507349, 0, 1, 1507350, 0, 1, 1507351, 0, 1, 1507352, 0, 1, 1507353, 0, 1, 1507354, 0, 1, 1507355, 0, 1, 1507356, 0, 1, 1507357, 0, 1, 1507358, 0, 1, 1507359, 0, 1, 1507360, 0, 1, 1507361, 0, 1, 1507362, 0, 1, 1507363, 0, 1, 1507364, 0, 1, 1507365, 0, 1, 1507366, 0, 1, 1507367, 0, 1, 1507368, 0, 1, 1507369, 0, 1, 1507370, 0, 1, 1507371, 0, 1, 1507372, 0, 1, 1507373, 0, 1, 1507374, 0, 1, 1507375, 0, 1, 1507376, 0, 1, 1507377, 0, 1, 1507378, 0, 1, 1507379, 0, 1, 1507380, 0, 1, 1507381, 0, 1, 1507382, 0, 1, 1507383, 0, 1, 1507384, 0, 1, 1507385, 0, 1, 1507386, 0, 1, 1507387, 0, 1, 1507388, 0, 1, 1507389, 0, 1, 1507390, 0, 1, 1507391, 0, 1, 1507392, 0, 1, 1507393, 0, 1, 1507394, 0, 1, 1507395, 0, 1, 1507396, 0, 1, 1507397, 0, 1, 1507398, 0, 1, 1507399, 0, 1, 1507400, 0, 1, 1507401, 0, 1, 1507402, 0, 1, 1507403, 0, 1, 1507404, 0, 1, 1507405, 0, 1, 1507406, 0, 1, 1507407, 0, 1, 1507408, 0, 1, 1507409, 0, 1, 1507410, 0, 1, 1507411, 0, 1, 1507412, 0, 1, 1507413, 0, 1, 1507414, 0, 1, 1507415, 0, 1, 1507416, 0, 1, 1507417, 0, 1, 1507418, 0, 1, 1507419, 0, 1, 1507420, 0, 1, 1507421, 0, 1, 1507422, 0, 1, 1507423, 0, 1 )
+
+[node name="Player" parent="." instance=ExtResource( 26 )]
+position = Vector2( 32, 176 )
+beta_gameplay = true
+
+[node name="Death" type="TileMap" parent="."]
+tile_set = ExtResource( 9 )
+cell_size = Vector2( 8, 8 )
+format = 1
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 21 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 196666, 0, 0, 262202, 0, 0, 262215, 0, 0, 327707, 0, 0, 327724, 0, 0, 327738, 0, 0, 327751, 0, 0, 393243, 0, 0, 393260, 0, 0, 458779, 0, 0, 458796, 0, 0, 458832, 0, 0, 524315, 0, 0, 524324, 0, 131073, 524332, 0, 0, 524368, 0, 0, 589851, 0, 0, 655363, 0, 0, 655387, 0, 0, 720899, 0, 0, 720923, 0, 0, 786435, 0, 0, 786459, 0, 0, 851995, 0, 0, 917511, 0, 0, 917579, 0, 0, 917583, 0, 0, 983047, 0, 0, 983115, 0, 0, 983119, 0, 0, 1048583, 0, 0, 1048651, 0, 0, 1048655, 0, 0, 1114119, 0, 0, 1114187, 0, 0, 1179723, 0, 0 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( -8, 104 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 776, 112 )
+shape = SubResource( 1 )
+
+[node name="Platforms" type="Node2D" parent="."]
+
+[node name="Ladder" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 56, 112 )
+scale = Vector2( 1, 4 )
+
+[node name="Ladder3" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 24, 80 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder2" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 216, 40 )
+
+[node name="Ladder11" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 216, 48 )
+can_climb_right = false
+
+[node name="Ladder9" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 216, 56 )
+scale = Vector2( 1, 7 )
+
+[node name="Ladder4" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 352, 40 )
+
+[node name="Ladder13" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 352, 48 )
+can_climb_left = false
+
+[node name="Ladder12" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 352, 56 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder5" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 464, 24 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder6" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 600, 112 )
+scale = Vector2( 1, 5 )
+
+[node name="Ladder7" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 632, 112 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder8" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 640, 56 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder10" parent="Platforms" instance=ExtResource( 1 )]
+position = Vector2( 568, 32 )
+scale = Vector2( 1, 2 )
+
+[node name="Barrier" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 107, 86 )
+scale = Vector2( 1, 26 )
+cost = 20
+label_offset = Vector2( 0, 4 )
+
+[node name="Barrier2" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 736, 54 )
+scale = Vector2( 1, 41.92 )
+cost = 30
+label_offset = Vector2( 0, 4 )
+
+[node name="Barrier3" parent="Platforms" instance=ExtResource( 13 )]
+position = Vector2( 424, 144 )
+scale = Vector2( 1, 32 )
+cost = 40
+label_offset = Vector2( 0, 4 )
+
+[node name="Turniwood" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 368, 144 )
+time = 70.0
+
+[node name="Turniwood2" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 304, 160 )
+time = 80.0
+
+[node name="Turniwood8" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 288, 144 )
+time = 80.0
+
+[node name="Turniwood3" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 400, 144 )
+time = 70.0
+
+[node name="Turniwood4" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 408, 160 )
+time = 120.0
+
+[node name="Turniwood5" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 704, 120 )
+
+[node name="Turniwood6" parent="Platforms" instance=ExtResource( 16 )]
+position = Vector2( 720, 104 )
+
+[node name="Exit" parent="Platforms" instance=ExtResource( 11 )]
+position = Vector2( 744, 36 )
+cost = 25
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 32, 32 )
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 464, 168 )
+number = 3
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 488, 16 )
+number = 2
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 88, 104 )
+number = 1
+
+[node name="Gold" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 48, 32 )
+
+[node name="Gold2" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 64, 32 )
+
+[node name="Gold3" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 80, 32 )
+
+[node name="Gold4" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 168, 40 )
+
+[node name="Gold5" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 192, 40 )
+
+[node name="Gold6" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 136, 152 )
+
+[node name="Gold7" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 152, 152 )
+
+[node name="Gold8" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 104, 136 )
+
+[node name="Gold9" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 88, 136 )
+
+[node name="Gold10" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 72, 136 )
+
+[node name="Gold11" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 136, 104 )
+
+[node name="Gold13" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 728, 168 )
+
+[node name="Gold14" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 184, 104 )
+
+[node name="Gold43" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 208, 128 )
+
+[node name="Gold44" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 232, 128 )
+
+[node name="Gold45" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 264, 128 )
+
+[node name="Gold15" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 96, 72 )
+
+[node name="Gold17" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 72, 72 )
+
+[node name="Gold19" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 8, 96 )
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 16, 136 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 176, 64 )
+color = 1
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 232, 104 )
+color = 2
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 528, 168 )
+color = 3
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 752, 128 )
+color = 4
+
+[node name="Gold21" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 120, 104 )
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 10 )]
+position = Vector2( 264, 64 )
+
+[node name="Arrow3" parent="Collectibles" instance=ExtResource( 10 )]
+position = Vector2( 744, 88 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 10 )]
+position = Vector2( 556, 104 )
+
+[node name="Gold18" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 440, 112 )
+
+[node name="Gold20" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 384, 120 )
+
+[node name="Gold27" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 384, 80 )
+
+[node name="Gold28" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 440, 80 )
+
+[node name="Gold29" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 496, 80 )
+
+[node name="Gold22" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 328, 136 )
+
+[node name="Gold24" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 328, 88 )
+
+[node name="Gold26" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 344, 56 )
+
+[node name="Gold30" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 296, 40 )
+
+[node name="Gold31" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 328, 40 )
+
+[node name="Gold35" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 408, 24 )
+
+[node name="Gold36" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 432, 24 )
+
+[node name="Gold34" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 680, 168 )
+
+[node name="Gold32" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 264, 40 )
+
+[node name="Gold46" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 240, 64 )
+
+[node name="Gold33" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 624, 168 )
+
+[node name="Gold25" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 312, 88 )
+
+[node name="Gold23" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 344, 136 )
+
+[node name="Gold16" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 464, 112 )
+
+[node name="Gold40" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 488, 112 )
+
+[node name="Gold38" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 600, 80 )
+
+[node name="Gold41" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 576, 168 )
+
+[node name="Gold42" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 544, 168 )
+
+[node name="Gold39" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 632, 80 )
+
+[node name="Gold47" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 672, 40 )
+
+[node name="Gold48" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 696, 40 )
+
+[node name="Gold51" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 664, 128 )
+
+[node name="Gold52" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 720, 40 )
+
+[node name="Gold49" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 688, 88 )
+
+[node name="Gold50" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 656, 88 )
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Slime" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 208, 104 )
+scale = Vector2( -1, 1 )
+
+[node name="Slime4" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 520, 16 )
+
+[node name="Bat" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 152, 48 )
+left_up_boundary = 4.0
+right_down_boundary = 2.0
+
+[node name="Bat3" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 288, 88 )
+right_down_boundary = 5.0
+
+[node name="Bat4" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 388, 144 )
+left_up_boundary = 3.0
+right_down_boundary = 3.5
+speed = 60
+
+[node name="Bat5" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 392, 48 )
+right_down_boundary = 4.0
+
+[node name="Bat6" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 432, 80 )
+left_up_boundary = 4.0
+
+[node name="Bat7" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 620, 112 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="Bat8" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 632, 48 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="Bat9" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 584, 40 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="Bat2" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 48, 104 )
+left_up_boundary = 4.0
+right_down_boundary = 2.0
+
+[node name="Slime2" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 192, 64 )
+
+[node name="Snake" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 88, 72 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+speed = 35
+
+[node name="Snake3" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 440, 128 )
+right_down_boundary = 5.0
+speed = 70
+
+[node name="Snake4" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 440, 168 )
+right_down_boundary = 6.0
+speed = 80
+
+[node name="Snake5" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 568, 168 )
+left_up_boundary = 5.0
+right_down_boundary = 1.0
+
+[node name="Snake2" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 216, 168 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+speed = 60
+
+[node name="Snake6" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 224, 128 )
+left_up_boundary = 5.0
+speed = 60
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0.843137, 0, 0.0901961 )
+script = ExtResource( 18 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect3" type="ColorRect" parent="."]
+visible = false
+margin_right = 256.0
+margin_bottom = 8.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="HUD" parent="." instance=ExtResource( 2 )]
+song_name = "♫Rumble"
+
+[node name="TileMap" type="TileMap" parent="."]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
diff --git a/maps/hills_scholar.tscn b/maps/hills_scholar.tscn
new file mode 100644
index 0000000..51a6a63
--- /dev/null
+++ b/maps/hills_scholar.tscn
@@ -0,0 +1,463 @@
+[gd_scene load_steps=35 format=2]
+
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=1]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2]
+[ext_resource path="res://audio/music/rumble_loop.ogg" type="AudioStream" id=3]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=4]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=5]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://graphics/backgrounds/hills.png" type="Texture" id=7]
+[ext_resource path="res://tilesets/t_grass.tres" type="TileSet" id=8]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=9]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=10]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/enemy/slime.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=17]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=18]
+[ext_resource path="res://maps/map.gd" type="Script" id=19]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=20]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=21]
+[ext_resource path="res://objects/lore/hills/bioslime.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/lore/hills/eviscerator.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/hills/verdant_hills.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=27]
+[ext_resource path="res://scripts/has_splash.gd" type="Script" id=28]
+[ext_resource path="res://objects/lore/hills/speccy.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/hills/sg.tscn" type="PackedScene" id=30]
+[ext_resource path="res://graphics/turniwood/turning_platform_wood_dark.png" type="Texture" id=31]
+[ext_resource path="res://graphics/decal/helper_hints/the_signs/go_right_from_here/arrow_sign.png" type="Texture" id=32]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=33]
+[ext_resource path="res://maps/hills_speccy_detect.gd" type="Script" id=34]
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 19 )
+target_time_any = 70
+target_time_100 = 180
+music = ExtResource( 3 )
+lore_entries = [ ExtResource( 25 ), ExtResource( 24 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 30 ), ExtResource( 29 ) ]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -2
+
+[node name="Background" type="Sprite" parent="CanvasLayer"]
+z_index = -2
+texture = ExtResource( 7 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Camera2D" parent="." instance=ExtResource( 6 )]
+
+[node name="BackgroundTiles" type="TileMap" parent="."]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 10 )
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 65535, 3, 0, 96, 3, 0, 131071, 3, 65536, 65632, 3, 65536, 196607, 3, 65536, 131168, 3, 65536, 262143, 3, 65536, 196634, 5, 0, 196698, 3, 1, 196699, 3, 3, 196704, 3, 65536, 327679, 3, 65536, 262170, 3, 1, 262171, 3, 196610, 262172, 3, 196611, 262183, 5, 0, 262189, 5, 0, 262196, 3, 196609, 262197, 3, 196611, 262200, 3, 196609, 262201, 3, 196610, 262202, 3, 196611, 262228, 4, 0, 262230, 3, 1, 262231, 3, 3, 262234, 3, 65537, 262235, 3, 65539, 262236, 4, 0, 262240, 3, 65536, 393215, 3, 65536, 327682, 3, 1, 327683, 3, 2, 327684, 3, 2, 327685, 3, 2, 327686, 3, 3, 327690, 3, 196609, 327691, 3, 196610, 327692, 3, 196610, 327693, 3, 196610, 327694, 3, 196610, 327695, 3, 196611, 327706, 3, 65536, 327710, 3, 0, 327719, 3, 196609, 327720, 3, 196610, 327721, 3, 196610, 327722, 3, 196610, 327723, 3, 196610, 327724, 3, 196610, 327725, 3, 196611, 327762, 3, 1, 327763, 3, 2, 327764, 3, 2, 327765, 3, 2, 327766, 3, 65538, 327767, 3, 65538, 327768, 3, 2, 327769, 3, 2, 327770, 3, 65538, 327771, 3, 65538, 327772, 3, 3, 327776, 3, 65536, 458751, 3, 65536, 393218, 3, 131073, 393219, 3, 131074, 393220, 3, 131074, 393221, 3, 131074, 393222, 3, 131075, 393237, 5, 0, 393241, 3, 1, 393242, 3, 65539, 393246, 3, 65536, 393291, 4, 0, 393298, 3, 65537, 393299, 3, 65538, 393300, 3, 65538, 393301, 3, 131074, 393302, 3, 131074, 393303, 3, 131074, 393304, 3, 131074, 393305, 3, 131074, 393306, 3, 131074, 393307, 3, 131074, 393308, 3, 131075, 393312, 3, 65536, 524287, 3, 65536, 458770, 3, 1, 458771, 3, 2, 458772, 3, 2, 458773, 3, 3, 458776, 3, 196609, 458777, 3, 131074, 458778, 3, 131074, 458779, 3, 196610, 458780, 3, 196610, 458781, 3, 196610, 458782, 3, 131075, 458787, 3, 196609, 458788, 3, 196610, 458789, 3, 196611, 458815, 5, 0, 458819, 4, 0, 458827, 3, 1, 458828, 3, 196610, 458829, 3, 196610, 458830, 3, 196610, 458831, 3, 196610, 458832, 3, 196610, 458833, 3, 196610, 458834, 3, 131074, 458835, 3, 131074, 458836, 3, 65539, 458848, 3, 65536, 589823, 3, 65536, 524306, 3, 65537, 524307, 3, 65538, 524308, 3, 65538, 524309, 3, 65539, 524334, 5, 0, 524346, 5, 0, 524349, 3, 1, 524350, 3, 196610, 524351, 3, 196610, 524352, 3, 196610, 524353, 3, 196610, 524354, 3, 196610, 524355, 3, 3, 524363, 3, 65536, 524372, 3, 65536, 524384, 3, 65536, 655359, 3, 65536, 589838, 4, 0, 589842, 3, 65537, 589843, 3, 131074, 589844, 3, 131074, 589845, 3, 131074, 589846, 3, 3, 589854, 4, 0, 589859, 4, 0, 589863, 3, 0, 589870, 3, 196609, 589871, 3, 196610, 589872, 3, 196610, 589873, 3, 196610, 589874, 3, 196610, 589875, 3, 196610, 589876, 3, 196610, 589877, 3, 196610, 589878, 3, 2, 589879, 3, 196610, 589880, 3, 196610, 589881, 3, 196610, 589882, 3, 196610, 589883, 3, 196610, 589884, 3, 196610, 589885, 3, 131075, 589891, 3, 131073, 589892, 3, 196610, 589893, 3, 196610, 589894, 3, 196610, 589895, 3, 196610, 589896, 3, 196610, 589897, 3, 196610, 589898, 3, 196610, 589899, 3, 131075, 589908, 3, 65536, 589919, 3, 1, 589920, 3, 65539, 720895, 3, 65536, 655370, 5, 0, 655374, 3, 196609, 655375, 3, 196610, 655376, 3, 196610, 655377, 3, 196610, 655378, 3, 131075, 655382, 3, 131073, 655383, 3, 3, 655388, 4, 0, 655390, 3, 1, 655391, 3, 2, 655392, 3, 196610, 655393, 3, 196610, 655394, 3, 196610, 655395, 3, 196610, 655396, 3, 196610, 655397, 3, 196610, 655398, 3, 196610, 655399, 3, 131075, 655414, 3, 65536, 655444, 3, 65536, 655448, 5, 0, 655452, 5, 0, 655454, 3, 1, 655455, 3, 65538, 655456, 3, 65539, 786431, 3, 65536, 720902, 3, 196609, 720903, 3, 196610, 720904, 3, 196610, 720905, 3, 196610, 720906, 3, 196610, 720907, 3, 196610, 720908, 3, 196611, 720919, 3, 131073, 720920, 3, 196610, 720921, 3, 196610, 720922, 3, 196610, 720923, 3, 196610, 720924, 3, 196611, 720926, 3, 131073, 720927, 3, 131075, 720950, 3, 65536, 720977, 3, 1, 720978, 3, 2, 720979, 3, 2, 720980, 3, 131075, 720982, 3, 196609, 720983, 3, 196610, 720984, 3, 196610, 720985, 3, 196610, 720986, 3, 196610, 720987, 3, 196610, 720988, 3, 196610, 720989, 3, 196610, 720990, 3, 131074, 720991, 3, 131074, 720992, 3, 65539, 851967, 3, 65536, 786486, 3, 65536, 786513, 3, 131073, 786514, 3, 131074, 786515, 3, 131075, 786528, 3, 65536, 917503, 3, 65536, 851982, 3, 196609, 851983, 3, 196611, 852022, 3, 131072, 852037, 5, 0, 852040, 5, 0, 852044, 3, 1, 852045, 3, 2, 852046, 3, 2, 852047, 3, 3, 852064, 3, 65536, 983039, 3, 65536, 917517, 3, 0, 917522, 3, 0, 917531, 5, 0, 917548, 3, 196609, 917549, 3, 196610, 917550, 3, 196610, 917551, 3, 196611, 917554, 3, 196609, 917555, 3, 196610, 917556, 3, 196611, 917573, 3, 1, 917574, 3, 2, 917575, 3, 2, 917576, 3, 3, 917580, 3, 131073, 917581, 3, 131074, 917582, 3, 131074, 917583, 3, 131075, 917600, 3, 65536, 1048575, 3, 65536, 983051, 4, 0, 983052, 3, 1, 983053, 3, 65539, 983057, 3, 1, 983058, 3, 65538, 983059, 3, 2, 983060, 3, 2, 983061, 3, 2, 983062, 3, 3, 983065, 3, 196609, 983066, 3, 196610, 983067, 3, 196610, 983068, 3, 196610, 983069, 3, 3, 983073, 5, 0, 983078, 4, 0, 983103, 4, 0, 983106, 4, 0, 983109, 3, 131073, 983110, 3, 131074, 983111, 3, 131074, 983112, 3, 131075, 983124, 5, 0, 983134, 3, 196609, 983135, 3, 196610, 983136, 3, 65539, 1114111, 3, 65536, 1048587, 3, 196609, 1048588, 3, 131074, 1048589, 3, 131074, 1048590, 3, 196610, 1048591, 3, 196610, 1048592, 3, 196610, 1048593, 3, 131074, 1048594, 3, 131074, 1048595, 3, 131074, 1048596, 3, 131074, 1048597, 3, 131074, 1048598, 3, 131075, 1048605, 3, 131073, 1048606, 3, 196610, 1048607, 3, 196610, 1048608, 3, 196610, 1048609, 3, 196611, 1048612, 3, 196609, 1048613, 3, 196610, 1048614, 3, 196610, 1048615, 3, 196610, 1048616, 3, 196611, 1048638, 3, 1, 1048639, 3, 2, 1048640, 3, 2, 1048641, 3, 2, 1048642, 3, 3, 1048659, 3, 1, 1048660, 3, 2, 1048661, 3, 2, 1048662, 3, 3, 1048665, 3, 196608, 1048668, 3, 196608, 1048672, 3, 65536, 1179647, 3, 65536, 1114116, 5, 0, 1114120, 5, 0, 1114174, 3, 131073, 1114175, 3, 131074, 1114176, 3, 131074, 1114177, 3, 131074, 1114178, 3, 131075, 1114193, 5, 0, 1114194, 3, 1, 1114195, 3, 65538, 1114196, 3, 65538, 1114197, 3, 131074, 1114198, 3, 131075, 1114208, 3, 65536, 1245183, 3, 65537, 1179648, 3, 196610, 1179649, 3, 196611, 1179652, 3, 196609, 1179653, 3, 196610, 1179654, 3, 196610, 1179655, 3, 196610, 1179656, 3, 196611, 1179706, 3, 1, 1179707, 3, 3, 1179728, 3, 1, 1179729, 3, 2, 1179730, 3, 65538, 1179731, 3, 131074, 1179732, 3, 131075, 1179744, 3, 65536, 1310719, 3, 65536, 1245194, 4, 0, 1245199, 4, 0, 1245228, 4, 0, 1245242, 3, 131073, 1245243, 3, 131075, 1245264, 3, 131073, 1245265, 3, 131074, 1245266, 3, 131075, 1245280, 3, 65536, 1376255, 3, 65536, 1310730, 3, 1, 1310731, 3, 2, 1310732, 3, 2, 1310733, 3, 2, 1310734, 3, 2, 1310735, 3, 3, 1310761, 3, 1, 1310762, 3, 2, 1310763, 3, 2, 1310764, 3, 3, 1310773, 3, 1, 1310774, 3, 2, 1310775, 3, 3, 1310816, 3, 65536, 1441791, 3, 65536, 1376257, 4, 0, 1376260, 4, 0, 1376263, 4, 0, 1376264, 2, 1, 1376266, 3, 65537, 1376267, 3, 65538, 1376268, 3, 65538, 1376269, 3, 65538, 1376270, 3, 65538, 1376271, 3, 65538, 1376272, 3, 3, 1376275, 4, 0, 1376291, 4, 0, 1376297, 3, 65537, 1376298, 3, 65538, 1376299, 3, 65538, 1376300, 3, 65539, 1376309, 3, 65537, 1376310, 3, 65538, 1376311, 3, 65539, 1376312, 4, 0, 1376320, 4, 0, 1376327, 4, 0, 1376331, 4, 0, 1376339, 4, 0, 1376347, 4, 0, 1376352, 3, 65536, 1507327, 3, 65537, 1441792, 3, 2, 1441793, 3, 2, 1441794, 3, 2, 1441795, 3, 2, 1441796, 3, 2, 1441797, 3, 2, 1441798, 3, 2, 1441799, 3, 2, 1441800, 3, 2, 1441801, 3, 2, 1441802, 3, 65538, 1441803, 3, 65538, 1441804, 3, 65538, 1441805, 3, 65538, 1441806, 3, 65538, 1441807, 3, 65538, 1441808, 3, 65538, 1441809, 3, 2, 1441810, 3, 2, 1441811, 3, 2, 1441812, 3, 2, 1441813, 3, 3, 1441817, 3, 1, 1441818, 3, 2, 1441819, 3, 2, 1441820, 3, 2, 1441821, 3, 2, 1441822, 3, 2, 1441823, 3, 2, 1441824, 3, 2, 1441825, 3, 2, 1441826, 3, 2, 1441827, 3, 2, 1441828, 3, 2, 1441829, 3, 2, 1441830, 3, 2, 1441831, 3, 2, 1441832, 3, 2, 1441833, 3, 65538, 1441834, 3, 65538, 1441835, 3, 65538, 1441836, 3, 65539, 1441845, 3, 65537, 1441846, 3, 65538, 1441847, 3, 65538, 1441848, 3, 2, 1441849, 3, 2, 1441850, 3, 2, 1441851, 3, 2, 1441852, 3, 2, 1441853, 3, 2, 1441854, 3, 2, 1441855, 3, 2, 1441856, 3, 2, 1441857, 3, 2, 1441858, 3, 2, 1441859, 3, 2, 1441860, 3, 2, 1441861, 3, 2, 1441862, 3, 2, 1441863, 3, 3, 1441867, 3, 1, 1441868, 3, 2, 1441869, 3, 2, 1441870, 3, 2, 1441871, 3, 2, 1441872, 3, 2, 1441873, 3, 2, 1441874, 3, 2, 1441875, 3, 2, 1441876, 3, 2, 1441877, 3, 2, 1441878, 3, 2, 1441879, 3, 2, 1441880, 3, 2, 1441881, 3, 2, 1441882, 3, 2, 1441883, 3, 2, 1441884, 3, 2, 1441885, 3, 2, 1441886, 3, 2, 1441887, 3, 2, 1441888, 3, 65539, 1572863, 3, 65537, 1507328, 3, 65538, 1507329, 3, 65538, 1507330, 3, 65538, 1507331, 3, 65538, 1507332, 3, 65538, 1507333, 3, 65538, 1507334, 3, 65538, 1507335, 3, 65538, 1507336, 3, 65538, 1507337, 3, 65538, 1507338, 3, 65538, 1507339, 3, 65538, 1507340, 3, 65538, 1507341, 3, 65538, 1507342, 3, 65538, 1507343, 3, 65538, 1507344, 3, 65538, 1507345, 3, 65538, 1507346, 3, 65538, 1507347, 3, 65538, 1507348, 3, 65538, 1507349, 3, 65539, 1507353, 3, 65537, 1507354, 3, 65538, 1507355, 3, 65538, 1507356, 3, 65538, 1507357, 3, 65538, 1507358, 3, 65538, 1507359, 3, 65538, 1507360, 3, 65538, 1507361, 3, 65538, 1507362, 3, 65538, 1507363, 3, 65538, 1507364, 3, 65538, 1507365, 3, 65538, 1507366, 3, 65538, 1507367, 3, 65538, 1507368, 3, 65538, 1507369, 3, 65538, 1507370, 3, 65538, 1507371, 3, 65538, 1507372, 3, 65539, 1507381, 3, 65537, 1507382, 3, 65538, 1507383, 3, 65538, 1507384, 3, 65538, 1507385, 3, 65538, 1507386, 3, 65538, 1507387, 3, 65538, 1507388, 3, 65538, 1507389, 3, 65538, 1507390, 3, 65538, 1507391, 3, 65538, 1507392, 3, 65538, 1507393, 3, 65538, 1507394, 3, 65538, 1507395, 3, 65538, 1507396, 3, 65538, 1507397, 3, 65538, 1507398, 3, 65538, 1507399, 3, 65539, 1507403, 3, 65537, 1507404, 3, 65538, 1507405, 3, 65538, 1507406, 3, 65538, 1507407, 3, 65538, 1507408, 3, 65538, 1507409, 3, 65538, 1507410, 3, 65538, 1507411, 3, 65538, 1507412, 3, 65538, 1507413, 3, 65538, 1507414, 3, 65538, 1507415, 3, 65538, 1507416, 3, 65538, 1507417, 3, 65538, 1507418, 3, 65538, 1507419, 3, 65538, 1507420, 3, 65538, 1507421, 3, 65538, 1507422, 3, 65538, 1507423, 3, 65538, 1507424, 3, 65539, 1638399, 3, 131073, 1572864, 3, 131074, 1572865, 3, 131074, 1572866, 3, 131074, 1572867, 3, 131074, 1572868, 3, 131074, 1572869, 3, 131074, 1572870, 3, 131074, 1572871, 3, 131074, 1572872, 3, 131074, 1572873, 3, 131074, 1572874, 3, 131074, 1572875, 3, 131074, 1572876, 3, 131074, 1572877, 3, 131074, 1572878, 3, 131074, 1572879, 3, 131074, 1572880, 3, 131074, 1572881, 3, 131074, 1572882, 3, 131074, 1572883, 3, 131074, 1572884, 3, 131074, 1572885, 3, 131075, 1572889, 3, 131073, 1572890, 3, 131074, 1572891, 3, 131074, 1572892, 3, 131074, 1572893, 3, 131074, 1572894, 3, 131074, 1572895, 3, 131074, 1572896, 3, 131074, 1572897, 3, 131074, 1572898, 3, 131074, 1572899, 3, 131074, 1572900, 3, 131074, 1572901, 3, 131074, 1572902, 3, 131074, 1572903, 3, 131074, 1572904, 3, 131074, 1572905, 3, 131074, 1572906, 3, 131074, 1572907, 3, 131074, 1572908, 3, 131075, 1572917, 3, 131073, 1572918, 3, 131074, 1572919, 3, 131074, 1572920, 3, 131074, 1572921, 3, 131074, 1572922, 3, 131074, 1572923, 3, 131074, 1572924, 3, 131074, 1572925, 3, 131074, 1572926, 3, 131074, 1572927, 3, 131074, 1572928, 3, 131074, 1572929, 3, 131074, 1572930, 3, 131074, 1572931, 3, 131074, 1572932, 3, 131074, 1572933, 3, 131074, 1572934, 3, 131074, 1572935, 3, 131075, 1572939, 3, 131073, 1572940, 3, 131074, 1572941, 3, 131074, 1572942, 3, 131074, 1572943, 3, 131074, 1572944, 3, 131074, 1572945, 3, 131074, 1572946, 3, 131074, 1572947, 3, 131074, 1572948, 3, 131074, 1572949, 3, 131074, 1572950, 3, 131074, 1572951, 3, 131074, 1572952, 3, 131074, 1572953, 3, 131074, 1572954, 3, 131074, 1572955, 3, 131074, 1572956, 3, 131074, 1572957, 3, 131074, 1572958, 3, 131074, 1572959, 3, 131074, 1572960, 3, 131075 )
+
+[node name="Player" parent="." instance=ExtResource( 26 )]
+position = Vector2( 24, 176 )
+
+[node name="Death" type="TileMap" parent="." groups=["death", "no_blood"]]
+tile_set = ExtResource( 9 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 65515, 11, 0, 131050, 11, 0, 131052, 11, 0, 196586, 11, 0, 196587, 11, 0, 196588, 11, 0, 196589, 11, 0, 262122, 11, 0, 327658, 11, 0, 327661, 11, 0, 327662, 11, 0, 327663, 11, 0, 327664, 11, 0, 393194, 11, 0, 393196, 11, 0, 393201, 11, 0, 458730, 11, 0, 458732, 11, 0, 458734, 11, 0, 458736, 11, 0, 458737, 11, 0, 458739, 11, 0, 524265, 11, 0, 524266, 11, 0, 524267, 11, 0, 524268, 11, 0, 524273, 11, 0, 524274, 11, 0, 524275, 11, 0, 589800, 11, 0, 589801, 11, 0, 589811, 11, 0, 655336, 11, 0, 655337, 11, 0, 655338, 11, 0, 655340, 11, 0, 655343, 11, 0, 655344, 11, 0, 655345, 11, 0, 655346, 11, 0, 655347, 11, 0, 720872, 11, 0, 720873, 11, 0, 720874, 11, 0, 720875, 11, 0, 720879, 11, 0, 786408, 11, 0, 786409, 11, 0, 786410, 11, 0, 786411, 11, 0, 786415, 11, 0, 851944, 11, 0, 851945, 11, 0, 851946, 11, 0, 851951, 11, 0, 917482, 11, 0, 917484, 11, 0, 917487, 11, 0, 983018, 11, 0, 983021, 11, 0, 983024, 11, 0, 1048554, 11, 0, 1048555, 11, 0, 1048556, 11, 0, 1048557, 11, 0, 1048558, 11, 0, 1048559, 11, 0, 1048560, 11, 0, 1441814, 10, 0, 1441815, 10, 0, 1441816, 10, 0, 1441837, 10, 0, 1441838, 10, 0, 1441839, 10, 0, 1441840, 10, 0, 1441841, 10, 0, 1441842, 10, 0, 1441843, 10, 0, 1441844, 10, 0, 1441864, 10, 0, 1441865, 10, 0, 1441866, 10, 0, 1507350, 11, 0, 1507351, 11, 0, 1507352, 11, 0, 1507373, 11, 0, 1507374, 11, 0, 1507375, 11, 0, 1507376, 11, 0, 1507377, 11, 0, 1507378, 11, 0, 1507379, 11, 0, 1507380, 11, 0, 1507400, 11, 0, 1507401, 11, 0, 1507402, 11, 0 )
+script = ExtResource( 28 )
+splash_color = Color( 0.368627, 0.784314, 0.94902, 1 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 21 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 262218, 0, 0, 327749, 0, 0, 327754, 0, 0, 327775, 0, 0, 393285, 0, 0, 393290, 0, 0, 393311, 0, 0, 458821, 0, 0, 458847, 0, 0, 524383, 0, 0, 655362, 0, 0, 720898, 0, 0, 786434, 0, 0, 851970, 0, 0, 983046, 0, 0, 1048582, 0, 0, 1048618, 0, 0, 1114118, 0, 0, 1114154, 0, 0 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="Ladders" type="Node2D" parent="Environment"]
+
+[node name="Ladder" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 48, 120 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder8" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 336, 128 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder5" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 552, 40 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder6" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 592, 32 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder7" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 760, 40 )
+scale = Vector2( 1, 4 )
+can_climb_right = false
+
+[node name="Ladder2" parent="Environment/Ladders" instance=ExtResource( 1 )]
+position = Vector2( 16, 80 )
+scale = Vector2( 1, 4 )
+
+[node name="TurningPlatforms" type="Node2D" parent="Environment"]
+
+[node name="TurningPlatform" parent="Environment/TurningPlatforms" instance=ExtResource( 16 )]
+position = Vector2( 136, 64 )
+texture = ExtResource( 31 )
+
+[node name="TurningPlatform3" parent="Environment/TurningPlatforms" instance=ExtResource( 16 )]
+position = Vector2( 368, 152 )
+time = 80.0
+texture = ExtResource( 31 )
+
+[node name="TurningPlatform6" parent="Environment/TurningPlatforms" instance=ExtResource( 16 )]
+position = Vector2( 384, 32 )
+texture = ExtResource( 31 )
+
+[node name="TurningPlatform5" parent="Environment/TurningPlatforms" instance=ExtResource( 16 )]
+position = Vector2( 616, 160 )
+texture = ExtResource( 31 )
+
+[node name="TurningPlatform4" parent="Environment/TurningPlatforms" instance=ExtResource( 16 )]
+position = Vector2( 408, 152 )
+time = 80.0
+texture = ExtResource( 31 )
+
+[node name="MovingPlatform" parent="Environment" instance=ExtResource( 11 )]
+position = Vector2( 624, 40 )
+scale = Vector2( 2, 1 )
+right_down_boundary = 3.0
+
+[node name="MovingPlatform2" parent="Environment" instance=ExtResource( 11 )]
+position = Vector2( 344, 80 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="Barrier3" parent="Environment" instance=ExtResource( 13 )]
+position = Vector2( 124, 109 )
+scale = Vector2( 1, 19 )
+cost = 30
+
+[node name="ArrowSign" type="Sprite" parent="Environment"]
+position = Vector2( 221, 170 )
+z_index = -6
+texture = ExtResource( 32 )
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Star" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 4 )]
+position = Vector2( 0, 136 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 112, 120 )
+color = 1
+
+[node name="Key" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 40, 168 )
+
+[node name="Key2" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 64, 168 )
+
+[node name="Key3" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 88, 152 )
+
+[node name="Key5" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 232, 112 )
+
+[node name="Key6" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 48, 80 )
+
+[node name="Key7" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 72, 80 )
+
+[node name="Key8" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 96, 80 )
+
+[node name="Key9" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 152, 48 )
+
+[node name="Key10" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 120, 32 )
+
+[node name="Key11" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 184, 72 )
+
+[node name="Key14" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 120, 72 )
+
+[node name="Key13" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 192, 48 )
+
+[node name="Key4" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 112, 152 )
+
+[node name="Key12" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 160, 168 )
+
+[node name="Key15" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 288, 120 )
+
+[node name="Key16" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 248, 120 )
+
+[node name="Key20" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 360, 104 )
+
+[node name="Key22" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 264, 72 )
+
+[node name="Key24" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 296, 72 )
+
+[node name="Key25" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 288, 48 )
+
+[node name="Key26" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 488, 56 )
+
+[node name="Key27" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 448, 64 )
+
+[node name="Key33" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 432, 152 )
+
+[node name="Key34" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 464, 136 )
+
+[node name="Key35" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 472, 168 )
+
+[node name="Key36" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 496, 120 )
+
+[node name="Key37" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 520, 120 )
+
+[node name="Key38" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 560, 104 )
+
+[node name="Key39" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 640, 136 )
+
+[node name="Key40" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 664, 120 )
+
+[node name="Key41" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 688, 120 )
+
+[node name="Key42" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 712, 120 )
+
+[node name="Key43" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 736, 120 )
+
+[node name="Key44" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 656, 32 )
+
+[node name="Key45" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 680, 32 )
+
+[node name="Key46" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 720, 16 )
+
+[node name="Key47" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 712, 168 )
+
+[node name="Key48" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 680, 168 )
+
+[node name="Key49" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 648, 168 )
+
+[node name="Key50" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 528, 56 )
+
+[node name="Key28" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 408, 64 )
+
+[node name="Key23" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 616, 168 )
+
+[node name="Key21" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 320, 120 )
+
+[node name="Key29" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 200, 168 )
+
+[node name="Key30" parent="Collectibles" instance=ExtResource( 5 )]
+position = Vector2( 232, 168 )
+
+[node name="Key31" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 272, 168 )
+
+[node name="Key32" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 5 )]
+position = Vector2( 304, 168 )
+
+[node name="Key18" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 152, 112 )
+
+[node name="Key19" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 216, 80 )
+
+[node name="Key17" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 5 )]
+position = Vector2( 200, 112 )
+
+[node name="Shard" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 17 )]
+position = Vector2( 32, 32 )
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 648, 80 )
+number = 2
+
+[node name="Shard2" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 17 )]
+position = Vector2( 456, 24 )
+number = 1
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 17 )]
+position = Vector2( 688, 80 )
+number = 3
+
+[node name="Star3" parent="Collectibles" groups=["speccy_skip"] instance=ExtResource( 4 )]
+position = Vector2( 416, 104 )
+color = 3
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 27 )]
+position = Vector2( 176, 112 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 27 )]
+position = Vector2( 664, 80 )
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 4 )]
+position = Vector2( 760, 112 )
+color = 4
+
+[node name="Star5" parent="Collectibles" groups=["speccy_appear"] instance=ExtResource( 4 )]
+position = Vector2( 224, 48 )
+color = 2
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Bat" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 32, 104 )
+left_up_boundary = 4.0
+right_down_boundary = 5.0
+
+[node name="Bat4" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 392, 104 )
+left_up_boundary = 3.0
+right_down_boundary = 2.0
+speed = 70
+
+[node name="Bat8" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 408, 40 )
+left_up_boundary = 5.0
+
+[node name="Bat9" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 576, 48 )
+left_up_boundary = 3.0
+right_down_boundary = 2.0
+
+[node name="Bat2" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 72, 32 )
+left_up_boundary = 3.0
+right_down_boundary = 3.0
+speed = 50
+
+[node name="Snake" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 64, 80 )
+left_up_boundary = 1.0
+right_down_boundary = 5.0
+
+[node name="Snake4" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 336, 32 )
+left_up_boundary = 2.0
+right_down_boundary = 3.0
+
+[node name="Snake5" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 392, 64 )
+left_up_boundary = 2.0
+right_down_boundary = 11.0
+
+[node name="Snake6" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 688, 80 )
+right_down_boundary = 8.0
+speed = 70
+
+[node name="Snake7" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 616, 96 )
+left_up_boundary = 1.0
+right_down_boundary = 3.0
+speed = 30
+
+[node name="Snake2" parent="Enemies" instance=ExtResource( 14 )]
+position = Vector2( 96, 32 )
+left_up_boundary = 2.0
+right_down_boundary = 4.0
+speed = 30
+
+[node name="Slime7" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 232, 24 )
+scale = Vector2( -1, 1 )
+
+[node name="Slime6" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 552, 168 )
+scale = Vector2( -1, 1 )
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0.843137, 0, 0.0901961 )
+script = ExtResource( 18 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect3" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 1, 0, 0.631373, 0.0901961 )
+script = ExtResource( 18 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="HUD" parent="." instance=ExtResource( 2 )]
+song_name = "♫Rumble"
+
+[node name="TileMap" type="TileMap" parent="."]
+tile_set = ExtResource( 8 )
+cell_size = Vector2( 8, 8 )
+format = 1
+
+[node name="Exit" parent="." instance=ExtResource( 20 )]
+position = Vector2( 757, 164 )
+cost = 25
+
+[node name="SpeccyDetect" type="Node2D" parent="."]
+position = Vector2( 224, 176 )
+script = ExtResource( 34 )
+
+[node name="Speccy" parent="SpeccyDetect" instance=ExtResource( 33 )]
+position = Vector2( -8, 0 )
+flip = true
+message = "oi_go_right"
diff --git a/maps/hills_speccy_detect.gd b/maps/hills_speccy_detect.gd
new file mode 100644
index 0000000..5d89a23
--- /dev/null
+++ b/maps/hills_speccy_detect.gd
@@ -0,0 +1,15 @@
+extends Node2D
+
+
+var try_for_speccy: bool = true
+
+onready var skippers: int = get_tree().get_nodes_in_group("speccy_skip").size()
+
+
+func _physics_process(delta: float) -> void:
+ if try_for_speccy:
+ if get_tree().get_nodes_in_group("speccy_appear").empty():
+ try_for_speccy = false
+ $Speccy.appear()
+ elif get_tree().get_nodes_in_group("speccy_skip").size() < skippers:
+ try_for_speccy = false
diff --git a/maps/lab.tscn b/maps/lab.tscn
new file mode 100644
index 0000000..e407fcc
--- /dev/null
+++ b/maps/lab.tscn
@@ -0,0 +1,592 @@
+[gd_scene load_steps=53 format=2]
+
+[ext_resource path="res://graphics/backgrounds/factory.png" type="Texture" id=1]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=3]
+[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=4]
+[ext_resource path="res://audio/music/mitten.ogg" type="AudioStream" id=5]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=8]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=9]
+[ext_resource path="res://objects/enemy/spider.tscn" type="PackedScene" id=10]
+[ext_resource path="res://objects/enemy/rolling_fiend.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/snail.tscn" type="PackedScene" id=12]
+[ext_resource path="res://shaders/electricity.gdshader" type="Shader" id=13]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/enemy/artificial_soul.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/enemy/roboturret.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/enemy/scope.tscn" type="PackedScene" id=17]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=18]
+[ext_resource path="res://maps/map.gd" type="Script" id=19]
+[ext_resource path="res://objects/lore/station/famicop.tscn" type="PackedScene" id=20]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=21]
+[ext_resource path="res://objects/lore/lab/famis_lab.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/lore/hills/eviscerator.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/lore/rust/roboturret.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=27]
+[ext_resource path="res://objects/environment/electric_tiles/electric_tiles.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=30]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=31]
+[ext_resource path="res://objects/enemy/hellarcher.tscn" type="PackedScene" id=32]
+[ext_resource path="res://objects/environment/falling_block/falling_block_lab.tscn" type="PackedScene" id=33]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=34]
+[ext_resource path="res://objects/lore/graveyard/hellarcher.tscn" type="PackedScene" id=35]
+[ext_resource path="res://objects/lore/canopy/sabrespighter.tscn" type="PackedScene" id=36]
+[ext_resource path="res://objects/lore/cave/shedge.tscn" type="PackedScene" id=37]
+[ext_resource path="res://objects/lore/mountain/rolling_fiend.tscn" type="PackedScene" id=38]
+[ext_resource path="res://objects/lore/graveyard/artificial_soul.tscn" type="PackedScene" id=39]
+[ext_resource path="res://objects/enemy/sheriff.tscn" type="PackedScene" id=40]
+[ext_resource path="res://objects/lore/lab/scope.tscn" type="PackedScene" id=41]
+[ext_resource path="res://objects/lore/lab/sheriff.tscn" type="PackedScene" id=42]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=43]
+
+[sub_resource type="ShaderMaterial" id=9]
+shader = ExtResource( 13 )
+shader_param/arc_speed = 4.0
+shader_param/arc_fps = 10.0
+shader_param/arc_scale = 8.0
+shader_param/arc_threshold = 0.15
+shader_param/arc_color = Color( 1, 0.93, 0, 1 )
+shader_param/gamma = 2.0
+shader_param/flash_rate = 3.0
+shader_param/flash_intensity = 0.2
+shader_param/background_color = Color( 0, 0, 0, 0 )
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 16.9355, 4.03226 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 10.4839, 10.4234 )
+
+[sub_resource type="RectangleShape2D" id=4]
+extents = Vector2( 3.62902, 7.19756 )
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 3.83064, 7.22781 )
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 7.15723, 4.01713 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 16.1291, 4.03226 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 4.03226, 4.03226 )
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 8, 128 )
+
+[node name="Map2" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 19 )
+target_time_any = 60
+target_time_100 = 180
+music = ExtResource( 5 )
+lore_entries = [ ExtResource( 22 ), ExtResource( 39 ), ExtResource( 23 ), ExtResource( 35 ), ExtResource( 25 ), ExtResource( 36 ), ExtResource( 20 ), ExtResource( 38 ), ExtResource( 24 ), ExtResource( 37 ), ExtResource( 41 ), ExtResource( 42 ) ]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -2
+
+[node name="Background" type="Sprite" parent="CanvasLayer"]
+z_index = -2
+texture = ExtResource( 1 )
+centered = false
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Camera2D" parent="." instance=ExtResource( 6 )]
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 2
+material = ExtResource( 34 )
+tile_set = ExtResource( 4 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 9
+format = 1
+tile_data = PoolIntArray( 39, 1, 0, 46, 1, 0, 90, 1, 0, 65575, 1, 65536, 65582, 1, 65536, 65587, 1, 196609, 65588, 1, 196610, 65589, 1, 196610, 65590, 1, 196610, 65591, 1, 196610, 65592, 1, 196610, 65593, 1, 196610, 65594, 1, 196611, 65626, 1, 65536, 131111, 1, 131073, 131112, 1, 196610, 131113, 1, 196610, 131114, 1, 196610, 131115, 1, 196610, 131116, 1, 196610, 131117, 1, 196610, 131118, 1, 65539, 131119, 4, 65536, 131120, 4, 65536, 131121, 4, 65536, 131122, 4, 65536, 131162, 1, 65536, 196654, 1, 65536, 196698, 1, 65536, 262190, 1, 131073, 262191, 1, 196610, 262192, 1, 196610, 262193, 1, 2, 262194, 1, 196610, 262195, 1, 196611, 262205, 1, 1, 262206, 1, 196610, 262207, 1, 196610, 262208, 1, 196611, 262213, 1, 196609, 262214, 1, 196610, 262215, 1, 196610, 262216, 1, 196610, 262217, 1, 196611, 262229, 1, 196609, 262230, 1, 196610, 262231, 1, 196610, 262232, 1, 196610, 262233, 1, 196610, 262234, 1, 65539, 327699, 1, 0, 327729, 1, 65536, 327741, 1, 65536, 327770, 1, 65536, 393220, 1, 196609, 393221, 1, 196610, 393222, 1, 196611, 393235, 1, 131072, 393243, 1, 196609, 393244, 1, 196610, 393245, 1, 196610, 393246, 1, 196610, 393247, 1, 2, 393248, 1, 196610, 393249, 1, 3, 393265, 1, 65537, 393266, 1, 196610, 393267, 1, 196610, 393268, 1, 196610, 393269, 1, 196610, 393270, 1, 196610, 393271, 1, 196610, 393272, 1, 196610, 393273, 1, 196610, 393274, 1, 196610, 393275, 1, 196610, 393276, 1, 196610, 393277, 1, 131075, 393306, 1, 131073, 393307, 1, 196610, 393308, 1, 196610, 393309, 1, 3, 458783, 1, 65536, 458785, 1, 131073, 458786, 1, 196610, 458787, 1, 196610, 458788, 1, 196611, 458790, 1, 1, 458791, 1, 196610, 458792, 1, 196610, 458793, 1, 196610, 458794, 1, 196610, 458795, 1, 196610, 458796, 1, 196610, 458797, 1, 196610, 458798, 1, 196610, 458799, 1, 196610, 458800, 1, 196610, 458801, 1, 131075, 458815, 1, 1, 458816, 1, 196611, 458845, 1, 65536, 524319, 1, 65536, 524326, 1, 65536, 524351, 1, 65536, 524361, 1, 0, 524381, 1, 65536, 589855, 1, 65536, 589862, 1, 65536, 589886, 1, 1, 589887, 1, 65539, 589896, 1, 1, 589897, 1, 65539, 589903, 1, 196608, 589908, 1, 196609, 589909, 1, 196610, 589910, 1, 196610, 589911, 1, 196610, 589912, 1, 196610, 589913, 1, 196610, 589914, 1, 196610, 589915, 1, 196611, 589917, 1, 131072, 655390, 1, 196609, 655391, 1, 131075, 655398, 1, 65536, 655418, 1, 1, 655419, 1, 196610, 655420, 1, 196610, 655421, 1, 196610, 655422, 1, 131074, 655423, 1, 131075, 655431, 1, 196609, 655432, 1, 131074, 655433, 1, 131074, 655434, 1, 196611, 720899, 1, 0, 720916, 1, 196608, 720934, 1, 131073, 720935, 1, 196610, 720936, 1, 196610, 720937, 1, 196610, 720938, 1, 196610, 720939, 1, 196610, 720940, 1, 196610, 720941, 1, 196610, 720942, 1, 196610, 720943, 1, 196610, 720944, 1, 196610, 720945, 1, 196610, 720946, 1, 196610, 720947, 1, 196610, 720948, 1, 196610, 720949, 1, 196610, 720950, 1, 196610, 720951, 1, 196610, 720952, 1, 196610, 720953, 1, 196610, 720954, 1, 131075, 786435, 1, 131073, 786436, 1, 196610, 786437, 1, 196610, 786438, 1, 196610, 786439, 1, 196610, 786440, 1, 196610, 786441, 1, 196611, 786444, 1, 196609, 786445, 1, 196610, 786446, 1, 196610, 786447, 1, 196610, 786448, 1, 196610, 786449, 1, 196611, 917566, 1, 1, 917567, 1, 196610, 917568, 1, 196610, 917569, 1, 196610, 917570, 1, 196610, 917571, 1, 196610, 917572, 1, 196610, 917573, 1, 196610, 917574, 1, 196610, 917575, 1, 196610, 917576, 1, 196610, 917577, 1, 196610, 917578, 1, 196610, 917579, 1, 196610, 917580, 1, 196610, 917581, 1, 196610, 917582, 1, 196610, 917583, 1, 196610, 917584, 1, 196610, 917585, 1, 196610, 917586, 1, 196610, 917587, 1, 196610, 917588, 1, 196610, 917589, 1, 196611, 917591, 1, 196609, 917592, 1, 196610, 917593, 1, 196611, 917595, 1, 196609, 917596, 1, 196610, 917597, 1, 196611, 917598, 4, 65536, 917599, 4, 65536, 983077, 1, 1, 983078, 1, 196610, 983079, 1, 196610, 983080, 1, 196610, 983081, 1, 196610, 983082, 1, 196611, 983084, 1, 196608, 983087, 1, 196608, 983090, 1, 196609, 983091, 1, 196610, 983092, 1, 196610, 983093, 1, 196610, 983094, 1, 196610, 983095, 1, 196610, 983096, 1, 196610, 983097, 1, 196610, 983098, 1, 196610, 983099, 1, 196610, 983100, 1, 196611, 983102, 1, 65536, 1048578, 1, 196609, 1048579, 1, 196610, 1048580, 1, 3, 1048586, 1, 196609, 1048587, 1, 196611, 1048593, 1, 196609, 1048594, 1, 196610, 1048595, 1, 196611, 1048610, 1, 1, 1048611, 1, 196610, 1048612, 1, 196610, 1048613, 1, 65539, 1048638, 1, 65536, 1114116, 1, 131073, 1114117, 1, 3, 1114133, 1, 196608, 1114143, 1, 1, 1114144, 1, 196610, 1114145, 1, 196610, 1114146, 1, 131075, 1114149, 1, 65536, 1114174, 1, 65536, 1114190, 1, 0, 1179653, 1, 131073, 1179654, 1, 2, 1179655, 1, 3, 1179662, 1, 0, 1179677, 1, 196609, 1179678, 1, 196610, 1179679, 1, 131075, 1179685, 1, 131073, 1179686, 1, 196610, 1179687, 1, 196610, 1179688, 1, 196610, 1179689, 1, 196610, 1179690, 1, 3, 1179693, 1, 1, 1179694, 1, 196610, 1179695, 1, 196610, 1179696, 1, 3, 1179710, 1, 65536, 1179725, 1, 196609, 1179726, 1, 131075, 1179732, 1, 196609, 1179733, 1, 3, 1179737, 1, 0, 1245190, 1, 131073, 1245191, 1, 131074, 1245192, 1, 196610, 1245193, 1, 196610, 1245194, 1, 196610, 1245195, 1, 196610, 1245196, 1, 196610, 1245197, 1, 196610, 1245198, 1, 131074, 1245199, 1, 196610, 1245200, 1, 196611, 1245213, -1073741820, 65536, 1245226, 1, 131072, 1245228, 1, 196609, 1245229, 1, 131075, 1245232, 1, 131073, 1245233, 1, 3, 1245246, 1, 131072, 1245252, 1, 196609, 1245253, 1, 196610, 1245254, 1, 196610, 1245255, 1, 196610, 1245256, 1, 196611, 1245269, 1, 131073, 1245270, 1, 196611, 1245273, 1, 65536, 1310749, -1073741820, 65536, 1310762, -1073741820, 65536, 1310769, 1, 65537, 1310770, 1, 3, 1310809, 1, 65536, 1376285, -1073741820, 65536, 1376298, -1073741820, 65536, 1376305, 1, 131073, 1376306, 1, 131075, 1376321, 1, 196609, 1376322, 1, 196610, 1376323, 1, 196611, 1376345, 1, 131072, 1441792, 0, 1, 1441793, 0, 2, 1441794, 0, 2, 1441795, 0, 2, 1441796, 0, 2, 1441797, 0, 2, 1441798, 0, 2, 1441799, 0, 2, 1441800, 0, 2, 1441801, 0, 2, 1441802, 0, 2, 1441803, 0, 2, 1441804, 0, 2, 1441805, 0, 2, 1441806, 0, 2, 1441807, 0, 2, 1441808, 0, 2, 1441809, 0, 2, 1441810, 0, 2, 1441811, 0, 2, 1441812, 0, 2, 1441813, 0, 2, 1441814, 0, 2, 1441815, 0, 2, 1441816, 0, 2, 1441817, 0, 2, 1441818, 0, 2, 1441819, 0, 2, 1441820, 0, 2, 1441821, 0, 2, 1441822, 0, 2, 1441823, 0, 2, 1441824, 0, 2, 1441825, 0, 2, 1441826, 0, 2, 1441827, 1610612736, 2, 1441828, 1610612736, 2, 1441829, 0, 2, 1441830, 0, 2, 1441831, 0, 2, 1441832, 0, 2, 1441833, 0, 2, 1441834, 0, 2, 1441835, 0, 2, 1441836, 0, 2, 1441837, 0, 2, 1441838, 0, 2, 1441839, 0, 2, 1441840, 0, 2, 1441841, 0, 2, 1441842, 0, 2, 1441843, 0, 2, 1441844, 0, 2, 1441845, 0, 2, 1441846, 0, 2, 1441847, 0, 2, 1441848, 0, 2, 1441849, 0, 2, 1441850, 0, 2, 1441851, 0, 2, 1441852, 0, 2, 1441853, 0, 2, 1441854, 0, 2, 1441855, 0, 2, 1441856, 0, 2, 1441857, 0, 2, 1441858, 0, 2, 1441859, 0, 2, 1441860, 0, 2, 1441861, 0, 2, 1441862, 0, 2, 1441863, 0, 2, 1441864, 0, 2, 1441865, 0, 2, 1441866, 0, 2, 1441867, 0, 2, 1441868, 0, 2, 1441869, 0, 2, 1441870, 0, 2, 1441871, 0, 2, 1441872, 0, 2, 1441873, 0, 2, 1441874, 0, 2, 1441875, 0, 2, 1441876, 0, 2, 1441877, 0, 2, 1441878, 0, 2, 1441879, 0, 2, 1441880, 0, 2, 1441881, 0, 2, 1441882, 0, 2, 1441883, 0, 2, 1441884, 0, 2, 1441885, 0, 2, 1441886, 0, 2, 1441887, 0, 3, 1507328, 1, 196609, 1507329, 1, 196610, 1507330, 1, 196610, 1507331, 1, 196610, 1507332, 1, 196610, 1507333, 1, 196610, 1507334, 1, 196610, 1507335, 1, 196610, 1507336, 1, 196610, 1507337, 1, 196610, 1507338, 1, 196610, 1507339, 1, 196610, 1507340, 1, 196610, 1507341, 1, 196610, 1507342, 1, 196610, 1507343, 1, 196610, 1507344, 1, 196610, 1507345, 1, 196610, 1507346, 1, 196610, 1507347, 1, 196610, 1507348, 1, 196610, 1507349, 1, 196610, 1507350, 1, 196610, 1507351, 1, 196610, 1507352, 1, 196610, 1507353, 1, 196610, 1507354, 1, 196610, 1507355, 1, 196610, 1507356, 1, 196610, 1507357, 1, 196610, 1507358, 1, 196610, 1507359, 1, 196610, 1507360, 1, 196610, 1507361, 1, 196610, 1507362, 1, 196610, 1507363, 1, 196610, 1507364, 1, 196610, 1507365, 1, 196610, 1507366, 1, 196610, 1507367, 1, 196610, 1507368, 1, 196610, 1507369, 1, 196610, 1507370, 1, 196610, 1507371, 1, 196610, 1507372, 1, 196610, 1507373, 1, 196610, 1507374, 1, 196610, 1507375, 1, 196610, 1507376, 1, 196610, 1507377, 1, 196610, 1507378, 1, 196610, 1507379, 1, 196610, 1507380, 1, 196610, 1507381, 1, 196610, 1507382, 1, 196610, 1507383, 1, 196610, 1507384, 1, 196610, 1507385, 1, 196610, 1507386, 1, 196610, 1507387, 1, 196610, 1507388, 1, 196610, 1507389, 1, 196610, 1507390, 1, 196610, 1507391, 1, 196610, 1507392, 1, 196610, 1507393, 1, 196610, 1507394, 1, 196610, 1507395, 1, 196610, 1507396, 1, 196610, 1507397, 1, 196610, 1507398, 1, 196610, 1507399, 1, 196610, 1507400, 1, 196610, 1507401, 1, 196610, 1507402, 1, 196610, 1507403, 1, 196610, 1507404, 1, 196610, 1507405, 1, 196610, 1507406, 1, 196610, 1507407, 1, 196610, 1507408, 1, 196610, 1507409, 1, 196610, 1507410, 1, 196610, 1507411, 1, 196610, 1507412, 1, 196610, 1507413, 1, 196610, 1507414, 1, 196610, 1507415, 1, 196610, 1507416, 1, 196610, 1507417, 1, 196610, 1507418, 1, 196610, 1507419, 1, 196610, 1507420, 1, 196610, 1507421, 1, 196610, 1507422, 1, 196610, 1507423, 1, 196611 )
+
+[node name="ElectricTiles" parent="." groups=["can_stain"] instance=ExtResource( 28 )]
+material = SubResource( 9 )
+position = Vector2( -152, 16 )
+tile_data = PoolIntArray( 131172, 2, 196608, 262172, 2, 196609, 262173, 2, 196610, 262174, 2, 196610, 262175, 2, 196610, 262176, 2, 196611, 786436, 2, 196609, 786437, 2, 196610, 786438, 2, 196610, 786439, 2, 196610, 786440, 2, 196610, 786441, 2, 196611, 786526, 2, 196609, 786527, 2, 196610, 786528, 2, 196610, 786529, 2, 196610, 786530, 2, 196611, 1048586, 2, 196609, 1048587, 2, 196611, 1114154, 2, 1, 1114155, 2, 2, 1114156, 2, 3, 1179689, 2, 1, 1179690, 2, 65538, 1179691, 2, 65538, 1179692, 2, 65538, 1179693, 2, 3, 1245223, 2, 196609, 1245224, 2, 196610, 1245225, 2, 131074, 1245226, 2, 131074, 1245227, 2, 131074, 1245228, 2, 131074, 1245229, 2, 131075 )
+
+[node name="CollisionShape2D" parent="ElectricTiles/DeathTile" index="0"]
+position = Vector2( -31.4516, -28.2258 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="1"]
+position = Vector2( 94.3548, -105.645 )
+shape = SubResource( 2 )
+
+[node name="CollisionShape2D3" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="2"]
+position = Vector2( 178.226, -15.3831 )
+shape = SubResource( 3 )
+
+[node name="CollisionShape2D4" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="3"]
+position = Vector2( 191.532, -12.1573 )
+shape = SubResource( 4 )
+
+[node name="CollisionShape2D5" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="4"]
+position = Vector2( 165.121, -12.127 )
+shape = SubResource( 5 )
+
+[node name="CollisionShape2D6" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="5"]
+position = Vector2( 155.544, -8.88611 )
+shape = SubResource( 6 )
+
+[node name="CollisionShape2D7" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="6"]
+position = Vector2( 520.161, -54.0323 )
+shape = SubResource( 7 )
+
+[node name="CollisionShape2D10" type="CollisionShape2D" parent="ElectricTiles/DeathTile" index="7"]
+position = Vector2( 545.968, -118.548 )
+shape = SubResource( 8 )
+
+[node name="Player" parent="." instance=ExtResource( 26 )]
+position = Vector2( 32, 176 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+light_mask = 0
+tile_set = ExtResource( 9 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 196682, 12, 0, 262211, 12, 0, 262218, 12, 0, 262220, 12, 0, 262221, 12, 0, 262223, 12, 0, 327754, 12, 0, 327755, 12, 0, 327756, 12, 0, 327757, 12, 0, 327758, 12, 0, 327759, 12, 0, 327760, 12, 0, 327761, 12, 0, 327762, 12, 0, 327763, 12, 0, 327764, 12, 0, 393230, 12, 0, 393231, 12, 0, 393232, 12, 0, 393233, 12, 0, 393234, 12, 0, 393236, 12, 0, 393237, 12, 0, 393238, 12, 0, 393239, 12, 0, 393240, 12, 0, 393241, 12, 0, 393242, 12, 0, 458818, 12, 0, 589900, 12, 0, 589906, 12, 0, 655384, 12, 0, 655427, 12, 0, 720902, 1, 0, 720905, 1, 0, 720913, 1, 0, 786453, 12, 0, 786454, 12, 0, 786455, 12, 0, 786457, 12, 0, 786458, 12, 0, 786459, 12, 0, 786460, 12, 0, 851996, 12, 0, 852041, 1, 0, 852044, 1, 0, 852048, 1, 0, 852052, 1, 0, 852056, 1, 0, 917532, 12, 0, 917533, 12, 0, 917590, 12, 0, 917594, 12, 0, 983083, 12, 0, 983085, 12, 0, 983086, 12, 0, 983088, 12, 0, 983089, 12, 0, 1179717, 1, 0, 1179719, 1, 0, 1245257, -1610612735, 0, 1376307, 1, 0, 1376309, 1, 0, 1376311, 1, 0, 1376315, 1, 0, 2031608, 9, 0, 2031609, 6, 0, 2031610, 9, 0, 2031611, 6, 0, 2031612, 9, 0, 2097144, 6, 0, 2097145, 9, 0, 2097146, 6, 0, 2097147, 9, 0, 2097148, 6, 0, 2162680, 9, 0, 2162681, 6, 0, 2162682, 9, 0, 2162683, 6, 0, 2162684, 9, 0, 2228216, 6, 0, 2228217, 9, 0, 2228218, 6, 0, 2228219, 9, 0, 2228220, 6, 0, 2293752, 9, 0, 2293753, 6, 0, 2293754, 9, 0, 2293755, 6, 0, 2293756, 9, 0 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 21 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 196703, 0, 196609, 262239, 0, 196609, 327680, 536870912, 196609, 327775, 0, 196609, 393216, 536870912, 196609, 393311, 0, 196609, 458752, 536870912, 196609, 458847, 0, 196609, 524288, 536870912, 196609, 524383, 0, 196609, 589824, 536870912, 196609, 589919, 0, 196609, 655360, 536870912, 196609, 655455, 0, 196609, 720896, 536870912, 196609, 720991, 0, 196609, 786432, 536870912, 196609, 786450, 536870912, 196609, 786527, 0, 196609, 851968, 536870912, 196609, 851986, 536870912, 196609, 852063, 0, 196609, 917504, 536870912, 196609, 917599, 0, 196609, 983040, 536870912, 196609, 983135, 0, 196609, 1048576, 536870912, 196609, 1048671, 0, 196609, 1114191, 536870912, 196609, 1114207, 0, 196609, 1179727, 536870912, 196609, 1179743, 0, 196609, 1245263, 536870912, 196609, 1245279, 0, 196609 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( -8, 104 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 776, 112 )
+shape = SubResource( 1 )
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="ArtificialSoul" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 88, 160 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+speed = 4.5
+
+[node name="ArtificialSoul2" parent="Enemies/ArtificialSoul" instance=ExtResource( 15 )]
+radius = 3.0
+initial_angle = 1.0
+speed = 4.5
+
+[node name="ArtificialSoul3" parent="Enemies/ArtificialSoul" instance=ExtResource( 15 )]
+radius = 3.0
+initial_angle = 2.0
+speed = 4.5
+
+[node name="ArtificialSoul4" parent="Enemies/ArtificialSoul" instance=ExtResource( 15 )]
+radius = 3.0
+initial_angle = 3.0
+speed = 4.5
+
+[node name="ArtificialSoul5" parent="Enemies/ArtificialSoul" instance=ExtResource( 15 )]
+radius = 3.0
+initial_angle = 4.0
+speed = 4.5
+
+[node name="ArtificialSoul2" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 632, 56 )
+__meta__ = {
+"_edit_group_": true
+}
+radius = 3.0
+speed = 4.0
+
+[node name="ArtificialSoul5" parent="Enemies/ArtificialSoul2" instance=ExtResource( 15 )]
+radius = 3.0
+initial_angle = 4.0
+speed = 4.0
+
+[node name="Bat" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 8, 136 )
+left_up_boundary = 5.0
+
+[node name="Cop3" parent="Enemies" instance=ExtResource( 40 )]
+position = Vector2( 312, 136 )
+turn_time = 1.25
+
+[node name="Cop" parent="Enemies" instance=ExtResource( 17 )]
+position = Vector2( 400, 80 )
+walk_speed = 40.0
+left_boundary = 3.0
+right_boundary = 5.0
+turn_time = 1.0
+
+[node name="Shard" parent="Enemies/Cop" instance=ExtResource( 31 )]
+position = Vector2( 10, 0 )
+number = 2
+
+[node name="RollingFiend5" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 560, 144 )
+move_speed = 100.0
+
+[node name="RollingFiend2" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 352, 112 )
+clockwise = true
+
+[node name="RollingFiend3" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 376, 128 )
+clockwise = true
+
+[node name="Hellarcher" parent="Enemies" instance=ExtResource( 32 )]
+position = Vector2( 240, 40 )
+scale = Vector2( -1, 1 )
+shoot_time = 1.0
+arrow_speed = 100.0
+
+[node name="Hellarcher2" parent="Enemies" instance=ExtResource( 32 )]
+position = Vector2( 144, 120 )
+scale = Vector2( -1, 1 )
+shoot_time = 0.75
+arrow_speed = 100.0
+
+[node name="Hellarcher3" parent="Enemies" instance=ExtResource( 32 )]
+position = Vector2( 704, 64 )
+scale = Vector2( -1, 1 )
+arrow_speed = 125.0
+
+[node name="Roboturret3" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 112, 88 )
+arrow_speed = 100.0
+
+[node name="Roboturret6" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 616, 136 )
+shoot_time = 2.56
+arrow_speed = 200.0
+
+[node name="Roboturret7" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 712, 136 )
+shoot_time = 1.5
+arrow_speed = 200.0
+
+[node name="Roboturret4" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 408, 40 )
+scale = Vector2( -1, 1 )
+shoot_time = 0.5
+
+[node name="Snail" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 88, 40 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="Spider6" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 336, 24 )
+speed = 60.0
+down_boundary = 3
+
+[node name="Snake" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 456, 168 )
+left_up_boundary = 6.0
+right_down_boundary = 4.0
+speed = 70
+
+[node name="Platforms" type="Node2D" parent="."]
+
+[node name="Ladder" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 0, 40 )
+scale = Vector2( 1, 12 )
+can_climb_left = false
+
+[node name="Ladder3" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 760, 24 )
+scale = Vector2( 1, 17 )
+can_climb_right = false
+
+[node name="Ladder4" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 632, 136 )
+scale = Vector2( 1, 2 )
+can_climb_left = false
+
+[node name="Ladder6" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 632, 152 )
+
+[node name="Ladder2" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 144, 104 )
+
+[node name="Ladder5" parent="Platforms" instance=ExtResource( 3 )]
+position = Vector2( 144, 96 )
+can_climb_left = false
+
+[node name="MovingPlatform" parent="Platforms" instance=ExtResource( 27 )]
+position = Vector2( 176, 88 )
+scale = Vector2( 2, 1 )
+speed = 100
+right_down_boundary = 6.0
+
+[node name="MovingPlatform3" parent="Platforms" instance=ExtResource( 27 )]
+position = Vector2( 168, 48 )
+scale = Vector2( 2, 1 )
+speed = 40
+right_down_boundary = 5.0
+
+[node name="MovingPlatform4" parent="Platforms" instance=ExtResource( 27 )]
+position = Vector2( 536, 104 )
+scale = Vector2( 2, 1 )
+speed = 40
+left_up_boundary = 8.0
+right_down_boundary = 1.0
+move_direction = 1
+
+[node name="FallingBlock3" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 144, 48 )
+
+[node name="FallingBlock4" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 216, 80 )
+
+[node name="FallingBlock6" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 600, 40 )
+
+[node name="FallingBlock7" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 624, 32 )
+
+[node name="FallingBlock5" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 136, 152 )
+
+[node name="FallingBlock9" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 608, 72 )
+
+[node name="FallingBlock10" parent="Platforms" instance=ExtResource( 33 )]
+position = Vector2( 656, 72 )
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Key" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 48, 168 )
+
+[node name="Key2" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 80, 168 )
+
+[node name="Key3" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 112, 168 )
+
+[node name="Key4" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 144, 168 )
+
+[node name="Key5" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 136, 144 )
+
+[node name="Key6" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 112, 136 )
+
+[node name="Key7" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 56, 136 )
+
+[node name="Key8" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 40, 128 )
+
+[node name="Key9" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 24, 120 )
+
+[node name="Key10" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 512, 24 )
+
+[node name="Key13" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 40, 40 )
+
+[node name="Key14" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 72, 40 )
+
+[node name="Key15" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 104, 40 )
+
+[node name="Key16" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 152, 32 )
+
+[node name="Key17" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 264, 40 )
+
+[node name="Key18" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 304, 48 )
+
+[node name="Key19" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 336, 48 )
+
+[node name="Key20" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 368, 48 )
+
+[node name="Key21" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 304, 112 )
+
+[node name="Key22" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 336, 112 )
+
+[node name="Key23" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 352, 112 )
+
+[node name="Key24" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 376, 112 )
+
+[node name="Key25" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 408, 112 )
+
+[node name="Key26" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 392, 144 )
+
+[node name="Key27" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 368, 136 )
+
+[node name="Key28" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 312, 168 )
+
+[node name="Key29" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 264, 168 )
+
+[node name="Key11" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 488, 24 )
+
+[node name="Key30" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 528, 160 )
+
+[node name="Key34" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 440, 112 )
+
+[node name="Key35" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 480, 112 )
+
+[node name="Key36" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 520, 104 )
+
+[node name="Key37" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 544, 104 )
+
+[node name="Key38" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 568, 72 )
+
+[node name="Key39" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 584, 56 )
+
+[node name="Key40" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 512, 48 )
+
+[node name="Key43" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 552, 24 )
+
+[node name="Key44" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 584, 24 )
+
+[node name="Key45" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 728, 104 )
+
+[node name="Key46" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 744, 104 )
+
+[node name="Key47" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 568, 104 )
+
+[node name="Key48" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 592, 104 )
+
+[node name="Key49" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 616, 104 )
+
+[node name="Key50" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 672, 136 )
+
+[node name="Key41" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 496, 64 )
+
+[node name="Key42" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 472, 72 )
+
+[node name="Key31" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 600, 168 )
+
+[node name="Key32" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 648, 168 )
+
+[node name="Key33" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 688, 144 )
+
+[node name="Key12" parent="Collectibles" instance=ExtResource( 29 )]
+position = Vector2( 160, 80 )
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 31 )]
+position = Vector2( 240, 72 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 31 )]
+position = Vector2( 384, 48 )
+number = 1
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 31 )]
+position = Vector2( 744, 168 )
+number = 3
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 30 )]
+position = Vector2( 88, 144 )
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 30 )]
+position = Vector2( 368, 168 )
+color = 1
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 30 )]
+position = Vector2( 696, 24 )
+color = 3
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 30 )]
+position = Vector2( 384, 24 )
+color = 2
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 30 )]
+position = Vector2( 728, 64 )
+color = 4
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0.843137, 0, 0.0901961 )
+script = ExtResource( 18 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect4" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 0, 0.0627451, 1, 0.0901961 )
+script = ExtResource( 18 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect3" type="ColorRect" parent="."]
+margin_right = 256.0
+margin_bottom = 8.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="HUD" parent="." instance=ExtResource( 2 )]
+song_name = "♫Mitten"
+
+[node name="Exit" parent="." instance=ExtResource( 14 )]
+position = Vector2( 736, 36 )
+cost = 25
+
+[node name="Speccy" parent="." instance=ExtResource( 43 )]
+position = Vector2( 128, 96 )
+flip = true
+message = "go_get_em"
+
+[connection signal="ready" from="Speccy" to="Speccy" method="appear"]
+
+[editable path="ElectricTiles"]
+[editable path="ElectricTiles/DeathTile"]
diff --git a/maps/level_select.gd b/maps/level_select.gd
index 82563df..7dc6e8f 100644
--- a/maps/level_select.gd
+++ b/maps/level_select.gd
@@ -9,7 +9,9 @@ onready var high_score_any = $HighScoreAny
onready var high_score_100 = $HighScore100
onready var levelarrow_up = $LevelArrowUp
onready var levelarrow_down = $LevelArrowDown
- #Shards
+onready var lives_mode_text = $LivesModeText
+onready var easy_mode_text = $EasyModeText
+#Shards
onready var shards = [
$ShardGraphics/Shard,
$ShardGraphics/Shard2,
@@ -24,11 +26,16 @@ onready var shards = [
var save = 0
var current_level = 0
var current_shard = 0
+#Here just so game doesnt crash
+export var target_time_100 = 0
+export var target_time_any = 0
# Called when the node enters the scene tree for the first time.
func _ready():
+ easy_mode_text.text = "difficulty: %s, Z to change" % ["sweet", "salty", "spicy", "pungent"][Game.difficulty]
+ Fade.fade_in(0.000000000000001)
change_current_level(Game.current_level)
- Game.ac_music.stop()
+ Audio.ac_music.stop()
func _physics_process(delta):
if Input.is_action_just_pressed("ui_up"): change_current_level(-1)
@@ -42,9 +49,13 @@ func _physics_process(delta):
#Draw Shard Title
shard_title.text = level.shard_titles[current_shard]
#Select level
- if Input.is_action_just_pressed("jump"):
+ if Input.is_action_just_pressed("ui_accept"):
Game.current_level = current_level
Game.change_map(level.scene)
+ #Toggle lives mode
+ if Input.is_action_just_pressed("ui_cancel"):
+ Game.difficulty = (Game.difficulty + 1) % 4
+ easy_mode_text.text = "difficulty: %s, Z to change" % ["sweet", "salty", "spicy", "pungent"][Game.difficulty]
func change_current_shard(amount):
if current_shard + amount != -1 && current_shard + amount != 8: #Check if in range
@@ -70,17 +81,17 @@ func change_current_level(amount):
shard_arrow.position.x = 76
#Load new data
var save_id = LevelData.levels[current_level].save_id
- var save_data = Save.get_level_data(save_id)
+ var save_data = Save.current_file.levels[save_id]
# set any% scores
high_score_any.text = "Any%%\n%05d\n%s" % [
save_data.score_any,
- Game.timeify(save_data.time_any)
+ Game.format_time(save_data.time_any)
]
# set 100% scores
high_score_100.text = "100%%\n%05d\n%s" % [
save_data.score_100,
- Game.timeify(save_data.time_100)
+ Game.format_time(save_data.time_100)
]
# set collected shards
for i in 8:
- shards[i].visible = save_data.shards[i]
+ shards[i].visible = save_data.shards_collected[i]
diff --git a/maps/level_select.tscn b/maps/level_select.tscn
index f3d3ad5..b0fee28 100644
--- a/maps/level_select.tscn
+++ b/maps/level_select.tscn
@@ -1,14 +1,36 @@
-[gd_scene load_steps=11 format=2]
+[gd_scene load_steps=15 format=2]
-[ext_resource path="res://scripts/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
[ext_resource path="res://tilesets/t_gui.tres" type="TileSet" id=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=3]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=3]
[ext_resource path="res://graphics/hud/levelselect_arrow.png" type="Texture" id=4]
-[ext_resource path="res://objects/collectibles/gold.tscn" type="PackedScene" id=5]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=5]
[ext_resource path="res://graphics/hud/levelselect_nexlevel.png" type="Texture" id=6]
[ext_resource path="res://maps/level_select.gd" type="Script" id=7]
[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=8]
[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=9]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=10]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=11]
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 11 )
+shader_param/color_1 = Color( 0.121569, 0.454902, 1, 1 )
+shader_param/color_2 = Color( 0.258824, 0.909804, 0.396078, 1 )
+shader_param/checker_size = Vector2( 8, 8 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 11, 1 )
+shader_param/cycle_alternation = Vector2( 1, 1 )
+shader_param/uv_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 11 )
+shader_param/color_1 = Color( 1, 0.121569, 0.92549, 1 )
+shader_param/color_2 = Color( 0.258824, 0.909804, 0.396078, 0 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 0.2, 11 )
+shader_param/cycle_alternation = Vector2( 2.404, 1.608 )
+shader_param/uv_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
[sub_resource type="ShaderMaterial" id=2]
shader = ExtResource( 3 )
@@ -19,9 +41,15 @@ shader_param/border_corners = false
script = ExtResource( 7 )
[node name="BackGround" type="ColorRect" parent="."]
+material = SubResource( 3 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="BackGround2" type="ColorRect" parent="."]
+visible = false
+material = SubResource( 4 )
margin_right = 256.0
margin_bottom = 192.0
-color = Color( 0, 0, 0, 1 )
[node name="ColorRect2" type="ColorRect" parent="."]
margin_left = 43.0
@@ -37,62 +65,80 @@ format = 1
tile_data = PoolIntArray( 327685, 0, 0, 327686, 536870912, 1, 327687, 0, 1, 327688, 0, 1, 327689, 0, 1, 327690, 0, 1, 327691, 0, 1, 327692, 0, 1, 327693, 0, 1, 327694, 0, 1, 327695, 0, 1, 327696, 0, 1, 327697, 0, 1, 327698, 0, 1, 327699, 0, 1, 327700, 0, 1, 327701, 0, 1, 327702, 0, 1, 327703, 0, 1, 327704, 0, 1, 327705, 0, 1, 327706, 536870912, 0, 393221, 1073741824, 2, 393242, 1610612736, 2, 458757, 1073741824, 2, 458778, 1610612736, 2, 524293, 1073741824, 2, 524314, 1610612736, 2, 589829, 1073741824, 2, 589850, 1610612736, 2, 655365, 1073741824, 2, 655386, 1610612736, 2, 720901, 1073741824, 2, 720922, 1610612736, 2, 786437, 1073741824, 2, 786458, 1610612736, 2, 851973, 1073741824, 2, 851994, 1610612736, 2, 917509, 1073741824, 2, 917530, 1610612736, 2, 983045, 1073741824, 2, 983066, 1610612736, 2, 1048581, 1073741824, 2, 1048602, 1610612736, 2, 1114117, 1073741824, 2, 1114138, 1610612736, 2, 1179653, 1073741824, 0, 1179654, 1073741824, 1, 1179655, 1610612736, 1, 1179656, 1610612736, 1, 1179657, 1610612736, 1, 1179658, 1610612736, 1, 1179659, 1610612736, 1, 1179660, 1610612736, 1, 1179661, 1610612736, 1, 1179662, 1610612736, 1, 1179663, 1610612736, 1, 1179664, 1610612736, 1, 1179665, 1610612736, 1, 1179666, 1610612736, 1, 1179667, 1610612736, 1, 1179668, 1610612736, 1, 1179669, 1610612736, 1, 1179670, 1610612736, 1, 1179671, 1610612736, 1, 1179672, 1610612736, 1, 1179673, 1073741824, 1, 1179674, 1610612736, 0 )
[node name="Title" type="Label" parent="."]
-margin_left = 72.0
+material = ExtResource( 10 )
+margin_left = 43.0
margin_top = 48.0
-margin_right = 184.0
-margin_bottom = 68.0
+margin_right = 213.0
+margin_bottom = 58.0
theme = ExtResource( 1 )
-text = "test text
-"
+text = "test text"
align = 1
[node name="HighScoreText" type="Label" parent="."]
+material = ExtResource( 10 )
margin_left = 56.0
-margin_top = 62.0
+margin_top = 61.0
margin_right = 200.0
-margin_bottom = 94.0
+margin_bottom = 71.0
theme = ExtResource( 1 )
-text = "High SCORE:
-
-"
+text = "High SCORE:"
align = 1
[node name="HighScoreAny" type="Label" parent="."]
+material = ExtResource( 10 )
margin_left = 21.0
-margin_top = 74.0
+margin_top = 72.0
margin_right = 165.0
-margin_bottom = 111.0
+margin_bottom = 108.0
theme = ExtResource( 1 )
text = "any%
0000
-0:00:00
-"
+0:00:00"
align = 1
[node name="HighScore100" type="Label" parent="."]
+material = ExtResource( 10 )
margin_left = 84.0
-margin_top = 74.0
+margin_top = 72.0
margin_right = 228.0
-margin_bottom = 111.0
+margin_bottom = 108.0
theme = ExtResource( 1 )
text = "100%
0000
-0:00:00
-"
+0:00:00"
align = 1
[node name="ShardTitle" type="Label" parent="."]
+material = ExtResource( 10 )
margin_left = 43.0
-margin_top = 130.0
+margin_top = 134.0
margin_right = 213.0
-margin_bottom = 173.0
+margin_bottom = 144.0
theme = ExtResource( 1 )
-text = "Collect all coins
-"
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
align = 1
+[node name="EasyModeText" type="Label" parent="."]
+material = ExtResource( 10 )
+margin_top = 3.0
+margin_right = 256.0
+margin_bottom = 13.0
+theme = ExtResource( 1 )
+text = "difficulty"
+align = 1
+
+[node name="LivesModeText" type="Label" parent="."]
+visible = false
+material = ExtResource( 10 )
+margin_left = 2.0
+margin_top = 180.0
+margin_right = 258.0
+margin_bottom = 190.0
+theme = ExtResource( 1 )
+text = "lives are off press z to change this"
+
[node name="ShardGraphics" type="Node2D" parent="."]
-position = Vector2( 0, 7 )
+position = Vector2( 0, 10 )
[node name="Shard11" type="Sprite" parent="ShardGraphics"]
modulate = Color( 0, 0, 0, 1 )
@@ -193,7 +239,7 @@ visible = false
position = Vector2( 111, 91 )
[node name="ShardArrow" type="Sprite" parent="."]
-position = Vector2( 76, 113 )
+position = Vector2( 76, 116 )
texture = ExtResource( 4 )
[node name="LevelArrowUp" type="Sprite" parent="."]
diff --git a/maps/leveldata/cave_info.tres b/maps/leveldata/cave_info.tres
deleted file mode 100644
index b3e443b..0000000
--- a/maps/leveldata/cave_info.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="Resource" load_steps=3 format=2]
-
-[ext_resource path="res://maps/leveldata/level_info.gd" type="Script" id=1]
-[ext_resource path="res://maps/cave.tscn" type="PackedScene" id=2]
-
-[resource]
-script = ExtResource( 1 )
-level_title = "Blue Ray Cavern"
-shard_title = [ "Climb the big vine", "Next to the lone tree", "Slime's Treasure", "The snake pit", "5 Rainbow Stars", "Collection bonus", "Time bonus", "Life bonus", "", "" ]
-level_number = 0
-scene = ExtResource( 2 )
diff --git a/maps/leveldata/level0_info.tres b/maps/leveldata/level0_info.tres
deleted file mode 100644
index 39f0649..0000000
--- a/maps/leveldata/level0_info.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="Resource" load_steps=3 format=2]
-
-[ext_resource path="res://maps/leveldata/level_info.gd" type="Script" id=1]
-[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2]
-
-[resource]
-script = ExtResource( 1 )
-level_title = "Level 0"
-shard_title = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" ]
-level_number = 0
-scene = ExtResource( 2 )
diff --git a/maps/leveldata/level1_info.tres b/maps/leveldata/level1_info.tres
deleted file mode 100644
index 60c62b4..0000000
--- a/maps/leveldata/level1_info.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="Resource" load_steps=3 format=2]
-
-[ext_resource path="res://maps/leveldata/level_info.gd" type="Script" id=1]
-[ext_resource path="res://maps/map01.tscn" type="PackedScene" id=2]
-
-[resource]
-script = ExtResource( 1 )
-level_title = "Verdant Hills"
-shard_title = [ "Climb the big vine", "Next to the lone tree", "Slime's Treasure", "The snake pit", "5 Rainbow Stars", "Collection bonus", "Time bonus", "Life bonus", "", "" ]
-level_number = 0
-scene = ExtResource( 2 )
diff --git a/maps/leveldata/level_info.gd b/maps/leveldata/level_info.gd
deleted file mode 100644
index 683dbe7..0000000
--- a/maps/leveldata/level_info.gd
+++ /dev/null
@@ -1,6 +0,0 @@
-extends Resource
-
-export var level_title = ""
-export var shard_title = ["","","","","","","","","","",]
-export var level_number = 0 #level number, used for saving not for level order
-export (PackedScene) var scene
diff --git a/maps/leveldata/levels.gd b/maps/leveldata/levels.gd
deleted file mode 100644
index 184a66f..0000000
--- a/maps/leveldata/levels.gd
+++ /dev/null
@@ -1,3 +0,0 @@
-extends Resource
-
-export var level = []
diff --git a/maps/leveldata/levels.tres b/maps/leveldata/levels.tres
deleted file mode 100644
index 11f648b..0000000
--- a/maps/leveldata/levels.tres
+++ /dev/null
@@ -1,10 +0,0 @@
-[gd_resource type="Resource" load_steps=5 format=2]
-
-[ext_resource path="res://maps/leveldata/level1_info.tres" type="Resource" id=1]
-[ext_resource path="res://maps/leveldata/levels.gd" type="Script" id=2]
-[ext_resource path="res://maps/leveldata/level0_info.tres" type="Resource" id=3]
-[ext_resource path="res://maps/leveldata/cave_info.tres" type="Resource" id=4]
-
-[resource]
-script = ExtResource( 2 )
-level = [ ExtResource( 3 ), ExtResource( 1 ), ExtResource( 4 ) ]
diff --git a/maps/map.gd b/maps/map.gd
index 08f671c..e256720 100644
--- a/maps/map.gd
+++ b/maps/map.gd
@@ -1,18 +1,50 @@
extends Node2D
+
+const PauseScreen := preload("res://objects/hud/pause_screen.tscn")
+
export var target_time_any = 0
export var target_time_100 = 0
export (AudioStream) var music
+export (Array, PackedScene) var lore_entries = []
#Bonuses
var time_bonus = true
var life_bonus = true
var collectible_bonus = false
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ if Debug.entry == false and Game.can_pause and not get_tree().paused:
+ var pause = PauseScreen.instance()
+ pause.lore_entries = lore_entries
+ get_parent().call_deferred("add_child", pause)
+
func _ready():
- Game.play_sound(music,Game.ac_music)
+ get_tree().paused = true
+ Game.can_pause = false
+ Fade.fade_in(Options.transition_speed_secs)
+ Fade.connect("fade_finished", get_tree(), "set_pause", [false], CONNECT_ONESHOT)
+ Fade.connect("fade_finished", Game, "set", ["can_pause", true], CONNECT_ONESHOT)
+ Audio.play_music(music)
+ Game.time = 0.0
+ Game.still_playing = true
+ if Debug.reset_is_cheating: Debug.is_cheating = false
func _physics_process(delta):
- if Game.golds == 50 && Game.shards == 5:
+ if Game.still_playing:
+ Game.time += delta
+ if Debug.entry == false && Game.can_pause:
+ #Pause
+ if Input.is_action_just_pressed("pause") && !get_tree().paused:
+ var pause = PauseScreen.instance()
+ pause.lore_entries = lore_entries
+ get_parent().add_child(pause)
+ # restart level
+ if Input.is_action_just_pressed("restart") and not Game.marathon_mode:
+ Game.call_deferred("restart_level")
+
+ if Game.keys == 50 && Game.shards == 5:
#Time bonus
collectible_bonus = true
#Time bonus
@@ -25,3 +57,4 @@ func _physics_process(delta):
time_bonus = true
else:
time_bonus = false
+
diff --git a/maps/map01.tscn b/maps/map01.tscn
deleted file mode 100644
index 8bf9b9c..0000000
--- a/maps/map01.tscn
+++ /dev/null
@@ -1,469 +0,0 @@
-[gd_scene load_steps=22 format=2]
-
-[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1]
-[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=2]
-[ext_resource path="res://graphics/backgrounds/blue_sky.png" type="Texture" id=3]
-[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=4]
-[ext_resource path="res://objects/collectibles/gold.tscn" type="PackedScene" id=5]
-[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=6]
-[ext_resource path="res://tilesets/t_grass.tres" type="TileSet" id=7]
-[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=8]
-[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=9]
-[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=10]
-[ext_resource path="res://objects/enemy/slime.tscn" type="PackedScene" id=11]
-[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=12]
-[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=13]
-[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=14]
-[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=15]
-[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=16]
-[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=17]
-[ext_resource path="res://maps/map.gd" type="Script" id=18]
-[ext_resource path="res://audio/music/rumble_loop.mp3" type="AudioStream" id=19]
-[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=20]
-
-[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2( 8, 128 )
-
-[node name="Map" type="Node2D" groups=["map"]]
-pause_mode = 1
-script = ExtResource( 18 )
-target_time_any = 70
-target_time_100 = 180
-music = ExtResource( 19 )
-
-[node name="Camera2D" parent="." instance=ExtResource( 8 )]
-
-[node name="Background" type="Sprite" parent="Camera2D"]
-z_index = -2
-texture = ExtResource( 3 )
-centered = false
-__meta__ = {
-"_edit_lock_": true
-}
-
-[node name="BackgroundTiles" type="TileMap" parent="."]
-tile_set = ExtResource( 7 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 720943, 0, 0, 720944, 0, 0, 720945, 0, 0, 720946, 0, 0, 720947, 0, 0, 720948, 0, 0, 720949, 0, 0, 720950, 0, 0, 720951, 0, 0, 720952, 0, 0, 720953, 0, 0, 720954, 0, 0, 720955, 0, 0, 720956, 0, 0, 720957, 0, 0, 720958, 0, 0, 720959, 0, 0, 720960, 0, 0, 720961, 0, 0, 720962, 0, 0, 720963, 0, 0, 720964, 0, 0, 720965, 0, 0, 720966, 0, 0, 720967, 0, 0, 720968, 0, 0, 786503, 0, 3, 786504, 0, 3, 852039, 0, 3, 852040, 0, 3, 917572, 0, 3, 917573, 0, 3, 917574, 0, 3, 917575, 0, 3, 917576, 0, 3, 983108, 0, 3, 983111, 0, 3, 983112, 0, 3, 1048641, 0, 3, 1048642, 0, 3, 1048643, 0, 3, 1048647, 0, 3, 1048648, 0, 3, 1114164, 0, 3, 1114165, 0, 0, 1179692, 0, 3, 1310771, 0, 3 )
-
-[node name="Ground" type="TileMap" parent="."]
-tile_set = ExtResource( 7 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 196660, 2, 2, 196661, 2, 2, 196668, 0, 0, 196669, 0, 0, 196670, 0, 0, 196671, 0, 0, 196672, 0, 0, 196673, 0, 131073, 196675, 2, 3, 262194, 0, 65536, 262195, 0, 65537, 262196, 0, 65537, 262197, 0, 65537, 262198, 0, 65537, 262199, 0, 65538, 262204, 0, 3, 262205, 0, 3, 262206, 0, 3, 262207, 0, 3, 262208, 0, 1, 262209, 0, 131074, 262210, 0, 0, 262211, 0, 0, 262212, 0, 131073, 327683, 0, 65536, 327684, 0, 65537, 327685, 0, 65537, 327686, 0, 65537, 327687, 0, 65537, 327688, 0, 65537, 327689, 0, 65537, 327690, 0, 65537, 327691, 0, 65538, 327696, 2, 2, 327702, 2, 3, 327703, 2, 3, 327715, 2, 2, 327719, 2, 1, 327740, 0, 3, 327741, 0, 3, 327742, 0, 3, 327743, 0, 3, 327744, 0, 3, 327745, 0, 3, 327746, 0, 3, 327747, 0, 3, 327748, 0, 131074, 327749, 0, 131073, 327755, 2, 2, 327763, 2, 1, 327765, 2, 0, 327769, 2, 1, 327771, 2, 0, 393231, 0, 65536, 393232, 0, 65537, 393233, 0, 65538, 393236, 0, 65536, 393237, 0, 65537, 393238, 0, 65537, 393239, 0, 65537, 393240, 0, 65537, 393241, 0, 65538, 393244, 0, 65537, 393245, 0, 65537, 393246, 0, 65537, 393247, 0, 65537, 393248, 0, 65537, 393249, 0, 65537, 393250, 0, 65537, 393251, 0, 65537, 393252, 0, 65537, 393253, 0, 65537, 393254, 0, 65537, 393255, 0, 65537, 393256, 0, 65537, 393257, 0, 65537, 393258, 0, 65537, 393259, 0, 65538, 393276, 0, 3, 393277, 0, 3, 393278, 0, 3, 393279, 0, 3, 393280, 0, 3, 393281, 0, 3, 393282, 0, 3, 393283, 0, 3, 393284, 0, 3, 393285, 0, 3, 393290, 0, 65536, 393291, 0, 65537, 393292, 0, 65538, 393298, 0, 65537, 393299, 0, 65537, 393300, 0, 65537, 393301, 0, 65537, 393302, 0, 65537, 393303, 0, 65537, 393304, 0, 65537, 393305, 0, 65537, 393306, 0, 65537, 393307, 0, 65537, 393308, 0, 65537, 393309, 0, 65537, 393310, 0, 65537, 393311, 0, 65537, 458812, 0, 3, 458813, 0, 3, 458814, 0, 3, 458815, 0, 3, 458816, 0, 3, 458817, 0, 3, 458818, 0, 3, 458819, 0, 3, 458820, 0, 3, 458821, 0, 3, 524348, 0, 3, 524349, 0, 3, 524350, 0, 3, 524351, 0, 3, 524352, 0, 3, 524353, 0, 3, 524354, 0, 3, 524355, 0, 3, 524356, 0, 3, 524357, 0, 3, 589844, 0, 65536, 589845, 0, 65537, 589846, 0, 65537, 589847, 0, 65537, 589848, 0, 65537, 589849, 0, 65538, 589854, 0, 65536, 589855, 0, 65537, 589856, 0, 65537, 589857, 0, 65537, 589858, 0, 65537, 589884, 0, 3, 589885, 0, 3, 589886, 0, 3, 589887, 0, 3, 589888, 0, 3, 589889, 0, 3, 589890, 0, 3, 589891, 0, 3, 589892, 0, 3, 589893, 0, 3, 655368, 0, 65536, 655369, 0, 65537, 655370, 0, 65537, 655371, 0, 65537, 655372, 0, 65537, 655373, 0, 65538, 655407, 2, 1, 655410, 2, 3, 655413, 2, 2, 655416, 2, 0, 655420, 0, 3, 655421, 0, 3, 655422, 0, 3, 655423, 0, 3, 655424, 0, 3, 655425, 0, 3, 655426, 0, 3, 655427, 0, 3, 655428, 0, 3, 655429, 0, 3, 655431, 2, 2, 720906, 0, 196611, 720942, 0, 131072, 720943, 0, 0, 720944, 0, 0, 720945, 0, 0, 720946, 0, 0, 720947, 0, 0, 720948, 0, 0, 720949, 0, 0, 720950, 0, 0, 720951, 0, 0, 720952, 0, 0, 720953, 0, 0, 720954, 0, 0, 720955, 0, 0, 720956, 0, 0, 720957, 0, 0, 720958, 0, 0, 720959, 0, 0, 720960, 0, 0, 720961, 0, 0, 720962, 0, 0, 720963, 0, 0, 720964, 0, 0, 720965, 0, 0, 720966, 0, 0, 720967, 0, 0, 720968, 0, 0, 720979, 2, 3, 720980, 2, 3, 720990, 2, 0, 786442, 0, 196610, 786477, 0, 131072, 786478, 0, 131075, 786479, 0, 3, 786480, 0, 3, 786481, 0, 3, 786482, 0, 3, 786483, 0, 3, 786484, 0, 3, 786485, 0, 3, 786486, 0, 3, 786487, 0, 3, 786488, 0, 3, 786489, 0, 3, 786490, 0, 3, 786491, 0, 3, 786492, 0, 3, 786493, 0, 3, 786494, 0, 3, 786495, 0, 3, 786496, 0, 3, 786497, 0, 3, 786498, 0, 3, 786499, 0, 3, 786500, 0, 3, 786501, 0, 3, 786502, 0, 3, 786513, 0, 65537, 786514, 0, 65537, 786515, 0, 65537, 786516, 0, 65537, 786517, 0, 65537, 786518, 0, 65537, 786524, 0, 65537, 786525, 0, 65537, 786526, 0, 65537, 786527, 0, 65537, 851968, 0, 65537, 851969, 0, 65537, 851970, 0, 65537, 851971, 0, 65537, 851972, 0, 65537, 851973, 0, 65538, 851978, 0, 65539, 851989, 2, 2, 852006, 2, 1, 852008, 2, 1, 852010, 2, 1, 852012, 0, 131072, 852013, 0, 131075, 852014, 0, 3, 852015, 0, 3, 852016, 0, 3, 852017, 0, 3, 852018, 0, 3, 852019, 0, 3, 852020, 0, 3, 852021, 0, 3, 852022, 0, 3, 852023, 0, 3, 852024, 0, 3, 852025, 0, 3, 852026, 0, 3, 852027, 0, 3, 852028, 0, 3, 852029, 0, 3, 852030, 0, 3, 852031, 0, 3, 852032, 0, 3, 852033, 0, 3, 852034, 0, 3, 852035, 0, 3, 852036, 0, 3, 852037, 0, 3, 852038, 0, 3, 917514, 0, 65537, 917515, 0, 65537, 917516, 0, 65537, 917517, 0, 65537, 917518, 0, 65537, 917519, 0, 65537, 917520, 0, 65537, 917521, 0, 65538, 917525, 0, 65536, 917526, 0, 65537, 917527, 0, 65537, 917528, 0, 65537, 917529, 0, 65537, 917530, 0, 65537, 917531, 0, 65537, 917532, 0, 65537, 917533, 0, 65537, 917534, 0, 65537, 917535, 0, 65537, 917536, 0, 65537, 917537, 0, 65537, 917538, 0, 65538, 917541, 0, 65536, 917542, 0, 65537, 917543, 0, 65537, 917544, 0, 65537, 917545, 0, 65537, 917546, 0, 65537, 917547, 0, 65537, 917548, 0, 131075, 917549, 0, 3, 917550, 0, 3, 917551, 0, 3, 917552, 0, 3, 917553, 0, 3, 917554, 0, 3, 917555, 0, 3, 917556, 0, 3, 917557, 0, 3, 917558, 0, 3, 917559, 0, 3, 917560, 0, 3, 917561, 0, 3, 917562, 0, 3, 917563, 0, 3, 917564, 0, 3, 917565, 0, 3, 917566, 0, 3, 917567, 0, 3, 917568, 0, 3, 917569, 0, 3, 917570, 0, 3, 917571, 0, 3, 917573, 0, 131072, 917574, 0, 131073, 983084, 0, 3, 983085, 0, 3, 983086, 0, 3, 983087, 0, 3, 983088, 0, 3, 983089, 0, 3, 983090, 0, 3, 983091, 0, 3, 983092, 0, 3, 983093, 0, 3, 983094, 0, 3, 983095, 0, 3, 983096, 0, 3, 983097, 0, 3, 983098, 0, 3, 983099, 0, 3, 983100, 0, 3, 983101, 0, 3, 983102, 0, 3, 983103, 0, 3, 983104, 0, 3, 983105, 0, 3, 983106, 0, 3, 983107, 0, 3, 983108, 0, 131072, 983109, 0, 131075, 983110, 536870912, 2, 1048598, 2, 0, 1048600, 2, 1, 1048603, 2, 3, 1048606, 2, 2, 1048620, 0, 3, 1048621, 0, 3, 1048622, 0, 3, 1048623, 0, 3, 1048624, 0, 3, 1048625, 0, 3, 1048626, 0, 3, 1048627, 0, 3, 1048628, 0, 3, 1048629, 0, 3, 1048630, 0, 3, 1048631, 0, 3, 1048632, 0, 3, 1048633, 0, 3, 1048634, 0, 3, 1048635, 0, 3, 1048636, 0, 3, 1048637, 0, 3, 1048638, 0, 3, 1048639, 0, 3, 1048640, 0, 3, 1048641, 0, 3, 1048642, 0, 3, 1048643, 0, 131072, 1048644, 0, 131075, 1048645, 0, 1, 1048646, 536870912, 2, 1048657, 2, 2, 1048658, 2, 2, 1048660, 2, 2, 1048661, 2, 2, 1048669, 2, 2, 1114133, 0, 65536, 1114134, 0, 65537, 1114135, 0, 65537, 1114136, 0, 65537, 1114137, 0, 65537, 1114138, 0, 65537, 1114139, 0, 65537, 1114140, 0, 65537, 1114141, 0, 65537, 1114142, 0, 65537, 1114143, 0, 65537, 1114144, 0, 65537, 1114145, 0, 65537, 1114146, 0, 65538, 1114154, 2, 2, 1114156, 0, 3, 1114157, 0, 3, 1114158, 0, 3, 1114159, 0, 3, 1114160, 0, 3, 1114161, 0, 3, 1114162, 0, 3, 1114163, 0, 3, 1114165, 0, 65536, 1114166, 0, 0, 1114167, 0, 0, 1114168, 0, 0, 1114169, 0, 0, 1114170, 0, 0, 1114171, 0, 0, 1114172, 0, 0, 1114173, 0, 0, 1114174, 0, 0, 1114175, 0, 0, 1114176, 536870912, 0, 1114177, 536870912, 0, 1114178, 536870912, 0, 1114179, 0, 131075, 1114180, 0, 1, 1114181, 0, 1, 1114182, 0, 131074, 1114183, 0, 0, 1114184, 536870912, 0, 1114193, 0, 65537, 1114194, 0, 65537, 1114195, 0, 65537, 1114196, 0, 65537, 1114197, 0, 65537, 1114204, 0, 65537, 1114205, 0, 65537, 1114206, 0, 65537, 1114207, 0, 65537, 1179649, 0, 65536, 1179650, 0, 65537, 1179651, 0, 65538, 1179654, 0, 65536, 1179655, 0, 65537, 1179656, 0, 65537, 1179657, 0, 65537, 1179658, 0, 65537, 1179659, 0, 65537, 1179660, 0, 65537, 1179661, 0, 65537, 1179662, 0, 65538, 1179688, 0, 131072, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 131073, 1179693, 0, 3, 1179694, 0, 3, 1179695, 0, 3, 1179696, 0, 3, 1179697, 0, 3, 1179698, 0, 3, 1179699, 0, 3, 1179700, 0, 3, 1179701, 0, 3, 1179702, 0, 3, 1179703, 0, 3, 1179704, 0, 3, 1179705, 0, 3, 1179706, 0, 3, 1179707, 0, 3, 1179708, 0, 3, 1179709, 0, 3, 1179710, 0, 3, 1179711, 536870912, 1, 1179712, 0, 1, 1179713, 536870912, 3, 1179714, 536870912, 3, 1179715, 536870912, 3, 1179716, 536870912, 3, 1179717, 536870912, 3, 1179718, 536870912, 3, 1179719, 536870912, 3, 1179720, 536870912, 3, 1245202, 2, 2, 1245224, 0, 2, 1245225, 0, 1, 1245226, 0, 1, 1245227, 0, 1, 1245228, 536870912, 2, 1245229, 0, 3, 1245230, 0, 3, 1245231, 0, 3, 1245232, 0, 3, 1245233, 0, 3, 1245234, 0, 3, 1245235, 0, 3, 1245236, 0, 3, 1245237, 0, 3, 1245238, 0, 3, 1245239, 0, 3, 1245240, 0, 3, 1245241, 0, 3, 1245242, 0, 3, 1245243, 0, 3, 1245244, 0, 3, 1245245, 0, 3, 1245246, 0, 3, 1245247, 536870912, 1, 1245248, 0, 1, 1245249, 536870912, 3, 1245250, 536870912, 3, 1245251, 536870912, 3, 1245252, 536870912, 3, 1245253, 536870912, 3, 1245254, 536870912, 3, 1245255, 536870912, 3, 1245256, 536870912, 3, 1310736, 0, 131072, 1310737, 536870912, 0, 1310738, 536870912, 0, 1310739, 536870912, 0, 1310740, 0, 131073, 1310760, 0, 2, 1310761, 0, 1, 1310762, 0, 1, 1310763, 0, 1, 1310764, 536870912, 2, 1310765, 0, 3, 1310766, 0, 3, 1310767, 0, 3, 1310768, 0, 3, 1310769, 0, 3, 1310770, 0, 3, 1310772, 0, 3, 1310773, 0, 3, 1310774, 0, 3, 1310775, 0, 3, 1310776, 0, 3, 1310777, 0, 3, 1310778, 0, 3, 1310779, 0, 3, 1310780, 0, 3, 1310781, 0, 3, 1310782, 0, 3, 1310783, 536870912, 1, 1310784, 0, 1, 1310785, 536870912, 3, 1310786, 536870912, 3, 1310787, 536870912, 3, 1310788, 536870912, 3, 1310789, 536870912, 3, 1310790, 536870912, 3, 1310791, 536870912, 3, 1310792, 536870912, 3, 1376257, 2, 0, 1376261, 2, 1, 1376263, 2, 2, 1376266, 2, 2, 1376269, 2, 3, 1376271, 0, 131072, 1376272, 0, 131075, 1376273, 536870912, 1, 1376274, 536870912, 1, 1376275, 536870912, 1, 1376276, 0, 131074, 1376277, 0, 131073, 1376279, 2, 3, 1376281, 2, 1, 1376283, 2, 3, 1376285, 2, 0, 1376296, 0, 2, 1376297, 0, 1, 1376298, 0, 1, 1376299, 0, 1, 1376300, 536870912, 2, 1376301, 0, 3, 1376302, 0, 3, 1376303, 0, 3, 1376304, 0, 3, 1376305, 0, 3, 1376306, 0, 3, 1376307, 0, 3, 1376308, 0, 3, 1376309, 0, 3, 1376310, 0, 3, 1376311, 0, 3, 1376312, 0, 3, 1376313, 0, 3, 1376314, 0, 3, 1376315, 0, 3, 1376316, 0, 3, 1376317, 0, 3, 1376318, 0, 3, 1376319, 536870912, 1, 1376320, 0, 1, 1376321, 536870912, 3, 1376322, 536870912, 3, 1376323, 536870912, 3, 1376324, 536870912, 3, 1376325, 536870912, 3, 1376326, 536870912, 3, 1376327, 536870912, 3, 1376328, 536870912, 3, 1376331, 2, 2, 1376333, 2, 0, 1376336, 2, 3, 1376338, 2, 2, 1376340, 2, 1, 1376342, 2, 0, 1376344, 2, 2, 1376346, 2, 3, 1376349, 2, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 131075, 1441808, 0, 1, 1441809, 0, 1, 1441810, 0, 1, 1441811, 0, 1, 1441812, 0, 1, 1441813, 0, 131074, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 131075, 1441833, 0, 1, 1441834, 0, 1, 1441835, 0, 1, 1441836, 0, 131074, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1441878, 0, 0, 1441879, 0, 0, 1441880, 0, 0, 1441881, 0, 0, 1441882, 0, 0, 1441883, 0, 0, 1441884, 0, 0, 1441885, 0, 0, 1441886, 0, 0, 1441887, 0, 0, 1507328, 0, 1, 1507329, 0, 1, 1507330, 0, 1, 1507331, 0, 1, 1507332, 0, 1, 1507333, 0, 1, 1507334, 0, 1, 1507335, 0, 1, 1507336, 0, 1, 1507337, 0, 1, 1507338, 0, 1, 1507339, 0, 1, 1507340, 0, 1, 1507341, 0, 1, 1507342, 0, 1, 1507343, 0, 1, 1507344, 0, 1, 1507345, 0, 1, 1507346, 0, 1, 1507347, 0, 1, 1507348, 0, 1, 1507349, 0, 1, 1507350, 0, 1, 1507351, 0, 1, 1507352, 0, 1, 1507353, 0, 1, 1507354, 0, 1, 1507355, 0, 1, 1507356, 0, 1, 1507357, 0, 1, 1507358, 0, 1, 1507359, 0, 1, 1507360, 0, 1, 1507361, 0, 1, 1507362, 0, 1, 1507363, 0, 1, 1507364, 0, 1, 1507365, 0, 1, 1507366, 0, 1, 1507367, 0, 1, 1507368, 0, 1, 1507369, 0, 1, 1507370, 0, 1, 1507371, 0, 1, 1507372, 0, 1, 1507373, 0, 1, 1507374, 0, 1, 1507375, 0, 1, 1507376, 0, 1, 1507377, 0, 1, 1507378, 0, 1, 1507379, 0, 1, 1507380, 0, 1, 1507381, 0, 1, 1507382, 0, 1, 1507383, 0, 1, 1507384, 0, 1, 1507385, 0, 1, 1507386, 0, 1, 1507387, 0, 1, 1507388, 0, 1, 1507389, 0, 1, 1507390, 0, 1, 1507391, 0, 1, 1507392, 0, 1, 1507393, 0, 1, 1507394, 0, 1, 1507395, 0, 1, 1507396, 0, 1, 1507397, 0, 1, 1507398, 0, 1, 1507399, 0, 1, 1507400, 0, 1, 1507401, 0, 1, 1507402, 0, 1, 1507403, 0, 1, 1507404, 0, 1, 1507405, 0, 1, 1507406, 0, 1, 1507407, 0, 1, 1507408, 0, 1, 1507409, 0, 1, 1507410, 0, 1, 1507411, 0, 1, 1507412, 0, 1, 1507413, 0, 1, 1507414, 0, 1, 1507415, 0, 1, 1507416, 0, 1, 1507417, 0, 1, 1507418, 0, 1, 1507419, 0, 1, 1507420, 0, 1, 1507421, 0, 1, 1507422, 0, 1, 1507423, 0, 1 )
-
-[node name="Player" parent="." instance=ExtResource( 1 )]
-position = Vector2( 32, 166 )
-
-[node name="Death" type="TileMap" parent="."]
-tile_set = ExtResource( 10 )
-cell_size = Vector2( 8, 8 )
-format = 1
-
-[node name="Ladder" type="TileMap" parent="."]
-tile_set = ExtResource( 7 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 196666, 1, 0, 262202, 1, 0, 262215, 1, 0, 327707, 1, 0, 327738, 1, 0, 327751, 1, 0, 393243, 1, 0, 393260, 1, 0, 458779, 1, 0, 458796, 1, 0, 458832, 1, 0, 524315, 1, 0, 524332, 1, 0, 524368, 1, 0, 589851, 1, 0, 589904, 1, 0, 655363, 1, 0, 655387, 1, 0, 720899, 1, 0, 720923, 1, 0, 786435, 1, 0, 786459, 1, 0, 851995, 1, 0, 917511, 1, 0, 917579, 1, 0, 917583, 1, 0, 983047, 1, 0, 983115, 1, 0, 983119, 1, 0, 1048583, 1, 0, 1048651, 1, 0, 1048655, 1, 0, 1114119, 1, 0, 1114187, 1, 0, 1179723, 1, 0 )
-
-[node name="StaticBody2D" type="StaticBody2D" parent="."]
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
-position = Vector2( -8, 104 )
-shape = SubResource( 1 )
-
-[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
-position = Vector2( 776, 112 )
-shape = SubResource( 1 )
-
-[node name="Platforms" type="Node2D" parent="."]
-
-[node name="Ladder" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 56, 112 )
-scale = Vector2( 1, 4 )
-
-[node name="Ladder3" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 24, 80 )
-scale = Vector2( 1, 3 )
-
-[node name="Ladder2" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 216, 40 )
-scale = Vector2( 1, 9 )
-
-[node name="Ladder4" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 352, 48 )
-scale = Vector2( 1, 3 )
-
-[node name="Ladder5" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 464, 24 )
-scale = Vector2( 1, 3 )
-
-[node name="Ladder6" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 600, 112 )
-scale = Vector2( 1, 5 )
-
-[node name="Ladder7" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 632, 112 )
-scale = Vector2( 1, 3 )
-
-[node name="Ladder8" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 640, 56 )
-scale = Vector2( 1, 3 )
-
-[node name="Ladder10" parent="Platforms" instance=ExtResource( 2 )]
-position = Vector2( 568, 32 )
-scale = Vector2( 1, 2 )
-
-[node name="Barrier" parent="Platforms" instance=ExtResource( 15 )]
-position = Vector2( 107, 86 )
-scale = Vector2( 1, 26 )
-cost = 20
-label_offset = Vector2( 0, 4 )
-
-[node name="Barrier2" parent="Platforms" instance=ExtResource( 15 )]
-position = Vector2( 736, 54 )
-scale = Vector2( 1, 41.92 )
-cost = 30
-label_offset = Vector2( 0, 4 )
-
-[node name="Barrier3" parent="Platforms" instance=ExtResource( 15 )]
-position = Vector2( 424, 144 )
-scale = Vector2( 1, 32 )
-cost = 40
-label_offset = Vector2( 0, 4 )
-
-[node name="Turniwood" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 368, 144 )
-time = 70.0
-
-[node name="Turniwood2" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 304, 160 )
-time = 80.0
-
-[node name="Turniwood8" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 288, 144 )
-time = 80.0
-
-[node name="Turniwood3" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 400, 144 )
-time = 70.0
-
-[node name="Turniwood4" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 408, 160 )
-time = 120.0
-
-[node name="Turniwood5" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 704, 120 )
-
-[node name="Turniwood6" parent="Platforms" instance=ExtResource( 16 )]
-position = Vector2( 720, 104 )
-
-[node name="Exit" parent="Platforms" instance=ExtResource( 20 )]
-position = Vector2( 744, 36 )
-cost = 2
-
-[node name="Collectibles" type="Node2D" parent="."]
-
-[node name="Shard" parent="Collectibles" instance=ExtResource( 12 )]
-position = Vector2( 32, 32 )
-
-[node name="Shard3" parent="Collectibles" instance=ExtResource( 12 )]
-position = Vector2( 464, 168 )
-number = 3
-
-[node name="Shard4" parent="Collectibles" instance=ExtResource( 12 )]
-position = Vector2( 488, 16 )
-number = 2
-
-[node name="Shard2" parent="Collectibles" instance=ExtResource( 12 )]
-position = Vector2( 88, 104 )
-number = 1
-
-[node name="Gold" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 48, 32 )
-
-[node name="Gold2" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 64, 32 )
-
-[node name="Gold3" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 80, 32 )
-
-[node name="Gold4" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 168, 40 )
-
-[node name="Gold5" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 192, 40 )
-
-[node name="Gold6" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 136, 152 )
-
-[node name="Gold7" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 152, 152 )
-
-[node name="Gold8" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 104, 136 )
-
-[node name="Gold9" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 88, 136 )
-
-[node name="Gold10" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 72, 136 )
-
-[node name="Gold11" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 136, 104 )
-
-[node name="Gold13" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 728, 168 )
-
-[node name="Gold14" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 184, 104 )
-
-[node name="Gold43" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 208, 128 )
-
-[node name="Gold44" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 232, 128 )
-
-[node name="Gold45" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 264, 128 )
-
-[node name="Gold15" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 96, 72 )
-
-[node name="Gold17" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 72, 72 )
-
-[node name="Gold19" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 8, 96 )
-
-[node name="Star" parent="Collectibles" instance=ExtResource( 4 )]
-position = Vector2( 16, 136 )
-
-[node name="Star2" parent="Collectibles" instance=ExtResource( 4 )]
-position = Vector2( 176, 64 )
-color = 1
-
-[node name="Star3" parent="Collectibles" instance=ExtResource( 4 )]
-position = Vector2( 232, 104 )
-color = 2
-
-[node name="Star4" parent="Collectibles" instance=ExtResource( 4 )]
-position = Vector2( 520, 128 )
-color = 3
-
-[node name="Star5" parent="Collectibles" instance=ExtResource( 4 )]
-position = Vector2( 752, 128 )
-color = 4
-
-[node name="Gold21" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 120, 104 )
-
-[node name="Arrow" parent="Collectibles" instance=ExtResource( 17 )]
-position = Vector2( 264, 64 )
-
-[node name="Arrow3" parent="Collectibles" instance=ExtResource( 17 )]
-position = Vector2( 744, 88 )
-
-[node name="Arrow2" parent="Collectibles" instance=ExtResource( 17 )]
-position = Vector2( 528, 168 )
-
-[node name="Gold18" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 440, 112 )
-
-[node name="Gold20" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 384, 120 )
-
-[node name="Gold27" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 384, 80 )
-
-[node name="Gold28" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 408, 80 )
-
-[node name="Gold29" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 432, 80 )
-
-[node name="Gold22" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 328, 136 )
-
-[node name="Gold24" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 328, 88 )
-
-[node name="Gold26" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 344, 56 )
-
-[node name="Gold30" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 296, 40 )
-
-[node name="Gold31" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 328, 40 )
-
-[node name="Gold35" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 408, 24 )
-
-[node name="Gold36" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 432, 24 )
-
-[node name="Gold34" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 680, 168 )
-
-[node name="Gold32" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 264, 40 )
-
-[node name="Gold46" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 240, 64 )
-
-[node name="Gold33" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 624, 168 )
-
-[node name="Gold25" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 312, 88 )
-
-[node name="Gold23" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 344, 136 )
-
-[node name="Gold16" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 464, 112 )
-
-[node name="Gold40" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 488, 112 )
-
-[node name="Gold38" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 600, 80 )
-
-[node name="Gold41" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 576, 160 )
-
-[node name="Gold42" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 544, 160 )
-
-[node name="Gold39" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 632, 80 )
-
-[node name="Gold47" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 672, 40 )
-
-[node name="Gold48" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 696, 40 )
-
-[node name="Gold51" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 664, 128 )
-
-[node name="Gold52" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 720, 40 )
-
-[node name="Gold49" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 680, 88 )
-
-[node name="Gold50" parent="Collectibles" instance=ExtResource( 5 )]
-position = Vector2( 656, 88 )
-
-[node name="Enemies" type="Node2D" parent="."]
-
-[node name="Slime" parent="Enemies" instance=ExtResource( 11 )]
-position = Vector2( 208, 104 )
-scale = Vector2( -1, 1 )
-
-[node name="Slime4" parent="Enemies" instance=ExtResource( 11 )]
-position = Vector2( 520, 16 )
-
-[node name="Bat" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 152, 48 )
-left_up_boundry = 4.0
-right_down_boundry = 2.0
-
-[node name="Bat3" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 288, 88 )
-right_down_boundry = 5.0
-
-[node name="Bat4" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 388, 144 )
-left_up_boundry = 3.0
-right_down_boundry = 3.5
-speed = 60
-
-[node name="Bat5" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 392, 48 )
-right_down_boundry = 4.0
-
-[node name="Bat6" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 432, 88 )
-left_up_boundry = 4.0
-
-[node name="Bat7" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 620, 112 )
-left_up_boundry = 2.0
-right_down_boundry = 2.0
-
-[node name="Bat8" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 632, 48 )
-left_up_boundry = 2.0
-right_down_boundry = 2.0
-
-[node name="Bat9" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 584, 40 )
-left_up_boundry = 2.0
-right_down_boundry = 2.0
-
-[node name="Bat2" parent="Enemies" instance=ExtResource( 13 )]
-position = Vector2( 48, 104 )
-left_up_boundry = 4.0
-right_down_boundry = 2.0
-
-[node name="Slime2" parent="Enemies" instance=ExtResource( 11 )]
-position = Vector2( 192, 64 )
-
-[node name="Snake" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 88, 72 )
-left_up_boundry = 2.0
-right_down_boundry = 2.0
-speed = 35
-
-[node name="Snake3" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 440, 128 )
-right_down_boundry = 5.0
-speed = 70
-
-[node name="Snake4" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 440, 168 )
-right_down_boundry = 6.0
-speed = 80
-
-[node name="Snake5" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 568, 168 )
-right_down_boundry = 6.0
-speed = 60
-
-[node name="Snake2" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 216, 168 )
-left_up_boundry = 3.0
-right_down_boundry = 3.0
-speed = 60
-
-[node name="Snake6" parent="Enemies" instance=ExtResource( 14 )]
-position = Vector2( 224, 128 )
-left_up_boundry = 5.0
-speed = 60
-
-[node name="ColorRect2" type="ColorRect" parent="."]
-margin_left = 512.0
-margin_right = 768.0
-margin_bottom = 192.0
-color = Color( 1, 0.843137, 0, 0.0901961 )
-script = ExtResource( 9 )
-__meta__ = {
-"_edit_lock_": true
-}
-
-[node name="ColorRect3" type="ColorRect" parent="."]
-visible = false
-margin_right = 256.0
-margin_bottom = 8.0
-color = Color( 0, 0, 0, 1 )
-
-[node name="HUD" parent="." instance=ExtResource( 6 )]
-
-[node name="TileMap" type="TileMap" parent="."]
-tile_set = ExtResource( 7 )
-cell_size = Vector2( 8, 8 )
-format = 1
diff --git a/maps/mountain.tscn b/maps/mountain.tscn
new file mode 100644
index 0000000..9285a2e
--- /dev/null
+++ b/maps/mountain.tscn
@@ -0,0 +1,682 @@
+[gd_scene load_steps=44 format=2]
+
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=1]
+[ext_resource path="res://maps/map.gd" type="Script" id=2]
+[ext_resource path="res://graphics/backgrounds/mountain_mountain.png" type="Texture" id=3]
+[ext_resource path="res://graphics/backgrounds/mountain_clouds.png" type="Texture" id=4]
+[ext_resource path="res://graphics/backgrounds/mountain_sunset.png" type="Texture" id=5]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=6]
+[ext_resource path="res://tilesets/t_mountain.tres" type="TileSet" id=7]
+[ext_resource path="res://objects/enemy/rolling_fiend.tscn" type="PackedScene" id=8]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=9]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=10]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=11]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/enemy/bat.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=16]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=20]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=21]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=22]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=23]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/respawn_point.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=26]
+[ext_resource path="res://audio/music/burnt_out.ogg" type="AudioStream" id=27]
+[ext_resource path="res://objects/lore/hills/eviscerator.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/lore/hills/catbat.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/mountain/echo_mountain.tscn" type="PackedScene" id=30]
+[ext_resource path="res://objects/lore/mountain/rolling_fiend.tscn" type="PackedScene" id=31]
+[ext_resource path="res://graphics/turniwood/turning_platform_wood_dark.png" type="Texture" id=32]
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 24, 20 )
+
+[sub_resource type="RectangleShape2D" id=9]
+extents = Vector2( 32, 8 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 36, 4 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 28, 4 )
+
+[sub_resource type="RectangleShape2D" id=4]
+extents = Vector2( 32, 4 )
+
+[sub_resource type="RectangleShape2D" id=12]
+extents = Vector2( 32, 4 )
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 48, 64 )
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 16, 8 )
+
+[sub_resource type="RectangleShape2D" id=11]
+extents = Vector2( 24, 4 )
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 294 )
+
+[sub_resource type="Animation" id=10]
+resource_name = "liftoff"
+length = 3.0
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Background/BackgroundMountain/Mountain:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.0530503, 0.10305, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.8, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 128, 96 ), Vector2( 124, 96 ), Vector2( 132, 96 ), Vector2( 128, 96 ), Vector2( 124, 96 ), Vector2( 132, 96 ), Vector2( 128, 96 ), Vector2( 124, 96 ), Vector2( 132, 96 ), Vector2( 128, 96 ), Vector2( 124, 96 ), Vector2( 132, 96 ), Vector2( 128, 96 ), Vector2( 128, 96 ), Vector2( 128, -999 ) ]
+}
+
+[node name="Map2" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 2 )
+target_time_any = 45
+target_time_100 = 185
+music = ExtResource( 27 )
+lore_entries = [ ExtResource( 30 ), ExtResource( 28 ), ExtResource( 29 ), ExtResource( 31 ) ]
+
+[node name="Background" type="Node" parent="."]
+
+[node name="Background" type="CanvasLayer" parent="Background"]
+layer = -101
+
+[node name="Sunset" type="Sprite" parent="Background/Background"]
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 5 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="BackgroundMountain" type="CanvasLayer" parent="Background"]
+layer = -100
+follow_viewport_enable = true
+follow_viewport_scale = 0.25
+
+[node name="Mountain" type="Sprite" parent="Background/BackgroundMountain"]
+position = Vector2( 128, 96 )
+scale = Vector2( 4, 4 )
+z_index = -2
+texture = ExtResource( 3 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Background2" type="CanvasLayer" parent="Background"]
+layer = -100
+
+[node name="Clouds" type="Sprite" parent="Background/Background2"]
+pause_mode = 1
+position = Vector2( 128, 96 )
+z_index = -2
+texture = ExtResource( 4 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 11 )
+tile_set = ExtResource( 7 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( -2818047, 0, 65536, -2818046, 0, 65537, -2818045, 0, 65537, -2818044, 0, 65537, -2818043, 0, 65538, -2818033, 0, 65536, -2818032, 0, 65537, -2818031, 0, 65537, -2818030, 0, 65537, -2818029, 0, 65538, -2818022, 0, 0, -2818021, 0, 196609, -2818020, 0, 196609, -2818019, 0, 196609, -2818018, 0, 196609, -2818017, 0, 196609, -2752486, 0, 1, -2686950, 0, 1, -2621440, 0, 0, -2621439, 0, 65537, -2621438, 0, 65537, -2621437, 0, 65537, -2621436, 0, 65537, -2621435, 0, 65537, -2621434, 0, 65537, -2621433, 0, 65537, -2621432, 0, 65537, -2621431, 0, 65537, -2621430, 0, 65537, -2621429, 0, 65537, -2621428, 0, 65537, -2621427, 0, 65537, -2621426, 0, 65537, -2621425, 0, 65537, -2621424, 0, 65538, -2621414, 0, 1, -2621413, 0, 0, -2621412, 0, 0, -2621411, 0, 0, -2555904, 0, 1, -2555878, 0, 1, -2490368, 0, 1, -2490342, 0, 1, -2424832, 0, 1, -2424806, 0, 1, -2359296, 0, 1, -2359270, 0, 1, -2293760, 0, 0, -2293759, 0, 0, -2293758, 0, 0, -2293757, 0, 0, -2293756, 0, 0, -2293755, 0, 0, -2293744, 0, 65536, -2293743, 0, 65537, -2293742, 0, 65538, -2293734, 0, 0, -2293733, 0, 0, -2293732, 0, 0, -2097152, 0, 0, -2097151, 0, 0, -2097150, 0, 0, -2097149, 0, 0, -2097148, 0, 0, -2097147, 0, 0, -2097146, 0, 0, -2097145, 0, 0, -2097144, 0, 0, -2097143, 0, 0, -2097142, 0, 0, -2097141, 0, 0, -2097140, 0, 0, -2097139, 0, 0, -2097138, 0, 0, -2097137, 0, 0, -2097136, 0, 0, -2097135, 0, 0, -2097134, 0, 0, -2031616, 0, 1, -1966080, 0, 1, -1900544, 0, 1, -1900535, 0, 0, -1900534, 0, 0, -1900533, 0, 0, -1900532, 0, 0, -1900531, 0, 0, -1900530, 0, 0, -1900529, 0, 0, -1900528, 0, 0, -1900527, 0, 0, -1900526, 0, 0, -1835008, 0, 1, -1835004, 0, 0, -1835001, 0, 0, -1835000, 0, 0, -1834999, 0, 0, -1769472, 0, 1, -1769463, 0, 0, -1769447, 0, 0, -1769446, 0, 0, -1769445, 0, 0, -1703936, 0, 1, -1703927, 0, 0, -1703909, 0, 1, -1638400, 0, 1, -1638391, 0, 0, -1638390, 0, 0, -1638389, 0, 0, -1638388, 0, 0, -1638387, 0, 0, -1638386, 0, 0, -1638385, 0, 0, -1638384, 0, 0, -1638383, 0, 0, -1638382, 0, 0, -1638381, 0, 0, -1638380, 0, 0, -1638373, 0, 1, -1572864, 0, 1, -1572844, 0, 1, -1572837, 0, 1, -1507328, 0, 1, -1507308, 0, 1, -1507301, 0, 1, -1441792, 0, 1, -1441772, 0, 1, -1441765, 0, 1, -1376256, 0, 1, -1376236, 0, 1, -1376229, 0, 1, -1310720, 0, 1, -1310700, 0, 1, -1310693, 0, 1, -1245184, 0, 1, -1245164, 0, 1, -1245157, 0, 65536, -1245156, 0, 65537, -1245155, 0, 65537, -1245154, 0, 65537, -1245153, 0, 65538, -1179648, 0, 65536, -1179647, 0, 65537, -1179646, 0, 65537, -1179645, 0, 65537, -1179644, 0, 65537, -1179643, 0, 65537, -1179642, 0, 65537, -1179641, 0, 65537, -1179640, 0, 65538, -1179638, 0, 65536, -1179637, 0, 65537, -1179636, 0, 65537, -1179635, 0, 65538, -1179631, 0, 65536, -1179630, 0, 65537, -1179629, 0, 65537, -1179628, 0, 65538, -917480, 0, 65536, -917479, 0, 65537, -917478, 0, 65537, -917477, 0, 65538, -851955, 0, 65536, -851954, 0, 65537, -851953, 0, 65538, -655359, 0, 65536, -655358, 0, 65537, -655357, 0, 65537, -655356, 0, 65537, -655355, 0, 65538, -655340, 0, 65536, -655339, 0, 65537, -655338, 0, 65537, -655337, 0, 65537, -655336, 0, 65537, -655335, 0, 65537, -655334, 0, 65537, -655333, 0, 65538, -458743, 0, 0, -458742, 0, 0, -458741, 0, 0, -458740, 0, 0, -458739, 0, 0, -458738, 0, 0, -458737, 0, 0, -458736, 0, 0, -458735, 0, 0, -458734, 0, 0, -458733, 0, 0, -458732, 0, 0, -458731, 0, 0, -393207, 0, 1, -327671, 0, 1, -262135, 0, 1, -262129, 0, 0, -262128, 0, 0, -262127, 0, 0, -262120, 0, 0, -262119, 0, 0, -262118, 0, 0, -262117, 0, 0, -262116, 0, 0, -262115, 0, 0, -262114, 0, 0, -262113, 0, 0, -196599, 0, 1, -196591, 0, 1, -131068, 0, 0, -131067, 0, 0, -131066, 0, 0, -131065, 0, 0, -131063, 0, 1, -131059, 0, 65536, -131058, 0, 65538, -131055, 0, 1, -131050, 0, 0, -65527, 0, 1, -65526, 0, 0, -65519, 0, 1, -65515, 0, 65536, -65514, 0, 65537, -65513, 0, 65536, -65512, 0, 65537, -65511, 0, 65537, -65510, 0, 65537, -65509, 0, 65537, -65508, 0, 65537, -65507, 0, 65537, -65506, 0, 65537, -65505, 0, 65537, 9, 0, 1, 17, 0, 1, 65545, 0, 1, 65553, 0, 1, 131081, 0, 1, 131089, 0, 1, 196617, 0, 1, 196619, 0, 65536, 196620, 0, 65537, 196621, 0, 65537, 196622, 0, 65537, 196623, 0, 65537, 196624, 0, 65538, 196625, 0, 1, 262153, 0, 1, 262161, 0, 1, 327689, 0, 1, 327697, 0, 1, 327707, 0, 0, 327708, 0, 0, 327709, 0, 0, 327710, 0, 0, 393225, 0, 1, 393233, 0, 0, 458757, 0, 0, 458758, 0, 0, 458759, 0, 0, 458761, 0, 1, 524297, 0, 0, 524298, 0, 0, 524299, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 720910, 0, 0, 720911, 0, 0, 720912, 0, 0, 720913, 0, 0, 720914, 0, 0, 720915, 0, 0, 720920, 0, 196609, 720921, 0, 196609, 720922, 0, 196609, 720923, 0, 196609, 720924, 0, 196609, 720925, 0, 196609, 720926, 0, 196609, 720927, 0, 196609, 851969, 0, 65536, 851970, 0, 65537, 851971, 0, 65537, 851972, 0, 65537, 851973, 0, 65537, 851974, 0, 65537, 851975, 0, 65538, 983041, 0, 196609, 983042, 0, 196609, 983043, 0, 196609, 983044, 0, 196609, 983045, 0, 196609, 983046, 0, 196609, 983047, 0, 196609, 983048, 0, 196609, 983049, 0, 196609, 983050, 0, 196609, 983051, 0, 196609, 983052, 0, 196609, 983053, 0, 196609, 983059, 0, 0, 983060, 0, 0, 983061, 0, 0, 983062, 0, 0, 983063, 0, 0, 983064, 0, 0, 983065, 0, 0, 983066, 0, 0, 983067, 0, 0, 1245186, 0, 196609, 1245187, 0, 196609, 1245188, 0, 196609, 1245189, 0, 196609, 1245190, 0, 196609, 1245191, 0, 196609, 1310743, 0, 65536, 1310744, 0, 65537, 1310745, 0, 65537, 1310746, 0, 65537, 1310747, 0, 65537, 1310748, 0, 65538, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0 )
+
+[node name="Camera2D" parent="." instance=ExtResource( 1 )]
+scroll_h = false
+scroll_v = true
+respawn_h = false
+
+[node name="Player" parent="." instance=ExtResource( 6 )]
+position = Vector2( 24, 176 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 23 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( -2752488, 0, 2, -2686952, 0, 2, -2621416, 0, 2, -2555880, 0, 2, -2555873, 0, 2, -2490344, 0, 2, -2490337, 0, 2, -2424808, 0, 2, -2424801, 0, 2, -2359272, 0, 2, -2359265, 0, 2, -2293736, 0, 2, -2293729, 0, 2, -2228200, 0, 2, -2228193, 0, 2, -2162657, 0, 2, -2097121, 0, 2, -2031585, 0, 2, -1966058, 0, 2, -1966049, 0, 2, -1900522, 0, 2, -1900513, 0, 2, -1834986, 0, 2, -1834977, 0, 2, -1769450, 0, 2, -1769441, 0, 2, -1703935, 0, 2, -1703914, 0, 2, -1703905, 0, 2, -1638399, 0, 2, -1638378, 0, 2, -1638369, 0, 2, -1572863, 0, 2, -1572842, 0, 2, -1572833, 0, 2, -1507327, 0, 2, -1507306, 0, 2, -1507297, 0, 2, -1441791, 0, 2, -1441770, 0, 2, -1441761, 0, 2, -1376255, 0, 2, -1376234, 0, 2, -1376225, 0, 2, -1310698, 0, 2, -1310689, 0, 2, -1245162, 0, 2, -1179626, 0, 2, -1114090, 0, 2, -1048554, 0, 2, -917475, 0, 2, -851939, 0, 2, -786403, 0, 2, -720867, 0, 2, -655331, 0, 2, -589795, 0, 2, -524259, 0, 2, -458723, 0, 2, -393209, 0, 2, -327673, 0, 2, -262137, 0, 2, -196589, 0, 2, -131053, 0, 2, -65517, 0, 2, 19, 0, 2, 65555, 0, 2, 131091, 0, 2, 196627, 0, 2, 262163, 0, 2, 327699, 0, 2, 393235, 0, 2, 458771, 0, 2, 589825, 0, 2, 655361, 0, 2, 720897, 0, 2, 851998, 0, 2, 917534, 0, 2, 983070, 0, 2, 1048606, 0, 2, 1114142, 0, 2, 1179678, 0, 2, 1245214, 0, 2 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+light_mask = 0
+tile_set = ExtResource( 22 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( -2686976, 1, 0, -2686975, 1, 0, -2686974, 1, 0, -2686973, 1, 0, -2686972, 1, 0, -2686971, 1, 0, -2686970, 1, 0, -2686969, 1, 0, -2686968, 1, 0, -2686967, 1, 0, -2686966, 1, 0, -2686965, 1, 0, -2686964, 1, 0, -2686963, 1, 0, -2686962, 1, 0, -2686961, 1, 0, -2686960, 1, 0, -2162688, 1, 0, -2162687, 1, 0, -2162686, 1, 0, -2162685, 1, 0, -2162684, 1, 0, -2162683, 1, 0, -2162682, 1, 0, -2162681, 1, 0, -2162680, 1, 0, -2162679, 1, 0, -2162678, 1, 0, -2162677, 1, 0, -2162676, 1, 0, -2162675, 1, 0, -2162674, 1, 0, -2162673, 1, 0, -2162672, 1, 0, -2162671, 1, 0, -2162670, 1, 0, -524276, 1, 0, -524273, 1, 0, 1441800, 1, 0, 1441801, 1, 0, 1441802, 1, 0, 1441803, 1, 0, 1441804, 1, 0, 1441805, 1, 0, 1441806, 1, 0, 1441807, 1, 0, 1441812, 1, 0, 1441813, 1, 0, 1441814, 1, 0 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="MovingPlatform" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 96, 168 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="MovingPlatform5" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 104, 136 )
+scale = Vector2( 2, 1 )
+right_down_boundary = 5.0
+
+[node name="MovingPlatform8" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 96, -280 )
+scale = Vector2( 2, 1 )
+speed = 30
+right_down_boundary = 2.0
+
+[node name="MovingPlatform9" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 80, -344 )
+scale = Vector2( 2, 1 )
+speed = 40
+left_up_boundary = 3.0
+right_down_boundary = 4.0
+
+[node name="MovingPlatform6" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 80, -280 )
+scale = Vector2( 2, 1 )
+direction = -1
+speed = 30
+left_up_boundary = 2.0
+
+[node name="MovingPlatform2" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 184, 40 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 2.0
+right_down_boundary = 2.0
+
+[node name="MovingPlatform4" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 172, 104 )
+left_up_boundary = 1.0
+right_down_boundary = 2.0
+
+[node name="MovingPlatform3" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 16, 40 )
+scale = Vector2( 2, 1 )
+speed = 40
+left_up_boundary = 8.0
+right_down_boundary = 2.0
+move_direction = 1
+
+[node name="Ladder" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 240, 104 )
+scale = Vector2( 1, 7 )
+
+[node name="Ladder2" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 152, -24 )
+scale = Vector2( 1, 11 )
+
+[node name="Ladder8" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 176, -240 )
+scale = Vector2( 1, 15 )
+
+[node name="Ladder11" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 8, -208 )
+scale = Vector2( 1, 6 )
+can_climb_left = false
+
+[node name="Ladder10" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 192, -336 )
+scale = Vector2( 1, 9 )
+
+[node name="Ladder9" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 248, -312 )
+scale = Vector2( 1, 20 )
+can_climb_right = false
+
+[node name="Ladder7" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 232, -112 )
+scale = Vector2( 1, 8 )
+
+[node name="Ladder5" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 56, -48 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder4" parent="Environment" instance=ExtResource( 12 )]
+position = Vector2( 8, 72 )
+scale = Vector2( 1, 3 )
+
+[node name="TurningPlatform" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 168, 168 )
+texture = ExtResource( 32 )
+
+[node name="TurningPlatform2" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 80, 144 )
+texture = ExtResource( 32 )
+
+[node name="TurningPlatform4" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 168, -280 )
+texture = ExtResource( 32 )
+
+[node name="Rock2" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 112, 56 )
+
+[node name="Rock3" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 80, -152 )
+
+[node name="Rock4" parent="Environment" instance=ExtResource( 19 )]
+position = Vector2( 160, -208 )
+
+[node name="Barrier" parent="Environment" instance=ExtResource( 20 )]
+position = Vector2( 140, -48 )
+scale = Vector2( 1, 16 )
+cost = 30
+
+[node name="Barrier2" parent="Environment" instance=ExtResource( 20 )]
+position = Vector2( 148, -248 )
+scale = Vector2( 1, 16 )
+cost = 40
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="RollingFiend" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 200, 152 )
+
+[node name="RollingFiend2" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 216, 32 )
+
+[node name="RollingFiend8" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 240, 48 )
+
+[node name="RollingFiend4" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 104, -24 )
+
+[node name="RollingFiend7" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 160, -344 )
+move_speed = 70.0
+
+[node name="RollingFiend3" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 32, 96 )
+
+[node name="RollingFiend5" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 80, -139 )
+
+[node name="RollingFiend6" parent="Enemies" instance=ExtResource( 8 )]
+position = Vector2( 104, -152 )
+
+[node name="Bat3" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 124, -152 )
+left_up_boundary = 2.0
+right_down_boundary = 3.0
+
+[node name="Bat6" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 112, -64 )
+left_up_boundary = 4.0
+right_down_boundary = 2.0
+
+[node name="Bat4" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 64, -232 )
+left_up_boundary = 2.0
+right_down_boundary = 4.0
+speed = 60
+
+[node name="Bat7" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 88, -296 )
+left_up_boundary = 1.0
+right_down_boundary = 4.0
+
+[node name="Bat8" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 248, -264 )
+left_up_boundary = 4.0
+right_down_boundary = 6.0
+speed = 50
+
+[node name="Snake" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 216, 82 )
+left_up_boundary = 3.0
+right_down_boundary = 4.0
+
+[node name="Snake2" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 136, 80 )
+left_up_boundary = 2.0
+right_down_boundary = 3.0
+
+[node name="Snake7" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 216, -16 )
+left_up_boundary = 2.0
+right_down_boundary = 5.0
+speed = 80
+
+[node name="Snake3" parent="Enemies" instance=ExtResource( 16 )]
+position = Vector2( 96, 114 )
+left_up_boundary = 10.0
+right_down_boundary = 2.0
+
+[node name="Collectibles" type="Node2D" parent="."]
+position = Vector2( 172, 160 )
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 28, 16 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 60, -128 )
+color = 1
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( -60, -272 )
+color = 4
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( 36, -176 )
+color = 3
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 14 )]
+position = Vector2( -68, -144 )
+color = 2
+
+[node name="Gold" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -124, -64 )
+
+[node name="Gold2" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -156, -64 )
+
+[node name="Gold3" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -44, 8 )
+
+[node name="Gold4" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -20, 8 )
+
+[node name="Gold5" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -116, 8 )
+
+[node name="Gold6" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -132, 8 )
+
+[node name="Gold7" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -92, -24 )
+
+[node name="Gold8" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -108, -48 )
+
+[node name="Gold16" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -76, -48 )
+
+[node name="Gold9" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 36, -48 )
+
+[node name="Gold10" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 20, -8 )
+
+[node name="Gold12" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 28, -80 )
+
+[node name="Gold14" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -28, -80 )
+
+[node name="Gold15" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 12, -48 )
+
+[node name="Gold17" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -124, -184 )
+
+[node name="Gold18" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -124, -112 )
+
+[node name="Gold19" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -140, -184 )
+
+[node name="Gold20" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -164, -248 )
+
+[node name="Gold22" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -132, -248 )
+
+[node name="Gold23" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -92, -224 )
+
+[node name="Gold24" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -36, -224 )
+
+[node name="Gold32" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -124, -312 )
+
+[node name="Gold33" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 52, -448 )
+
+[node name="Gold34" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -140, -312 )
+
+[node name="Gold36" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -92, -400 )
+
+[node name="Gold37" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -68, -400 )
+
+[node name="Gold39" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -68, -368 )
+
+[node name="Gold40" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -52, -368 )
+
+[node name="Gold41" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -36, -368 )
+
+[node name="Gold38" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -44, -400 )
+
+[node name="Gold44" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 36, -384 )
+
+[node name="Gold45" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -36, -448 )
+
+[node name="Gold46" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -28, -512 )
+
+[node name="Gold48" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 44, -512 )
+
+[node name="Gold52" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 44, -8 )
+
+[node name="Gold49" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 68, -512 )
+
+[node name="Gold47" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -44, -512 )
+
+[node name="Gold35" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 52, 16 )
+
+[node name="Gold25" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -11, -224 )
+
+[node name="Gold42" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 4, -248 )
+
+[node name="Gold43" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 28, -248 )
+
+[node name="Gold50" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 20, -280 )
+
+[node name="Gold51" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 44, -280 )
+
+[node name="Gold26" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 20, -200 )
+
+[node name="Gold30" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -92, -104 )
+
+[node name="Gold31" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -76, -104 )
+
+[node name="Gold27" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 44, -200 )
+
+[node name="Gold28" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -116, -16 )
+
+[node name="Gold13" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 68, -80 )
+
+[node name="Gold11" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( -12, -48 )
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( -148, -248 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( -148, -448 )
+number = 2
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( -28, -312 )
+number = 1
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 52, -488 )
+number = 3
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 24 )]
+position = Vector2( -84, -368 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 24 )]
+position = Vector2( 60, -320 )
+
+[node name="Respawns" type="Node2D" parent="."]
+
+[node name="RespawnPoint" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 40, -16 )
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint"]
+position = Vector2( 8, -20 )
+shape = SubResource( 2 )
+
+[node name="RespawnPoint2" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 160, 16 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint2"]
+position = Vector2( 16, 0 )
+shape = SubResource( 9 )
+
+[node name="RespawnPoint6" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 48, 56 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint6"]
+position = Vector2( -12, -44 )
+shape = SubResource( 7 )
+
+[node name="RespawnPoint7" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 96, 24 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint7"]
+position = Vector2( 12, -4 )
+shape = SubResource( 8 )
+
+[node name="RespawnPoint3" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 16, -144 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint3"]
+position = Vector2( 24, -36 )
+shape = SubResource( 4 )
+
+[node name="RespawnPoint9" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 16, -200 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint9"]
+position = Vector2( 24, -4 )
+shape = SubResource( 12 )
+
+[node name="RespawnPoint4" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 183, -200 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint4"]
+position = Vector2( 24, -64 )
+shape = SubResource( 5 )
+
+[node name="RespawnPoint5" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 176, -8 )
+__meta__ = {
+"_edit_group_": true
+}
+match_v = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint5"]
+position = Vector2( -16, -8 )
+shape = SubResource( 6 )
+
+[node name="RespawnPoint8" parent="Respawns" instance=ExtResource( 25 )]
+position = Vector2( 184, -184 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Respawns/RespawnPoint8"]
+position = Vector2( 8, 4 )
+shape = SubResource( 11 )
+
+[node name="Boundaries" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Boundaries"]
+position = Vector2( -4, -92 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="Boundaries"]
+position = Vector2( 260, -94 )
+shape = SubResource( 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_top = -192.0
+margin_right = 256.0
+color = Color( 0.0784314, 1, 0, 0.113725 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_top = -384.0
+margin_right = 256.0
+margin_bottom = -192.0
+color = Color( 0, 0.0862745, 1, 0.113725 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="HUD" parent="." instance=ExtResource( 17 )]
+song_name = "♫Burnt Out"
+
+[node name="Exit" parent="." instance=ExtResource( 26 )]
+position = Vector2( 28, -356 )
+cost = 25
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." groups=["mountain_easter_egg"]]
+anims/liftoff = SubResource( 10 )
+
+[connection signal="tree_entered" from="Background/BackgroundMountain/Mountain" to="Background/BackgroundMountain/Mountain" method="set_visible" binds= [ true ]]
diff --git a/maps/rust.tscn b/maps/rust.tscn
new file mode 100644
index 0000000..cb64470
--- /dev/null
+++ b/maps/rust.tscn
@@ -0,0 +1,554 @@
+[gd_scene load_steps=35 format=2]
+
+[ext_resource path="res://maps/map.gd" type="Script" id=1]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/backgrounds/rust.png" type="Texture" id=3]
+[ext_resource path="res://tilesets/t_rust.tres" type="TileSet" id=4]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=5]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=6]
+[ext_resource path="res://objects/enemy/steam.tscn" type="PackedScene" id=7]
+[ext_resource path="res://objects/environment/rock/crate.tscn" type="PackedScene" id=8]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=9]
+[ext_resource path="res://graphics/secret/i_cant_take_it_anymore.png" type="Texture" id=10]
+[ext_resource path="res://objects/enemy/rolling_saw.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/enemy/tin.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/enemy/roboturret.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/environment/switches/button.tscn" type="PackedScene" id=15]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=16]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=20]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=21]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=22]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=23]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=24]
+[ext_resource path="res://audio/music/cryokiller.ogg" type="AudioStream" id=25]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=26]
+[ext_resource path="res://scripts/has_splash.gd" type="Script" id=27]
+[ext_resource path="res://objects/lore/rust/roboturret.tscn" type="PackedScene" id=28]
+[ext_resource path="res://objects/lore/rust/tin.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/rust/rolling_saw.tscn" type="PackedScene" id=30]
+[ext_resource path="res://objects/lore/rust/rust_inc.tscn" type="PackedScene" id=31]
+[ext_resource path="res://graphics/turniwood/turning_platform_rust.png" type="Texture" id=32]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=33]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 112 )
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 1 )
+target_time_any = 80
+target_time_100 = 160
+music = ExtResource( 25 )
+lore_entries = [ ExtResource( 31 ), ExtResource( 28 ), ExtResource( 30 ), ExtResource( 29 ) ]
+
+[node name="Camera2D" parent="." instance=ExtResource( 2 )]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -64
+
+[node name="Sprite" type="Sprite" parent="CanvasLayer"]
+position = Vector2( 128, 96 )
+texture = ExtResource( 3 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 26 )
+tile_set = ExtResource( 4 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 48, 0, 0, 65584, 0, 0, 131120, 0, 0, 196614, 0, 0, 196656, 0, 0, 196671, 0, 0, 196672, 0, 0, 196673, 0, 0, 196674, 0, 0, 262173, 0, 131072, 262174, 0, 65537, 262175, 0, 65537, 262176, 0, 65537, 262177, 0, 65537, 262178, 0, 65537, 262179, 0, 65537, 262180, 0, 65537, 262181, -1610612736, 131072, 262192, 0, 0, 327691, 0, 131072, 327692, 0, 65537, 327693, 0, 65537, 327694, 0, 65537, 327695, 0, 65537, 327696, 0, 65537, 327697, 0, 65537, 327698, 0, 65537, 327699, 0, 65537, 327700, 0, 65537, 327701, 0, 65537, 327702, 0, 65537, 327703, 0, 65537, 327704, 0, 65537, 327705, 0, 65537, 327706, 0, 65537, 327707, 0, 65537, 327708, 0, 65537, 327709, 1610612736, 131072, 327717, -1073741824, 65537, 327733, 0, 0, 327734, 0, 196609, 327735, 0, 196609, 327736, 0, 65536, 327737, 0, 65538, 327738, 0, 65537, 327739, 0, 65538, 327740, 536870912, 65536, 327760, 0, 131072, 327761, 0, 65537, 327762, 1610612736, 65538, 327763, 0, 65537, 327764, 0, 131073, 327765, 0, 65537, 327766, 0, 65537, 327767, 0, 65537, 327768, 0, 65537, 327769, 0, 65537, 327770, 0, 65537, 327771, 0, 65538, 327772, 0, 65537, 327773, 0, 65537, 327774, 0, 65537, 327775, 0, 65537, 393227, -2147483648, 65537, 393253, -1073741824, 65537, 393268, 0, 0, 393269, 0, 0, 393288, 0, 65536, 393289, 0, 65537, 393290, 0, 131075, 393296, -1073741824, 65537, 458763, -2147483648, 65537, 458789, -1073741824, 131072, 458790, 0, 65537, 458791, 0, 65537, 458792, 0, 65537, 458793, 0, 65537, 458794, 0, 65537, 458795, 0, 65537, 458796, 0, 65537, 458797, 0, 65537, 458798, 0, 65537, 458799, 536870912, 65536, 458805, 0, 0, 458822, 0, 0, 458832, -1073741824, 65538, 524299, -2147483648, 65537, 524315, 0, 131072, 524316, 0, 65537, 524317, 0, 65537, 524318, 0, 65537, 524319, 0, 65537, 524320, 0, 65537, 524321, 0, 65537, 524322, 536870912, 131072, 524338, 0, 0, 524341, 0, 0, 524342, 0, 0, 524343, 0, 0, 524344, 0, 0, 524357, 0, 0, 524358, 0, 0, 524359, 0, 0, 524368, -1073741824, 65537, 589830, -2147483648, 65536, 589831, 0, 196609, 589832, 0, 196609, 589833, 0, 65536, 589834, 0, 65537, 589835, -536870912, 131072, 589851, -1073741824, 65537, 589858, -1073741824, 65537, 589892, 0, 0, 589893, 0, 0, 589894, 0, 0, 589898, 0, 65536, 589899, 0, 65537, 589900, 536870912, 65536, 589904, -1073741824, 65536, 589906, 0, 0, 589907, 0, 0, 589908, 0, 0, 589910, 0, 0, 589911, 0, 0, 589913, 0, 0, 589914, 0, 0, 655366, -1073741824, 65537, 655376, 0, 65536, 655377, 0, 65537, 655378, 0, 65537, 655379, 0, 65537, 655380, 0, 65537, 655381, 0, 65537, 655382, 0, 65537, 655383, 0, 65537, 655384, 0, 65537, 655385, 0, 65537, 655386, 0, 65537, 655387, 1610612736, 131072, 655394, -1073741824, 131072, 655395, 0, 65537, 655396, 0, 65537, 655397, 0, 65538, 655398, 0, 65537, 655399, 0, 65537, 655400, 0, 65537, 655401, 536870912, 65536, 655418, 0, 0, 655419, 0, 0, 655420, 0, 0, 655427, 0, 0, 655428, 0, 0, 655429, 0, 0, 655430, 0, 0, 720902, -1073741824, 65537, 720903, 0, 196609, 720904, 0, 196609, 720962, 0, 0, 720963, 0, 0, 720964, 0, 0, 720965, 0, 0, 720966, 0, 0, 720967, 0, 0, 720968, 0, 0, 786438, -1073741824, 65538, 851974, -1073741824, 65537, 851975, 0, 196609, 851976, 0, 196609, 851989, 0, 0, 852021, 0, 0, 852042, 0, 0, 917510, -1073741824, 65537, 917519, 0, 131072, 917520, 0, 262144, 917550, 0, 65536, 917551, 0, 65537, 917552, 0, 65537, 917553, 0, 65537, 917554, 0, 65537, 917555, 0, 65537, 917556, 0, 65537, 917557, 0, 65537, 917558, 0, 65537, 917559, 0, 65537, 917560, 0, 65537, 917561, -1610612736, 131072, 917565, 0, 65536, 917566, 0, 65537, 917567, 0, 65537, 917568, 0, 65537, 917569, 0, 65537, 917570, 0, 65537, 917571, 0, 65537, 917572, 536870912, 65536, 917590, 0, 0, 917591, 0, 0, 917592, 0, 0, 917593, 0, 0, 917594, 0, 0, 917595, 0, 0, 917596, 0, 0, 917597, 0, 0, 917599, 0, 0, 983046, -1073741824, 131072, 983047, 0, 65537, 983048, 0, 65537, 983049, 0, 65537, 983050, 0, 65537, 983051, 0, 65537, 983052, 0, 65537, 983053, 0, 65537, 983054, 0, 65538, 983055, 1610612736, 131072, 983058, 0, 0, 983059, 0, 0, 983078, 0, 0, 983079, 0, 0, 983080, 0, 0, 983081, 0, 0, 983097, -1073741824, 131072, 983098, -1610612736, 131072, 983113, 0, 0, 983121, 0, 0, 983122, 0, 0, 983123, 0, 0, 1048634, -1073741824, 65537, 1048647, 0, 0, 1114135, 0, 131072, 1114136, 0, 65537, 1114137, 0, 65537, 1114138, 0, 65537, 1114139, 0, 65537, 1114140, 0, 65537, 1114141, 0, 65538, 1114142, 0, 65537, 1114143, 0, 65537, 1114144, 0, 65537, 1114145, 0, 65537, 1114146, 0, 65537, 1114147, 0, 65537, 1114148, -1610612736, 131072, 1114170, -1073741824, 131072, 1114171, 0, 65537, 1114172, 0, 65537, 1114173, 0, 65537, 1114174, 536870912, 65537, 1114175, 0, 65537, 1114176, 0, 65537, 1114177, 0, 65537, 1114178, 0, 131075, 1114191, 0, 0, 1114205, 0, 0, 1114206, 0, 0, 1179661, 0, 65536, 1179662, 0, 65537, 1179663, 0, 131074, 1179664, 0, 131074, 1179665, 0, 65537, 1179666, 0, 65537, 1179667, 0, 65537, 1179668, 0, 131074, 1179669, 0, 131074, 1179670, 0, 65537, 1179671, 1610612736, 131072, 1179684, -1073741824, 65537, 1179723, 0, 0, 1179724, 0, 0, 1179725, 0, 0, 1245220, -1073741824, 131072, 1245221, 0, 65537, 1245222, 0, 65537, 1245223, 0, 131075, 1245254, 0, 65536, 1245255, 0, 65537, 1245256, 536870912, 65536, 1310720, 0, 0, 1310721, 0, 0, 1310731, 0, 0, 1376256, 0, 0, 1376257, 0, 0, 1376261, 0, 0, 1376286, 0, 0, 1376297, 0, 0, 1376304, 0, 0, 1376312, 0, 65536, 1376313, 536870912, 65538, 1376314, 536870912, 65537, 1376315, 536870912, 65536, 1376333, 0, 0, 1376334, 0, 0, 1376335, 0, 0, 1376341, 0, 0, 1376342, 0, 0, 1376343, 0, 0, 1441792, 0, 1, 1441793, 0, 2, 1441794, 0, 2, 1441795, 0, 2, 1441796, 0, 2, 1441797, 0, 2, 1441798, 0, 2, 1441799, 0, 2, 1441800, 0, 2, 1441801, 0, 2, 1441802, 0, 2, 1441803, 0, 2, 1441804, 0, 2, 1441805, 0, 2, 1441806, 0, 2, 1441807, 0, 2, 1441808, 0, 2, 1441809, 0, 2, 1441810, 0, 2, 1441811, 0, 2, 1441812, 0, 2, 1441813, 0, 2, 1441814, 0, 2, 1441815, 0, 2, 1441816, 0, 2, 1441817, 0, 2, 1441818, 0, 2, 1441819, 0, 2, 1441820, 0, 2, 1441821, 0, 2, 1441822, 0, 2, 1441823, 0, 2, 1441824, 0, 2, 1441825, 0, 2, 1441826, 0, 2, 1441827, 0, 2, 1441828, 0, 2, 1441829, 0, 2, 1441830, 0, 2, 1441831, 0, 2, 1441832, 0, 2, 1441833, 0, 2, 1441834, 0, 2, 1441835, 0, 2, 1441836, 0, 2, 1441837, 0, 3, 1441843, 0, 1, 1441844, 0, 2, 1441845, 0, 2, 1441846, 0, 3, 1441853, 0, 1, 1441854, 0, 2, 1441855, 0, 2, 1441856, 0, 2, 1441857, 0, 2, 1441858, 0, 2, 1441859, 0, 2, 1441860, 0, 2, 1441861, 0, 2, 1441862, 0, 2, 1441863, 0, 2, 1441864, 0, 2, 1441865, 0, 2, 1441866, 0, 2, 1441867, 0, 3, 1441882, 0, 1, 1441883, 0, 2, 1441884, 0, 2, 1441885, 0, 2, 1441886, 0, 2, 1441887, 0, 3, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0, 1507360, 0, 0, 1507361, 0, 0, 1507362, 0, 0, 1507363, 0, 0, 1507364, 0, 0, 1507365, 0, 0, 1507366, 0, 0, 1507367, 0, 0, 1507368, 0, 0, 1507369, 0, 0, 1507370, 0, 0, 1507371, 0, 0, 1507372, 0, 0, 1507373, 0, 0, 1507379, 0, 0, 1507380, 0, 0, 1507381, 0, 0, 1507382, 0, 0, 1507389, 0, 0, 1507390, 0, 0, 1507391, 0, 0, 1507392, 0, 0, 1507393, 0, 0, 1507394, 0, 0, 1507395, 0, 0, 1507396, 0, 0, 1507397, 0, 0, 1507398, 0, 0, 1507399, 0, 0, 1507400, 0, 0, 1507401, 0, 0, 1507402, 0, 0, 1507403, 0, 0, 1507418, 0, 0, 1507419, 0, 0, 1507420, 0, 0, 1507421, 0, 0, 1507422, 0, 0, 1507423, 0, 0 )
+
+[node name="Player" parent="." instance=ExtResource( 5 )]
+position = Vector2( 24, 176 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+position = Vector2( 0, 1 )
+tile_set = ExtResource( 16 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 262157, 1, 0, 262161, 1, 0, 262168, 1, 0, 262172, 1, 0, 393254, 1, 0, 393255, 1, 0, 393256, 1, 0, 393257, 1, 0, 393258, 1, 0, 393259, 1, 0, 393260, 1, 0, 393261, 1, 0, 393262, 1, 0 )
+
+[node name="DeathNoBlood" type="TileMap" parent="." groups=["death", "no_blood"]]
+tile_set = ExtResource( 16 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1441838, 7, 0, 1441839, 7, 0, 1441840, 7, 0, 1441841, 7, 0, 1441842, 7, 0, 1441847, 7, 0, 1441848, 7, 0, 1441849, 7, 0, 1441850, 7, 0, 1441851, 7, 0, 1441852, 7, 0, 1441868, 7, 0, 1441869, 7, 0, 1441870, 7, 0, 1441871, 7, 0, 1441872, 7, 0, 1441873, 7, 0, 1441874, 7, 0, 1441875, 7, 0, 1441876, 7, 0, 1441877, 7, 0, 1441878, 7, 0, 1441879, 7, 0, 1441880, 7, 0, 1441881, 7, 0, 1507374, 6, 0, 1507375, 6, 0, 1507376, 6, 0, 1507377, 6, 0, 1507378, 6, 0, 1507383, 6, 0, 1507384, 6, 0, 1507385, 6, 0, 1507386, 6, 0, 1507387, 6, 0, 1507388, 6, 0, 1507404, 6, 0, 1507405, 6, 0, 1507406, 6, 0, 1507407, 6, 0, 1507408, 6, 0, 1507409, 6, 0, 1507410, 6, 0, 1507411, 6, 0, 1507412, 6, 0, 1507413, 6, 0, 1507414, 6, 0, 1507415, 6, 0, 1507416, 6, 0, 1507417, 6, 0 )
+script = ExtResource( 27 )
+splash_color = Color( 0.12549, 0.133333, 0.227451, 1 )
+
+[node name="DeathBackground" type="TileMap" parent="DeathNoBlood" groups=["death", "no_blood"]]
+z_index = -11
+tile_set = ExtResource( 16 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1441837, 7, 0, 1441843, 7, 0, 1441846, 7, 0, 1441853, 7, 0, 1441867, 7, 0, 1441882, 7, 0 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 23 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 196618, 0, 196608, 262154, 0, 196608, 327690, 0, 196608, 327759, 0, 196608, 393226, 0, 196608, 393295, 0, 196608, 458762, 0, 196608, 458831, 0, 196608, 524298, 0, 196608, 524367, 0, 196608, 589826, 0, 196608, 589917, 536870912, 196608, 655362, 0, 196608, 655453, 536870912, 196608, 720898, 0, 196608, 720989, 536870912, 196608, 786434, 0, 196608, 786476, 0, 196608, 851970, 0, 196608, 852012, 0, 196608, 917506, 0, 196608, 917548, 0, 196608, 983042, 0, 196608, 983084, 0, 196608, 1048578, 0, 196608, 1179717, 0, 196608, 1245253, 0, 196608 )
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="TurningPlatform6" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 336, 40 )
+time = 15.0
+delay = 1.0
+texture = ExtResource( 32 )
+
+[node name="TurningPlatform7" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 656, 168 )
+time = 15.0
+texture = ExtResource( 32 )
+
+[node name="TurningPlatform4" parent="Environment" instance=ExtResource( 9 )]
+position = Vector2( 312, 40 )
+time = 30.0
+texture = ExtResource( 32 )
+
+[node name="Ladder" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 352, 96 )
+scale = Vector2( 1, 4 )
+
+[node name="Ladder7" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 632, 40 )
+scale = Vector2( 1, 4 )
+can_climb_right = false
+
+[node name="Ladder5" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 552, 144 )
+
+[node name="Ladder8" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 552, 152 )
+can_climb_right = false
+
+[node name="Ladder6" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 744, 72 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder2" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 16, 72 )
+scale = Vector2( 1, 8 )
+
+[node name="Ladder3" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 80, 24 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder9" parent="Environment" instance=ExtResource( 14 )]
+position = Vector2( 80, 40 )
+scale = Vector2( 1, 4 )
+can_climb_right = false
+
+[node name="Button" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 80, 113 )
+target_group = "button1"
+
+[node name="Button2" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 728, 168 )
+target_group = "button3"
+
+[node name="Button4" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 272, 168 )
+target_group = "button4"
+
+[node name="Button3" parent="Environment" instance=ExtResource( 15 )]
+position = Vector2( 520, 16 )
+target_group = "button2"
+
+[node name="Barrier2" parent="Environment" instance=ExtResource( 22 )]
+position = Vector2( 332, 63 )
+scale = Vector2( 1, 17 )
+cost = 15
+
+[node name="Rock3" parent="Environment" instance=ExtResource( 8 )]
+position = Vector2( 152, 112 )
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Steam" parent="Enemies" groups=["button1"] instance=ExtResource( 7 )]
+position = Vector2( 104, 152 )
+rotation = -1.57079
+off_time = 1.5
+
+[node name="Steam8" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 136, 152 )
+rotation = 3.14159
+off_time = 1.5
+
+[node name="Steam11" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 168, 152 )
+rotation = 3.14159
+off_time = 1.5
+
+[node name="Steam5" parent="Enemies" groups=["button4"] instance=ExtResource( 7 )]
+position = Vector2( 336, 80 )
+rotation = 1.5708
+off_time = 1.5
+
+[node name="Steam4" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 48, 72 )
+off_time = 1.5
+
+[node name="Steam7" parent="Enemies" groups=["button3"] instance=ExtResource( 7 )]
+position = Vector2( 672, 40 )
+off_time = 0.0
+on_time = inf
+
+[node name="Steam2" parent="Enemies" groups=["button1"] instance=ExtResource( 7 )]
+position = Vector2( 128, 152 )
+rotation = 3.14159
+off_time = 0.0
+on_time = inf
+
+[node name="Steam3" parent="Enemies" groups=["button1"] instance=ExtResource( 7 )]
+position = Vector2( 176, 152 )
+rotation = 3.14159
+off_time = 0.0
+on_time = inf
+
+[node name="RollingSaw3" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 576, 41 )
+
+[node name="RollingSaw5" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 472, 72 )
+
+[node name="RollingSaw8" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 448, 161 )
+
+[node name="RollingSaw9" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 472, 175 )
+
+[node name="RollingSaw4" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 600, 79 )
+
+[node name="RollingSaw6" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 648, 128 )
+clockwise = true
+
+[node name="RollingSaw7" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 664, 112 )
+clockwise = true
+
+[node name="RollingSaw13" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 752, 128 )
+
+[node name="RollingSaw2" parent="Enemies" instance=ExtResource( 11 )]
+position = Vector2( 48, 32 )
+move_speed = 80.0
+
+[node name="Tin" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 168, 128 )
+up_boundary = 5.0
+down_boundary = 2.0
+
+[node name="Tin5" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 368, 160 )
+up_boundary = 5.0
+down_boundary = 1.0
+speed = 40
+
+[node name="Tin6" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 408, 160 )
+up_boundary = 5.0
+down_boundary = 1.0
+speed = 40
+move_direction = 1
+
+[node name="Tin2" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 24, 112 )
+up_boundary = 2.0
+down_boundary = 3.0
+speed = 40
+move_direction = 1
+
+[node name="Tin4" parent="Enemies" instance=ExtResource( 12 )]
+position = Vector2( 104, 88 )
+up_boundary = 3.0
+
+[node name="Steam6" parent="Enemies" groups=["button3"] instance=ExtResource( 7 )]
+position = Vector2( 384, 56 )
+rotation = 1.5708
+
+[node name="Steam9" parent="Enemies" instance=ExtResource( 7 )]
+position = Vector2( 488, 40 )
+rotation = 1.5708
+
+[node name="Steam12" parent="Enemies" groups=["button2"] instance=ExtResource( 7 )]
+position = Vector2( 616, 72 )
+rotation = 1.5708
+off_time = 0.0
+on_time = inf
+
+[node name="Steam13" parent="Enemies" groups=["button2"] instance=ExtResource( 7 )]
+position = Vector2( 592, 80 )
+rotation = -1.5708
+off_time = 0.0
+on_time = inf
+
+[node name="Roboturret" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 200, 168 )
+
+[node name="Roboturret5" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 392, 105 )
+shoot_time = 0.9
+
+[node name="Roboturret6" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 720, 104 )
+shoot_time = 2.5
+
+[node name="Roboturret2" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 216, 129 )
+shoot_time = 2.5
+
+[node name="Roboturret7" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 168, 33 )
+shoot_time = 2.5
+
+[node name="Roboturret3" parent="Enemies" instance=ExtResource( 13 )]
+position = Vector2( 176, 73 )
+scale = Vector2( -1, 1 )
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 48, 16 )
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 736, 32 )
+number = 3
+
+[node name="Shard3" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 96, 112 )
+number = 1
+
+[node name="Shard4" parent="Collectibles" instance=ExtResource( 18 )]
+position = Vector2( 664, 64 )
+number = 2
+
+[node name="Gold" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 464, 112 )
+
+[node name="Gold2" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 496, 128 )
+
+[node name="Gold3" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 112 )
+
+[node name="Gold4" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 208, 32 )
+
+[node name="Gold5" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 120, 32 )
+
+[node name="Gold7" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 64, 112 )
+
+[node name="Gold6" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 264, 56 )
+
+[node name="Gold8" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 112, 136 )
+
+[node name="Gold9" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 408, 168 )
+
+[node name="Gold11" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 432, 168 )
+
+[node name="Gold10" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 160, 136 )
+
+[node name="Gold14" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 192, 128 )
+
+[node name="Gold16" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 272, 128 )
+
+[node name="Gold17" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 296, 144 )
+
+[node name="Gold18" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 304, 112 )
+
+[node name="Gold19" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 328, 112 )
+
+[node name="Gold20" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 376, 104 )
+
+[node name="Gold21" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 408, 104 )
+
+[node name="Gold22" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 712, 32 )
+
+[node name="Gold23" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 152, 72 )
+
+[node name="Gold24" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 336, 168 )
+
+[node name="Gold25" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 504, 168 )
+
+[node name="Gold26" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 528, 168 )
+
+[node name="Gold27" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 560, 168 )
+
+[node name="Gold28" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 224, 56 )
+
+[node name="Gold29" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 592, 168 )
+
+[node name="Gold30" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 624, 160 )
+
+[node name="Gold31" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 608, 136 )
+
+[node name="Gold32" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 656, 112 )
+
+[node name="Gold37" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 264, 24 )
+
+[node name="Gold38" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 288, 24 )
+
+[node name="Gold39" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 424, 32 )
+
+[node name="Gold40" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 200, 72 )
+
+[node name="Gold41" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 480, 32 )
+
+[node name="Gold42" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 528, 16 )
+
+[node name="Gold48" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 544, 104 )
+
+[node name="Gold49" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 520, 104 )
+
+[node name="Gold50" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 488, 104 )
+
+[node name="Gold44" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 656, 32 )
+
+[node name="Gold45" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 688, 32 )
+
+[node name="Gold46" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 608, 64 )
+
+[node name="Gold47" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 584, 40 )
+
+[node name="Gold43" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 504, 16 )
+
+[node name="Gold34" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 696, 104 )
+
+[node name="Gold35" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 736, 104 )
+
+[node name="Gold36" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 720, 64 )
+
+[node name="Gold33" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 688, 160 )
+
+[node name="Gold15" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 232, 128 )
+
+[node name="Gold13" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 312, 72 )
+
+[node name="Gold12" parent="Collectibles" instance=ExtResource( 21 )]
+position = Vector2( 288, 72 )
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 24 )]
+position = Vector2( 168, 96 )
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 384, 160 )
+color = 1
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 144, 168 )
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 568, 80 )
+color = 3
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 744, 128 )
+color = 4
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 432, 56 )
+color = 2
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( -4, 96 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 772, 96 )
+shape = SubResource( 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 0, 1, 0.227451, 0.0627451 )
+script = ExtResource( 6 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 1, 0.937255, 0, 0.0627451 )
+script = ExtResource( 6 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ICantTakeItAnymore" type="Sprite" parent="."]
+position = Vector2( -96, 96 )
+texture = ExtResource( 10 )
+
+[node name="HUD" parent="." instance=ExtResource( 17 )]
+song_name = "♫Cryokiller"
+
+[node name="Exit" parent="." instance=ExtResource( 19 )]
+position = Vector2( 752, 164 )
+cost = 25
+
+[node name="Speccy" parent="." groups=["button3"] instance=ExtResource( 33 )]
+position = Vector2( 705, 41 )
+flip = true
diff --git a/maps/station.gd b/maps/station.gd
new file mode 100644
index 0000000..9ac633d
--- /dev/null
+++ b/maps/station.gd
@@ -0,0 +1,12 @@
+extends "res://maps/map.gd"
+
+var acab_shard_has_been_collected: bool = false
+
+func _physics_process(delta):
+ ._physics_process(delta)
+ if get_tree().get_nodes_in_group("cop").size() == 0:
+ if !acab_shard_has_been_collected:
+ Audio.play_shard_sound()
+ Game.score += 500
+ Game.shards_collected[0] = true
+ acab_shard_has_been_collected = true
diff --git a/maps/station.tscn b/maps/station.tscn
new file mode 100644
index 0000000..5ab3c5a
--- /dev/null
+++ b/maps/station.tscn
@@ -0,0 +1,583 @@
+[gd_scene load_steps=38 format=2]
+
+[ext_resource path="res://maps/station.gd" type="Script" id=1]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2]
+[ext_resource path="res://tilesets/t_station.tres" type="TileSet" id=3]
+[ext_resource path="res://graphics/backgrounds/night.png" type="Texture" id=4]
+[ext_resource path="res://objects/environment/exit/exit.tscn" type="PackedScene" id=5]
+[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=7]
+[ext_resource path="res://scripts/delete_on_game_running.gd" type="Script" id=8]
+[ext_resource path="res://audio/music/spine_v2.ogg" type="AudioStream" id=9]
+[ext_resource path="res://objects/enemy/cop.tscn" type="PackedScene" id=10]
+[ext_resource path="res://objects/collectibles/star.tscn" type="PackedScene" id=11]
+[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=12]
+[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=13]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=14]
+[ext_resource path="res://objects/enemy/laser_wall.tscn" type="PackedScene" id=15]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=16]
+[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=17]
+[ext_resource path="res://objects/environment/switches/button.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=20]
+[ext_resource path="res://objects/environment/barrier/jail_bars.tscn" type="PackedScene" id=21]
+[ext_resource path="res://objects/npc/msx.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/environment/barrier/barrier.tscn" type="PackedScene" id=23]
+[ext_resource path="res://maps/graffiti.gd" type="Script" id=24]
+[ext_resource path="res://objects/lore/station/msx.tscn" type="PackedScene" id=25]
+[ext_resource path="res://graphics/graffiti/tgirls_rule.png" type="Texture" id=26]
+[ext_resource path="res://graphics/graffiti/msx.png" type="Texture" id=27]
+[ext_resource path="res://graphics/graffiti/msx_was_here.png" type="Texture" id=28]
+[ext_resource path="res://objects/lore/station/famicop.tscn" type="PackedScene" id=29]
+[ext_resource path="res://objects/lore/station/dread_pd.tscn" type="PackedScene" id=30]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=31]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=32]
+[ext_resource path="res://graphics/hatch/hatch.png" type="Texture" id=33]
+[ext_resource path="res://graphics/turniwood/turning_platoform_lab.png" type="Texture" id=34]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=35]
+
+[sub_resource type="Animation" id=2]
+resource_name = "open"
+length = 0.9
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.7, 0.8 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 1, 0 ]
+}
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 120 )
+
+[node name="Map" type="Node2D" groups=["map"]]
+pause_mode = 1
+script = ExtResource( 1 )
+target_time_any = 180
+target_time_100 = 500
+music = ExtResource( 9 )
+lore_entries = [ ExtResource( 30 ), ExtResource( 29 ), ExtResource( 25 ) ]
+
+[node name="Camera2D" parent="." instance=ExtResource( 6 )]
+
+[node name="Background" type="CanvasLayer" parent="."]
+layer = -1
+
+[node name="Sprite" type="Sprite" parent="Background"]
+position = Vector2( 128, 96 )
+texture = ExtResource( 4 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="BackgroundTiles" type="TileMap" parent="."]
+z_index = -2
+tile_set = ExtResource( 3 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 327699, 0, 3, 327700, 0, 3, 327701, 0, 3, 327702, 0, 3, 327703, 0, 3, 327704, 0, 3, 327705, 0, 3, 327706, 0, 3, 327707, 0, 3, 327708, 0, 3, 327709, 0, 3, 327710, 0, 3, 327711, 0, 3, 327712, 0, 3, 327713, 0, 3, 327714, 0, 3, 327715, 0, 3, 327716, 0, 3, 327717, 0, 3, 327718, 0, 3, 327719, 0, 3, 327720, 0, 3, 327721, 0, 3, 327722, 0, 3, 327723, 0, 3, 327724, 0, 3, 327725, 0, 3, 327726, 0, 3, 327727, 0, 3, 327728, 0, 3, 327729, 0, 3, 327730, 0, 3, 327731, 0, 3, 327732, 0, 3, 327733, 0, 3, 327734, 0, 3, 327735, 0, 3, 327736, 0, 3, 327737, 0, 3, 327738, 0, 3, 327739, 0, 3, 327740, 0, 3, 327741, 0, 3, 327742, 0, 3, 327743, 0, 3, 327744, 0, 3, 327745, 0, 3, 327746, 0, 3, 327747, 0, 3, 327748, 0, 3, 327749, 0, 3, 327750, 0, 3, 327751, 0, 3, 327752, 0, 3, 327753, 0, 3, 327754, 0, 3, 327755, 0, 3, 327756, 0, 3, 327757, 0, 3, 327758, 0, 3, 327759, 0, 3, 327760, 0, 3, 327761, 0, 3, 327762, 0, 3, 327763, 0, 3, 327764, 0, 3, 327765, 0, 3, 327766, 0, 3, 327767, 0, 3, 327768, 0, 3, 327769, 0, 3, 327770, 0, 3, 327771, 0, 3, 327772, 0, 3, 327773, 0, 3, 327774, 0, 3, 393234, 0, 3, 393235, 0, 3, 393236, 0, 3, 393237, 0, 3, 393238, 0, 3, 393239, 0, 3, 393240, 0, 3, 393241, 0, 3, 393242, 0, 3, 393243, 0, 3, 393244, 0, 3, 393245, 0, 3, 393246, 0, 3, 393247, 0, 3, 393248, 0, 3, 393249, 0, 3, 393250, 0, 3, 393251, 0, 3, 393252, 0, 3, 393253, 0, 3, 393254, 0, 3, 393255, 0, 3, 393256, 0, 3, 393257, 0, 3, 393258, 0, 3, 393259, 0, 3, 393260, 0, 3, 393261, 0, 3, 393262, 0, 3, 393263, 0, 3, 393264, 0, 3, 393265, 0, 3, 393266, 0, 3, 393267, 0, 3, 393268, 0, 3, 393269, 0, 3, 393270, 0, 3, 393271, 0, 3, 393272, 0, 3, 393273, 0, 3, 393274, 0, 3, 393275, 0, 3, 393276, 0, 3, 393277, 0, 3, 393278, 0, 3, 393279, 0, 3, 393280, 0, 3, 393281, 0, 3, 393282, 0, 3, 393283, 0, 3, 393284, 0, 3, 393285, 0, 3, 393286, 0, 3, 393287, 0, 3, 393288, 0, 3, 393289, 0, 3, 393290, 0, 3, 393291, 0, 3, 393292, 0, 3, 393293, 0, 3, 393294, 0, 3, 393295, 0, 3, 393296, 0, 3, 393297, 0, 3, 393298, 0, 3, 393299, 0, 3, 393300, 0, 3, 393301, 0, 3, 393302, 0, 3, 393303, 0, 3, 393304, 0, 3, 393305, 0, 3, 393306, 0, 3, 393307, 0, 3, 393308, 0, 3, 393309, 0, 3, 393310, 0, 3, 393311, 0, 3, 458771, 0, 3, 458772, 536870912, 3, 458773, 536870912, 3, 458774, 536870912, 3, 458775, 536870912, 3, 458776, 536870912, 3, 458777, 536870912, 3, 458778, 536870912, 3, 458779, 536870912, 3, 458780, 536870912, 3, 458781, 536870912, 3, 458782, 536870912, 3, 458783, 536870912, 3, 458784, 536870912, 3, 458785, 536870912, 3, 458786, 536870912, 3, 458787, 536870912, 3, 458788, 536870912, 3, 458789, 536870912, 3, 458790, 536870912, 3, 458791, 536870912, 3, 458792, 536870912, 3, 458793, 536870912, 3, 458794, 536870912, 3, 458795, 536870912, 3, 458796, 536870912, 3, 458797, 536870912, 3, 458798, 536870912, 3, 458799, 536870912, 3, 458800, 536870912, 3, 458801, 536870912, 3, 458802, 536870912, 3, 458803, 536870912, 3, 458804, 536870912, 3, 458805, 536870912, 3, 458806, 536870912, 3, 458807, 536870912, 3, 458808, 536870912, 3, 458809, 536870912, 3, 458810, 536870912, 3, 458811, 536870912, 3, 458812, 536870912, 3, 458813, 536870912, 3, 458814, 536870912, 3, 458815, 536870912, 3, 458816, 536870912, 3, 458817, 536870912, 3, 458818, 536870912, 3, 458819, 536870912, 3, 458820, 536870912, 3, 458821, 536870912, 3, 458822, 536870912, 3, 458823, 536870912, 3, 458824, 536870912, 3, 458825, 536870912, 3, 458826, 536870912, 3, 458827, 536870912, 3, 458828, 536870912, 3, 458829, 536870912, 3, 458830, 536870912, 3, 458831, 536870912, 3, 458832, 536870912, 3, 458833, 536870912, 3, 458834, 536870912, 3, 458835, 536870912, 3, 458836, 536870912, 3, 458837, 536870912, 3, 458838, 536870912, 3, 458839, 536870912, 3, 458840, 536870912, 3, 458841, 536870912, 3, 458842, 536870912, 3, 458843, 536870912, 3, 458844, 536870912, 3, 458845, 536870912, 3, 458846, 536870912, 3, 458847, 536870912, 3, 524307, 0, 3, 524308, 536870912, 3, 524309, 536870912, 3, 524310, 536870912, 3, 524311, 536870912, 3, 524312, 536870912, 3, 524313, 536870912, 3, 524314, 536870912, 3, 524315, 536870912, 3, 524316, 536870912, 3, 524317, 536870912, 3, 524318, 536870912, 3, 524319, 536870912, 3, 524320, 536870912, 3, 524321, 536870912, 3, 524322, 536870912, 3, 524323, 536870912, 3, 524324, 536870912, 3, 524325, 536870912, 3, 524326, 536870912, 3, 524327, 536870912, 3, 524328, 536870912, 3, 524329, 536870912, 3, 524330, 536870912, 3, 524331, 536870912, 3, 524332, 536870912, 3, 524333, 536870912, 3, 524334, 536870912, 3, 524335, 536870912, 3, 524336, 536870912, 3, 524337, 536870912, 3, 524338, 536870912, 3, 524339, 536870912, 3, 524340, 536870912, 3, 524341, 536870912, 3, 524342, 536870912, 3, 524343, 536870912, 3, 524344, 536870912, 3, 524345, 536870912, 3, 524346, 536870912, 3, 524347, 536870912, 3, 524348, 536870912, 3, 524349, 536870912, 3, 524350, 536870912, 3, 524351, 536870912, 3, 524352, 536870912, 3, 524353, 536870912, 3, 524354, 536870912, 3, 524355, 536870912, 3, 524356, 536870912, 3, 524357, 536870912, 3, 524358, 536870912, 3, 524359, 536870912, 3, 524360, 536870912, 3, 524361, 536870912, 3, 524362, 536870912, 3, 524363, 536870912, 3, 524364, 536870912, 3, 524365, 536870912, 3, 524366, 536870912, 3, 524367, 536870912, 3, 524368, 536870912, 3, 524369, 536870912, 3, 524370, 536870912, 3, 524371, 536870912, 3, 524372, 536870912, 3, 524373, 536870912, 3, 524374, 536870912, 3, 524375, 536870912, 3, 524376, 536870912, 3, 524377, 536870912, 3, 524378, 536870912, 3, 524379, 536870912, 3, 524380, 536870912, 3, 524381, 536870912, 3, 524382, 536870912, 3, 524383, 536870912, 3, 589843, 0, 3, 589844, 536870912, 3, 589845, 536870912, 3, 589846, 536870912, 3, 589847, 536870912, 3, 589848, 536870912, 3, 589849, 536870912, 3, 589850, 536870912, 3, 589851, 536870912, 3, 589852, 536870912, 3, 589853, 536870912, 3, 589854, 536870912, 3, 589855, 536870912, 3, 589856, 536870912, 3, 589857, 536870912, 3, 589858, 536870912, 3, 589859, 536870912, 3, 589860, 536870912, 3, 589861, 536870912, 3, 589862, 536870912, 3, 589863, 536870912, 3, 589864, 536870912, 3, 589865, 536870912, 3, 589866, 536870912, 3, 589867, 536870912, 3, 589868, 536870912, 3, 589869, 536870912, 3, 589870, 536870912, 3, 589871, 536870912, 3, 589872, 536870912, 3, 589873, 536870912, 3, 589874, 536870912, 3, 589875, 536870912, 3, 589876, 536870912, 3, 589877, 536870912, 3, 589878, 536870912, 3, 589879, 536870912, 3, 589880, 0, 3, 589881, 0, 3, 589882, 536870912, 3, 589883, 536870912, 3, 589884, 536870912, 3, 589885, 536870912, 3, 589886, 536870912, 3, 589887, 536870912, 3, 589888, 536870912, 3, 589889, 536870912, 3, 589890, 536870912, 3, 589891, 536870912, 3, 589892, 536870912, 3, 589893, 536870912, 3, 589894, 536870912, 3, 589895, 536870912, 3, 589896, 536870912, 3, 589897, 536870912, 3, 589898, 536870912, 3, 589899, 536870912, 3, 589900, 536870912, 3, 589901, 536870912, 3, 589902, 536870912, 3, 589903, 536870912, 3, 589904, 536870912, 3, 589905, 536870912, 3, 589906, 536870912, 3, 589907, 536870912, 3, 589908, 536870912, 3, 589909, 536870912, 3, 589910, 536870912, 3, 589911, 536870912, 3, 589912, 536870912, 3, 589913, 536870912, 3, 589914, 536870912, 3, 589915, 536870912, 3, 589916, 536870912, 3, 589917, 536870912, 3, 589918, 536870912, 3, 589919, 536870912, 3, 655379, 0, 3, 655380, 536870912, 3, 655381, 536870912, 3, 655382, 536870912, 3, 655383, 536870912, 3, 655384, 536870912, 3, 655385, 536870912, 3, 655386, 536870912, 3, 655387, 536870912, 3, 655388, 536870912, 3, 655389, 536870912, 3, 655390, 536870912, 3, 655391, 536870912, 3, 655392, 536870912, 3, 655393, 536870912, 3, 655394, 536870912, 3, 655395, 536870912, 3, 655396, 536870912, 3, 655397, 536870912, 3, 655398, 536870912, 3, 655399, 536870912, 3, 655400, 536870912, 3, 655401, 536870912, 3, 655402, 536870912, 3, 655403, 536870912, 3, 655404, 536870912, 3, 655405, 536870912, 3, 655406, 536870912, 3, 655407, 536870912, 3, 655408, 536870912, 3, 655409, 536870912, 3, 655410, 536870912, 3, 655411, 536870912, 3, 655412, 536870912, 3, 655413, 536870912, 3, 655414, 536870912, 3, 655415, 536870912, 3, 655416, 0, 3, 655417, 0, 3, 655418, 536870912, 3, 655419, 536870912, 3, 655420, 536870912, 3, 655421, 536870912, 3, 655422, 536870912, 3, 655423, 536870912, 3, 655424, 536870912, 3, 655425, 536870912, 3, 655426, 536870912, 3, 655427, 536870912, 3, 655428, 536870912, 3, 655429, 536870912, 3, 655430, 536870912, 3, 655431, 536870912, 3, 655432, 536870912, 3, 655433, 536870912, 3, 655434, 536870912, 3, 655435, 536870912, 3, 655436, 536870912, 3, 655437, 536870912, 3, 655438, 536870912, 3, 655439, 536870912, 3, 655440, 536870912, 3, 655441, 536870912, 3, 655442, 536870912, 3, 655443, 536870912, 3, 655444, 536870912, 3, 655445, 536870912, 3, 655446, 536870912, 3, 655447, 536870912, 3, 655448, 536870912, 3, 655449, 536870912, 3, 655450, 536870912, 3, 655451, 536870912, 3, 655452, 536870912, 3, 655453, 536870912, 3, 655454, 536870912, 3, 655455, 536870912, 3, 720915, 0, 3, 720916, 536870912, 3, 720917, 536870912, 3, 720918, 536870912, 3, 720919, 536870912, 3, 720920, 536870912, 3, 720921, 536870912, 3, 720922, 536870912, 3, 720923, 536870912, 3, 720924, 536870912, 3, 720925, 536870912, 3, 720926, 536870912, 3, 720927, 536870912, 3, 720928, 536870912, 3, 720929, 536870912, 3, 720930, 536870912, 3, 720931, 536870912, 3, 720932, 536870912, 3, 720933, 536870912, 3, 720934, 536870912, 3, 720935, 536870912, 3, 720936, 536870912, 3, 720937, 536870912, 3, 720938, 536870912, 3, 720939, 536870912, 3, 720940, 536870912, 3, 720941, 536870912, 3, 720942, 536870912, 3, 720943, 536870912, 3, 720944, 536870912, 3, 720945, 536870912, 3, 720946, 536870912, 3, 720947, 536870912, 3, 720948, 536870912, 3, 720949, 536870912, 3, 720950, 536870912, 3, 720951, 536870912, 3, 720952, 536870912, 3, 720953, 536870912, 3, 720954, 536870912, 3, 720955, 536870912, 3, 720956, 536870912, 3, 720957, 536870912, 3, 720958, 536870912, 3, 720959, 536870912, 3, 720960, 536870912, 3, 720961, 536870912, 3, 720962, 536870912, 3, 720963, 536870912, 3, 720964, 536870912, 3, 720965, 536870912, 3, 720966, 536870912, 3, 720967, 536870912, 3, 720968, 536870912, 3, 720969, 536870912, 3, 720970, 536870912, 3, 720971, 536870912, 3, 720972, 536870912, 3, 720973, 536870912, 3, 720974, 536870912, 3, 720975, 536870912, 3, 720976, 536870912, 3, 720977, 536870912, 3, 720978, 536870912, 3, 720979, 536870912, 3, 720980, 536870912, 3, 720981, 536870912, 3, 720982, 536870912, 3, 720983, 536870912, 3, 720984, 536870912, 3, 720985, 536870912, 3, 720986, 536870912, 3, 720987, 536870912, 3, 720988, 536870912, 3, 720989, 536870912, 3, 720990, 536870912, 3, 720991, 536870912, 3, 786451, 0, 3, 786452, 536870912, 3, 786453, 536870912, 3, 786454, 536870912, 3, 786455, 536870912, 3, 786456, 536870912, 3, 786457, 536870912, 3, 786458, 536870912, 3, 786459, 536870912, 3, 786460, 536870912, 3, 786461, 536870912, 3, 786462, 536870912, 3, 786463, 536870912, 3, 786464, 536870912, 3, 786465, 536870912, 3, 786466, 536870912, 3, 786467, 536870912, 3, 786468, 536870912, 3, 786469, 536870912, 3, 786470, 536870912, 3, 786471, 536870912, 3, 786472, 536870912, 3, 786473, 536870912, 3, 786474, 536870912, 3, 786475, 536870912, 3, 786476, 536870912, 3, 786477, 536870912, 3, 786478, 536870912, 3, 786479, 536870912, 3, 786480, 536870912, 3, 786481, 536870912, 3, 786482, 536870912, 3, 786483, 536870912, 3, 786484, 536870912, 3, 786485, 536870912, 3, 786486, 536870912, 3, 786487, 536870912, 3, 786488, 536870912, 3, 786489, 536870912, 3, 786490, 536870912, 3, 786491, 536870912, 3, 786492, 536870912, 3, 786493, 536870912, 3, 786494, 536870912, 3, 786495, 536870912, 3, 786496, 536870912, 3, 786497, 536870912, 3, 786498, 536870912, 3, 786499, 536870912, 3, 786500, 536870912, 3, 786501, 536870912, 3, 786502, 536870912, 3, 786503, 536870912, 3, 786504, 536870912, 3, 786505, 536870912, 3, 786506, 536870912, 3, 786507, 536870912, 3, 786508, 536870912, 3, 786509, 536870912, 3, 786510, 536870912, 3, 786511, 536870912, 3, 786512, 536870912, 3, 786513, 536870912, 3, 786514, 536870912, 3, 786515, 536870912, 3, 786516, 536870912, 3, 786517, 536870912, 3, 786518, 536870912, 3, 786519, 536870912, 3, 786520, 536870912, 3, 786521, 536870912, 3, 786522, 536870912, 3, 786523, 536870912, 3, 786524, 536870912, 3, 786525, 536870912, 3, 786526, 536870912, 3, 786527, 536870912, 3, 851987, 0, 3, 851988, 536870912, 3, 851989, 536870912, 3, 851990, 536870912, 3, 851991, 536870912, 3, 851992, 536870912, 3, 851993, 536870912, 3, 851994, 536870912, 3, 851995, 536870912, 3, 851996, 536870912, 3, 851997, 536870912, 3, 851998, 536870912, 3, 851999, 536870912, 3, 852000, 536870912, 3, 852001, 536870912, 3, 852002, 536870912, 3, 852003, 536870912, 3, 852004, 536870912, 3, 852005, 536870912, 3, 852006, 536870912, 3, 852007, 536870912, 3, 852008, 536870912, 3, 852009, 536870912, 3, 852010, 536870912, 3, 852011, 536870912, 3, 852012, 536870912, 3, 852013, 536870912, 3, 852014, 536870912, 3, 852015, 536870912, 3, 852016, 536870912, 3, 852017, 536870912, 3, 852018, 536870912, 3, 852019, 536870912, 3, 852020, 536870912, 3, 852021, 536870912, 3, 852022, 536870912, 3, 852023, 536870912, 3, 852024, 536870912, 3, 852025, 536870912, 3, 852026, 536870912, 3, 852027, 536870912, 3, 852028, 536870912, 3, 852029, 536870912, 3, 852030, 536870912, 3, 852031, 536870912, 3, 852032, 536870912, 3, 852033, 536870912, 3, 852034, 536870912, 3, 852035, 536870912, 3, 852036, 536870912, 3, 852037, 536870912, 3, 852038, 536870912, 3, 852039, 536870912, 3, 852040, 536870912, 3, 852041, 536870912, 3, 852042, 536870912, 3, 852043, 536870912, 3, 852044, 536870912, 3, 852045, 536870912, 3, 852046, 536870912, 3, 852047, 536870912, 3, 852048, 536870912, 3, 852049, 536870912, 3, 852050, 536870912, 3, 852051, 536870912, 3, 852052, 536870912, 3, 852053, 536870912, 3, 852054, 536870912, 3, 852055, 536870912, 3, 852056, 536870912, 3, 852057, 536870912, 3, 852058, 536870912, 3, 852059, 536870912, 3, 852060, 536870912, 3, 852061, 536870912, 3, 852062, 536870912, 3, 852063, 536870912, 3, 917523, 0, 3, 917524, 536870912, 3, 917525, 536870912, 3, 917526, 536870912, 3, 917527, 536870912, 3, 917528, 536870912, 3, 917529, 536870912, 3, 917530, 536870912, 3, 917531, 536870912, 3, 917532, 536870912, 3, 917533, 536870912, 3, 917534, 536870912, 3, 917535, 536870912, 3, 917536, 536870912, 3, 917537, 536870912, 3, 917538, 536870912, 3, 917539, 536870912, 3, 917540, 536870912, 3, 917541, 536870912, 3, 917542, 536870912, 3, 917543, 536870912, 3, 917544, 536870912, 3, 917545, 536870912, 3, 917546, 536870912, 3, 917547, 536870912, 3, 917548, 536870912, 3, 917549, 536870912, 3, 917550, 536870912, 3, 917551, 536870912, 3, 917552, 536870912, 3, 917553, 536870912, 3, 917554, 536870912, 3, 917555, 536870912, 3, 917556, 536870912, 3, 917557, 536870912, 3, 917558, 536870912, 3, 917559, 536870912, 3, 917560, 536870912, 3, 917561, 536870912, 3, 917562, 536870912, 3, 917563, 536870912, 3, 917564, 536870912, 3, 917565, 536870912, 3, 917566, 536870912, 3, 917567, 536870912, 3, 917568, 536870912, 3, 917569, 536870912, 3, 917570, 536870912, 3, 917571, 536870912, 3, 917572, 536870912, 3, 917573, 536870912, 3, 917574, 536870912, 3, 917575, 536870912, 3, 917576, 536870912, 3, 917577, 536870912, 3, 917578, 536870912, 3, 917579, 536870912, 3, 917580, 536870912, 3, 917581, 536870912, 3, 917582, 536870912, 3, 917583, 536870912, 3, 917584, 536870912, 3, 917585, 536870912, 3, 917586, 536870912, 3, 917587, 536870912, 3, 917588, 536870912, 3, 917589, 536870912, 3, 917590, 536870912, 3, 917591, 536870912, 3, 917592, 536870912, 3, 917593, 536870912, 3, 917594, 536870912, 3, 917595, 536870912, 3, 917596, 536870912, 3, 917597, 536870912, 3, 917598, 536870912, 3, 917599, 536870912, 3, 983059, 0, 3, 983060, 536870912, 3, 983061, 536870912, 3, 983062, 536870912, 3, 983063, 536870912, 3, 983064, 536870912, 3, 983065, 536870912, 3, 983066, 536870912, 3, 983067, 536870912, 3, 983068, 536870912, 3, 983069, 536870912, 3, 983070, 536870912, 3, 983071, 536870912, 3, 983072, 536870912, 3, 983073, 536870912, 3, 983074, 536870912, 3, 983075, 536870912, 3, 983076, 536870912, 3, 983077, 536870912, 3, 983078, 536870912, 3, 983079, 536870912, 3, 983080, 536870912, 3, 983081, 536870912, 3, 983082, 536870912, 3, 983083, 536870912, 3, 983084, 536870912, 3, 983085, 536870912, 3, 983086, 536870912, 3, 983087, 536870912, 3, 983088, 536870912, 3, 983089, 536870912, 3, 983090, 536870912, 3, 983091, 536870912, 3, 983092, 536870912, 3, 983093, 536870912, 3, 983094, 536870912, 3, 983095, 536870912, 3, 983096, 536870912, 3, 983097, 536870912, 3, 983098, 536870912, 3, 983099, 536870912, 3, 983100, 536870912, 3, 983101, 536870912, 3, 983102, 536870912, 3, 983103, 536870912, 3, 983104, 536870912, 3, 983105, 536870912, 3, 983106, 536870912, 3, 983107, 536870912, 3, 983108, 536870912, 3, 983109, 536870912, 3, 983110, 536870912, 3, 983111, 536870912, 3, 983112, 536870912, 3, 983113, 536870912, 3, 983114, 536870912, 3, 983115, 536870912, 3, 983116, 536870912, 3, 983117, 536870912, 3, 983118, 536870912, 3, 983119, 536870912, 3, 983120, 536870912, 3, 983121, 536870912, 3, 983122, 536870912, 3, 983123, 536870912, 3, 983124, 536870912, 3, 983125, 536870912, 3, 983126, 536870912, 3, 983127, 536870912, 3, 983128, 536870912, 3, 983129, 536870912, 3, 983130, 536870912, 3, 983131, 536870912, 3, 983132, 536870912, 3, 983133, 536870912, 3, 983134, 536870912, 3, 983135, 536870912, 3, 1048595, 0, 3, 1048596, 536870912, 3, 1048597, 536870912, 3, 1048598, 536870912, 3, 1048599, 536870912, 3, 1048600, 536870912, 3, 1048601, 536870912, 3, 1048602, 536870912, 3, 1048603, 536870912, 3, 1048604, 536870912, 3, 1048605, 536870912, 3, 1048606, 536870912, 3, 1048607, 536870912, 3, 1048608, 536870912, 3, 1048609, 536870912, 3, 1048610, 536870912, 3, 1048611, 536870912, 3, 1048612, 536870912, 3, 1048613, 536870912, 3, 1048614, 536870912, 3, 1048615, 536870912, 3, 1048616, 536870912, 3, 1048617, 536870912, 3, 1048618, 536870912, 3, 1048619, 536870912, 3, 1048620, 536870912, 3, 1048621, 536870912, 3, 1048622, 536870912, 3, 1048623, 536870912, 3, 1048624, 536870912, 3, 1048625, 536870912, 3, 1048626, 536870912, 3, 1048627, 536870912, 3, 1048628, 536870912, 3, 1048629, 536870912, 3, 1048630, 536870912, 3, 1048631, 536870912, 3, 1048632, 536870912, 3, 1048633, 536870912, 3, 1048634, 536870912, 3, 1048635, 536870912, 3, 1048636, 536870912, 3, 1048637, 536870912, 3, 1048638, 536870912, 3, 1048639, 536870912, 3, 1048640, 536870912, 3, 1048641, 536870912, 3, 1048642, 536870912, 3, 1048643, 536870912, 3, 1048644, 536870912, 3, 1048645, 536870912, 3, 1048646, 536870912, 3, 1048647, 536870912, 3, 1048648, 536870912, 3, 1048649, 536870912, 3, 1048650, 536870912, 3, 1048651, 536870912, 3, 1048652, 536870912, 3, 1048653, 536870912, 3, 1048654, 536870912, 3, 1048655, 536870912, 3, 1048656, 536870912, 3, 1048657, 536870912, 3, 1048658, 536870912, 3, 1048659, 536870912, 3, 1048660, 536870912, 3, 1048661, 536870912, 3, 1048662, 536870912, 3, 1048663, 536870912, 3, 1048664, 536870912, 3, 1048665, 536870912, 3, 1048666, 536870912, 3, 1048667, 536870912, 3, 1048668, 536870912, 3, 1048669, 536870912, 3, 1048670, 536870912, 3, 1048671, 536870912, 3, 1114131, 0, 3, 1114132, 536870912, 3, 1114133, 536870912, 3, 1114134, 536870912, 3, 1114135, 536870912, 3, 1114136, 536870912, 3, 1114137, 536870912, 3, 1114138, 536870912, 3, 1114139, 536870912, 3, 1114140, 536870912, 3, 1114141, 536870912, 3, 1114142, 536870912, 3, 1114143, 536870912, 3, 1114144, 536870912, 3, 1114145, 536870912, 3, 1114146, 536870912, 3, 1114147, 536870912, 3, 1114148, 536870912, 3, 1114149, 536870912, 3, 1114150, 536870912, 3, 1114151, 536870912, 3, 1114152, 536870912, 3, 1114153, 536870912, 3, 1114154, 536870912, 3, 1114155, 536870912, 3, 1114156, 536870912, 3, 1114157, 536870912, 3, 1114158, 536870912, 3, 1114159, 536870912, 3, 1114160, 536870912, 3, 1114161, 536870912, 3, 1114162, 536870912, 3, 1114163, 536870912, 3, 1114164, 536870912, 3, 1114165, 536870912, 3, 1114166, 536870912, 3, 1114167, 536870912, 3, 1114168, 536870912, 3, 1114169, 536870912, 3, 1114170, 536870912, 3, 1114171, 536870912, 3, 1114172, 536870912, 3, 1114173, 536870912, 3, 1114174, 536870912, 3, 1114175, 536870912, 3, 1114176, 536870912, 3, 1114177, 536870912, 3, 1114178, 536870912, 3, 1114179, 536870912, 3, 1114180, 536870912, 3, 1114181, 536870912, 3, 1114182, 536870912, 3, 1114183, 536870912, 3, 1114184, 536870912, 3, 1114185, 536870912, 3, 1114186, 536870912, 3, 1114187, 536870912, 3, 1114188, 536870912, 3, 1114189, 536870912, 3, 1114190, 536870912, 3, 1114191, 536870912, 3, 1114192, 536870912, 3, 1114193, 536870912, 3, 1114194, 536870912, 3, 1114195, 536870912, 3, 1114196, 536870912, 3, 1114197, 536870912, 3, 1114198, 536870912, 3, 1114199, 536870912, 3, 1114200, 536870912, 3, 1114201, 536870912, 3, 1114202, 536870912, 3, 1114203, 536870912, 3, 1114204, 536870912, 3, 1114205, 536870912, 3, 1114206, 536870912, 3, 1114207, 536870912, 3, 1179666, 536870912, 3, 1179667, 0, 3, 1179668, 536870912, 3, 1179669, 536870912, 3, 1179670, 536870912, 3, 1179671, 536870912, 3, 1179672, 536870912, 3, 1179673, 536870912, 3, 1179674, 536870912, 3, 1179675, 536870912, 3, 1179676, 536870912, 3, 1179677, 536870912, 3, 1179678, 536870912, 3, 1179679, 536870912, 3, 1179680, 536870912, 3, 1179681, 536870912, 3, 1179682, 536870912, 3, 1179683, 536870912, 3, 1179684, 536870912, 3, 1179685, 536870912, 3, 1179686, 536870912, 3, 1179687, 536870912, 3, 1179688, 536870912, 3, 1179689, 536870912, 3, 1179690, 536870912, 3, 1179691, 536870912, 3, 1179692, 536870912, 3, 1179693, 536870912, 3, 1179694, 536870912, 3, 1179695, 536870912, 3, 1179696, 536870912, 3, 1179697, 536870912, 3, 1179698, 536870912, 3, 1179699, 536870912, 3, 1179700, 536870912, 3, 1179701, 536870912, 3, 1179702, 536870912, 3, 1179703, 536870912, 3, 1179704, 536870912, 3, 1179705, 536870912, 3, 1179706, 536870912, 3, 1179707, 536870912, 3, 1179708, 536870912, 3, 1179709, 536870912, 3, 1179710, 536870912, 3, 1179711, 536870912, 3, 1179712, 536870912, 3, 1179713, 536870912, 3, 1179714, 536870912, 3, 1179715, 536870912, 3, 1179716, 536870912, 3, 1179717, 536870912, 3, 1179718, 536870912, 3, 1179719, 536870912, 3, 1179720, 536870912, 3, 1179721, 536870912, 3, 1179722, 536870912, 3, 1179723, 536870912, 3, 1179724, 536870912, 3, 1179725, 536870912, 3, 1179726, 536870912, 3, 1179727, 536870912, 3, 1179728, 536870912, 3, 1179729, 536870912, 3, 1179730, 536870912, 3, 1179731, 536870912, 3, 1179732, 536870912, 3, 1179733, 536870912, 3, 1179734, 536870912, 3, 1179735, 536870912, 3, 1179736, 536870912, 3, 1179737, 536870912, 3, 1179738, 0, 2, 1179739, 0, 2, 1179740, 0, 2, 1179741, 0, 2, 1179742, 0, 2, 1179743, 536870912, 3, 1245202, 536870912, 3, 1245203, 536870912, 3, 1245204, 536870912, 3, 1245205, 536870912, 3, 1245206, 536870912, 3, 1245207, 536870912, 3, 1245208, 536870912, 3, 1245209, 536870912, 3, 1245210, 536870912, 3, 1245211, 536870912, 3, 1245212, 536870912, 3, 1245213, 536870912, 3, 1245214, 536870912, 3, 1245215, 536870912, 3, 1245216, 536870912, 3, 1245217, 536870912, 3, 1245218, 536870912, 3, 1245219, 536870912, 3, 1245220, 536870912, 3, 1245221, 536870912, 3, 1245222, 536870912, 3, 1245223, 536870912, 3, 1245224, 536870912, 3, 1245225, 536870912, 3, 1245226, 536870912, 3, 1245227, 536870912, 3, 1245228, 536870912, 3, 1245229, 536870912, 3, 1245230, 536870912, 3, 1245231, 536870912, 3, 1245232, 536870912, 3, 1245233, 536870912, 3, 1245234, 536870912, 3, 1245235, 536870912, 3, 1245236, 536870912, 3, 1245237, 536870912, 3, 1245238, 536870912, 3, 1245239, 536870912, 3, 1245240, 536870912, 3, 1245241, 536870912, 3, 1245242, 536870912, 3, 1245243, 536870912, 3, 1245244, 536870912, 3, 1245245, 536870912, 3, 1245246, 536870912, 3, 1245247, 536870912, 3, 1245248, 536870912, 3, 1245249, 536870912, 3, 1245250, 536870912, 3, 1245251, 536870912, 3, 1245252, 536870912, 3, 1245253, 536870912, 3, 1245254, 536870912, 3, 1245255, 536870912, 3, 1245256, 536870912, 3, 1245257, 536870912, 3, 1245258, 536870912, 3, 1245259, 536870912, 3, 1245260, 536870912, 3, 1245261, 536870912, 3, 1245262, 536870912, 3, 1245263, 536870912, 3, 1245264, 536870912, 3, 1245265, 536870912, 3, 1245266, 536870912, 3, 1245267, 536870912, 3, 1245268, 536870912, 3, 1245269, 536870912, 3, 1245270, 536870912, 3, 1245271, 536870912, 3, 1245272, 536870912, 3, 1245273, 0, 2, 1245274, 0, 2, 1245275, 0, 2, 1245276, 0, 2, 1245277, 0, 2, 1245278, 0, 2, 1245279, 536870912, 3, 1310738, 536870912, 3, 1310739, 536870912, 3, 1310740, 536870912, 3, 1310741, 536870912, 3, 1310742, 536870912, 3, 1310743, 536870912, 3, 1310744, 536870912, 3, 1310745, 536870912, 3, 1310746, 536870912, 3, 1310747, 536870912, 3, 1310748, 536870912, 3, 1310749, 536870912, 3, 1310750, 536870912, 3, 1310751, 536870912, 3, 1310752, 536870912, 3, 1310753, 536870912, 3, 1310754, 536870912, 3, 1310755, 536870912, 3, 1310756, 536870912, 3, 1310757, 536870912, 3, 1310758, 536870912, 3, 1310759, 536870912, 3, 1310760, 536870912, 3, 1310761, 536870912, 3, 1310762, 536870912, 3, 1310763, 536870912, 3, 1310764, 536870912, 3, 1310765, 536870912, 3, 1310766, 536870912, 3, 1310767, 536870912, 3, 1310768, 536870912, 3, 1310769, 536870912, 3, 1310770, 536870912, 3, 1310771, 536870912, 3, 1310772, 536870912, 3, 1310773, 536870912, 3, 1310774, 536870912, 3, 1310775, 536870912, 3, 1310776, 536870912, 3, 1310777, 536870912, 3, 1310778, 536870912, 3, 1310779, 536870912, 3, 1310780, 536870912, 3, 1310781, 536870912, 3, 1310782, 536870912, 3, 1310783, 536870912, 3, 1310784, 536870912, 3, 1310785, 536870912, 3, 1310786, 536870912, 3, 1310787, 536870912, 3, 1310788, 536870912, 3, 1310789, 536870912, 3, 1310790, 536870912, 3, 1310791, 536870912, 3, 1310792, 536870912, 3, 1310793, 536870912, 3, 1310794, 536870912, 3, 1310795, 536870912, 3, 1310796, 536870912, 3, 1310797, 536870912, 3, 1310798, 536870912, 3, 1310799, 536870912, 3, 1310800, 536870912, 3, 1310801, 536870912, 3, 1310802, 536870912, 3, 1310803, 536870912, 3, 1310804, 536870912, 3, 1310805, 536870912, 3, 1310806, 536870912, 3, 1310807, 536870912, 3, 1310808, 536870912, 3, 1310809, 0, 2, 1310810, 0, 2, 1310811, 0, 2, 1310812, 0, 2, 1310813, 0, 2, 1310814, 0, 2, 1310815, 536870912, 3, 1376274, 0, 2, 1376275, 0, 2, 1376276, 0, 2, 1376277, 0, 2, 1376278, 0, 2, 1376279, 0, 2, 1376280, 0, 2, 1376281, 0, 2, 1376282, 0, 2, 1376283, 0, 2, 1376284, 0, 2, 1376285, 0, 2, 1376286, 0, 2, 1376287, 0, 2, 1441801, 0, 0, 1441802, 0, 0, 1441809, 0, 65536, 1441810, 0, 65537, 1441811, 0, 65536, 1441812, 0, 65537, 1441813, 0, 65536, 1441814, 0, 65537, 1441815, 0, 65536, 1441816, 0, 65537, 1441817, 0, 65536, 1441818, 0, 65537, 1441819, 0, 65536, 1441820, 0, 65537, 1441821, 0, 65536, 1441822, 0, 65537, 1441823, 0, 65536, 1507328, 0, 131074, 1507329, 0, 131074, 1507330, 0, 131074, 1507331, 0, 131074, 1507332, 0, 131074, 1507333, 0, 131074, 1507334, 0, 131074, 1507335, 0, 131074, 1507336, 0, 131074, 1507337, 0, 131074, 1507338, 0, 131074, 1507339, 0, 131074, 1507340, 0, 131074, 1507341, 0, 131074, 1507342, 0, 131074, 1507346, 0, 131074, 1507347, 0, 131074, 1507348, 0, 131074, 1507349, 0, 131074, 1507350, 0, 131074, 1507351, 0, 131074, 1507352, 0, 131074, 1507353, 0, 131074, 1507354, 0, 131074, 1507355, 0, 131074, 1507356, 0, 131074, 1507357, 0, 131074, 1507358, 0, 131074, 1507359, 0, 131074 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Graffiti" type="Node2D" parent="."]
+script = ExtResource( 24 )
+
+[node name="Msx" type="Sprite" parent="Graffiti"]
+position = Vector2( 289, 118 )
+texture = ExtResource( 27 )
+
+[node name="TgirlsRule" type="Sprite" parent="Graffiti"]
+position = Vector2( 585, 60 )
+texture = ExtResource( 26 )
+
+[node name="MsxWasHere" type="Sprite" parent="Graffiti"]
+position = Vector2( 732, 70 )
+texture = ExtResource( 28 )
+
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 16 )
+tile_set = ExtResource( 3 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 9
+format = 1
+tile_data = PoolIntArray( -65485, 1, 196609, -65484, 1, 196610, -65483, 1, 196610, -65482, 1, 196611, -65480, 1, 196609, -65479, 1, 196611, -65476, 1, 196608, 63, 1, 1, 64, 1, 3, 65599, 1, 65537, 65600, 1, 65539, 131135, 1, 65537, 131136, 1, 65539, 131168, 1, 196608, 196625, 0, 131072, 196626, 0, 131073, 196627, 0, 131073, 196628, 0, 131073, 196629, 0, 131073, 196630, 0, 131073, 196631, 0, 131073, 196642, 0, 131073, 196643, 0, 131073, 196644, 0, 131073, 196645, 0, 131073, 196646, 0, 131073, 196647, 0, 131073, 196648, 0, 131073, 196649, 0, 131073, 196650, 0, 131073, 196651, 0, 131073, 196652, 0, 131073, 196653, 0, 131073, 196654, 0, 131073, 196655, 0, 131073, 196656, 0, 131073, 196657, 0, 131073, 196658, 0, 131073, 196659, 0, 131073, 196662, 0, 131073, 196663, 0, 131073, 196666, 0, 131073, 196667, 0, 131073, 196671, 1, 65537, 196672, 1, 65539, 196673, 0, 131073, 196676, 0, 131073, 196677, 0, 131073, 196678, 0, 131073, 196679, 0, 131073, 196680, 0, 131073, 196681, 0, 131073, 196682, 0, 131073, 196683, 0, 131073, 196684, 0, 131073, 196685, 0, 131073, 196686, 0, 131073, 196687, 0, 131073, 196688, 0, 131073, 196689, 0, 131073, 196690, 0, 131073, 196691, 0, 131073, 196692, 0, 131073, 196698, 0, 131073, 196699, 0, 131073, 196700, 0, 131073, 196701, 0, 131073, 196702, 0, 131073, 196703, 0, 131073, 262162, 1, 1, 262163, 1, 196610, 262164, 1, 196610, 262165, 1, 196610, 262166, 1, 196610, 262167, 1, 196611, 262178, 1, 196609, 262179, 1, 196610, 262180, 1, 196610, 262181, 1, 196610, 262182, 1, 196610, 262183, 1, 196610, 262184, 1, 196610, 262185, 1, 196610, 262186, 1, 196610, 262187, 1, 196610, 262188, 1, 196610, 262189, 1, 196610, 262190, 1, 196610, 262191, 1, 196610, 262192, 1, 196610, 262193, 1, 196610, 262194, 1, 196610, 262195, 1, 196611, 262198, 1, 196609, 262199, 1, 196611, 262202, 1, 196609, 262203, 1, 196611, 262207, 1, 131073, 262208, 1, 131074, 262209, 1, 196611, 262212, 1, 196609, 262213, 1, 196610, 262214, 1, 196610, 262215, 1, 196610, 262216, 1, 196610, 262217, 1, 196610, 262218, 1, 196610, 262219, 1, 196610, 262220, 1, 196610, 262221, 1, 196610, 262222, 1, 196610, 262223, 1, 196610, 262224, 1, 196610, 262225, 1, 196610, 262226, 1, 196610, 262227, 1, 196610, 262228, 1, 196611, 262234, 1, 196609, 262235, 1, 196610, 262236, 1, 196610, 262237, 1, 196610, 262238, 1, 196610, 262239, 1, 3, 327693, 1, 196609, 327694, 1, 196610, 327695, 1, 196611, 327698, 1, 65536, 327767, 1, 0, 327775, 1, 65536, 393234, 1, 65536, 393302, 1, 1, 393303, 1, 131075, 393311, 1, 65536, 458770, 1, 65536, 458813, 1, 196609, 458814, 1, 196610, 458815, 1, 2, 458816, 1, 196610, 458817, 1, 196610, 458818, 1, 196610, 458819, 1, 196610, 458820, 1, 3, 458830, 1, 196609, 458831, 1, 196610, 458832, 1, 196610, 458833, 1, 196610, 458834, 1, 196610, 458835, 1, 196610, 458836, 1, 2, 458837, 1, 196610, 458838, 1, 131075, 458847, 1, 65536, 524306, 1, 65537, 524307, 536870913, 196610, 524308, 536870913, 196610, 524309, 536870913, 196610, 524310, 536870913, 196610, 524311, 536870913, 196610, 524312, 536870913, 196610, 524313, 536870913, 196610, 524314, 536870913, 196610, 524315, 1, 196611, 524324, 1, 196609, 524325, 1, 196610, 524326, 1, 196610, 524327, 1, 196610, 524328, 1, 196610, 524329, 1, 196610, 524330, 1, 196610, 524331, 1, 196610, 524332, 1, 196610, 524333, 1, 196610, 524334, 1, 196610, 524335, 1, 2, 524336, 1, 196610, 524337, 1, 196610, 524338, 1, 196611, 524351, 1, 65536, 524356, 1, 65537, 524357, 1, 3, 524365, 1, 196608, 524372, 1, 131072, 524383, 1, 65536, 589842, 1, 65536, 589871, 1, 65536, 589878, 1, 196609, 589879, 1, 196611, 589881, 1, 196609, 589882, 1, 196611, 589887, 1, 65536, 589892, 1, 65537, 589893, 1, 65538, 589894, 1, 3, 589919, 1, 65536, 655368, 1, 196609, 655369, 1, 196610, 655370, 1, 196610, 655371, 1, 196610, 655372, 1, 196610, 655373, 1, 196611, 655378, 1, 65536, 655391, 1, 196609, 655392, 1, 196610, 655393, 1, 196611, 655407, 1, 65536, 655423, 1, 65536, 655428, 1, 131073, 655429, 1, 131074, 655430, 1, 65538, 655431, 1, 196610, 655432, 1, 196610, 655433, 1, 196610, 655434, 1, 196610, 655435, 1, 196610, 655436, 1, 196611, 655444, 1, 0, 655455, 1, 65536, 720914, 1, 65536, 720943, 1, 65536, 720949, 1, 1, 720950, 1, 196610, 720951, 1, 196610, 720952, 1, 196610, 720953, 1, 196610, 720954, 1, 196610, 720955, 1, 3, 720959, 1, 65536, 720966, 1, 65536, 720978, 1, 196609, 720979, 1, 196610, 720980, 1, 65539, 720991, 1, 65536, 786450, 1, 65536, 786468, 1, 196609, 786469, 1, 196611, 786475, 1, 196609, 786476, 1, 196610, 786477, 1, 196611, 786479, 1, 131072, 786485, 1, 65536, 786491, 1, 65536, 786495, 1, 65536, 786499, 1, 196608, 786502, 1, 65536, 786511, 1, 196608, 786516, 1, 65537, 786517, 1, 196611, 786520, 1, 196609, 786521, 1, 196611, 786527, 1, 65536, 851986, 1, 65537, 851987, 1, 196610, 851988, 1, 196610, 851989, 1, 196611, 852008, 1, 196608, 852017, 1, 196609, 852018, 1, 196611, 852021, 1, 131072, 852027, 1, 65536, 852030, 1, 196609, 852031, 1, 65539, 852038, 1, 131072, 852052, 1, 65536, 852059, 1, 196609, 852060, 1, 196611, 852063, 1, 65536, 917522, 1, 65536, 917563, 1, 65536, 917567, 1, 131072, 917580, 1, 0, 917583, 1, 0, 917588, 1, 65536, 917598, 1, 1, 917599, 1, 65539, 983047, 1, 196609, 983048, 1, 196610, 983049, 536870913, 196610, 983050, 536870913, 196610, 983051, 536870913, 196610, 983052, 536870913, 196610, 983053, 536870913, 196610, 983054, 536870913, 196610, 983055, 536870913, 196610, 983056, 536870913, 196610, 983057, 1, 196610, 983058, 1, 65539, 983063, 1, 196609, 983064, 1, 196610, 983065, 1, 196611, 983099, 1, 65537, 983100, 1, 196611, 983114, 1, 0, 983116, 1, 65536, 983119, 1, 65536, 983124, 1, 65536, 983134, 1, 65537, 983135, 1, 65539, 1048594, 1, 65536, 1048635, 1, 65536, 1048650, 1, 131073, 1048651, 1, 196610, 1048652, 1, 131074, 1048653, 1, 196610, 1048654, 1, 196610, 1048655, 1, 131075, 1048660, 1, 131072, 1048669, 1, 1, 1048670, 1, 65538, 1048671, 1, 65539, 1114117, 1, 196609, 1114118, 1, 196611, 1114130, 1, 131072, 1114142, 1, 1, 1114143, 1, 196610, 1114144, 1, 196610, 1114145, 1, 196610, 1114146, 1, 196610, 1114147, 1, 196610, 1114148, 1, 196610, 1114149, 1, 196610, 1114150, 1, 196610, 1114151, 1, 196610, 1114152, 1, 196610, 1114153, 1, 196611, 1114157, 1, 196609, 1114158, 1, 196610, 1114159, 1, 196610, 1114160, 1, 196610, 1114161, 1, 196610, 1114162, 1, 196611, 1114164, 1, 196609, 1114165, 1, 196610, 1114166, 1, 196610, 1114167, 1, 196610, 1114168, 1, 196610, 1114169, 1, 196610, 1114170, 1, 196610, 1114171, 1, 131074, 1114172, 1, 196610, 1114173, 1, 196610, 1114174, 1, 196610, 1114175, 1, 196610, 1114176, 1, 196610, 1114177, 1, 196610, 1114178, 1, 196610, 1114179, 1, 196610, 1114180, 1, 196610, 1114181, 1, 196610, 1114182, 1, 196611, 1114201, 1, 1, 1114202, 1, 196610, 1114203, 1, 196610, 1114204, 1, 196610, 1114205, 1, 131074, 1114206, 1, 131074, 1114207, 1, 65539, 1179676, 1, 196609, 1179677, 1, 196610, 1179678, 1, 131075, 1179737, 1, 131072, 1179743, 1, 65536, 1245184, 1, 196609, 1245185, 1, 196611, 1245279, 1, 65536, 1310815, 1, 65536, 1376269, 0, 65538, 1376270, 0, 65539, 1376271, 1, 1, 1376272, 1, 2, 1376273, 1, 2, 1376274, 1, 2, 1376275, 1, 2, 1376276, 536870913, 2, 1376277, 536870913, 2, 1376278, 536870913, 2, 1376279, 536870913, 2, 1376280, 1, 2, 1376281, 1, 2, 1376282, 536870913, 2, 1376283, 1, 2, 1376284, 1, 2, 1376285, 1, 2, 1376286, 1, 2, 1376287, 1, 2, 1376288, 1, 2, 1376289, 1, 2, 1376290, 1, 2, 1376291, 1, 2, 1376292, 1, 2, 1376293, 1, 2, 1376294, 1, 2, 1376295, 1, 2, 1376296, 1, 2, 1376297, 1, 2, 1376298, 1, 2, 1376299, 1, 2, 1376300, 1, 2, 1376301, 1, 2, 1376302, 1, 2, 1376303, 1, 2, 1376304, 1, 2, 1376305, 1, 2, 1376306, 1, 2, 1376307, 1, 2, 1376308, 1, 2, 1376309, 1, 2, 1376310, 1, 2, 1376311, 1, 2, 1376312, 1, 2, 1376313, 1, 2, 1376314, 1, 2, 1376315, 1, 2, 1376316, 1, 2, 1376317, 1, 2, 1376318, 1, 2, 1376319, 1, 2, 1376320, 1, 2, 1376321, 1, 2, 1376322, 1, 2, 1376323, 1, 2, 1376324, 1, 2, 1376325, 1, 2, 1376326, 1, 2, 1376327, 1, 2, 1376328, 1, 2, 1376329, 1, 2, 1376330, 1, 2, 1376331, 1, 2, 1376332, 1, 2, 1376333, 1, 2, 1376334, 1, 2, 1376335, 1, 2, 1376336, 1, 2, 1376337, 1, 2, 1376338, 1, 2, 1376339, 1, 2, 1376340, 1, 2, 1376341, 1, 2, 1376342, 1, 2, 1376343, 1, 2, 1376344, 1, 2, 1376345, 1, 2, 1376346, 1, 2, 1376347, 1, 2, 1376348, 1, 2, 1376349, 1, 2, 1376350, 1, 2, 1376351, 1, 65539, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 1, 1, 1441806, 1, 2, 1441807, 1, 65538, 1441808, 1, 65538, 1441809, 1, 65538, 1441810, 1, 65538, 1441811, 1, 65538, 1441812, 536870913, 65538, 1441813, 536870913, 65538, 1441814, 536870913, 65538, 1441815, 536870913, 65538, 1441816, 1, 65538, 1441817, 1, 65538, 1441818, 536870913, 65538, 1441819, 1, 65538, 1441820, 1, 65538, 1441821, 1, 65538, 1441822, 1, 65538, 1441823, 1, 65538, 1441824, 1, 65538, 1441825, 1, 65538, 1441826, 1, 65538, 1441827, 1, 65538, 1441828, 1, 65538, 1441829, 1, 65538, 1441830, 1, 65538, 1441831, 1, 65538, 1441832, 1, 65538, 1441833, 1, 65538, 1441834, 1, 65538, 1441835, 1, 65538, 1441836, 1, 65538, 1441837, 1, 65538, 1441838, 1, 65538, 1441839, 1, 65538, 1441840, 1, 65538, 1441841, 1, 65538, 1441842, 1, 65538, 1441843, 1, 65538, 1441844, 1, 65538, 1441845, 1, 65538, 1441846, 1, 65538, 1441847, 1, 65538, 1441848, 1, 65538, 1441849, 1, 65538, 1441850, 1, 65538, 1441851, 1, 65538, 1441852, 1, 65538, 1441853, 1, 65538, 1441854, 1, 65538, 1441855, 1, 65538, 1441856, 1, 65538, 1441857, 1, 65538, 1441858, 1, 65538, 1441859, 1, 65538, 1441860, 1, 65538, 1441861, 1, 65538, 1441862, 1, 65538, 1441863, 1, 65538, 1441864, 1, 65538, 1441865, 1, 65538, 1441866, 1, 65538, 1441867, 1, 65538, 1441868, 1, 65538, 1441869, 1, 65538, 1441870, 1, 65538, 1441871, 1, 65538, 1441872, 1, 65538, 1441873, 1, 65538, 1441874, 1, 65538, 1441875, 1, 65538, 1441876, 1, 65538, 1441877, 1, 65538, 1441878, 1, 65538, 1441879, 1, 65538, 1441880, 1, 65538, 1441881, 1, 65538, 1441882, 1, 65538, 1441883, 1, 65538, 1441884, 1, 65538, 1441885, 1, 65538, 1441886, 1, 65538, 1441887, 1, 65539, 1507328, 536870913, 196609, 1507329, 536870913, 196610, 1507330, 536870913, 196610, 1507331, 536870913, 196610, 1507332, 536870913, 196610, 1507333, 536870913, 196610, 1507334, 536870913, 196610, 1507335, 536870913, 196610, 1507336, 536870913, 196610, 1507337, 1, 196610, 1507338, 1, 196610, 1507339, 536870913, 196610, 1507340, 536870913, 196610, 1507341, 536870913, 131074, 1507342, 536870913, 131074, 1507343, 1, 131074, 1507344, 1, 131074, 1507345, 1, 131074, 1507346, 1, 131074, 1507347, 536870913, 131074, 1507348, 536870913, 131074, 1507349, 536870913, 131074, 1507350, 536870913, 131074, 1507351, 536870913, 131074, 1507352, 536870913, 131074, 1507353, 536870913, 131074, 1507354, 536870913, 131074, 1507355, 536870913, 131074, 1507356, 1, 131074, 1507357, 1, 131074, 1507358, 1, 131074, 1507359, 1, 131074, 1507360, 1, 131074, 1507361, 1, 131074, 1507362, 1, 131074, 1507363, 1, 131074, 1507364, 1, 131074, 1507365, 1, 131074, 1507366, 1, 131074, 1507367, 1, 131074, 1507368, 1, 131074, 1507369, 1, 131074, 1507370, 1, 131074, 1507371, 1, 131074, 1507372, 1, 131074, 1507373, 1, 131074, 1507374, 1, 131074, 1507375, 1, 131074, 1507376, 1, 131074, 1507377, 1, 131074, 1507378, 1, 131074, 1507379, 1, 131074, 1507380, 1, 131074, 1507381, 1, 131074, 1507382, 1, 131074, 1507383, 1, 131074, 1507384, 1, 131074, 1507385, 1, 131074, 1507386, 1, 131074, 1507387, 1, 131074, 1507388, 1, 131074, 1507389, 1, 131074, 1507390, 1, 131074, 1507391, 1, 131074, 1507392, 1, 131074, 1507393, 1, 131074, 1507394, 1, 131074, 1507395, 1, 131074, 1507396, 1, 131074, 1507397, 1, 131074, 1507398, 1, 131074, 1507399, 1, 131074, 1507400, 1, 131074, 1507401, 1, 131074, 1507402, 1, 131074, 1507403, 1, 131074, 1507404, 1, 131074, 1507405, 1, 131074, 1507406, 1, 131074, 1507407, 1, 131074, 1507408, 1, 131074, 1507409, 1, 131074, 1507410, 1, 131074, 1507411, 1, 131074, 1507412, 1, 131074, 1507413, 1, 131074, 1507414, 1, 131074, 1507415, 1, 131074, 1507416, 1, 131074, 1507417, 1, 131074, 1507418, 1, 131074, 1507419, 1, 131074, 1507420, 1, 131074, 1507421, 1, 131074, 1507422, 1, 131074, 1507423, 1, 131075 )
+
+[node name="OccludeMsx" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 16 )
+z_index = 10
+z_as_relative = false
+tile_set = ExtResource( 3 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 1441801, 0, 0, 1441802, 0, 0, 1507337, 1, 196610, 1507338, 1, 196610 )
+
+[node name="Player" parent="." instance=ExtResource( 2 )]
+position = Vector2( 40, 176 )
+
+[node name="Ladder" type="TileMap" parent="."]
+tile_set = ExtResource( 14 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 393226, 536870912, 196609, 458762, 536870912, 196609, 524298, 536870912, 196609, 589834, 536870912, 196609, 589853, 536870912, 196609, 655376, 0, 196609, 655389, 536870912, 196609, 720912, 0, 196609, 720925, 536870912, 196609, 786448, 0, 196609, 786461, 536870912, 196609, 851984, 0, 196609, 1048648, 0, 196609, 1114155, 0, 196609, 1114184, 0, 196609, 1179651, 536870912, 196609, 1179675, 0, 196609, 1179691, 0, 196609, 1179720, 0, 196609, 1245187, 536870912, 196609 )
+
+[node name="Exit" parent="." instance=ExtResource( 5 )]
+position = Vector2( 8, 164 )
+cost = 25
+
+[node name="Enemies" type="Node2D" parent="."]
+
+[node name="Cop" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 88, 112 )
+left_boundary = 3.0
+right_boundary = 6.0
+turn_time = 1.0
+
+[node name="Cop2" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 136, 160 )
+scale = Vector2( -1, 1 )
+turn_time = inf
+
+[node name="OfficerRabbitPCoaster" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 200, 112 )
+turn_time = inf
+
+[node name="Cop9" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 400, 160 )
+left_boundary = 5.0
+
+[node name="Cop10" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 680, 160 )
+scale = Vector2( -1, 1 )
+walk_speed = 0.0
+
+[node name="Cop6" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 184, 56 )
+left_boundary = 4.0
+right_boundary = 4.0
+
+[node name="Cop7" parent="Enemies" instance=ExtResource( 10 )]
+position = Vector2( 352, 19 )
+left_boundary = 10.0
+
+[node name="LaserWall" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 336, 40 )
+left_up_boundary = 5.0
+right_down_boundary = 6.0
+speed = 25
+off_time = 2.0
+on_time = 2.0
+
+[node name="LaserWall5" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 456, 88 )
+scale = Vector2( 1, -1 )
+left_up_boundary = 4.0
+right_down_boundary = 2.0
+speed = 25
+off_time = 0.0
+on_time = inf
+
+[node name="LaserWall3" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 336, 72 )
+
+[node name="LaserWall10" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 312, 72 )
+
+[node name="LaserWall7" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 192, 128 )
+speed = 0
+off_time = 0.5
+
+[node name="LaserWall8" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 408, 40 )
+speed = 0
+off_time = 0.7
+on_time = 0.7
+
+[node name="LaserWall2" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 760, 88 )
+rotation = 1.5708
+left_up_boundary = 4.0
+move_direction = 1
+on_time = inf
+
+[node name="LaserWall9" parent="Enemies" groups=["yellow_star_laser"] instance=ExtResource( 15 )]
+position = Vector2( 376, 80 )
+rotation = 1.5708
+move_direction = 1
+on_time = inf
+
+[node name="LaserWall6" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 672, 96 )
+rotation = 1.5708
+right_down_boundary = 4.0
+move_direction = 1
+on_time = inf
+
+[node name="LaserWall4" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 520, 24 )
+rotation = -1.5708
+move_direction = 1
+off_time = 4.0
+
+[node name="LaserWall11" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 512, 96 )
+rotation = -1.5708
+move_direction = 1
+off_time = 4.0
+on_time = 1.5
+delay = 1.0
+
+[node name="LaserWall12" parent="Enemies" instance=ExtResource( 15 )]
+position = Vector2( 560, 104 )
+rotation = 1.5708
+move_direction = 1
+off_time = 4.0
+on_time = 1.5
+
+[node name="Environment" type="Node2D" parent="."]
+
+[node name="Ladder" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 24, 144 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder2" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 128, 80 )
+scale = Vector2( 1, 4 )
+
+[node name="Ladder6" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 576, 128 )
+scale = Vector2( 1, 3 )
+
+[node name="Ladder4" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 232, 72 )
+scale = Vector2( 1, 4 )
+
+[node name="Ladder5" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 216, 144 )
+can_climb_right = false
+
+[node name="Ladder7" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 344, 136 )
+scale = Vector2( 1, 2 )
+
+[node name="Ladder3" parent="Environment" instance=ExtResource( 7 )]
+position = Vector2( 80, 48 )
+scale = Vector2( 1, 4 )
+
+[node name="TurningPlatform" parent="Environment" instance=ExtResource( 17 )]
+position = Vector2( 696, 144 )
+time = 20.0
+texture = ExtResource( 34 )
+
+[node name="TurningPlatform3" parent="Environment" instance=ExtResource( 17 )]
+position = Vector2( 40, 72 )
+time = 20.0
+texture = ExtResource( 34 )
+
+[node name="TurningPlatform6" parent="Environment" instance=ExtResource( 17 )]
+position = Vector2( 520, 112 )
+time = 40.0
+texture = ExtResource( 34 )
+
+[node name="TurningPlatform8" parent="Environment" instance=ExtResource( 17 )]
+position = Vector2( 488, 32 )
+time = 50.0
+texture = ExtResource( 34 )
+
+[node name="TurningPlatform4" parent="Environment" instance=ExtResource( 17 )]
+position = Vector2( 16, 56 )
+time = 20.0
+delay = 1.0
+texture = ExtResource( 34 )
+
+[node name="JailBars" parent="Environment" groups=["cell"] instance=ExtResource( 21 )]
+position = Vector2( 712, 152 )
+scale = Vector2( 1, 2 )
+
+[node name="Button" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 736, 128 )
+target_group = "cell"
+
+[node name="Button2" parent="Environment" instance=ExtResource( 18 )]
+position = Vector2( 312, 19 )
+target_group = "yellow_star_laser"
+
+[node name="MsX" parent="Environment" groups=["cell"] instance=ExtResource( 22 )]
+position = Vector2( 744, 158 )
+hatch = NodePath("../Hatch/HatchAnim")
+
+[node name="Barrier" parent="Environment" instance=ExtResource( 23 )]
+position = Vector2( 424, 112 )
+scale = Vector2( 1, 24 )
+cost = 40
+
+[node name="Hatch" type="Sprite" parent="Environment"]
+position = Vector2( 82, 171 )
+z_index = -2
+texture = ExtResource( 33 )
+hframes = 3
+
+[node name="HatchAnim" type="AnimationPlayer" parent="Environment/Hatch"]
+anims/open = SubResource( 2 )
+
+[node name="Collectibles" type="Node2D" parent="."]
+
+[node name="Star" parent="Collectibles" instance=ExtResource( 11 )]
+position = Vector2( 192, 136 )
+
+[node name="Star2" parent="Collectibles" instance=ExtResource( 11 )]
+position = Vector2( 392, 96 )
+color = 2
+
+[node name="Arrow" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 16, 40 )
+
+[node name="Arrow2" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 176, 56 )
+
+[node name="Arrow4" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 160, 96 )
+
+[node name="Arrow5" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 368, 16 )
+
+[node name="Arrow6" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 448, 128 )
+
+[node name="Arrow8" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 456, 128 )
+
+[node name="Arrow7" parent="Collectibles" instance=ExtResource( 13 )]
+position = Vector2( 440, 128 )
+
+[node name="Shard" parent="Collectibles" instance=ExtResource( 19 )]
+position = Vector2( 536, 72 )
+number = 2
+
+[node name="Shard2" parent="Collectibles" instance=ExtResource( 19 )]
+position = Vector2( 656, 80 )
+number = 3
+
+[node name="Gold" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 40, 128 )
+
+[node name="Gold2" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 56, 112 )
+
+[node name="Gold3" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 104, 112 )
+
+[node name="Gold5" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 360, 128 )
+
+[node name="Gold38" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 616, 160 )
+
+[node name="Gold39" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 400, 128 )
+
+[node name="Gold6" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 496, 48 )
+
+[node name="Gold9" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 104, 32 )
+
+[node name="Gold10" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 120, 32 )
+
+[node name="Gold12" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 152, 16 )
+
+[node name="Gold13" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 504, 128 )
+
+[node name="Gold14" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 184, 16 )
+
+[node name="Gold15" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 216, 56 )
+
+[node name="Gold16" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 288, 56 )
+
+[node name="Gold20" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 224, 128 )
+
+[node name="Gold21" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 496, 96 )
+
+[node name="Gold22" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 272, 128 )
+
+[node name="Gold23" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 568, 160 )
+
+[node name="Gold24" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 312, 128 )
+
+[node name="Gold25" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 432, 64 )
+
+[node name="Gold26" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 472, 16 )
+
+[node name="Gold27" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 464, 64 )
+
+[node name="Gold28" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 520, 160 )
+
+[node name="Gold31" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 560, 64 )
+
+[node name="Gold40" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 592, 112 )
+
+[node name="Gold41" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 608, 104 )
+
+[node name="Gold42" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 632, 88 )
+
+[node name="Gold43" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 152, 160 )
+
+[node name="Gold44" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 200, 160 )
+
+[node name="Gold45" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 248, 160 )
+
+[node name="Gold46" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 296, 160 )
+
+[node name="Gold47" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 392, 160 )
+
+[node name="Gold48" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 472, 160 )
+
+[node name="Gold49" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 344, 160 )
+
+[node name="Gold50" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 440, 160 )
+
+[node name="Gold32" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 576, 72 )
+
+[node name="Gold33" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 640, 16 )
+
+[node name="Gold34" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 632, 48 )
+
+[node name="Gold35" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 672, 48 )
+
+[node name="Gold36" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 600, 72 )
+
+[node name="Gold37" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 592, 16 )
+
+[node name="Gold29" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 528, 48 )
+
+[node name="Gold30" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 440, 16 )
+
+[node name="Gold17" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 320, 56 )
+
+[node name="Gold18" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 368, 56 )
+
+[node name="Gold19" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 400, 56 )
+
+[node name="Gold11" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 392, 16 )
+
+[node name="Gold7" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 96, 72 )
+
+[node name="Gold8" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 480, 112 )
+
+[node name="Gold4" parent="Collectibles" instance=ExtResource( 20 )]
+position = Vector2( 664, 160 )
+
+[node name="Star3" parent="Collectibles" instance=ExtResource( 11 )]
+position = Vector2( 360, 88 )
+color = 1
+
+[node name="Star4" parent="Collectibles" instance=ExtResource( 11 )]
+position = Vector2( 560, 16 )
+color = 3
+
+[node name="Star5" parent="Collectibles" instance=ExtResource( 11 )]
+position = Vector2( 680, 88 )
+color = 4
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( -4.00429, 96 )
+shape = SubResource( 1 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 772, 96 )
+shape = SubResource( 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_left = 256.0
+margin_right = 512.0
+margin_bottom = 192.0
+color = Color( 0.756863, 0, 1, 0.129412 )
+script = ExtResource( 8 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ColorRect2" type="ColorRect" parent="."]
+margin_left = 512.0
+margin_right = 768.0
+margin_bottom = 192.0
+color = Color( 0.219608, 1, 0, 0.129412 )
+script = ExtResource( 8 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="HUD" parent="." instance=ExtResource( 12 )]
+song_name = "♫Spine_V2"
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 31 )
+margin_left = 636.0
+margin_top = 198.0
+margin_right = 797.0
+margin_bottom = 221.0
+theme = ExtResource( 32 )
+text = "Help me get
+outta here!"
+
+[node name="SpeccyDetection" type="VisibilityNotifier2D" parent="."]
+position = Vector2( 384, 136 )
+rect = Rect2( -10, -20, 20, 20 )
+
+[node name="Speccy" parent="SpeccyDetection" instance=ExtResource( 35 )]
+flip = true
+message = "kill_em_all"
+
+[connection signal="screen_entered" from="SpeccyDetection" to="SpeccyDetection/Speccy" method="appear"]
+[connection signal="screen_exited" from="SpeccyDetection" to="SpeccyDetection" method="queue_free"]
diff --git a/maps/test_room.tscn b/maps/test_room.tscn
index b8cc8ae..48d9571 100644
--- a/maps/test_room.tscn
+++ b/maps/test_room.tscn
@@ -1,30 +1,63 @@
-[gd_scene load_steps=15 format=2]
+[gd_scene load_steps=33 format=2]
-[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1]
-[ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2]
-[ext_resource path="res://tilesets/t_canopy.tres" type="TileSet" id=3]
+[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=1]
+[ext_resource path="res://objects/npc/speccy.tscn" type="PackedScene" id=2]
+[ext_resource path="res://tilesets/t_mountain.tres" type="TileSet" id=3]
[ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=4]
-[ext_resource path="res://tilesets/t_death.tres" type="TileSet" id=5]
-[ext_resource path="res://objects/Camera2D.tscn" type="PackedScene" id=6]
+[ext_resource path="res://objects/enemy/roboturret.tscn" type="PackedScene" id=5]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=6]
[ext_resource path="res://graphics/backgrounds/canopy.png" type="Texture" id=7]
-[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=8]
-[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=9]
+[ext_resource path="res://objects/environment/collapse_block/collapse_block.tscn" type="PackedScene" id=8]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=9]
[ext_resource path="res://objects/enemy/slime.tscn" type="PackedScene" id=10]
[ext_resource path="res://maps/map.gd" type="Script" id=11]
[ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=12]
[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=13]
-[ext_resource path="res://objects/environment/falling_block/falling_block.tscn" type="PackedScene" id=14]
+[ext_resource path="res://objects/enemy/super_slime.tscn" type="PackedScene" id=14]
+[ext_resource path="res://audio/music/BBBBBBBB.ogg" type="AudioStream" id=15]
+[ext_resource path="res://objects/respawn_point.tscn" type="PackedScene" id=16]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=17]
+[ext_resource path="res://objects/environment/stalactite/stalactite.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/environment/switches/button.tscn" type="PackedScene" id=19]
+[ext_resource path="res://objects/enemy/tin.tscn" type="PackedScene" id=20]
+[ext_resource path="res://graphics/enemy/sawblade.png" type="Texture" id=21]
+[ext_resource path="res://objects/enemy/rolling_fiend.tscn" type="PackedScene" id=22]
+[ext_resource path="res://objects/enemy/steam.tscn" type="PackedScene" id=23]
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=24]
+[ext_resource path="res://objects/enemy/cop.tscn" type="PackedScene" id=25]
+[ext_resource path="res://objects/environment/turret/turret_bullet.tscn" type="PackedScene" id=26]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=27]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=28]
-[node name="Map" type="Node2D" groups=["map"]]
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 17 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 21 )
+region = Rect2( 0, 0, 12, 12 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 21 )
+region = Rect2( 12, 0, 12, 12 )
+
+[sub_resource type="SpriteFrames" id=5]
+animations = [ {
+"frames": [ SubResource( 6 ), SubResource( 7 ) ],
+"loop": true,
+"name": "default",
+"speed": 20.0
+} ]
+
+[node name="Map3" type="Node2D" groups=["map"]]
+pause_mode = 1
script = ExtResource( 11 )
-save_location = 420
+music = ExtResource( 15 )
-[node name="Camera2D" parent="." instance=ExtResource( 6 )]
-current = false
-
-[node name="Sprite" type="Sprite" parent="Camera2D"]
+[node name="Sprite" type="Sprite" parent="."]
position = Vector2( 128, 96 )
-z_index = -2
+z_index = -50
texture = ExtResource( 7 )
__meta__ = {
"_edit_lock_": true
@@ -32,15 +65,14 @@ __meta__ = {
[node name="CanvasLayer" parent="." instance=ExtResource( 4 )]
-[node name="Ground" type="TileMap" parent="."]
+[node name="Ground" type="TileMap" parent="." groups=["can_stain"]]
+light_mask = 3
+material = ExtResource( 9 )
tile_set = ExtResource( 3 )
cell_size = Vector2( 8, 8 )
collision_layer = 9
format = 1
-tile_data = PoolIntArray( 917526, 0, 65537, 917527, 0, 65537, 983052, 0, 65537, 983053, 0, 65537, 983062, 0, 65537, 1048591, 0, 65537, 1048592, 0, 65537, 1048593, 0, 65537, 1048594, 0, 65537, 1048597, 0, 65537, 1048598, 0, 65537, 1114127, 0, 65537, 1179663, 0, 65537, 1245199, 0, 65537, 1310732, 0, 65537, 1310733, 0, 65537, 1310734, 0, 65537, 1310735, 0, 65537, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1507328, 0, 65537, 1507329, 0, 65537, 1507330, 0, 65537, 1507331, 0, 65537, 1507332, 0, 65537, 1507333, 0, 65537, 1507334, 0, 65537, 1507335, 0, 65537, 1507336, 0, 65537, 1507337, 0, 65537, 1507338, 0, 65537, 1507339, 0, 65537, 1507340, 0, 65537, 1507341, 0, 65537, 1507342, 0, 65537, 1507343, 0, 65537, 1507344, 0, 65537, 1507345, 0, 65537, 1507346, 0, 65537, 1507347, 0, 65537, 1507348, 0, 65537, 1507349, 0, 65537, 1507350, 0, 65537, 1507351, 0, 65537, 1507352, 0, 65537, 1507353, 0, 65537, 1507354, 0, 65537, 1507355, 0, 65537, 1507356, 0, 65537, 1507357, 0, 65537, 1507358, 0, 65537, 1507359, 0, 65537 )
-
-[node name="Rock" parent="." instance=ExtResource( 9 )]
-position = Vector2( 120, 120 )
+tile_data = PoolIntArray( 196630, 1, 0, 262166, 1, 0, 327702, 1, 0, 393238, 1, 0, 458774, 1, 0, 524310, 1, 0, 589839, 0, 0, 589840, 0, 0, 589841, 0, 0, 589842, 0, 0, 589843, 0, 0, 589844, 0, 0, 589845, 0, 0, 589846, 1, 0, 655382, 1, 0, 655388, 0, 196609, 983062, 0, 0, 983063, 0, 0, 983064, 0, 0, 983065, 0, 0, 983066, 0, 0, 983067, 0, 0, 983068, 0, 0, 983069, 0, 0, 1048579, 0, 65537, 1048580, 0, 65537, 1048581, 0, 65537, 1048582, 0, 65537, 1048583, 0, 65537, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1507328, 0, 1, 1507329, 0, 1, 1507330, 0, 1, 1507331, 0, 1, 1507332, 0, 1, 1507333, 0, 1, 1507334, 0, 1, 1507337, 0, 1, 1507338, 0, 1, 1507339, 0, 1, 1507340, 0, 1, 1507341, 0, 1, 1507342, 0, 1, 1507343, 0, 1, 1507344, 0, 1, 1507345, 0, 1, 1507346, 0, 1, 1507347, 0, 1, 1507348, 0, 1, 1507349, 0, 1, 1507350, 0, 1, 1507351, 0, 1, 1507354, 0, 1, 1507355, 0, 1, 1507356, 0, 1, 1507357, 0, 1, 1507358, 0, 1, 1507359, 0, 1 )
[node name="Slime" parent="." instance=ExtResource( 10 )]
position = Vector2( 264, 168 )
@@ -48,38 +80,16 @@ position = Vector2( 264, 168 )
[node name="Slime2" parent="." instance=ExtResource( 10 )]
position = Vector2( 264, 160 )
-[node name="Slime2" parent="." instance=ExtResource( 10 )]
-position = Vector2( 216, 168 )
-
-[node name="Slime3" parent="." instance=ExtResource( 10 )]
-position = Vector2( 216, 168 )
-
-[node name="Slime4" parent="." instance=ExtResource( 10 )]
-position = Vector2( 216, 168 )
-
[node name="Arrow" parent="." instance=ExtResource( 13 )]
-position = Vector2( 184, 163 )
-
-[node name="Player" parent="." instance=ExtResource( 1 )]
-position = Vector2( 104, 96 )
-
-[node name="Ladder3" parent="." instance=ExtResource( 8 )]
-position = Vector2( 40, 136 )
-scale = Vector2( 1, 5 )
+position = Vector2( 104, 120 )
[node name="Ladder" type="TileMap" parent="."]
-tile_set = ExtResource( 2 )
+tile_set = ExtResource( 28 )
cell_size = Vector2( 8, 8 )
collision_layer = 9
format = 1
tile_data = PoolIntArray( 1114117, 0, 196610, 1179653, 0, 196608, 1245189, 0, 196608, 1310725, 0, 196608, 1376261, 0, 196609 )
-[node name="Death" type="TileMap" parent="."]
-visible = false
-tile_set = ExtResource( 5 )
-cell_size = Vector2( 8, 8 )
-format = 1
-
[node name="Turniwood5" parent="." instance=ExtResource( 12 )]
position = Vector2( 80, 120 )
@@ -99,5 +109,101 @@ delay = 1.5
position = Vector2( 48, 88 )
delay = 2.0
-[node name="FallingBlock" parent="." instance=ExtResource( 14 )]
-position = Vector2( 192, 112 )
+[node name="RespawnPoint" parent="." instance=ExtResource( 16 )]
+position = Vector2( 88, 160 )
+
+[node name="Tin2" parent="." instance=ExtResource( 20 )]
+position = Vector2( 32, 72 )
+up_boundary = 3.0
+down_boundary = 3.0
+
+[node name="RollingFiend" parent="." instance=ExtResource( 22 )]
+position = Vector2( 48, 120 )
+
+[node name="AnimatedSprite" parent="RollingFiend" index="0"]
+visible = false
+
+[node name="SawTest2" type="AnimatedSprite" parent="RollingFiend"]
+material = SubResource( 4 )
+position = Vector2( 4, 4 )
+z_index = -3
+frames = SubResource( 5 )
+playing = true
+
+[node name="Steam" parent="." instance=ExtResource( 23 )]
+position = Vector2( 27, 128 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="Button" parent="." instance=ExtResource( 19 )]
+position = Vector2( 16, 168 )
+target_group = "speccy"
+
+[node name="Cop" parent="." instance=ExtResource( 25 )]
+position = Vector2( 184, 112 )
+turn_time = inf
+
+[node name="TurretBullet" parent="." instance=ExtResource( 26 )]
+position = Vector2( 152, 72 )
+
+[node name="Player2" parent="." instance=ExtResource( 27 )]
+position = Vector2( 128, 72 )
+
+[node name="MovingPlatform" parent="." instance=ExtResource( 6 )]
+position = Vector2( 96, 144 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 4.0
+right_down_boundary = 4.0
+move_direction = 1
+
+[node name="CollapseBlock" parent="." instance=ExtResource( 8 )]
+position = Vector2( 136, 128 )
+
+[node name="CollapseBlock2" parent="." instance=ExtResource( 8 )]
+position = Vector2( 144, 128 )
+
+[node name="CollapseBlock3" parent="." instance=ExtResource( 8 )]
+position = Vector2( 152, 128 )
+
+[node name="MovingPlatform2" parent="." instance=ExtResource( 6 )]
+position = Vector2( 208, 64 )
+scale = Vector2( 2, 1 )
+left_up_boundary = 6.0
+right_down_boundary = 6.0
+move_direction = 1
+
+[node name="Roboturret" parent="MovingPlatform2" instance=ExtResource( 5 )]
+position = Vector2( -1.5, 12 )
+scale = Vector2( 0.5, -1 )
+
+[node name="Death" type="TileMap" parent="." groups=["death"]]
+tile_set = ExtResource( 1 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1441799, 10, 0, 1441800, 10, 0, 1441816, 0, 0, 1441817, 0, 0, 1507335, 11, 0, 1507336, 11, 0, 1507352, 3, 0, 1507353, 3, 0 )
+
+[node name="Death2" type="TileMap" parent="." groups=["death"]]
+tile_set = ExtResource( 1 )
+cell_size = Vector2( 8, 8 )
+collision_layer = 32
+format = 1
+tile_data = PoolIntArray( 1179655, 12, 0, 1179656, 12, 0, 1179672, 12, 0, 1179673, 12, 0 )
+
+[node name="SuperSlime" parent="." instance=ExtResource( 14 )]
+position = Vector2( 119, 168 )
+left_boundary = 3.0
+right_boundary = 3.0
+bottom_jumps = [ -2.0 ]
+top_jumps = [ 3.0 ]
+
+[node name="Stalactite" parent="." instance=ExtResource( 18 )]
+position = Vector2( 144, 24 )
+
+[node name="FallingBlock" parent="." instance=ExtResource( 24 )]
+position = Vector2( 124, 96 )
+
+[node name="speccy" parent="." groups=["speccy"] instance=ExtResource( 2 )]
+position = Vector2( 82, 72 )
+
+[editable path="RollingFiend"]
diff --git a/menus/Button.gd b/menus/Button.gd
new file mode 100644
index 0000000..fd75304
--- /dev/null
+++ b/menus/Button.gd
@@ -0,0 +1,7 @@
+extends Button
+
+
+# Declare member variables here. Examples:
+# var a = 2
+# var b = "text"
+
diff --git a/menus/DeleteButton.gd b/menus/DeleteButton.gd
new file mode 100644
index 0000000..4af4968
--- /dev/null
+++ b/menus/DeleteButton.gd
@@ -0,0 +1,14 @@
+extends TextureButton
+
+onready var sprite = $AnimatedSprite
+
+func _process(delta):
+ if has_focus():
+ sprite.playing = true
+ else:
+ sprite.playing = false
+ sprite.frame = 0
+
+func _gui_input(event):
+ if event.is_action_pressed("ui_accept"):
+ get_parent().set_kill_mode(!get_parent().kill_mode)
diff --git a/menus/back_button.gd b/menus/back_button.gd
new file mode 100644
index 0000000..8b4fb33
--- /dev/null
+++ b/menus/back_button.gd
@@ -0,0 +1,23 @@
+extends TextureButton
+
+export var next_scene: PackedScene
+onready var sprite = $AnimatedSprite
+
+func _process(delta):
+ if has_focus():
+ sprite.playing = true
+ else:
+ sprite.playing = false
+ sprite.frame = 0
+
+func _gui_input(event):
+ if event.is_action_pressed("ui_accept"):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = next_scene.instance()
+
+func _input(event):
+ if event.is_action_pressed("ui_cancel"):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = next_scene.instance()
diff --git a/menus/back_button.tscn b/menus/back_button.tscn
new file mode 100644
index 0000000..533d19f
--- /dev/null
+++ b/menus/back_button.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://graphics/hud/back.png" type="Texture" id=1]
+[ext_resource path="res://graphics/hud/back_dim.png" type="Texture" id=2]
+[ext_resource path="res://menus/back_button.gd" type="Script" id=3]
+
+[sub_resource type="Theme" id=1]
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 26, 33 )
+
+[sub_resource type="SpriteFrames" id=3]
+animations = [ {
+"frames": [ SubResource( 2 ), ExtResource( 2 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[node name="Back" type="TextureButton"]
+margin_right = 52.0
+margin_bottom = 33.0
+theme = SubResource( 1 )
+texture_normal = ExtResource( 1 )
+script = ExtResource( 3 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+position = Vector2( 13, 17 )
+frames = SubResource( 3 )
diff --git a/menus/bug_world.gd b/menus/bug_world.gd
new file mode 100644
index 0000000..27f2102
--- /dev/null
+++ b/menus/bug_world.gd
@@ -0,0 +1,8 @@
+extends Node2D
+
+
+func _ready() -> void:
+ Fade.fade_in(Options.transition_speed_secs)
+
+func _input(event):
+ Game.change_map(load("res://menus/level_select_scholar.tscn"))
diff --git a/menus/bug_world.tscn b/menus/bug_world.tscn
new file mode 100644
index 0000000..1cc1d6d
--- /dev/null
+++ b/menus/bug_world.tscn
@@ -0,0 +1,227 @@
+[gd_scene load_steps=36 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/hud/3d_text.tscn" type="PackedScene" id=2]
+[ext_resource path="res://ui/PressStart2P-Regular.ttf" type="DynamicFontData" id=3]
+[ext_resource path="res://graphics/sockbug/walk_strip6.png" type="Texture" id=4]
+[ext_resource path="res://menus/sockbug.gd" type="Script" id=5]
+[ext_resource path="res://objects/player/player_death_particles.tscn" type="PackedScene" id=6]
+[ext_resource path="res://graphics/sockbug/fullturn_strip10.png" type="Texture" id=7]
+[ext_resource path="res://graphics/player/wriggle.png" type="Texture" id=8]
+[ext_resource path="res://audio/music/BBBBBBBB.ogg" type="AudioStream" id=9]
+[ext_resource path="res://objects/enemy/antlion.tscn" type="PackedScene" id=10]
+[ext_resource path="res://menus/bug_world.gd" type="Script" id=11]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=12]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=13]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 1, 1, 1, 1 )
+shader_param/color_2 = Color( 0.466667, 0.466667, 0.466667, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 32, 32 )
+shader_param/cycle_speed = Vector2( 0, 0 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+
+[sub_resource type="AtlasTexture" id=18]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=19]
+atlas = ExtResource( 4 )
+region = Rect2( 32, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=20]
+atlas = ExtResource( 4 )
+region = Rect2( 64, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=21]
+atlas = ExtResource( 4 )
+region = Rect2( 96, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=22]
+atlas = ExtResource( 4 )
+region = Rect2( 128, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=23]
+atlas = ExtResource( 4 )
+region = Rect2( 160, 0, 32, 32 )
+
+[sub_resource type="SpriteFrames" id=24]
+animations = [ {
+"frames": [ SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ) ],
+"loop": true,
+"name": "default",
+"speed": 15.0
+} ]
+
+[sub_resource type="AtlasTexture" id=25]
+atlas = ExtResource( 7 )
+region = Rect2( 0, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=26]
+atlas = ExtResource( 7 )
+region = Rect2( 31, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=27]
+atlas = ExtResource( 7 )
+region = Rect2( 62, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=28]
+atlas = ExtResource( 7 )
+region = Rect2( 93, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=29]
+atlas = ExtResource( 7 )
+region = Rect2( 124, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=30]
+atlas = ExtResource( 7 )
+region = Rect2( 155, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=31]
+atlas = ExtResource( 7 )
+region = Rect2( 186, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=32]
+atlas = ExtResource( 7 )
+region = Rect2( 217, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=33]
+atlas = ExtResource( 7 )
+region = Rect2( 248, 0, 31, 29 )
+
+[sub_resource type="AtlasTexture" id=34]
+atlas = ExtResource( 7 )
+region = Rect2( 279, 0, 31, 29 )
+
+[sub_resource type="SpriteFrames" id=35]
+animations = [ {
+"frames": [ SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ), SubResource( 33 ), SubResource( 34 ) ],
+"loop": true,
+"name": "default",
+"speed": 15.0
+} ]
+
+[sub_resource type="SpatialMaterial" id=16]
+albedo_color = Color( 0.105882, 0.34902, 0.509804, 1 )
+metallic = 0.46
+
+[sub_resource type="DynamicFont" id=8]
+font_data = ExtResource( 3 )
+
+[sub_resource type="TextMesh" id=17]
+resource_local_to_scene = true
+material = SubResource( 16 )
+text = "TEXT"
+font = SubResource( 8 )
+pixel_size = 0.05
+depth = 0.1
+
+[node name="BugWorld" type="Node2D"]
+script = ExtResource( 11 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Wriggle" type="Sprite" parent="."]
+position = Vector2( 135, 143 )
+scale = Vector2( 3, 3 )
+texture = ExtResource( 8 )
+
+[node name="Sockbug" type="AnimatedSprite" parent="."]
+position = Vector2( 89, 149 )
+rotation = 0.785398
+frames = SubResource( 24 )
+frame = 3
+playing = true
+script = ExtResource( 5 )
+speed = Vector2( 100, 100 )
+
+[node name="Sockbug2" type="AnimatedSprite" parent="."]
+position = Vector2( 78, 67 )
+rotation = 0.785398
+scale = Vector2( -1, 1 )
+frames = SubResource( 24 )
+frame = 3
+playing = true
+script = ExtResource( 5 )
+speed = Vector2( -100, -100 )
+
+[node name="Sockbug3" type="AnimatedSprite" parent="."]
+position = Vector2( 181, 130 )
+rotation = -0.785398
+frames = SubResource( 24 )
+frame = 2
+playing = true
+script = ExtResource( 5 )
+speed = Vector2( 100, -100 )
+
+[node name="Sockbug4" type="AnimatedSprite" parent="."]
+position = Vector2( 175, 22 )
+rotation = 0.785398
+scale = Vector2( -1, 1 )
+frames = SubResource( 24 )
+frame = 2
+playing = true
+script = ExtResource( 5 )
+speed = Vector2( -100, -100 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+position = Vector2( 192, 92 )
+frames = SubResource( 35 )
+frame = 1
+playing = true
+
+[node name="AnimatedSprite2" type="AnimatedSprite" parent="."]
+position = Vector2( 37, 107 )
+frames = SubResource( 35 )
+frame = 1
+playing = true
+
+[node name="AnimatedSprite3" type="AnimatedSprite" parent="."]
+position = Vector2( 222, 166 )
+frames = SubResource( 35 )
+playing = true
+
+[node name="DeathSplatter" parent="." instance=ExtResource( 6 )]
+position = Vector2( 126, 63 )
+emitting = true
+lifetime = 2.0
+one_shot = false
+speed_scale = 3.42
+explosiveness = 1.0
+texture = ExtResource( 8 )
+scale_amount = 1.0
+
+[node name="3DText" parent="." instance=ExtResource( 2 )]
+margin_top = -26.0
+margin_right = 256.0
+margin_bottom = 166.0
+text_material = SubResource( 16 )
+anim = "bug world"
+
+[node name="TextMesh" parent="3DText/Viewport" index="0"]
+mesh = SubResource( 17 )
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 9 )
+volume_db = -8.0
+autoplay = true
+
+[node name="Antlion" parent="." instance=ExtResource( 10 )]
+position = Vector2( 38, 176 )
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 13 )
+margin_left = 200.0
+margin_top = 56.0
+margin_right = 249.0
+margin_bottom = 70.0
+theme = ExtResource( 12 )
+text = "415LBUG"
+
+[editable path="3DText"]
diff --git a/menus/cool.tscn b/menus/cool.tscn
new file mode 100644
index 0000000..2ac0bd1
--- /dev/null
+++ b/menus/cool.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.145098, 0.0823529, 0.0823529, 1 )
+shader_param/color_2 = Color( 1, 0, 0, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 8 )
+shader_param/cycle_speed = Vector2( -8, 0 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 4, 0, 0 )
+
+[node name="Node2D" type="Node2D"]
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
diff --git a/menus/credits.gd b/menus/credits.gd
new file mode 100644
index 0000000..0afae6e
--- /dev/null
+++ b/menus/credits.gd
@@ -0,0 +1,16 @@
+extends Node
+
+
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ $AnimationPlayer.playback_active = false
+ Audio.ac_music.stream_paused = true
+ NOTIFICATION_WM_FOCUS_IN:
+ $AnimationPlayer.playback_active = true
+ Audio.ac_music.stream_paused = false
+
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
+ Audio.play_music(load("res://audio/music/rev83-wondering-now-short.ogg"))
+ $Control/Playername.text = str(Save.current_file.name)
diff --git a/menus/credits.tscn b/menus/credits.tscn
new file mode 100644
index 0000000..19d725c
--- /dev/null
+++ b/menus/credits.tscn
@@ -0,0 +1,1514 @@
+[gd_scene load_steps=142 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/hud/logo.png" type="Texture" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=5]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=6]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/bat.png" type="Texture" id=8]
+[ext_resource path="res://graphics/npc/msx_walk.png" type="Texture" id=9]
+[ext_resource path="res://graphics/npc/fami_human_laugh.png" type="Texture" id=10]
+[ext_resource path="res://graphics/npc/speccy_cool.png" type="Texture" id=11]
+[ext_resource path="res://graphics/npc/intelli_idle.png" type="Texture" id=12]
+[ext_resource path="res://ui/PressStart2P-Regular.ttf" type="DynamicFontData" id=13]
+[ext_resource path="res://menus/credits.gd" type="Script" id=14]
+[ext_resource path="res://graphics/enemy/snake.png" type="Texture" id=15]
+[ext_resource path="res://scripts/sg_palette.gd" type="Script" id=16]
+[ext_resource path="res://graphics/player/sg_stim.png" type="Texture" id=17]
+[ext_resource path="res://graphics/enemy/pal_slime_purple.png" type="Texture" id=19]
+[ext_resource path="res://graphics/enemy/slime.png" type="Texture" id=20]
+[ext_resource path="res://graphics/enemy/spider.png" type="Texture" id=21]
+[ext_resource path="res://graphics/enemy/skelarcher_shoot.png" type="Texture" id=22]
+[ext_resource path="res://graphics/enemy/jumping_spider.png" type="Texture" id=23]
+[ext_resource path="res://graphics/enemy/rolling_fiend.png" type="Texture" id=24]
+[ext_resource path="res://graphics/enemy/boss/the_scrump.png" type="Texture" id=25]
+[ext_resource path="res://shaders/wibble_border.gdshader" type="Shader" id=26]
+[ext_resource path="res://graphics/enemy/snail.png" type="Texture" id=27]
+[ext_resource path="res://graphics/enemy/tentacle.png" type="Texture" id=28]
+[ext_resource path="res://graphics/enemy/eel_tail.png" type="Texture" id=29]
+[ext_resource path="res://objects/enemy/fish.tscn" type="PackedScene" id=30]
+[ext_resource path="res://graphics/enemy/eel_head.png" type="Texture" id=31]
+[ext_resource path="res://graphics/enemy/eel_body.png" type="Texture" id=32]
+[ext_resource path="res://graphics/enemy/squig.png" type="Texture" id=33]
+[ext_resource path="res://graphics/enemy/turtle.png" type="Texture" id=34]
+[ext_resource path="res://objects/enemy/artificial_soul.tscn" type="PackedScene" id=35]
+[ext_resource path="res://graphics/enemy/hellarcher_shoot.png" type="Texture" id=36]
+[ext_resource path="res://objects/enemy/boss/2600.tscn" type="PackedScene" id=37]
+[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=38]
+[ext_resource path="res://objects/enemy/tin.tscn" type="PackedScene" id=39]
+[ext_resource path="res://objects/enemy/roboturret.tscn" type="PackedScene" id=40]
+[ext_resource path="res://graphics/enemy/cop/cop_walk.png" type="Texture" id=41]
+[ext_resource path="res://graphics/npc/ivy.png" type="Texture" id=42]
+[ext_resource path="res://graphics/npc/kiki_dog.png" type="Texture" id=43]
+[ext_resource path="res://graphics/npc/penny.png" type="Texture" id=44]
+[ext_resource path="res://graphics/npc/haze.png" type="Texture" id=45]
+[ext_resource path="res://graphics/hud/speech_bubble.png" type="Texture" id=46]
+[ext_resource path="res://objects/enemy/boss/famira.tscn" type="PackedScene" id=47]
+[ext_resource path="res://graphics/hud/team_sg_logo.png" type="Texture" id=48]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/color_1 = Color( 1, 0.423529, 0.4, 1 )
+shader_param/color_2 = Color( 0.4, 0.52549, 1, 1 )
+shader_param/checker_size = Vector2( 32, 32 )
+shader_param/pan_speed = Vector2( 20, 21 )
+shader_param/cycle_speed = Vector2( 6, 3 )
+shader_param/cycle_alternation = Vector2( 6, 3 )
+shader_param/uv_transform = Transform2D( 1, -1, 1, 1, 0, 0 )
+
+[sub_resource type="Animation" id=3]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Background:material:shader_param/color_1")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 0.423529, 0.4, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Background:material:shader_param/color_2")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.4, 0.52549, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Background:material:shader_param/uv_transform")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Transform2D( 1, -1, 1, 1, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("CanvasLayer/Background:material:shader_param/color_1")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 0.423529, 0.4, 1 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("CanvasLayer/Background:material:shader_param/color_2")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.4, 0.52549, 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=91]
+resource_name = "rainbow"
+length = 5.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("CanvasLayer/Background:material:shader_param/color_1")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1, 2, 3, 4, 5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CanvasLayer/Background:material:shader_param/color_2")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 1, 2, 3, 4, 5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ) ]
+}
+
+[sub_resource type="DynamicFont" id=92]
+font_data = ExtResource( 13 )
+
+[sub_resource type="Theme" id=93]
+default_font = SubResource( 92 )
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 5 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 7 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 17 )
+region = Rect2( 0, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=11]
+atlas = ExtResource( 17 )
+region = Rect2( 20, 0, 20, 20 )
+
+[sub_resource type="SpriteFrames" id=12]
+animations = [ {
+"frames": [ SubResource( 10 ), SubResource( 11 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="AtlasTexture" id=94]
+atlas = ExtResource( 11 )
+region = Rect2( 0, 0, 24, 24 )
+
+[sub_resource type="AtlasTexture" id=95]
+atlas = ExtResource( 11 )
+region = Rect2( 24, 0, 24, 24 )
+
+[sub_resource type="AtlasTexture" id=96]
+atlas = ExtResource( 11 )
+region = Rect2( 72, 0, 24, 24 )
+
+[sub_resource type="SpriteFrames" id=97]
+animations = [ {
+"frames": [ SubResource( 94 ), SubResource( 95 ), SubResource( 96 ), SubResource( 96 ), SubResource( 96 ), SubResource( 95 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 9 )
+region = Rect2( 0, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 9 )
+region = Rect2( 20, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 9 )
+region = Rect2( 40, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=17]
+atlas = ExtResource( 9 )
+region = Rect2( 60, 0, 20, 20 )
+
+[sub_resource type="SpriteFrames" id=18]
+animations = [ {
+"frames": [ SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 17 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[sub_resource type="AtlasTexture" id=98]
+atlas = ExtResource( 10 )
+region = Rect2( 0, 0, 30, 30 )
+
+[sub_resource type="AtlasTexture" id=99]
+atlas = ExtResource( 10 )
+region = Rect2( 30, 0, 30, 30 )
+
+[sub_resource type="SpriteFrames" id=100]
+animations = [ {
+"frames": [ SubResource( 98 ), SubResource( 99 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=51]
+shader = ExtResource( 26 )
+shader_param/speed = Vector2( 3, 1 )
+shader_param/ammount = Vector2( 3, 3 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="ShaderMaterial" id=13]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=19]
+atlas = ExtResource( 15 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=20]
+atlas = ExtResource( 15 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=21]
+animations = [ {
+"frames": [ SubResource( 19 ), SubResource( 20 ) ],
+"loop": true,
+"name": "default",
+"speed": 7.0
+} ]
+
+[sub_resource type="AtlasTexture" id=22]
+atlas = ExtResource( 8 )
+region = Rect2( 0, 0, 18, 10 )
+
+[sub_resource type="AtlasTexture" id=23]
+atlas = ExtResource( 8 )
+region = Rect2( 18, 0, 18, 10 )
+
+[sub_resource type="SpriteFrames" id=24]
+animations = [ {
+"frames": [ SubResource( 22 ), SubResource( 23 ) ],
+"loop": true,
+"name": "default",
+"speed": 8.0
+} ]
+
+[sub_resource type="AtlasTexture" id=25]
+atlas = ExtResource( 25 )
+region = Rect2( 0, 0, 55, 64 )
+
+[sub_resource type="AtlasTexture" id=26]
+atlas = ExtResource( 25 )
+region = Rect2( 55, 0, 55, 64 )
+
+[sub_resource type="SpriteFrames" id=27]
+animations = [ {
+"frames": [ SubResource( 25 ), SubResource( 26 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[sub_resource type="AtlasTexture" id=28]
+atlas = ExtResource( 24 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=29]
+atlas = ExtResource( 24 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=30]
+animations = [ {
+"frames": [ SubResource( 28 ), SubResource( 29 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="AtlasTexture" id=31]
+atlas = ExtResource( 23 )
+region = Rect2( 0, 0, 13, 12 )
+
+[sub_resource type="AtlasTexture" id=32]
+atlas = ExtResource( 23 )
+region = Rect2( 13, 0, 13, 12 )
+
+[sub_resource type="SpriteFrames" id=33]
+animations = [ {
+"frames": [ SubResource( 31 ), SubResource( 32 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=34]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=35]
+atlas = ExtResource( 22 )
+region = Rect2( 0, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=36]
+atlas = ExtResource( 22 )
+region = Rect2( 19, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=37]
+atlas = ExtResource( 22 )
+region = Rect2( 38, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=38]
+atlas = ExtResource( 22 )
+region = Rect2( 57, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=39]
+atlas = ExtResource( 22 )
+region = Rect2( 76, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=40]
+atlas = ExtResource( 22 )
+region = Rect2( 95, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=41]
+atlas = ExtResource( 22 )
+region = Rect2( 114, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=42]
+atlas = ExtResource( 22 )
+region = Rect2( 133, 0, 19, 20 )
+
+[sub_resource type="SpriteFrames" id=43]
+animations = [ {
+"frames": [ SubResource( 35 ), SubResource( 36 ), SubResource( 37 ), SubResource( 38 ), SubResource( 39 ), SubResource( 40 ), SubResource( 41 ), SubResource( 42 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[sub_resource type="AtlasTexture" id=44]
+atlas = ExtResource( 21 )
+region = Rect2( 0, 0, 15, 14 )
+
+[sub_resource type="AtlasTexture" id=45]
+atlas = ExtResource( 21 )
+region = Rect2( 15, 0, 15, 14 )
+
+[sub_resource type="SpriteFrames" id=46]
+animations = [ {
+"frames": [ SubResource( 44 ), SubResource( 45 ) ],
+"loop": true,
+"name": "default",
+"speed": 7.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=47]
+shader = ExtResource( 5 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 19 )
+
+[sub_resource type="AtlasTexture" id=48]
+atlas = ExtResource( 20 )
+region = Rect2( 0, 0, 13, 13 )
+
+[sub_resource type="AtlasTexture" id=49]
+atlas = ExtResource( 20 )
+region = Rect2( 13, 0, 13, 13 )
+
+[sub_resource type="SpriteFrames" id=50]
+animations = [ {
+"frames": [ SubResource( 48 ), SubResource( 49 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="AtlasTexture" id=52]
+atlas = ExtResource( 27 )
+region = Rect2( 0, 0, 12, 11 )
+
+[sub_resource type="AtlasTexture" id=53]
+atlas = ExtResource( 27 )
+region = Rect2( 12, 0, 12, 11 )
+
+[sub_resource type="SpriteFrames" id=54]
+animations = [ {
+"frames": [ SubResource( 52 ), SubResource( 53 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="AtlasTexture" id=55]
+atlas = ExtResource( 28 )
+region = Rect2( 0, 0, 8, 24 )
+
+[sub_resource type="AtlasTexture" id=56]
+atlas = ExtResource( 28 )
+region = Rect2( 8, 0, 8, 24 )
+
+[sub_resource type="SpriteFrames" id=57]
+animations = [ {
+"frames": [ SubResource( 55 ), SubResource( 56 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="AtlasTexture" id=63]
+atlas = ExtResource( 33 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=64]
+atlas = ExtResource( 33 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=65]
+animations = [ {
+"frames": [ SubResource( 63 ), SubResource( 64 ) ],
+"loop": true,
+"name": "default",
+"speed": 7.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=71]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=72]
+atlas = ExtResource( 36 )
+region = Rect2( 0, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=73]
+atlas = ExtResource( 36 )
+region = Rect2( 19, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=74]
+atlas = ExtResource( 36 )
+region = Rect2( 38, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=75]
+atlas = ExtResource( 36 )
+region = Rect2( 57, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=76]
+atlas = ExtResource( 36 )
+region = Rect2( 76, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=77]
+atlas = ExtResource( 36 )
+region = Rect2( 95, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=78]
+atlas = ExtResource( 36 )
+region = Rect2( 114, 0, 19, 20 )
+
+[sub_resource type="AtlasTexture" id=79]
+atlas = ExtResource( 36 )
+region = Rect2( 133, 0, 19, 20 )
+
+[sub_resource type="SpriteFrames" id=80]
+animations = [ {
+"frames": [ SubResource( 72 ), SubResource( 73 ), SubResource( 74 ), SubResource( 75 ), SubResource( 76 ), SubResource( 77 ), SubResource( 78 ), SubResource( 79 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=66]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=67]
+atlas = ExtResource( 34 )
+region = Rect2( 0, 32, 24, 16 )
+
+[sub_resource type="AtlasTexture" id=68]
+atlas = ExtResource( 34 )
+region = Rect2( 24, 32, 24, 16 )
+
+[sub_resource type="AtlasTexture" id=69]
+atlas = ExtResource( 34 )
+region = Rect2( 48, 32, 24, 16 )
+
+[sub_resource type="SpriteFrames" id=70]
+animations = [ {
+"frames": [ SubResource( 67 ), SubResource( 68 ), SubResource( 69 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="Curve2D" id=58]
+_data = {
+"points": PoolVector2Array( 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 33.7028, 0.317383, 0, 0, 0, 0, 40, 0 )
+}
+
+[sub_resource type="AtlasTexture" id=59]
+atlas = ExtResource( 31 )
+region = Rect2( 0, 0, 14, 12 )
+
+[sub_resource type="AtlasTexture" id=60]
+atlas = ExtResource( 31 )
+region = Rect2( 14, 0, 14, 12 )
+
+[sub_resource type="SpriteFrames" id=61]
+animations = [ {
+"frames": [ SubResource( 59 ), SubResource( 60 ) ],
+"loop": true,
+"name": "chomp",
+"speed": 8.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=62]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="ShaderMaterial" id=81]
+resource_local_to_scene = true
+shader = ExtResource( 38 )
+shader_param/color = Color( 1, 1, 1, 1 )
+shader_param/smooth_mode = true
+shader_param/reverse = true
+shader_param/opacity = 0.0
+
+[sub_resource type="ShaderMaterial" id=82]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=83]
+atlas = ExtResource( 41 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=84]
+atlas = ExtResource( 41 )
+region = Rect2( 20, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=85]
+atlas = ExtResource( 41 )
+region = Rect2( 40, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=86]
+atlas = ExtResource( 41 )
+region = Rect2( 60, 0, 20, 21 )
+
+[sub_resource type="SpriteFrames" id=87]
+animations = [ {
+"frames": [ SubResource( 83 ), SubResource( 84 ), SubResource( 85 ), SubResource( 86 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="Animation" id=89]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Control:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=90]
+resource_name = "credits"
+length = 98.0
+step = 1.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Control:rect_position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 2, 3, 5, 6, 10, 11, 15, 16, 20, 21, 25, 26, 30, 31, 35, 36, 40, 41, 45, 46, 50, 51, 55, 56, 60, 61, 65, 66, 70, 71, 75, 76, 80, 81, 85, 86, 90 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( -256, 0 ), Vector2( -256, 0 ), Vector2( -512, 0 ), Vector2( -512, 0 ), Vector2( -768, 0 ), Vector2( -768, 0 ), Vector2( -1024, 0 ), Vector2( -1024, 0 ), Vector2( -1280, 0 ), Vector2( -1280, 0 ), Vector2( -1536, 0 ), Vector2( -1536, 0 ), Vector2( -1792, 0 ), Vector2( -1792, 0 ), Vector2( -2048, 0 ), Vector2( -2048, 0 ), Vector2( -2304, 0 ), Vector2( -2304, 0 ), Vector2( -2560, 0 ), Vector2( -2560, 0 ), Vector2( -2816, 0 ), Vector2( -2816, 0 ), Vector2( -3072, 0 ), Vector2( -3072, 0 ), Vector2( -3328, 0 ), Vector2( -3328, 0 ), Vector2( -3584, 0 ), Vector2( -3584, 0 ), Vector2( -3840, 0 ), Vector2( -3840, 0 ), Vector2( -4096, 0 ), Vector2( -4096, 0 ), Vector2( -4352, 0 ), Vector2( -4352, 0 ), Vector2( -4608, 0 ), Vector2( -4608, 0 ) ]
+}
+
+[node name="Credits" type="Node" groups=["map"]]
+script = ExtResource( 14 )
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+layer = -64
+
+[node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
+margin_left = 4864.0
+margin_right = 5120.0
+margin_bottom = 192.0
+color = Color( 0.0666667, 0.164706, 0.454902, 0.329412 )
+
+[node name="Background" type="ColorRect" parent="CanvasLayer"]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="CanvasLayer/Background"]
+root_node = NodePath("../../..")
+autoplay = "rainbow"
+anims/RESET = SubResource( 3 )
+anims/rainbow = SubResource( 91 )
+
+[node name="Control" type="Control" parent="."]
+margin_right = 40.0
+margin_bottom = 40.0
+
+[node name="Title" type="Sprite" parent="Control"]
+position = Vector2( 128, 96 )
+texture = ExtResource( 3 )
+
+[node name="TeamSG" type="Node2D" parent="Control"]
+position = Vector2( 640, 96 )
+
+[node name="GameStaffBack" type="Label" parent="Control/TeamSG"]
+modulate = Color( 0.172549, 0, 0.552941, 1 )
+margin_left = -330.0
+margin_top = -14.0
+margin_right = -170.0
+margin_bottom = 2.0
+theme = SubResource( 93 )
+text = "Game Staff"
+
+[node name="GameStaff" type="Label" parent="Control/TeamSG"]
+margin_left = -330.0
+margin_top = -16.0
+margin_right = -170.0
+theme = SubResource( 93 )
+text = "Game Staff"
+
+[node name="RollCall" type="Label" parent="Control/TeamSG"]
+modulate = Color( 0.426872, 0.218491, 0.433594, 1 )
+margin_left = 2479.0
+margin_top = -15.0
+margin_right = 2671.0
+margin_bottom = 1.0
+theme = SubResource( 93 )
+text = "Roll Call!!!"
+
+[node name="RollCall2" type="Label" parent="Control/TeamSG"]
+margin_left = 2479.0
+margin_top = -17.0
+margin_right = 2671.0
+margin_bottom = -1.0
+theme = SubResource( 93 )
+text = "Roll Call!!!"
+
+[node name="TeamSgSplash" type="Sprite" parent="Control/TeamSG"]
+position = Vector2( 0, -23 )
+texture = ExtResource( 48 )
+
+[node name="TeamSG2" type="Label" parent="Control/TeamSG"]
+material = ExtResource( 4 )
+margin_left = -128.0
+margin_top = 56.0
+margin_right = 128.0
+margin_bottom = 105.0
+theme = ExtResource( 6 )
+text = "Team SG is: Penny rigate,
+Haze Weathers, Scarlett Sylvistrix
+ and Dog Jelly.
+ "
+align = 1
+valign = 1
+
+[node name="TeamSG5" type="Label" parent="Control/TeamSG"]
+material = ExtResource( 4 )
+margin_left = -112.0
+margin_top = -85.0
+margin_right = -56.0
+margin_bottom = -49.0
+theme = ExtResource( 6 )
+text = "Similar
+people
+create"
+align = 1
+valign = 1
+
+[node name="TeamSG6" type="Label" parent="Control/TeamSG"]
+material = ExtResource( 4 )
+margin_left = 72.0
+margin_top = -85.0
+margin_right = 107.0
+margin_bottom = -49.0
+theme = ExtResource( 6 )
+text = "Games
+for
+fun"
+align = 1
+valign = 1
+
+[node name="Penny" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 768.0
+margin_right = 1024.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Penny \"SG\" Rigate-
+Director
+Game design
+Level design
+Code
+graphics
+sound effects
+Scenario"
+align = 1
+valign = 1
+
+[node name="Haze" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 1024.0
+margin_right = 1280.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Haze \"Rolling fiend\" Weathers-
+Lead Programmer
+graphics
+sound effects
+voice of \"narrator\"
+Story
+Additional Enemy design"
+align = 1
+valign = 1
+
+[node name="Ivy" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 1280.0
+margin_right = 1536.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Scarlett \"Shedge\" Sylvistrix-
+Lead Composer
+Sound effects
+mixing"
+align = 1
+valign = 1
+
+[node name="Dog" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 1536.0
+margin_right = 1792.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Dog \"the scrump\" jelly-
+designer of \"the scrump\"
+Story Help
+Concept artist
+Character design help"
+align = 1
+valign = 1
+
+[node name="Wolfboy" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 1792.0
+margin_right = 2048.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-WolfBoy \"SG-2083\"-
+\"infiltration\" border"
+align = 1
+valign = 1
+
+[node name="Bodhi" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 2048.0
+margin_right = 2304.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Bodhi \"eviscerator\" darner-
+\"Got Shards\" border"
+align = 1
+valign = 1
+
+[node name="Playtesters" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 2304.0
+margin_right = 2560.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Our playtesters-
+Penny rigate
+Haze Weathers
+Scarlett Sylvistrix
+DogJelly
+Wolfboy
+Rhidianruckus
+Wily Beast
+Maddy"
+align = 1
+valign = 1
+
+[node name="WonderingNow" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 2560.0
+margin_right = 2816.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-You're wondering now-
+Original composition by:
+Clement \"Coxsone\" Dodd
+Originally performed by:
+Andy & Joey
+later performed by:
+The specials
+Cover version by:
+haze weathers"
+align = 1
+valign = 1
+
+[node name="SpecialThanks" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 2816.0
+margin_right = 3072.0
+margin_bottom = 192.0
+theme = ExtResource( 6 )
+text = "-Special thanks-
+Wolfboy
+Cirquet
+wily beast
+RhidianRuckus
+"
+align = 1
+valign = 1
+
+[node name="Playername" type="Label" parent="Control"]
+material = ExtResource( 4 )
+margin_left = 2816.0
+margin_top = 123.0
+margin_right = 3072.0
+margin_bottom = 133.0
+theme = ExtResource( 6 )
+text = "Ty Tiramisu"
+align = 1
+autowrap = true
+
+[node name="RollCall1" type="Node2D" parent="Control"]
+position = Vector2( 3328, 0 )
+
+[node name="SG" type="AnimatedSprite" parent="Control/RollCall1"]
+material = SubResource( 7 )
+position = Vector2( 74, 69 )
+frames = SubResource( 12 )
+playing = true
+script = ExtResource( 16 )
+
+[node name="Label" type="Label" parent="Control/RollCall1/SG"]
+material = ExtResource( 4 )
+margin_left = -7.0
+margin_top = 11.0
+margin_right = 33.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "SG"
+
+[node name="Speccy" type="AnimatedSprite" parent="Control/RollCall1"]
+position = Vector2( 155, 68 )
+frames = SubResource( 97 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall1/Speccy"]
+material = ExtResource( 4 )
+margin_left = -33.0
+margin_top = 12.0
+margin_right = 31.0
+margin_bottom = 26.0
+theme = ExtResource( 6 )
+text = "Speccy"
+align = 1
+
+[node name="MsX" type="AnimatedSprite" parent="Control/RollCall1"]
+material = SubResource( 8 )
+position = Vector2( 106, 69 )
+frames = SubResource( 18 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall1/MsX"]
+material = ExtResource( 4 )
+margin_left = -16.0
+margin_top = 11.0
+margin_right = 16.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Ms.x"
+align = 1
+
+[node name="DrIntelli" type="Sprite" parent="Control/RollCall1"]
+position = Vector2( 90, 140 )
+texture = ExtResource( 12 )
+
+[node name="Label" type="Label" parent="Control/RollCall1/DrIntelli"]
+material = ExtResource( 4 )
+margin_left = -32.0
+margin_top = 11.0
+margin_right = 38.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "DR.Intelli"
+align = 1
+
+[node name="Fami" type="AnimatedSprite" parent="Control/RollCall1"]
+position = Vector2( 152, 135 )
+frames = SubResource( 100 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall1/Fami"]
+material = ExtResource( 4 )
+margin_left = -33.0
+margin_top = 16.0
+margin_right = 37.0
+margin_bottom = 30.0
+theme = ExtResource( 6 )
+text = "Fami"
+align = 1
+
+[node name="FreedomFighters" type="Label" parent="Control/RollCall1"]
+modulate = Color( 0.223529, 0.843137, 0.435294, 1 )
+material = SubResource( 51 )
+margin_left = 64.0
+margin_top = 32.0
+margin_right = 176.0
+margin_bottom = 55.0
+theme = ExtResource( 6 )
+text = "Freedom Fighters"
+align = 1
+
+[node name="VileVillians" type="Label" parent="Control/RollCall1"]
+modulate = Color( 0.866667, 0.368627, 0.435294, 1 )
+material = SubResource( 51 )
+margin_left = 64.0
+margin_top = 104.0
+margin_right = 176.0
+margin_bottom = 127.0
+theme = ExtResource( 6 )
+text = "Vile Villians"
+align = 1
+
+[node name="RollCall2" type="Node2D" parent="Control"]
+position = Vector2( 768, 0 )
+
+[node name="Eviscerator" type="AnimatedSprite" parent="Control/RollCall2"]
+material = SubResource( 13 )
+position = Vector2( 2880, 24 )
+frames = SubResource( 21 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/Eviscerator"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "eviscerator"
+align = 1
+
+[node name="Catbat" type="AnimatedSprite" parent="Control/RollCall2"]
+material = SubResource( 13 )
+position = Vector2( 2952, 24 )
+frames = SubResource( 24 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/Catbat"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Catbat"
+align = 1
+
+[node name="TheScrump" type="AnimatedSprite" parent="Control/RollCall2"]
+position = Vector2( 2992, 128 )
+frames = SubResource( 27 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/TheScrump"]
+material = ExtResource( 4 )
+margin_left = -40.0
+margin_top = 32.0
+margin_right = 53.0
+margin_bottom = 46.0
+theme = ExtResource( 6 )
+text = "The Scrump"
+align = 1
+
+[node name="RollingFiend" type="AnimatedSprite" parent="Control/RollCall2"]
+material = SubResource( 13 )
+position = Vector2( 2880, 102 )
+frames = SubResource( 30 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/RollingFiend"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Rolling fiend"
+align = 1
+
+[node name="ChipIt" type="AnimatedSprite" parent="Control/RollCall2"]
+position = Vector2( 2960, 62 )
+frames = SubResource( 33 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/ChipIt"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Chipit"
+align = 1
+
+[node name="Skelarcher" type="AnimatedSprite" parent="Control/RollCall2"]
+material = SubResource( 34 )
+position = Vector2( 3024, 62 )
+frames = SubResource( 43 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/Skelarcher"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Skelarcher"
+align = 1
+
+[node name="SabreSpighter" type="AnimatedSprite" parent="Control/RollCall2"]
+position = Vector2( 2880, 62 )
+frames = SubResource( 46 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/SabreSpighter"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "SabreSpighter"
+align = 1
+
+[node name="BioSlime" type="AnimatedSprite" parent="Control/RollCall2"]
+material = SubResource( 47 )
+position = Vector2( 3016, 24 )
+frames = SubResource( 50 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall2/BioSlime"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Bioslime"
+align = 1
+
+[node name="ParadisePoachers" type="Label" parent="Control/RollCall2"]
+modulate = Color( 0.223529, 0.843137, 0.435294, 1 )
+material = SubResource( 51 )
+margin_left = 2840.0
+margin_top = 144.0
+margin_right = 2928.0
+margin_bottom = 167.0
+theme = ExtResource( 6 )
+text = "Paradise
+Poachers"
+align = 1
+
+[node name="RollCall3" type="Node2D" parent="Control"]
+position = Vector2( 3840, 0 )
+
+[node name="Shedge" type="AnimatedSprite" parent="Control/RollCall3"]
+position = Vector2( 60, 25 )
+frames = SubResource( 54 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall3/Shedge"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 11.0
+margin_right = 45.0
+margin_bottom = 25.0
+theme = ExtResource( 6 )
+text = "Shedge"
+align = 1
+
+[node name="TheScrumpsTongue" type="AnimatedSprite" parent="Control/RollCall3"]
+position = Vector2( 156, 20 )
+frames = SubResource( 57 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall3/TheScrumpsTongue"]
+material = ExtResource( 4 )
+margin_left = -64.0
+margin_top = 16.0
+margin_right = 69.0
+margin_bottom = 30.0
+theme = ExtResource( 6 )
+text = "The scrump's tongue"
+align = 1
+
+[node name="Fish" parent="Control/RollCall3" instance=ExtResource( 30 )]
+position = Vector2( 88, 62 )
+speed = 0
+
+[node name="Label2" type="Label" parent="Control/RollCall3/Fish"]
+material = ExtResource( 4 )
+margin_left = -48.0
+margin_top = 15.0
+margin_right = 45.0
+margin_bottom = 29.0
+theme = ExtResource( 6 )
+text = "Bullet fish"
+align = 1
+
+[node name="Squig" type="AnimatedSprite" parent="Control/RollCall3"]
+position = Vector2( 200, 64 )
+frames = SubResource( 65 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall3/Squig"]
+material = ExtResource( 4 )
+margin_left = -69.0
+margin_top = 13.0
+margin_right = 64.0
+margin_bottom = 27.0
+theme = ExtResource( 6 )
+text = "Squig"
+align = 1
+
+[node name="Hellarcher" type="AnimatedSprite" parent="Control/RollCall3"]
+material = SubResource( 71 )
+position = Vector2( 72, 152 )
+frames = SubResource( 80 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall3/Hellarcher"]
+material = ExtResource( 4 )
+margin_left = -69.0
+margin_top = 13.0
+margin_right = 64.0
+margin_bottom = 27.0
+theme = ExtResource( 6 )
+text = "Hellarcher"
+align = 1
+
+[node name="Turchin" type="AnimatedSprite" parent="Control/RollCall3"]
+material = SubResource( 66 )
+position = Vector2( 68, 104 )
+frames = SubResource( 70 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall3/Turchin"]
+material = ExtResource( 4 )
+margin_left = -69.0
+margin_top = 13.0
+margin_right = 64.0
+margin_bottom = 27.0
+theme = ExtResource( 6 )
+text = "Turchin
+"
+align = 1
+
+[node name="Beel" type="Path2D" parent="Control/RollCall3" groups=["enemy"]]
+position = Vector2( 128, 69 )
+curve = SubResource( 58 )
+
+[node name="Head" type="PathFollow2D" parent="Control/RollCall3/Beel" groups=["eel_segment"]]
+position = Vector2( 29.7698, 0.268818 )
+rotation = 0.0123443
+offset = 21.77
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="AnimatedSprite" parent="Control/RollCall3/Beel/Head"]
+position = Vector2( 4, 0 )
+z_index = 1
+frames = SubResource( 61 )
+animation = "chomp"
+playing = true
+
+[node name="Border" type="AnimatedSprite" parent="Control/RollCall3/Beel/Head/Sprite"]
+material = SubResource( 62 )
+z_index = -1
+frames = SubResource( 61 )
+animation = "chomp"
+playing = true
+
+[node name="ShapeTransform" type="RemoteTransform2D" parent="Control/RollCall3/Beel/Head"]
+position = Vector2( 2.5, 0 )
+
+[node name="Tail" type="PathFollow2D" parent="Control/RollCall3/Beel"]
+position = Vector2( 18.0018, 0.123504 )
+rotation = 0.0123431
+offset = 10.0
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="Sprite" parent="Control/RollCall3/Beel/Tail"]
+position = Vector2( -2, 0 )
+z_index = 1
+texture = ExtResource( 29 )
+
+[node name="Border" type="Sprite" parent="Control/RollCall3/Beel/Tail/Sprite"]
+material = SubResource( 62 )
+z_index = -1
+texture = ExtResource( 29 )
+
+[node name="Segment" type="PathFollow2D" parent="Control/RollCall3/Beel"]
+position = Vector2( 26.0015, 0.222285 )
+rotation = 0.0123294
+offset = 18.0
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="Sprite" parent="Control/RollCall3/Beel/Segment"]
+z_index = 1
+texture = ExtResource( 32 )
+
+[node name="Border" type="Sprite" parent="Control/RollCall3/Beel/Segment/Sprite"]
+material = SubResource( 62 )
+z_index = -1
+texture = ExtResource( 32 )
+
+[node name="Segment2" type="PathFollow2D" parent="Control/RollCall3/Beel"]
+position = Vector2( 22.0031, 0.172913 )
+rotation = 0.0123357
+offset = 14.0
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="Sprite" parent="Control/RollCall3/Beel/Segment2"]
+z_index = 1
+texture = ExtResource( 32 )
+
+[node name="Border" type="Sprite" parent="Control/RollCall3/Beel/Segment2/Sprite"]
+material = SubResource( 62 )
+z_index = -1
+texture = ExtResource( 32 )
+
+[node name="Label3" type="Label" parent="Control/RollCall3/Beel"]
+material = ExtResource( 4 )
+margin_left = -24.0
+margin_top = 8.0
+margin_right = 69.0
+margin_bottom = 22.0
+theme = ExtResource( 6 )
+text = "Beel"
+align = 1
+
+[node name="ArtificialSoul" parent="Control/RollCall3" instance=ExtResource( 35 )]
+position = Vector2( 156, 105 )
+radius = 0.0
+speed = 0.0
+
+[node name="Label2" type="Label" parent="Control/RollCall3/ArtificialSoul"]
+material = ExtResource( 4 )
+margin_left = -64.0
+margin_top = 12.0
+margin_right = 69.0
+margin_bottom = 35.0
+theme = ExtResource( 6 )
+text = "Artificial soul"
+align = 1
+
+[node name="EnervatingExperiments" type="Label" parent="Control/RollCall3"]
+modulate = Color( 0.223529, 0.364706, 0.843137, 1 )
+material = SubResource( 51 )
+margin_left = 144.0
+margin_top = 152.0
+margin_right = 232.0
+margin_bottom = 175.0
+theme = ExtResource( 6 )
+text = "Eldritch
+experiments"
+align = 1
+
+[node name="RollCall4" type="Node2D" parent="Control"]
+position = Vector2( 768, 0 )
+
+[node name="2600" parent="Control/RollCall4" instance=ExtResource( 37 )]
+position = Vector2( 3464, -8 )
+make_explosions = true
+
+[node name="ShootTimer" parent="Control/RollCall4/2600" index="2"]
+autostart = false
+
+[node name="FootShapeFront" parent="Control/RollCall4/2600/Hitbox" index="1"]
+position = Vector2( 63.7334, 154.923 )
+scale = Vector2( 1, 1 )
+
+[node name="FootShapeBack" parent="Control/RollCall4/2600/Hitbox" index="2"]
+position = Vector2( 42.7334, 154.923 )
+scale = Vector2( 1, 1 )
+
+[node name="ExplosionRect" parent="Control/RollCall4/2600/BigExplosion" index="0"]
+material = SubResource( 81 )
+
+[node name="Label2" type="Label" parent="Control/RollCall4/2600"]
+material = ExtResource( 4 )
+margin_left = -16.0
+margin_top = 176.0
+margin_right = 117.0
+margin_bottom = 190.0
+theme = ExtResource( 6 )
+text = "Stg-2600 / Sg-2083"
+align = 1
+
+[node name="MonsterousMechaMadeMoral" type="Label" parent="Control/RollCall4"]
+modulate = Color( 0.564706, 0.576471, 0.607843, 1 )
+material = SubResource( 51 )
+margin_left = 3344.0
+margin_top = 16.0
+margin_right = 3456.0
+margin_bottom = 39.0
+theme = ExtResource( 6 )
+text = "Monsterous mecha
+made moral"
+align = 1
+
+[node name="MonsterousMechaMadeMoral2" type="Label" parent="Control/RollCall4"]
+modulate = Color( 0.105882, 0.682353, 0.615686, 1 )
+material = SubResource( 51 )
+margin_left = 3344.0
+margin_top = 72.0
+margin_right = 3456.0
+margin_bottom = 108.0
+theme = ExtResource( 6 )
+text = "Bastards
+'n'
+bots"
+align = 1
+
+[node name="Famicop" type="AnimatedSprite" parent="Control/RollCall4"]
+material = SubResource( 82 )
+position = Vector2( 3362, 122.5 )
+frames = SubResource( 87 )
+playing = true
+
+[node name="Label" type="Label" parent="Control/RollCall4/Famicop"]
+material = ExtResource( 4 )
+margin_left = -64.0
+margin_top = 12.0
+margin_right = 69.0
+margin_bottom = 26.0
+theme = ExtResource( 6 )
+text = "Famicop"
+align = 1
+
+[node name="Roboturret" parent="Control/RollCall4" instance=ExtResource( 40 )]
+position = Vector2( 3434, 122.5 )
+shoot_time = inf
+
+[node name="Label2" type="Label" parent="Control/RollCall4/Roboturret"]
+material = ExtResource( 4 )
+margin_left = -64.0
+margin_top = 12.0
+margin_right = 69.0
+margin_bottom = 26.0
+theme = ExtResource( 6 )
+text = "roboturret"
+align = 1
+
+[node name="Tin" parent="Control/RollCall4" instance=ExtResource( 39 )]
+position = Vector2( 3400, 160 )
+speed = 0
+
+[node name="Label2" type="Label" parent="Control/RollCall4/Tin"]
+material = ExtResource( 4 )
+margin_left = -67.0
+margin_top = 8.0
+margin_right = 66.0
+margin_bottom = 22.0
+theme = ExtResource( 6 )
+text = "Tin"
+align = 1
+
+[node name="RollCall6" type="Node2D" parent="Control"]
+
+[node name="Famira" parent="Control/RollCall6" instance=ExtResource( 47 )]
+position = Vector2( 4502, 184 )
+credits = true
+
+[node name="MonsterousMechaMadeMoral" type="Label" parent="Control/RollCall6"]
+modulate = Color( 0.980392, 0.878431, 0.0392157, 1 )
+material = SubResource( 51 )
+margin_left = 4361.0
+margin_top = 112.0
+margin_right = 4473.0
+margin_bottom = 135.0
+theme = ExtResource( 6 )
+text = "Totalitarian
+terror"
+align = 1
+
+[node name="Label2" type="Label" parent="Control/RollCall6"]
+material = ExtResource( 4 )
+margin_left = 4352.0
+margin_top = 148.0
+margin_right = 4485.0
+margin_bottom = 162.0
+theme = ExtResource( 6 )
+text = "Super Famira"
+align = 1
+
+[node name="RollCall5" type="Node2D" parent="Control"]
+position = Vector2( 4608, 0 )
+
+[node name="Haze" type="Sprite" parent="Control/RollCall5"]
+position = Vector2( 80, 136 )
+scale = Vector2( 2, 2 )
+texture = ExtResource( 45 )
+
+[node name="Penny" type="Sprite" parent="Control/RollCall5"]
+position = Vector2( 104, 134 )
+scale = Vector2( 2, 2 )
+texture = ExtResource( 44 )
+
+[node name="KikiDog" type="Sprite" parent="Control/RollCall5"]
+position = Vector2( 24, 138 )
+scale = Vector2( -2, 2 )
+texture = ExtResource( 43 )
+
+[node name="Ivy" type="Sprite" parent="Control/RollCall5"]
+position = Vector2( 54, 136 )
+scale = Vector2( 2, 2 )
+texture = ExtResource( 42 )
+
+[node name="Sprite" type="Sprite" parent="Control/RollCall5"]
+position = Vector2( 176, 88 )
+texture = ExtResource( 46 )
+
+[node name="Label" type="Label" parent="Control/RollCall5"]
+material = ExtResource( 4 )
+margin_left = 136.0
+margin_top = 64.0
+margin_right = 220.0
+margin_bottom = 100.0
+theme = ExtResource( 6 )
+text = "Thank you
+for playing
+our game!"
+align = 1
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "credits"
+playback_speed = 0.85
+anims/RESET = SubResource( 89 )
+anims/credits = SubResource( 90 )
+
+[editable path="Control/RollCall4/2600"]
diff --git a/menus/file_create.gd b/menus/file_create.gd
new file mode 100644
index 0000000..3f2fe6f
--- /dev/null
+++ b/menus/file_create.gd
@@ -0,0 +1,115 @@
+extends Node
+
+
+const DESCRIPTIONS := [
+ # sweet mode
+ {
+ "enemies": "*slower enemies",
+ "lives": "*unlimited lives",
+ "description": "*Difficulty for\n beginners",
+ },
+ # salty mode
+ {
+ "enemies": "*normal enemies",
+ "lives": "*unlimited lives",
+ "description": "*Difficulty for\n skilled players",
+ },
+ # spicy mode
+ {
+ "enemies": "*normal enemies",
+ "lives": "*limited lives",
+ "description": "*Difficulty for\n retro players",
+ },
+ # pungent mode
+ {
+ "enemies": "*faster enemies",
+ "lives": "*limited lives",
+ "description": "*Difficulty for\n insane players",
+ },
+]
+
+var file: Save.SaveFile = null
+var difficulty: int = Game.Difficulty.SPICY
+
+onready var face: Sprite = $"%Face"
+onready var chosen_name: Label = $"%ChosenName"
+onready var enemies: Label = $"%Enemies"
+onready var lives: Label = $"%Lives"
+onready var description: Label = $"%Description"
+onready var exit_sprite: Sprite = $"%ExitSprite"
+onready var closed_collision: CollisionShape2D = $"%ClosedCollision"
+
+
+func _ready() -> void:
+ # escape to file select if no file is assigned
+ if not file:
+ yield(get_tree(), "idle_frame")
+ SceneManager.current_scene = load("res://menus/file_select.tscn").instance()
+ return
+
+ # pause so that player can not move around until difficulty chosen
+ get_tree().paused = true
+ # initialize name
+ chosen_name.text = ""
+ file.name = ""
+ # fade in
+ Fade.fade_in(Options.transition_speed_secs)
+ # focus the difficulty
+ $"%Spicy".call_deferred("grab_focus")
+
+
+func _set_difficulty(value: int) -> void:
+ difficulty = posmod(value, 4)
+ file.difficulty = difficulty
+ face.frame = difficulty
+ enemies.text = DESCRIPTIONS[difficulty].enemies
+ lives.text = DESCRIPTIONS[difficulty].lives
+ description.text = DESCRIPTIONS[difficulty].description
+
+
+
+func _difficulty_selected() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ $"%DifficultySelect".queue_free()
+ $"%NameEntry".visible = true
+ get_tree().paused = false
+ Game.use_lives = false
+ Fade.fade_in(Options.transition_speed_secs)
+
+func _on_letter_chosen(letter: String) -> void:
+ if file.name.length() < 8:
+ file.name += letter
+ chosen_name.text = file.name
+ if file.name.length() > 0:
+ var tween = create_tween()
+ tween.tween_property(exit_sprite, "frame", 3, 0.25)
+ tween.tween_property(closed_collision, "disabled", true, 0.0)
+
+func _on_backspace():
+# file.name.erase(file.name.length() - 1,1)
+ file.name = file.name.left(file.name.length() - 1)
+ chosen_name.text = file.name
+
+func _on_Exit_area_entered(area: Area2D) -> void:
+ if area.is_in_group("player_hitbox"):
+ var player = area.get_parent()
+ player.state_chart.send_event("start_teleport")
+ player.connect("teleport_finished", self, "_on_player_teleport_finished")
+
+func _on_player_teleport_finished() -> void:
+ if file.name.length() > 0:
+ get_tree().paused = true
+ if Options.scoreboard_name.empty():
+ Options.scoreboard_name = file.name
+ Options.save_options()
+ file.save_to_file()
+ Save.current_file = file
+ Game.difficulty = file.difficulty
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ get_tree().paused = false
+ if Options.speedrun_timer:
+ SpeedrunTimer.timer_running = true
+ SpeedrunTimer.visible = true
+ SceneManager.current_scene = load("res://cutscenes/intro_story.tscn").instance()
diff --git a/menus/file_create.tscn b/menus/file_create.tscn
new file mode 100644
index 0000000..1b622fa
--- /dev/null
+++ b/menus/file_create.tscn
@@ -0,0 +1,497 @@
+[gd_scene load_steps=32 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/hud/sg_menu.png" type="Texture" id=4]
+[ext_resource path="res://graphics/hud/sg_tasting.png" type="Texture" id=5]
+[ext_resource path="res://graphics/hud/scores/salty.png" type="Texture" id=6]
+[ext_resource path="res://menus/file_create.gd" type="Script" id=7]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8]
+[ext_resource path="res://tilesets/t_abstract.tres" type="TileSet" id=9]
+[ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=10]
+[ext_resource path="res://objects/hud/letter_block.tscn" type="PackedScene" id=11]
+[ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=12]
+[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=13]
+[ext_resource path="res://graphics/exit/exit.png" type="Texture" id=14]
+[ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=15]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=16]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=17]
+[ext_resource path="res://shaders/beam_of_sin.gdshader" type="Shader" id=18]
+[ext_resource path="res://graphics/exit/exit_back.png" type="Texture" id=19]
+[ext_resource path="res://graphics/hud/scores/pungent.png" type="Texture" id=20]
+[ext_resource path="res://graphics/hud/scores/spicy.png" type="Texture" id=21]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.458824, 0.282353, 0.690196, 1 )
+shader_param/color_2 = Color( 0.160784, 0.0352941, 0.282353, 1 )
+shader_param/checker_size = Vector2( 32, 16 )
+shader_param/pan_speed = Vector2( 16, -8 )
+shader_param/cycle_speed = Vector2( 0, 4 )
+shader_param/cycle_alternation = Vector2( 0, 1 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 1 )
+shader_param/offset = Vector2( 0, 1 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 1, 0.47451, 0.266667, 1 )
+shader_param/color_2 = Color( 0.980392, 0.890196, 0.576471, 1 )
+shader_param/checker_size = Vector2( 16, 8 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 0, 12 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform2D( 1, 0, 2, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=9]
+shader = ExtResource( 18 )
+shader_param/speed = 1.0
+shader_param/cycle_offset = 0.0
+shader_param/wave_length = 8.0
+shader_param/thickness = 0.1
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 18 )
+shader_param/speed = -2.0
+shader_param/cycle_offset = 3.0
+shader_param/wave_length = 5.0
+shader_param/thickness = 0.1
+
+[sub_resource type="Gradient" id=11]
+interpolation_mode = 1
+offsets = PoolRealArray( 0, 0.5 )
+colors = PoolColorArray( 0.345098, 0.74902, 0.878431, 1, 0.396078, 1, 1, 1 )
+
+[sub_resource type="RectangleShape2D" id=12]
+extents = Vector2( 1, 1 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 7, 7.5 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 8, 4.5 )
+
+[node name="FileCreate" type="Node" groups=["gets_letters"]]
+pause_mode = 2
+script = ExtResource( 7 )
+__meta__ = {
+"_edit_horizontal_guides_": [ ]
+}
+
+[node name="BackgroundLayer" type="CanvasLayer" parent="."]
+layer = -10
+
+[node name="Background" type="ColorRect" parent="BackgroundLayer"]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="DifficultySelect" type="Control" parent="."]
+unique_name_in_owner = true
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Label" type="Label" parent="DifficultySelect"]
+material = ExtResource( 8 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 253.0
+margin_bottom = 44.0
+text = "Select the difficulty of the
+future, sg loves hot peppers but
+that doesn't mean you have to!"
+
+[node name="Label2" type="Label" parent="DifficultySelect"]
+material = ExtResource( 8 )
+margin_left = 92.0
+margin_top = 56.0
+margin_right = 176.0
+margin_bottom = 105.0
+text = "Feel free
+to start
+anew if you
+have trouble"
+
+[node name="ButtonsPanel" type="Panel" parent="DifficultySelect"]
+material = SubResource( 2 )
+margin_left = 16.0
+margin_top = 48.0
+margin_right = 88.0
+margin_bottom = 112.0
+theme = ExtResource( 2 )
+
+[node name="Sweet" type="TextureButton" parent="DifficultySelect/ButtonsPanel"]
+material = SubResource( 3 )
+margin_left = 5.0
+margin_top = 8.0
+margin_right = 17.0
+margin_bottom = 20.0
+focus_neighbour_top = NodePath("../Pungent")
+focus_neighbour_bottom = NodePath("../Salty")
+texture_focused = ExtResource( 13 )
+
+[node name="Salty" type="TextureButton" parent="DifficultySelect/ButtonsPanel"]
+material = SubResource( 3 )
+margin_left = 5.0
+margin_top = 21.0
+margin_right = 17.0
+margin_bottom = 33.0
+focus_neighbour_top = NodePath("../Sweet")
+focus_neighbour_bottom = NodePath("../Spicy")
+texture_focused = ExtResource( 6 )
+
+[node name="Spicy" type="TextureButton" parent="DifficultySelect/ButtonsPanel"]
+unique_name_in_owner = true
+material = SubResource( 3 )
+margin_left = 5.0
+margin_top = 34.0
+margin_right = 17.0
+margin_bottom = 46.0
+focus_neighbour_top = NodePath("../Salty")
+focus_neighbour_bottom = NodePath("../Pungent")
+texture_focused = ExtResource( 21 )
+
+[node name="Pungent" type="TextureButton" parent="DifficultySelect/ButtonsPanel"]
+material = SubResource( 3 )
+margin_left = 5.0
+margin_top = 47.0
+margin_right = 17.0
+margin_bottom = 59.0
+focus_neighbour_top = NodePath("../Spicy")
+focus_neighbour_bottom = NodePath("../Sweet")
+texture_focused = ExtResource( 20 )
+
+[node name="Body" type="Label" parent="DifficultySelect/ButtonsPanel"]
+material = SubResource( 2 )
+margin_left = 18.0
+margin_top = 8.0
+margin_right = 67.0
+margin_bottom = 57.0
+text = "sweet
+salty
+spicy
+pungent"
+
+[node name="DescriptionPanel" type="Panel" parent="DifficultySelect"]
+material = SubResource( 2 )
+margin_left = 16.0
+margin_top = 120.0
+margin_right = 144.0
+margin_bottom = 184.0
+theme = ExtResource( 2 )
+
+[node name="Enemies" type="Label" parent="DifficultySelect/DescriptionPanel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 8.0
+margin_top = 8.0
+margin_right = -8.0
+margin_bottom = -22.0
+text = "*normal enemies"
+autowrap = true
+
+[node name="Lives" type="Label" parent="DifficultySelect/DescriptionPanel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 8.0
+margin_top = 22.0
+margin_bottom = -8.0
+text = "*limited lives"
+autowrap = true
+
+[node name="Description" type="Label" parent="DifficultySelect/DescriptionPanel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+margin_left = 8.0
+margin_top = 37.0
+margin_right = 113.0
+margin_bottom = 69.0
+text = "*Difficulty for
+ retro players"
+
+[node name="SG" type="TextureRect" parent="DifficultySelect"]
+margin_left = 176.0
+margin_top = 40.0
+margin_right = 242.0
+margin_bottom = 187.0
+texture = ExtResource( 4 )
+
+[node name="Face" type="Sprite" parent="DifficultySelect/SG"]
+unique_name_in_owner = true
+position = Vector2( 33, 42 )
+texture = ExtResource( 5 )
+hframes = 4
+frame = 2
+
+[node name="MenuSounds" parent="DifficultySelect" instance=ExtResource( 16 )]
+
+[node name="NameEntry" type="Node2D" parent="."]
+pause_mode = 1
+unique_name_in_owner = true
+visible = false
+
+[node name="ChosenName" type="Label" parent="NameEntry"]
+unique_name_in_owner = true
+material = ExtResource( 8 )
+anchor_right = 1.0
+margin_right = 256.0
+margin_bottom = 16.0
+theme = ExtResource( 2 )
+text = "SG"
+align = 1
+valign = 1
+
+[node name="TileBG" type="ColorRect" parent="NameEntry"]
+material = SubResource( 4 )
+margin_left = 1.0
+margin_top = 161.0
+margin_right = 255.0
+margin_bottom = 191.0
+
+[node name="TileBG2" type="ColorRect" parent="NameEntry/TileBG"]
+material = SubResource( 4 )
+margin_left = 24.0
+margin_top = -56.0
+margin_right = 238.0
+margin_bottom = -42.0
+
+[node name="TileBG3" type="ColorRect" parent="NameEntry/TileBG"]
+material = SubResource( 4 )
+margin_left = 24.0
+margin_top = -112.0
+margin_right = 238.0
+margin_bottom = -98.0
+
+[node name="Ground" type="TileMap" parent="NameEntry"]
+tile_set = ExtResource( 9 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( -1, 0, 1, -65536, 0, 196610, -65535, 0, 196610, -65534, 0, 196610, -65533, 0, 196610, -65532, 0, 196610, -65531, 0, 196610, -65530, 0, 196610, -65529, 0, 196610, -65528, 0, 196610, -65527, 0, 196610, -65526, 0, 196610, -65525, 0, 196610, -65524, 0, 196610, -65523, 0, 196610, -65522, 0, 196610, -65521, 0, 196610, -65520, 0, 196610, -65519, 0, 196610, -65518, 0, 196610, -65517, 0, 196610, -65516, 0, 196610, -65515, 0, 196610, -65514, 0, 196610, -65513, 0, 196610, -65512, 0, 196610, -65511, 0, 196610, -65510, 0, 196610, -65509, 0, 196610, -65508, 0, 196610, -65507, 0, 196610, -65506, 0, 196610, -65505, 0, 196610, -65504, 0, 3, 65535, 0, 65536, 32, 0, 65536, 131071, 0, 65539, 65568, 0, 65537, 196607, 0, 65539, 131104, 0, 65537, 262143, 0, 65539, 196640, 0, 65537, 327679, 0, 65539, 262176, 0, 65537, 393215, 0, 65539, 327712, 0, 65537, 458751, 0, 65539, 393219, 0, 1, 393220, 0, 2, 393221, 0, 2, 393222, 0, 2, 393223, 0, 2, 393224, 0, 2, 393225, 0, 2, 393226, 0, 2, 393227, 0, 2, 393228, 0, 2, 393229, 0, 2, 393230, 0, 2, 393231, 0, 2, 393232, 0, 2, 393233, 0, 2, 393234, 0, 2, 393235, 0, 2, 393236, 0, 2, 393237, 0, 2, 393238, 0, 2, 393239, 0, 2, 393240, 0, 2, 393241, 0, 2, 393242, 0, 2, 393243, 0, 2, 393244, 0, 2, 393245, 0, 3, 393248, 0, 65537, 524287, 0, 65539, 458755, 0, 131073, 458756, 0, 131074, 458757, 0, 131074, 458758, 0, 131074, 458759, 0, 131074, 458760, 0, 131074, 458761, 0, 131074, 458762, 0, 131074, 458763, 0, 131074, 458764, 0, 131074, 458765, 0, 131074, 458766, 0, 131074, 458767, 0, 131074, 458768, 0, 131074, 458769, 0, 131074, 458770, 0, 131074, 458771, 0, 131074, 458772, 0, 131074, 458773, 0, 131074, 458774, 0, 131074, 458775, 0, 131074, 458776, 0, 131074, 458777, 0, 131074, 458778, 0, 131074, 458779, 0, 131074, 458780, 0, 131074, 458781, 0, 131075, 458784, 0, 65537, 589823, 0, 65539, 524320, 0, 65537, 655359, 0, 65539, 589856, 0, 65537, 720895, 0, 65539, 655392, 0, 65537, 786431, 0, 65539, 720928, 0, 65537, 851967, 0, 65539, 786464, 0, 65537, 917503, 0, 65539, 851971, 0, 1, 851972, 0, 2, 851973, 0, 2, 851974, 0, 2, 851975, 0, 2, 851976, 0, 2, 851977, 0, 2, 851978, 0, 2, 851979, 0, 2, 851980, 0, 2, 851981, 0, 2, 851982, 0, 2, 851983, 0, 2, 851984, 0, 2, 851985, 0, 2, 851986, 0, 2, 851987, 0, 2, 851988, 0, 2, 851989, 0, 2, 851990, 0, 2, 851991, 0, 2, 851992, 0, 2, 851993, 0, 2, 851994, 0, 2, 851995, 0, 2, 851996, 0, 2, 851997, 0, 3, 852000, 0, 65537, 983039, 0, 65539, 917507, 0, 131073, 917508, 0, 131074, 917509, 0, 131074, 917510, 0, 131074, 917511, 0, 131074, 917512, 0, 131074, 917513, 0, 131074, 917514, 0, 131074, 917515, 0, 131074, 917516, 0, 131074, 917517, 0, 131074, 917518, 0, 131074, 917519, 0, 131074, 917520, 0, 131074, 917521, 0, 131074, 917522, 0, 131074, 917523, 0, 131074, 917524, 0, 131074, 917525, 0, 131074, 917526, 0, 131074, 917527, 0, 131074, 917528, 0, 131074, 917529, 0, 131074, 917530, 0, 131074, 917531, 0, 131074, 917532, 0, 131074, 917533, 0, 131075, 917536, 0, 65537, 1048575, 0, 65539, 983072, 0, 65537, 1114111, 0, 65539, 1048608, 0, 65537, 1179647, 0, 65539, 1114144, 0, 65537, 1245183, 0, 65539, 1179680, 0, 65537, 1310719, 0, 65539, 1245216, 0, 65537, 1376255, 0, 65539, 1310720, 0, 1, 1310721, 0, 2, 1310722, 0, 2, 1310723, 0, 2, 1310724, 0, 2, 1310725, 0, 2, 1310726, 0, 2, 1310727, 0, 2, 1310728, 0, 2, 1310729, 0, 2, 1310730, 0, 2, 1310731, 0, 2, 1310732, 0, 2, 1310733, 0, 2, 1310734, 0, 2, 1310735, 0, 2, 1310736, 0, 2, 1310737, 0, 2, 1310738, 0, 2, 1310739, 0, 2, 1310740, 0, 2, 1310741, 0, 2, 1310742, 0, 2, 1310743, 0, 2, 1310744, 0, 2, 1310745, 0, 2, 1310746, 0, 2, 1310747, 0, 2, 1310748, 0, 2, 1310749, 0, 2, 1310750, 0, 2, 1310751, 0, 3, 1310752, 0, 65537, 1441791, 0, 65539, 1376256, 0, 65537, 1376257, 0, 65538, 1376258, 0, 65538, 1376259, 0, 65538, 1376260, 0, 65538, 1376261, 0, 65538, 1376262, 0, 65538, 1376263, 0, 65538, 1376264, 0, 65538, 1376265, 0, 65538, 1376266, 0, 65538, 1376267, 0, 65538, 1376268, 0, 65538, 1376269, 0, 65538, 1376270, 0, 65538, 1376271, 0, 65538, 1376272, 0, 65538, 1376273, 0, 65538, 1376274, 0, 65538, 1376275, 0, 65538, 1376276, 0, 65538, 1376277, 0, 65538, 1376278, 0, 65538, 1376279, 0, 65538, 1376280, 0, 65538, 1376281, 0, 65538, 1376282, 0, 65538, 1376283, 0, 65538, 1376284, 0, 65538, 1376285, 0, 65538, 1376286, 0, 65538, 1376287, 0, 65539, 1376288, 0, 65537, 1507327, 0, 65539, 1441792, 0, 65537, 1441793, 0, 65538, 1441794, 0, 65538, 1441795, 0, 65538, 1441796, 0, 65538, 1441797, 0, 65538, 1441798, 0, 65538, 1441799, 0, 65538, 1441800, 0, 65538, 1441801, 0, 65538, 1441802, 0, 65538, 1441803, 0, 65538, 1441804, 0, 65538, 1441805, 0, 65538, 1441806, 0, 65538, 1441807, 0, 65538, 1441808, 0, 65538, 1441809, 0, 65538, 1441810, 0, 65538, 1441811, 0, 65538, 1441812, 0, 65538, 1441813, 0, 65538, 1441814, 0, 65538, 1441815, 0, 65538, 1441816, 0, 65538, 1441817, 0, 65538, 1441818, 0, 65538, 1441819, 0, 65538, 1441820, 0, 65538, 1441821, 0, 65538, 1441822, 0, 65538, 1441823, 0, 65539, 1441824, 0, 65537, 1572863, 0, 65539, 1507328, 0, 131073, 1507329, 0, 131074, 1507330, 0, 131074, 1507331, 0, 131074, 1507332, 0, 131074, 1507333, 0, 131074, 1507334, 0, 131074, 1507335, 0, 131074, 1507336, 0, 131074, 1507337, 0, 131074, 1507338, 0, 131074, 1507339, 0, 131074, 1507340, 0, 131074, 1507341, 0, 131074, 1507342, 0, 131074, 1507343, 0, 131074, 1507344, 0, 131074, 1507345, 0, 131074, 1507346, 0, 131074, 1507347, 0, 131074, 1507348, 0, 131074, 1507349, 0, 131074, 1507350, 0, 131074, 1507351, 0, 131074, 1507352, 0, 131074, 1507353, 0, 131074, 1507354, 0, 131074, 1507355, 0, 131074, 1507356, 0, 131074, 1507357, 0, 131074, 1507358, 0, 131074, 1507359, 0, 131075, 1507360, 0, 65537 )
+
+[node name="Player" parent="NameEntry" instance=ExtResource( 10 )]
+unique_name_in_owner = true
+position = Vector2( 16, 160 )
+walk_speed = 100.0
+climb_speed = 78.0
+
+[node name="Ladders" type="TileMap" parent="NameEntry"]
+tile_set = ExtResource( 12 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 0, 0, 196609, 65536, 0, 196609, 131072, 0, 196609, 196608, 0, 196609, 262144, 0, 196609, 327680, 0, 196609, 393216, 0, 196609, 458752, 0, 196609, 524288, 0, 196609, 589824, 0, 196609, 655360, 0, 196609, 720896, 0, 196609, 786432, 0, 196609, 851968, 0, 196609, 917504, 0, 196609, 983040, 0, 196609, 1048576, 0, 196609, 1114112, 0, 196609, 1179648, 0, 196609, 1245184, 0, 196609 )
+
+[node name="Letters" type="Node2D" parent="NameEntry"]
+
+[node name="LetterBlock1" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 32, 128 )
+
+[node name="LetterBlock2" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 56, 128 )
+glyph = 1
+
+[node name="LetterBlock3" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 80, 128 )
+glyph = 2
+
+[node name="LetterBlock4" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 104, 128 )
+glyph = 3
+
+[node name="LetterBlock5" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 128, 128 )
+glyph = 4
+
+[node name="LetterBlock6" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 152, 128 )
+glyph = 5
+
+[node name="LetterBlock7" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 176, 128 )
+glyph = 6
+
+[node name="LetterBlock8" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 200, 128 )
+glyph = 7
+
+[node name="LetterBlock27" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 224, 128 )
+glyph = 36
+
+[node name="LetterBlock9" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 40, 72 )
+glyph = 8
+
+[node name="LetterBlock10" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 64, 72 )
+glyph = 9
+
+[node name="LetterBlock11" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 88, 72 )
+glyph = 10
+
+[node name="LetterBlock12" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 112, 72 )
+glyph = 11
+
+[node name="LetterBlock13" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 136, 72 )
+glyph = 12
+
+[node name="LetterBlock14" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 160, 72 )
+glyph = 13
+
+[node name="LetterBlock15" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 184, 72 )
+glyph = 14
+
+[node name="LetterBlock16" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 208, 72 )
+glyph = 15
+
+[node name="LetterBlock17" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 232, 72 )
+glyph = 16
+
+[node name="LetterBlock18" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 40, 16 )
+glyph = 17
+
+[node name="LetterBlock19" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 64, 16 )
+glyph = 18
+
+[node name="LetterBlock20" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 88, 16 )
+glyph = 19
+
+[node name="LetterBlock21" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 112, 16 )
+glyph = 20
+
+[node name="LetterBlock22" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 136, 16 )
+glyph = 21
+
+[node name="LetterBlock23" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 160, 16 )
+glyph = 22
+
+[node name="LetterBlock24" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 184, 16 )
+glyph = 23
+
+[node name="LetterBlock25" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 208, 16 )
+glyph = 24
+
+[node name="LetterBlock26" parent="NameEntry/Letters" instance=ExtResource( 11 )]
+position = Vector2( 232, 16 )
+glyph = 25
+
+[node name="Ladder" parent="NameEntry" instance=ExtResource( 15 )]
+scale = Vector2( 1, 20 )
+can_climb_left = false
+
+[node name="Exit" type="Node2D" parent="NameEntry"]
+position = Vector2( 248, 148 )
+
+[node name="Background" type="Sprite" parent="NameEntry/Exit"]
+position = Vector2( 0, 5 )
+z_index = -1
+texture = ExtResource( 19 )
+
+[node name="ExitSprite" type="Sprite" parent="NameEntry/Exit"]
+unique_name_in_owner = true
+material = ExtResource( 17 )
+texture = ExtResource( 14 )
+hframes = 4
+
+[node name="Energy" type="Node2D" parent="NameEntry/Exit/ExitSprite"]
+show_behind_parent = true
+
+[node name="Wave1" type="ColorRect" parent="NameEntry/Exit/ExitSprite/Energy"]
+material = SubResource( 9 )
+margin_left = -7.0
+margin_top = -3.0
+margin_right = 7.0
+margin_bottom = 12.0
+color = Color( 0.396078, 1, 1, 1 )
+
+[node name="Wave2" type="ColorRect" parent="NameEntry/Exit/ExitSprite/Energy"]
+material = SubResource( 10 )
+margin_left = -7.0
+margin_top = -3.0
+margin_right = 7.0
+margin_bottom = 12.0
+color = Color( 0.345098, 0.74902, 0.878431, 1 )
+
+[node name="Sparkles" type="CPUParticles2D" parent="NameEntry/Exit/ExitSprite/Energy"]
+position = Vector2( 0, 12 )
+amount = 16
+lifetime = 2.0
+emission_shape = 2
+emission_rect_extents = Vector2( 6, 0 )
+direction = Vector2( 0, -1 )
+spread = 0.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 12.0
+damping = 4.0
+color_initial_ramp = SubResource( 11 )
+
+[node name="DetectPlayer" type="Area2D" parent="NameEntry/Exit"]
+z_index = -3
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="NameEntry/Exit/DetectPlayer"]
+position = Vector2( 0, 11 )
+shape = SubResource( 12 )
+
+[node name="Collision" type="StaticBody2D" parent="NameEntry/Exit" groups=["can_stain"]]
+
+[node name="ClosedCollision" type="CollisionShape2D" parent="NameEntry/Exit/Collision"]
+unique_name_in_owner = true
+position = Vector2( 0, 4.5 )
+shape = SubResource( 7 )
+
+[node name="TopShape" type="CollisionShape2D" parent="NameEntry/Exit/Collision"]
+position = Vector2( 0, -7.5 )
+shape = SubResource( 8 )
+
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Sweet" to="." method="_difficulty_selected"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Sweet" to="DifficultySelect/MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Sweet" to="." method="_set_difficulty" binds= [ 0 ]]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Sweet" to="DifficultySelect/MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Salty" to="." method="_difficulty_selected"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Salty" to="DifficultySelect/MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Salty" to="." method="_set_difficulty" binds= [ 1 ]]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Salty" to="DifficultySelect/MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Spicy" to="." method="_difficulty_selected"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Spicy" to="DifficultySelect/MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Spicy" to="." method="_set_difficulty" binds= [ 2 ]]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Spicy" to="DifficultySelect/MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Pungent" to="." method="_difficulty_selected"]
+[connection signal="button_down" from="DifficultySelect/ButtonsPanel/Pungent" to="DifficultySelect/MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Pungent" to="." method="_set_difficulty" binds= [ 3 ]]
+[connection signal="focus_entered" from="DifficultySelect/ButtonsPanel/Pungent" to="DifficultySelect/MenuSounds" method="play_select_sound"]
+[connection signal="area_entered" from="NameEntry/Exit/DetectPlayer" to="." method="_on_Exit_area_entered"]
diff --git a/menus/file_select.gd b/menus/file_select.gd
new file mode 100644
index 0000000..3eed580
--- /dev/null
+++ b/menus/file_select.gd
@@ -0,0 +1,34 @@
+extends Node
+
+
+export var next_scene: PackedScene
+var kill_mode = false
+onready var description = $Description
+onready var flavor_text = $FlavorText
+onready var delete_background = $DeleteBackground
+
+func _ready() -> void:
+ Fade.fade_in(Options.transition_speed_secs)
+ $SelectFile1.call_deferred("grab_focus")
+ Game.current_palette = "default"
+
+
+func _on_file_loaded() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = next_scene.instance()
+
+func set_kill_mode(value):
+ delete_background.visible = value
+ kill_mode = value
+ if value == true:
+ description.text = "KILL MODE"
+ flavor_text.text = "Eviscerate an old friend"
+ else:
+ description.text = "Select your destiny"
+ flavor_text.text = "Adventure awaits"
+
+
+
+func play_confirm_sound():
+ pass # Replace with function body.
diff --git a/menus/file_select.tscn b/menus/file_select.tscn
new file mode 100644
index 0000000..e47036a
--- /dev/null
+++ b/menus/file_select.tscn
@@ -0,0 +1,187 @@
+[gd_scene load_steps=18 format=2]
+
+[ext_resource path="res://menus/file_select_panel.tscn" type="PackedScene" id=1]
+[ext_resource path="res://menus/level_select_scholar.tscn" type="PackedScene" id=2]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=3]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=4]
+[ext_resource path="res://menus/back_button.tscn" type="PackedScene" id=5]
+[ext_resource path="res://graphics/hud/delete_dim.png" type="Texture" id=6]
+[ext_resource path="res://graphics/hud/delete.png" type="Texture" id=7]
+[ext_resource path="res://graphics/borders/skaborder.png" type="Texture" id=8]
+[ext_resource path="res://graphics/hud/file_select_arrow.png" type="Texture" id=9]
+[ext_resource path="res://menus/file_select.gd" type="Script" id=10]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=11]
+[ext_resource path="res://menus/DeleteButton.gd" type="Script" id=12]
+[ext_resource path="res://menus/main_menu.tscn" type="PackedScene" id=13]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=14]
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 11 )
+shader_param/color_1 = Color( 0.2, 0.294118, 1, 1 )
+shader_param/color_2 = Color( 0, 0.0352941, 0.329412, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 0, 16 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform2D( 1, 1, 2, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 11 )
+shader_param/color_1 = Color( 0.960784, 0.2, 0.258824, 1 )
+shader_param/color_2 = Color( 0.286275, 0.0745098, 0.12549, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 32, 1 )
+shader_param/cycle_speed = Vector2( -8, 32 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform2D( 1, 1.582, 1, 2, 0, 0 )
+
+[sub_resource type="SpriteFrames" id=4]
+animations = [ {
+"frames": [ ExtResource( 7 ), ExtResource( 6 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[node name="FileSelect" type="Node"]
+script = ExtResource( 10 )
+next_scene = ExtResource( 2 )
+
+[node name="TextureRect2" type="TextureRect" parent="."]
+modulate = Color( 0, 0.109804, 1, 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 8 )
+expand = true
+stretch_mode = 2
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 2 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="DeleteBackground" type="ColorRect" parent="."]
+visible = false
+material = SubResource( 3 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Panel" parent="." instance=ExtResource( 1 )]
+margin_left = 12.0
+margin_top = 48.0
+margin_right = 84.0
+margin_bottom = 136.0
+
+[node name="Panel2" parent="." instance=ExtResource( 1 )]
+margin_left = 92.0
+margin_top = 48.0
+margin_right = 164.0
+margin_bottom = 136.0
+number = 2
+
+[node name="Panel3" parent="." instance=ExtResource( 1 )]
+margin_left = 172.0
+margin_top = 48.0
+margin_right = 244.0
+margin_bottom = 136.0
+number = 3
+
+[node name="SelectFile1" type="TextureButton" parent="."]
+material = ExtResource( 3 )
+margin_left = 12.0
+margin_top = 138.0
+margin_right = 84.0
+margin_bottom = 146.0
+focus_neighbour_left = NodePath("../SelectFile3")
+focus_neighbour_right = NodePath("../SelectFile2")
+focus_neighbour_bottom = NodePath("../Back")
+texture_focused = ExtResource( 9 )
+expand = true
+stretch_mode = 3
+
+[node name="SelectFile2" type="TextureButton" parent="."]
+material = ExtResource( 3 )
+margin_left = 92.0
+margin_top = 138.0
+margin_right = 164.0
+margin_bottom = 146.0
+focus_neighbour_left = NodePath("../SelectFile1")
+focus_neighbour_right = NodePath("../SelectFile3")
+focus_neighbour_bottom = NodePath("../Back")
+texture_focused = ExtResource( 9 )
+expand = true
+stretch_mode = 3
+
+[node name="SelectFile3" type="TextureButton" parent="."]
+material = ExtResource( 3 )
+margin_left = 172.0
+margin_top = 138.0
+margin_right = 244.0
+margin_bottom = 146.0
+focus_neighbour_left = NodePath("../SelectFile2")
+focus_neighbour_right = NodePath("../SelectFile1")
+focus_neighbour_bottom = NodePath("../Back")
+texture_focused = ExtResource( 9 )
+expand = true
+stretch_mode = 3
+
+[node name="Back" parent="." instance=ExtResource( 5 )]
+margin_left = 8.0
+margin_top = 144.0
+margin_right = 60.0
+margin_bottom = 177.0
+focus_neighbour_top = NodePath("../SelectFile1")
+focus_neighbour_right = NodePath("../DeleteButton")
+next_scene = ExtResource( 13 )
+
+[node name="Description" type="Label" parent="."]
+material = ExtResource( 3 )
+margin_top = 8.0
+margin_right = 256.0
+margin_bottom = 22.0
+theme = ExtResource( 4 )
+text = "Select your destiny"
+align = 1
+
+[node name="DeleteButton" type="TextureButton" parent="."]
+margin_left = 212.0
+margin_top = 144.0
+margin_right = 237.0
+margin_bottom = 178.0
+focus_neighbour_left = NodePath("../Back")
+focus_neighbour_top = NodePath("../SelectFile1")
+texture_normal = ExtResource( 7 )
+script = ExtResource( 12 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="DeleteButton"]
+position = Vector2( 13, 17 )
+frames = SubResource( 4 )
+
+[node name="FlavorText" type="Label" parent="."]
+material = ExtResource( 3 )
+margin_left = 40.0
+margin_top = 152.0
+margin_right = 208.0
+margin_bottom = 168.0
+theme = ExtResource( 4 )
+text = "Adventure awaits"
+align = 1
+
+[node name="MenuSounds" parent="." instance=ExtResource( 14 )]
+
+[connection signal="file_loaded" from="Panel" to="." method="_on_file_loaded"]
+[connection signal="file_loaded" from="Panel2" to="." method="_on_file_loaded"]
+[connection signal="file_loaded" from="Panel3" to="." method="_on_file_loaded"]
+[connection signal="button_down" from="SelectFile1" to="Panel" method="select"]
+[connection signal="button_down" from="SelectFile1" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="SelectFile1" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="SelectFile2" to="Panel2" method="select"]
+[connection signal="button_down" from="SelectFile2" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="SelectFile2" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="SelectFile3" to="Panel3" method="select"]
+[connection signal="button_down" from="SelectFile3" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="SelectFile3" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Back" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Back" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="DeleteButton" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="DeleteButton" to="MenuSounds" method="play_select_sound"]
diff --git a/menus/file_select_panel.gd b/menus/file_select_panel.gd
new file mode 100644
index 0000000..49e29ea
--- /dev/null
+++ b/menus/file_select_panel.gd
@@ -0,0 +1,83 @@
+extends Panel
+
+
+signal file_loaded()
+
+const FileCreate = preload("res://menus/file_create.tscn")
+
+export var number = 1
+
+var file: Save.SaveFile = null
+
+onready var splatter = $DeathSplatter
+
+func _ready():
+ $FileNumber.text = "FILE%d" % number
+ refresh()
+
+
+func select() -> void:
+ if get_parent().kill_mode == false:
+ # if a file exists, load and play it!
+ if file:
+ # set current file and difficulty
+ Save.current_file = file
+ Game.difficulty = file.difficulty
+ Game.current_palette = file.palette
+ # update last-played file for continue button
+ Options.last_file = number
+ Options.save_options()
+ # let file select scene know a file has been loaded
+ emit_signal("file_loaded")
+ # empty file, so go to file creation screen
+ else:
+ # wait for fade
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ # create new file and give it to the file create screen
+ var file_create = FileCreate.instance()
+ file_create.file = Save.SaveFile.new("user://file%d.pr" % number)
+ SceneManager.current_scene = file_create
+ else:
+ #Delete file
+ if file:
+ var dir = Directory.new()
+ dir.remove(file.file_path)
+ splatter.emitting = true
+ Audio.play_sound(Audio.a_die,Audio.ac_die)
+ file = null
+ refresh()
+
+
+func refresh():
+ # check if the file exists
+ if File.new().file_exists("user://file%d.pr" % number):
+ # load file and fill in information
+ file = Save.load_file("user://file%d.pr" % number)
+ $"%Name".text = file.name
+ $"%ShardCounter".text = "%02d" % file.get_total_shards()
+ $"%KeyCounter".text = "%03d" % file.get_total_keys()
+ $"%DeathCounter".text = "%04d" % file.get_total_deaths()
+ $"%TimeCounter".text = "%02d:%02d" % [file.play_time / 3600.0, fmod(file.play_time / 60.0, 60.0)]
+ $"%Difficulty".text = Game.DIFFICULTY_NAMES[file.difficulty]
+ var palette = load("res://graphics/player/palettes/%s.tex" % file.palette)
+ $"%Palette".material.set_shader_param("palette", palette)
+ if file.palette == "super_player":
+ $"%Sparkles".visible = true
+ else:
+ $"%Sparkles".visible = false
+
+ $"%MoriMarkGameComplete".visible = false
+ $"%MoriMark100Complete".visible = false
+ $"%MoriMarkNoDeath".visible = false
+ if file.levels["boss3"].completed:
+ $"%MoriMarkGameComplete".visible = true
+ if file.get_total_shards() >= 72:
+ $"%MoriMark100Complete".visible = true
+ if file.get_total_deaths() <= 0:
+ $"%MoriMarkNoDeath".visible = true
+
+ else:
+ file = null
+ $FileExists.visible = false
+ $FileDoesNotExist.visible = true
diff --git a/menus/file_select_panel.tscn b/menus/file_select_panel.tscn
new file mode 100644
index 0000000..181d656
--- /dev/null
+++ b/menus/file_select_panel.tscn
@@ -0,0 +1,186 @@
+[gd_scene load_steps=20 format=2]
+
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=2]
+[ext_resource path="res://objects/collectibles/key.tscn" type="PackedScene" id=3]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=4]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=5]
+[ext_resource path="res://menus/file_select_panel.gd" type="Script" id=6]
+[ext_resource path="res://graphics/hud/deaths_head.png" type="Texture" id=7]
+[ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=8]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=9]
+[ext_resource path="res://objects/enemy/death_particles.tscn" type="PackedScene" id=10]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=11]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=12]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=13]
+[ext_resource path="res://graphics/hud/mori_mark_100_complete.png" type="Texture" id=14]
+[ext_resource path="res://graphics/hud/mori_mark_game_complete.png" type="Texture" id=15]
+[ext_resource path="res://graphics/hud/mori_mark_no_death.png" type="Texture" id=16]
+
+[sub_resource type="ShaderMaterial" id=1]
+resource_local_to_scene = true
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 9 )
+
+[sub_resource type="Curve" id=2]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 13 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Panel" type="Panel"]
+margin_right = 72.0
+margin_bottom = 88.0
+theme = ExtResource( 4 )
+script = ExtResource( 6 )
+
+[node name="FileNumber" type="Label" parent="."]
+material = ExtResource( 2 )
+margin_top = -10.0
+margin_right = 72.0
+theme = ExtResource( 4 )
+text = "file1"
+align = 1
+
+[node name="FileExists" type="Control" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Name" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+margin_left = 8.0
+margin_top = 4.0
+margin_right = 64.0
+margin_bottom = 14.0
+text = "SG"
+align = 1
+
+[node name="TimeCounter" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+margin_left = 3.0
+margin_top = 58.0
+margin_right = 69.0
+margin_bottom = 68.0
+text = "00:00"
+align = 1
+
+[node name="DeathCounter" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+margin_left = 25.0
+margin_top = 47.0
+margin_right = 56.0
+margin_bottom = 57.0
+text = "0000"
+
+[node name="Palette" type="TextureRect" parent="FileExists"]
+unique_name_in_owner = true
+material = SubResource( 1 )
+margin_left = 8.0
+margin_top = 16.0
+margin_right = 28.0
+margin_bottom = 48.0
+texture = ExtResource( 8 )
+stretch_mode = 4
+
+[node name="Sparkles" type="CPUParticles2D" parent="FileExists/Palette"]
+unique_name_in_owner = true
+visible = false
+light_mask = 0
+position = Vector2( 10, 16 )
+amount = 2
+lifetime = 2.0
+texture = ExtResource( 12 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 10 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 0.972549, 0.52549, 1 )
+script = ExtResource( 11 )
+
+[node name="ShardCounter" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+margin_left = 43.0
+margin_top = 27.0
+margin_right = 67.0
+margin_bottom = 37.0
+text = "00"
+
+[node name="KeyCounter" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+visible = false
+margin_left = 43.0
+margin_top = 33.0
+margin_right = 64.0
+margin_bottom = 43.0
+text = "000"
+
+[node name="Shard" parent="FileExists" instance=ExtResource( 5 )]
+position = Vector2( 32, 29 )
+
+[node name="Key" parent="FileExists" instance=ExtResource( 3 )]
+visible = false
+position = Vector2( 32, 34 )
+
+[node name="DeathsHead" type="Sprite" parent="FileExists"]
+position = Vector2( 21, 52 )
+texture = ExtResource( 7 )
+
+[node name="Difficulty" type="Label" parent="FileExists"]
+unique_name_in_owner = true
+margin_left = 8.0
+margin_top = 72.0
+margin_right = 65.0
+margin_bottom = 82.0
+text = "Spicy"
+align = 1
+
+[node name="FileDoesNotExist" type="Control" parent="."]
+visible = false
+
+[node name="Label" type="Label" parent="FileDoesNotExist"]
+margin_left = 3.0
+margin_top = 26.0
+margin_right = 69.0
+margin_bottom = 36.0
+text = "Empty!!!"
+align = 1
+
+[node name="DeathSplatter" parent="." instance=ExtResource( 10 )]
+position = Vector2( 36, 47 )
+amount = 64
+lifetime = 1.0
+speed_scale = 3.0
+explosiveness = 1.0
+randomness = 0.34
+initial_velocity = 100.0
+scale_amount = 2.0
+spray_ammount = 0
+
+[node name="MoriMarkGameComplete" type="Sprite" parent="."]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 3 )
+position = Vector2( 61, 57 )
+texture = ExtResource( 15 )
+
+[node name="MoriMark100Complete" type="Sprite" parent="."]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 3 )
+position = Vector2( 61, 57 )
+texture = ExtResource( 14 )
+
+[node name="MoriMarkNoDeath" type="Sprite" parent="."]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 3 )
+position = Vector2( 61, 57 )
+texture = ExtResource( 16 )
diff --git a/menus/game_over.gd b/menus/game_over.gd
new file mode 100644
index 0000000..24c85f4
--- /dev/null
+++ b/menus/game_over.gd
@@ -0,0 +1,26 @@
+extends CanvasLayer
+
+onready var retry_button = $Panel/Retry
+onready var exit_button = $Panel/Exit
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
+ get_tree().paused = true
+ retry_button.grab_focus()
+ Audio.ac_music.stream_paused = false
+ Audio.play_music(load("res://audio/music/74(game_over).ogg"))
+
+func _on_Exit_button_down():
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ get_tree().paused = false
+ SceneManager.current_scene = load("res://menus/level_select_scholar.tscn").instance()
+
+
+func _on_Retry_button_down():
+ get_tree().paused = true
+ if Game.current_level == 11:
+ Game.change_map(load("res://maps/boss/boss3_arena.tscn"))
+ else:
+ Game.restart_level()
diff --git a/menus/game_over.tscn b/menus/game_over.tscn
new file mode 100644
index 0000000..5339600
--- /dev/null
+++ b/menus/game_over.tscn
@@ -0,0 +1,146 @@
+[gd_scene load_steps=16 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/hud/3d_text.tscn" type="PackedScene" id=2]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=5]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=6]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=7]
+[ext_resource path="res://menus/game_over.gd" type="Script" id=8]
+[ext_resource path="res://shaders/wibble_border.gdshader" type="Shader" id=9]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.305882, 0.305882, 0.305882, 1 )
+shader_param/color_2 = Color( 0.223529, 0.223529, 0.223529, 1 )
+shader_param/checker_size = Vector2( 16, 8 )
+shader_param/pan_speed = Vector2( 16, 0 )
+shader_param/cycle_speed = Vector2( 1, 0 )
+shader_param/cycle_alternation = Vector2( 16, 0 )
+shader_param/uv_transform = Transform2D( 1, 1, 0, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=11]
+shader = ExtResource( 6 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 1 )
+shader_param/offset = Vector2( 0, 1 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=14]
+shader = ExtResource( 9 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 1 )
+shader_param/offset = Vector2( 0, 1 )
+shader_param/delay = Vector2( 0, 0 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 6 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=12]
+shader = ExtResource( 9 )
+shader_param/speed = Vector2( 2, 0 )
+shader_param/ammount = Vector2( 4, 0 )
+shader_param/offset = Vector2( 2, 0 )
+shader_param/delay = Vector2( 0, 0 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="ShaderMaterial" id=13]
+shader = ExtResource( 9 )
+shader_param/speed = Vector2( 0, 0 )
+shader_param/ammount = Vector2( 0, 0 )
+shader_param/offset = Vector2( 0, 1 )
+shader_param/delay = Vector2( 0, 0 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="SpatialMaterial" id=9]
+albedo_color = Color( 0.901961, 0.133333, 0.133333, 1 )
+metallic = 0.35
+
+[node name="GameOver" type="CanvasLayer"]
+pause_mode = 2
+layer = 110
+script = ExtResource( 8 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Panel" type="Panel" parent="."]
+material = SubResource( 11 )
+margin_left = 72.0
+margin_top = 96.0
+margin_right = 184.0
+margin_bottom = 136.0
+theme = ExtResource( 3 )
+__meta__ = {
+"_edit_group_": true
+}
+
+[node name="Label" type="Label" parent="Panel"]
+material = SubResource( 14 )
+margin_left = 16.0
+margin_top = 8.0
+margin_right = 93.0
+margin_bottom = 44.0
+text = "RETRY LEVEL
+EXIT TO MAP
+"
+
+[node name="Retry" type="TextureButton" parent="Panel"]
+material = SubResource( 10 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 16.0
+margin_bottom = 16.0
+texture_focused = ExtResource( 5 )
+
+[node name="Exit" type="TextureButton" parent="Panel"]
+material = SubResource( 10 )
+margin_left = 8.0
+margin_top = 21.0
+margin_right = 16.0
+margin_bottom = 29.0
+texture_focused = ExtResource( 5 )
+
+[node name="MenuSounds" parent="." instance=ExtResource( 7 )]
+
+[node name="Label" type="Label" parent="."]
+material = SubResource( 12 )
+margin_top = 51.0
+margin_right = 256.0
+margin_bottom = 87.0
+theme = ExtResource( 3 )
+text = "In reality, the game is
+only over when
+it ceases to be played."
+align = 1
+
+[node name="Label2" type="Label" parent="."]
+material = SubResource( 13 )
+margin_top = 152.0
+margin_right = 256.0
+margin_bottom = 175.0
+theme = ExtResource( 3 )
+text = "The only way to improve is to learn
+from mistakes"
+align = 1
+
+[node name="3DText" parent="." instance=ExtResource( 2 )]
+text_material = SubResource( 9 )
+anim = "game over"
+
+[connection signal="button_down" from="Panel/Retry" to="." method="_on_Retry_button_down"]
+[connection signal="button_down" from="Panel/Retry" to="3DText" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/Retry" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/Exit" to="." method="_on_Exit_button_down"]
+[connection signal="button_down" from="Panel/Exit" to="3DText" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/Exit" to="MenuSounds" method="play_select_sound"]
diff --git a/menus/level_select_scholar.gd b/menus/level_select_scholar.gd
new file mode 100644
index 0000000..6c1c13f
--- /dev/null
+++ b/menus/level_select_scholar.gd
@@ -0,0 +1,289 @@
+extends Control
+
+export var travel_time: float = 1.0
+export var can_menu: bool = true
+
+var selected_level: int = 0
+var made_selection: bool = false
+var selected_shard: int = 0
+var tween: SceneTreeTween = null
+var hop_tween: SceneTreeTween = null
+var boss_shown: bool = false
+var starting_level = false
+
+onready var level_path: Path2D = $LevelPath
+onready var player_position: PathFollow2D = $"%PlayerPosition"
+onready var player_sprite: Sprite = $"%PlayerSprite"
+onready var back_arrow: TextureRect = $"%BackArrow"
+onready var level_title: Label = $"%LevelTitle"
+onready var forward_arrow: TextureRect = $"%ForwardArrow"
+onready var in_cave: PathFollow2D = $"%InCave"
+onready var out_cave: PathFollow2D = $"%OutCave"
+onready var score_any: Label = $"%ScoreAny"
+onready var time_any: Label = $"%TimeAny"
+onready var score_100: Label = $"%Score100"
+onready var time_100: Label = $"%Time100"
+onready var boss_time: Label = $"%BossTime"
+onready var filled_shards: Node2D = $"%FilledShards"
+onready var shard_title: Label = $"%ShardTitle"
+onready var shard_arrow: Sprite = $"%ShardArrow"
+onready var animation_player: AnimationPlayer = $AnimationPlayer
+onready var boss_block: TextureRect = $"%BossBlock"
+onready var shards_block: HBoxContainer = $"%ShardsBlock"
+onready var shards_needed: Label = $"%ShardsNeeded"
+onready var world_title: Label = $"%WorldTitle"
+onready var options_screen = $OptionsScreen
+
+const music = preload("res://audio/music/vitreous_squares.ogg")
+
+func _ready() -> void:
+ if Audio.ac_music.get_stream() != music:
+ Audio.play_music(music)
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ player_sprite.material.set_shader_param("palette", palette)
+ if Game.current_palette == "super_player":
+ $"%Sparkles".visible = true
+ $ShardCount.text = "%02d" % Save.current_file.get_total_shards()
+
+ var save := Save.current_file
+
+ if save.levels["boss3"].completed:
+ $"%Whirlpool".visible = true
+ $"%Whirlpool".play("default")
+ else:
+ $"%Whirlpool".visible = false
+
+ Fade.fade_in(Options.transition_speed_secs)
+ # set initial offset
+ selected_level = Game.current_level
+ var target_level = level_path.get_node(LevelData.levels[selected_level].save_id)
+ if target_level != null:
+ player_position.offset = target_level.offset
+ _select_level(selected_level)
+ call_deferred("grab_focus")
+
+#func _input(event: InputEvent) -> void:
+# # load selected map
+# if Input.is_action_just_pressed("ui_accept"):
+# Game.current_level = selected_level
+# Game.change_map(LevelData.levels[selected_level].scene)
+# elif Input.is_action_just_pressed("ui_right"):
+# _select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
+# elif Input.is_action_just_pressed("ui_left"):
+# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
+
+#func _process(delta: float) -> void:
+# # load selected map
+# if Input.is_action_just_pressed("ui_accept"):
+# Game.current_level = selected_level
+# Game.change_map(LevelData.levels[selected_level].scene)
+# elif Input.is_action_just_pressed("ui_right"):
+# _select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
+# elif Input.is_action_just_pressed("ui_left"):
+# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
+
+func _process(delta: float) -> void:
+ forward_arrow.visible = true
+ boss_block.visible = false
+ shards_block.visible = false
+ if selected_level + 1 < LevelData.levels.size():
+ var save := Save.current_file
+ var level: LevelEntry = LevelData.levels[selected_level + 1]
+ if save.get_total_shards() < level.shards_required:
+ forward_arrow.visible = false
+ boss_block.visible = false
+ shards_block.visible = true
+ shards_needed.text = str(level.shards_required)
+ if level.boss_required != "" and not save.levels[level.boss_required].completed:
+ forward_arrow.visible = false
+ shards_block.visible = false
+ boss_block.visible = true
+ # make SG disappear inside of cave
+ if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
+ player_sprite.visible = false
+ else:
+ player_sprite.visible = true
+
+
+func _input(event: InputEvent) -> void:
+# if event.is_action_pressed("ui_cancel") and $"%MenuPopup".rect_scale.y >= 1.0:
+# animation_player.play("hide_menu")
+ pass
+
+func _gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_cancel") or event.is_action_pressed("pause") && $"%MenuPopup".visible == false:
+ if can_menu:
+ animation_player.play("show_menu")
+ if not made_selection: # player is walking around
+ if event.is_action_pressed("ui_accept"):
+ _update_stats()
+ made_selection = true
+ elif event.is_action_pressed("ui_right"):
+ var level = int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1))
+ if _can_travel(level):
+ _select_level(level)
+ elif event.is_action_pressed("ui_left"):
+ var level = int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1))
+ if _can_travel(level):
+ _select_level(level)
+ else: # player has selected level
+ if event.is_action_pressed("ui_start") or event.is_action_pressed("ui_accept"):
+ starting_level = true
+ $"%MenuPopup".rect_position.y = 9001
+ Game.current_level = selected_level
+ Game.change_map(LevelData.levels[selected_level].scene)
+ elif event.is_action_pressed("ui_cancel"):
+ if boss_shown:
+ animation_player.play("hide_boss")
+ boss_shown = false
+ else:
+ animation_player.play("hide_stats")
+ made_selection = false
+ elif event.is_action_pressed("ui_right"):
+ selected_shard = posmod(selected_shard + 1, 8)
+ shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
+ shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
+ elif event.is_action_pressed("ui_left"):
+ selected_shard = posmod(selected_shard - 1, 8)
+ shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
+ shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
+ elif event.is_action_pressed("ui_down"):
+ var level = int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1))
+ if _can_travel(level):
+ _select_level(level)
+ _update_stats(false)
+ elif event.is_action_pressed("ui_up"):
+ var level = int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1))
+ if _can_travel(level):
+ _select_level(level)
+ _update_stats(false)
+
+func _select_level(level_id: int) -> void:
+ var level = LevelData.levels[level_id]
+ selected_level = level_id
+ Game.current_level = selected_level
+ # hide arrows at edges of leve set
+ if level_id == 0:
+ back_arrow.modulate.a = 0.0
+ else:
+ back_arrow.modulate.a = 1.0
+ if level_id == LevelData.levels.size() - 1:
+ forward_arrow.modulate.a = 0.0
+ else:
+ forward_arrow.modulate.a = 1.0
+ # set text
+ level_title.text = level.title
+ #set world name
+ if selected_level < 3: world_title.text = "Garden of love:\nremnants of nature's beauty"
+ if selected_level == 3: world_title.text = "Artificial life:\namalgam, stranger to the gods"
+ if selected_level > 3 && selected_level < 7: world_title.text = "Harsh Reality:\nHappiness through Hardship"
+ if selected_level == 7: world_title.text = "Dr.Intelli the Vengeful monster:\nfriend to no one, cold metal prison"
+ if selected_level > 7 && selected_level < 11: world_title.text = "Artificial world:\nend man-made suffering"
+ if selected_level == 11: world_title.text = "This is it SG...\nchange the future, we believe in you"
+ if selected_level > 11: world_title.text = "Great Job!\nwelcome to bonus land!"
+ # initiate animation
+ _travel_to_level(level.save_id)
+
+func _can_travel(index: int) -> bool:
+ var save := Save.current_file
+ var level: LevelEntry = LevelData.levels[index]
+ if save.get_total_shards() < level.shards_required:
+ return false
+ if level.boss_required != "":
+ return save.levels[level.boss_required].completed
+ return true
+
+func _travel_to_level(level_name: String) -> void:
+ # get path offset of target level
+ var target_level = level_path.get_node(level_name)
+ if target_level != null:
+ if target_level.offset < player_position.offset:
+ player_sprite.flip_h = true
+ else:
+ player_sprite.flip_h = false
+ # kill existing tweens if exist
+ if tween != null:
+ tween.kill()
+ if hop_tween != null:
+ hop_tween.kill()
+ player_sprite.position.y = -2.0
+
+ # hopping animation
+ hop_tween = create_tween().set_loops()
+ hop_tween.tween_property(player_sprite, "position:y", -4.0, 0.0)
+ hop_tween.tween_interval(0.1)
+ hop_tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
+ hop_tween.tween_interval(0.1)
+
+ # travel animation
+ tween = create_tween()
+ # go to target offset
+ tween.tween_property(player_position, "offset", target_level.offset, travel_time)
+ # kill other animation
+ tween.tween_callback(hop_tween, "kill")
+ tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
+
+func _update_stats(popup: bool = true) -> void:
+ # fill in level panel information
+ var save_id = LevelData.levels[selected_level].save_id
+ var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
+ if LevelData.levels[selected_level].boss:
+ boss_time.text = Game.format_time(save_data.time_any)
+ match selected_level:
+ 3:
+ $"%PressStartBoss".text = "Press Start To Fight!"
+ $"%BossFlavorText".text = "Swiftest Slay"
+ 7:
+ $"%PressStartBoss".text = "Press Start To Fight!"
+ $"%BossFlavorText".text = "Speediest Smashing"
+ 11:
+ $"%PressStartBoss".text = "Press Start To Change The Future!"
+ $"%BossFlavorText".text = "Fastest Future"
+ if popup:
+ animation_player.play("show_boss")
+ elif not boss_shown:
+ $AuxPlayer.play("hide_stats")
+ animation_player.play("show_boss")
+ boss_shown = true
+ else:
+ score_any.text = "%05d" % save_data.score_any
+ time_any.text = Game.format_time(save_data.time_any)
+ score_100.text = "%05d" % save_data.score_100
+ time_100.text = Game.format_time(save_data.time_100)
+ var shards = filled_shards.get_children()
+ for i in 8:
+ shards[i].visible = save_data.shards_collected[i]
+ selected_shard = 0
+ shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
+ shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
+ if popup:
+ animation_player.play("show_stats")
+ elif boss_shown:
+ $AuxPlayer.play("hide_boss")
+ animation_player.play("show_stats")
+ boss_shown = false
+
+
+func _on_StayHere_pressed() -> void:
+ animation_player.play("hide_exit")
+
+
+func _on_ExitMenu_pressed() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/main_menu.tscn").instance()
+
+
+func _on_PalettesButton_button_down() -> void:
+ SceneManager.current_scene = load("res://menus/palette_select.tscn").instance()
+
+func _on_OptionsScreen_exit():
+ options_screen.visible = false
+ $"%OptionsButton".grab_focus()
+
+func _on_OptionsButton_button_down():
+ options_screen.visible = true
+ options_screen.focus()
+
+func _on_ResumeButton_button_down():
+ $MenuSounds.can_play = false
diff --git a/menus/level_select_scholar.tscn b/menus/level_select_scholar.tscn
new file mode 100644
index 0000000..d7c178b
--- /dev/null
+++ b/menus/level_select_scholar.tscn
@@ -0,0 +1,1728 @@
+[gd_scene load_steps=56 format=2]
+
+[ext_resource path="res://menus/level_select_scholar.gd" type="Script" id=1]
+[ext_resource path="res://graphics/level_select/world_map.png" type="Texture" id=2]
+[ext_resource path="res://graphics/level_select/small_sg.png" type="Texture" id=3]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=4]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=5]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=6]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=7]
+[ext_resource path="res://graphics/hud/deaths_head.png" type="Texture" id=8]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=9]
+[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=10]
+[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=11]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=12]
+[ext_resource path="res://graphics/level_select/wave_particle.png" type="Texture" id=13]
+[ext_resource path="res://graphics/hud/levelselect_arrow.png" type="Texture" id=14]
+[ext_resource path="res://graphics/level_select/whirlpool.png" type="Texture" id=15]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=16]
+[ext_resource path="res://shaders/recolor.tres" type="Shader" id=17]
+[ext_resource path="res://objects/hud/options_screen_scholar.tscn" type="PackedScene" id=18]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=19]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=20]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=21]
+[ext_resource path="res://graphics/hud/gamepad_buttons.png" type="Texture" id=22]
+[ext_resource path="res://scripts/show_button.gd" type="Script" id=23]
+
+[sub_resource type="AtlasTexture" id=33]
+atlas = ExtResource( 15 )
+region = Rect2( 0, 0, 48, 48 )
+
+[sub_resource type="AtlasTexture" id=34]
+atlas = ExtResource( 15 )
+region = Rect2( 48, 0, 48, 48 )
+
+[sub_resource type="AtlasTexture" id=35]
+atlas = ExtResource( 15 )
+region = Rect2( 96, 0, 48, 48 )
+
+[sub_resource type="AtlasTexture" id=36]
+atlas = ExtResource( 15 )
+region = Rect2( 144, 0, 48, 48 )
+
+[sub_resource type="SpriteFrames" id=32]
+animations = [ {
+"frames": [ SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ) ],
+"loop": true,
+"name": "default",
+"speed": 8.0
+} ]
+
+[sub_resource type="CanvasItemMaterial" id=9]
+particles_animation = true
+particles_anim_h_frames = 9
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Curve2D" id=1]
+_data = {
+"points": PoolVector2Array( -2.9375, -8.1875, 2.9375, 8.1875, 61, 140, -4.4375, -0.0625, 4.4375, 0.0625, 78, 149, -4.15425, 1.32583, 4.15425, -1.32583, 96, 148, -1.65424, 3.52941, 1.65424, -3.52941, 112, 142, -1.88775, 1.4748, 1.88775, -1.4748, 113, 134, 0, 0, 0, 0, 119, 134, -1.08543, 0.828444, 1.08543, -0.828444, 125, 134, 2.83044, 1.16526, -2.83044, -1.16526, 125, 128, -0.794597, 4.50272, 0.794597, -4.50272, 123, 106, -4.30959, 1.47157, 4.30959, -1.47157, 130, 93, -11.05, -1.311, 11.05, 1.311, 141, 96, -1.31102, 2.24746, 1.31102, -2.24746, 155, 99, -2.22725, 4.12041, 2.22725, -4.12041, 155, 86, -4.89994, 0, 4.89994, 0, 163, 77, 0, -4.73004, 0, 4.73004, 185, 92, 0, -4.51982, 0, 4.51982, 177, 100, -3.88915, 0.630672, 3.88915, -0.630672, 185, 107, -0.630672, -4.62493, 0.630672, 4.62493, 192, 118, 1.05112, -1.99713, -1.05112, 1.99713, 190, 128, 2.6278, -0.420448, -2.6278, 0.420448, 184, 132, 1.78381, -1.78381, -1.78381, 1.78381, 175, 132, -6.30672, -0.210224, 6.30672, 0.210224, 181, 137, -0.225119, 1.75324, 0.225119, -1.75324, 204, 130, -8.92331, -2.0232, 5.373, 1.21823, 212, 119, 4.62446, -6.34857, -4.62446, 6.34857, 202, 143, 4.51982, -0.420448, -4.51982, 0.420448, 174, 154, 4.83515, 0.315336, -4.83515, -0.315336, 152, 154, 4.60818, 2.75004, -4.60818, -2.75004, 136, 149, 3.67496, 4.00905, -3.67496, -4.00905, 127, 142, 3.95539, -2.40938, -3.95539, 2.40938, 123, 128, 4.56378, -0.496063, -4.56378, 0.496063, 109, 124, 1.78583, -5.5559, -1.78583, 5.5559, 102, 131, 6.15118, -3.86929, -6.15118, 3.86929, 96, 140, 5.5559, 0.694488, -5.5559, -0.694488, 75, 142, 0, 0, 0, 0, 62, 130 )
+}
+
+[sub_resource type="ShaderMaterial" id=15]
+shader = ExtResource( 17 )
+shader_param/palette = ExtResource( 16 )
+
+[sub_resource type="Curve" id=27]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 7 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 7 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 9 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 9 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Animation" id=6]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ExitPopup:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ExitPopup:rect_scale")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 0.011 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("MenuPopup:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("MenuPopup:rect_scale")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath(".:can_menu")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("BossCenter:rect_scale")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 0.04 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("BossCenter:visible")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=16]
+resource_name = "hide_boss"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("BossCenter:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BossCenter:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.04 ), Vector2( 0, 0.04 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:can_menu")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=11]
+resource_name = "hide_exit"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExitPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExitPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.07 ), Vector2( 0, 0.07 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("ExitPopup")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( ),
+"transitions": PoolRealArray( ),
+"values": [ ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath(".:can_menu")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=13]
+resource_name = "hide_menu"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("MenuPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("MenuPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.035 ), Vector2( 1e-05, 0.035 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:can_menu")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=8]
+resource_name = "hide_stats"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.02 ), Vector2( 0, 0.02 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:can_menu")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=17]
+resource_name = "show_boss"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("BossCenter:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BossCenter:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.04 ), Vector2( 1, 0.04 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:can_menu")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=12]
+resource_name = "show_exit"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExitPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExitPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.07 ), Vector2( 1, 0.07 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:can_menu")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=14]
+resource_name = "show_menu"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("MenuPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("MenuPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 0.035 ), Vector2( 1, 0.035 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:can_menu")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=7]
+resource_name = "show_stats"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.02 ), Vector2( 1, 0.02 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:can_menu")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=18]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ExitPopup:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ExitPopup:rect_scale")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 0.011 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("MenuPopup:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("MenuPopup:rect_scale")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=19]
+resource_name = "hide_boss"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("BossCenter:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BossCenter:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.04 ), Vector2( 0, 0.04 ) ]
+}
+
+[sub_resource type="Animation" id=20]
+resource_name = "hide_exit"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExitPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExitPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.07 ), Vector2( 0, 0.07 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("ExitPopup")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( ),
+"transitions": PoolRealArray( ),
+"values": [ ]
+}
+
+[sub_resource type="Animation" id=21]
+resource_name = "hide_menu"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("MenuPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("MenuPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.035 ), Vector2( 1e-05, 0.035 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+
+[sub_resource type="Animation" id=22]
+resource_name = "hide_stats"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1, 0.02 ), Vector2( 0, 0.02 ) ]
+}
+
+[sub_resource type="Animation" id=23]
+resource_name = "show_boss"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("BossCenter:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BossCenter:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.04 ), Vector2( 1, 0.04 ), Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=24]
+resource_name = "show_exit"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExitPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExitPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.07 ), Vector2( 1, 0.07 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+
+[sub_resource type="Animation" id=25]
+resource_name = "show_menu"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("MenuPopup:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("MenuPopup:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 0.035 ), Vector2( 1, 0.035 ), Vector2( 1, 1 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+
+[sub_resource type="Animation" id=26]
+resource_name = "show_stats"
+length = 0.4
+tracks/0/type = "value"
+tracks/0/path = NodePath("LevelStats:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("LevelStats:rect_scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0.02 ), Vector2( 1, 0.02 ), Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="AtlasTexture" id=37]
+resource_local_to_scene = true
+atlas = ExtResource( 22 )
+region = Rect2( 0, 0, 12, 10 )
+
+[node name="LevelSelect" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_mode = 2
+script = ExtResource( 1 )
+
+[node name="WorldMap" type="TextureRect" parent="."]
+margin_right = 256.0
+margin_bottom = 192.0
+texture = ExtResource( 2 )
+
+[node name="Whirlpool" type="AnimatedSprite" parent="."]
+unique_name_in_owner = true
+position = Vector2( 83, 65 )
+frames = SubResource( 32 )
+
+[node name="WaveParticles" type="CPUParticles2D" parent="."]
+material = SubResource( 9 )
+amount = 12
+lifetime = 1.5
+texture = ExtResource( 13 )
+emission_shape = 3
+emission_points = PoolVector2Array( 3, 3, 3, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 3, 11, 3, 12, 3, 13, 3, 14, 3, 15, 3, 16, 3, 17, 3, 18, 3, 19, 3, 20, 3, 21, 3, 22, 3, 23, 3, 24, 3, 25, 3, 26, 3, 27, 3, 28, 3, 29, 3, 30, 3, 31, 3, 32, 3, 33, 3, 34, 3, 35, 3, 36, 3, 37, 3, 38, 3, 39, 3, 40, 3, 41, 3, 42, 3, 43, 3, 44, 3, 45, 3, 46, 3, 47, 3, 48, 3, 49, 3, 50, 3, 51, 3, 52, 3, 53, 3, 54, 3, 55, 3, 56, 3, 57, 3, 58, 3, 59, 3, 60, 3, 61, 3, 62, 3, 63, 3, 64, 3, 65, 3, 66, 3, 67, 3, 68, 3, 69, 3, 70, 3, 71, 3, 72, 3, 73, 3, 74, 3, 75, 3, 76, 3, 77, 3, 78, 3, 79, 3, 80, 3, 81, 3, 82, 3, 83, 3, 84, 3, 85, 3, 86, 3, 87, 3, 88, 3, 89, 3, 90, 3, 91, 3, 92, 3, 93, 3, 94, 3, 95, 3, 96, 3, 97, 3, 98, 3, 99, 3, 100, 3, 101, 3, 102, 3, 103, 3, 104, 3, 105, 3, 106, 3, 107, 3, 108, 3, 109, 3, 110, 3, 111, 3, 112, 3, 113, 3, 114, 3, 115, 3, 116, 3, 117, 3, 118, 3, 119, 3, 120, 3, 121, 3, 122, 3, 123, 3, 124, 3, 125, 3, 126, 3, 127, 3, 128, 3, 129, 3, 130, 3, 131, 3, 132, 3, 133, 3, 134, 3, 135, 3, 136, 3, 137, 3, 138, 3, 139, 3, 140, 3, 141, 3, 142, 3, 143, 3, 144, 3, 145, 3, 146, 3, 147, 3, 148, 3, 149, 3, 150, 3, 151, 3, 152, 3, 153, 3, 154, 3, 155, 3, 156, 3, 157, 3, 158, 3, 159, 3, 160, 3, 161, 3, 162, 3, 163, 3, 164, 3, 165, 3, 166, 3, 167, 3, 168, 3, 169, 3, 170, 3, 171, 3, 172, 3, 173, 3, 174, 3, 175, 3, 176, 3, 177, 3, 178, 3, 179, 3, 180, 3, 181, 3, 182, 3, 183, 3, 184, 3, 185, 3, 186, 3, 187, 3, 188, 4, 3, 4, 4, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 4, 12, 4, 13, 4, 14, 4, 15, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 22, 4, 23, 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, 29, 4, 30, 4, 31, 4, 32, 4, 33, 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, 4, 44, 4, 45, 4, 46, 4, 47, 4, 48, 4, 49, 4, 50, 4, 51, 4, 52, 4, 53, 4, 54, 4, 55, 4, 56, 4, 57, 4, 58, 4, 59, 4, 60, 4, 61, 4, 62, 4, 63, 4, 64, 4, 65, 4, 66, 4, 67, 4, 68, 4, 69, 4, 70, 4, 71, 4, 72, 4, 73, 4, 74, 4, 75, 4, 76, 4, 77, 4, 78, 4, 79, 4, 80, 4, 81, 4, 82, 4, 83, 4, 84, 4, 85, 4, 86, 4, 87, 4, 88, 4, 89, 4, 90, 4, 91, 4, 92, 4, 93, 4, 94, 4, 95, 4, 96, 4, 97, 4, 98, 4, 99, 4, 100, 4, 101, 4, 102, 4, 103, 4, 104, 4, 105, 4, 106, 4, 107, 4, 108, 4, 109, 4, 110, 4, 111, 4, 112, 4, 113, 4, 114, 4, 115, 4, 116, 4, 117, 4, 118, 4, 119, 4, 120, 4, 121, 4, 122, 4, 123, 4, 124, 4, 125, 4, 126, 4, 127, 4, 128, 4, 129, 4, 130, 4, 131, 4, 132, 4, 133, 4, 134, 4, 135, 4, 136, 4, 137, 4, 138, 4, 139, 4, 140, 4, 141, 4, 142, 4, 143, 4, 144, 4, 145, 4, 146, 4, 147, 4, 148, 4, 149, 4, 150, 4, 151, 4, 152, 4, 153, 4, 154, 4, 155, 4, 156, 4, 157, 4, 158, 4, 159, 4, 160, 4, 161, 4, 162, 4, 163, 4, 164, 4, 165, 4, 166, 4, 167, 4, 168, 4, 169, 4, 170, 4, 171, 4, 172, 4, 173, 4, 174, 4, 175, 4, 176, 4, 177, 4, 178, 4, 179, 4, 180, 4, 181, 4, 182, 4, 183, 4, 184, 4, 185, 4, 186, 4, 187, 4, 188, 5, 3, 5, 4, 5, 5, 5, 6, 5, 7, 5, 8, 5, 9, 5, 10, 5, 11, 5, 12, 5, 13, 5, 14, 5, 15, 5, 16, 5, 17, 5, 18, 5, 19, 5, 20, 5, 21, 5, 22, 5, 23, 5, 24, 5, 25, 5, 26, 5, 27, 5, 28, 5, 29, 5, 30, 5, 31, 5, 32, 5, 33, 5, 34, 5, 35, 5, 36, 5, 37, 5, 38, 5, 39, 5, 40, 5, 41, 5, 42, 5, 43, 5, 44, 5, 45, 5, 46, 5, 47, 5, 48, 5, 49, 5, 50, 5, 51, 5, 52, 5, 53, 5, 54, 5, 55, 5, 56, 5, 57, 5, 58, 5, 59, 5, 60, 5, 61, 5, 62, 5, 63, 5, 64, 5, 65, 5, 66, 5, 67, 5, 68, 5, 69, 5, 70, 5, 71, 5, 72, 5, 73, 5, 74, 5, 75, 5, 76, 5, 77, 5, 78, 5, 79, 5, 80, 5, 81, 5, 82, 5, 83, 5, 84, 5, 85, 5, 86, 5, 87, 5, 88, 5, 89, 5, 90, 5, 91, 5, 92, 5, 93, 5, 94, 5, 95, 5, 96, 5, 97, 5, 98, 5, 99, 5, 100, 5, 101, 5, 102, 5, 103, 5, 104, 5, 105, 5, 106, 5, 107, 5, 108, 5, 109, 5, 110, 5, 111, 5, 112, 5, 113, 5, 114, 5, 115, 5, 116, 5, 117, 5, 118, 5, 119, 5, 120, 5, 121, 5, 122, 5, 123, 5, 124, 5, 125, 5, 126, 5, 127, 5, 128, 5, 129, 5, 130, 5, 131, 5, 132, 5, 133, 5, 134, 5, 135, 5, 136, 5, 137, 5, 138, 5, 139, 5, 140, 5, 141, 5, 142, 5, 143, 5, 144, 5, 145, 5, 146, 5, 147, 5, 148, 5, 149, 5, 150, 5, 151, 5, 152, 5, 153, 5, 154, 5, 155, 5, 156, 5, 157, 5, 158, 5, 159, 5, 160, 5, 161, 5, 162, 5, 163, 5, 164, 5, 165, 5, 166, 5, 167, 5, 168, 5, 169, 5, 170, 5, 171, 5, 172, 5, 173, 5, 174, 5, 175, 5, 176, 5, 177, 5, 178, 5, 179, 5, 180, 5, 181, 5, 182, 5, 183, 5, 184, 5, 185, 5, 186, 5, 187, 5, 188, 6, 3, 6, 4, 6, 5, 6, 6, 6, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 6, 16, 6, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6, 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6, 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6, 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6, 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6, 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6, 110, 6, 111, 6, 112, 6, 113, 6, 114, 6, 115, 6, 116, 6, 117, 6, 118, 6, 119, 6, 120, 6, 121, 6, 122, 6, 123, 6, 124, 6, 125, 6, 126, 6, 127, 6, 128, 6, 129, 6, 130, 6, 131, 6, 132, 6, 133, 6, 134, 6, 135, 6, 136, 6, 137, 6, 138, 6, 139, 6, 140, 6, 141, 6, 142, 6, 143, 6, 144, 6, 145, 6, 146, 6, 147, 6, 148, 6, 149, 6, 150, 6, 151, 6, 152, 6, 153, 6, 154, 6, 155, 6, 156, 6, 157, 6, 158, 6, 159, 6, 160, 6, 161, 6, 162, 6, 163, 6, 164, 6, 165, 6, 166, 6, 167, 6, 168, 6, 169, 6, 170, 6, 171, 6, 172, 6, 173, 6, 174, 6, 175, 6, 176, 6, 177, 6, 178, 6, 179, 6, 180, 6, 181, 6, 182, 6, 183, 6, 184, 6, 185, 6, 186, 6, 187, 6, 188, 7, 3, 7, 4, 7, 5, 7, 6, 7, 7, 7, 8, 7, 9, 7, 10, 7, 11, 7, 12, 7, 13, 7, 14, 7, 15, 7, 16, 7, 17, 7, 18, 7, 19, 7, 20, 7, 21, 7, 22, 7, 23, 7, 24, 7, 25, 7, 26, 7, 27, 7, 28, 7, 29, 7, 30, 7, 31, 7, 32, 7, 33, 7, 34, 7, 35, 7, 36, 7, 37, 7, 38, 7, 39, 7, 40, 7, 41, 7, 42, 7, 43, 7, 44, 7, 45, 7, 46, 7, 47, 7, 48, 7, 49, 7, 50, 7, 51, 7, 52, 7, 53, 7, 54, 7, 55, 7, 56, 7, 57, 7, 58, 7, 59, 7, 60, 7, 61, 7, 62, 7, 63, 7, 64, 7, 65, 7, 66, 7, 67, 7, 68, 7, 69, 7, 70, 7, 71, 7, 72, 7, 73, 7, 74, 7, 75, 7, 76, 7, 77, 7, 78, 7, 79, 7, 80, 7, 81, 7, 82, 7, 83, 7, 84, 7, 85, 7, 86, 7, 87, 7, 88, 7, 89, 7, 90, 7, 91, 7, 92, 7, 93, 7, 94, 7, 95, 7, 96, 7, 97, 7, 98, 7, 99, 7, 100, 7, 101, 7, 102, 7, 103, 7, 104, 7, 105, 7, 106, 7, 107, 7, 108, 7, 109, 7, 110, 7, 111, 7, 112, 7, 113, 7, 114, 7, 115, 7, 116, 7, 117, 7, 118, 7, 119, 7, 120, 7, 121, 7, 122, 7, 123, 7, 124, 7, 125, 7, 126, 7, 127, 7, 128, 7, 129, 7, 130, 7, 131, 7, 132, 7, 133, 7, 134, 7, 135, 7, 136, 7, 137, 7, 138, 7, 139, 7, 140, 7, 141, 7, 142, 7, 143, 7, 144, 7, 145, 7, 146, 7, 147, 7, 148, 7, 149, 7, 150, 7, 151, 7, 152, 7, 153, 7, 154, 7, 155, 7, 156, 7, 157, 7, 158, 7, 159, 7, 160, 7, 161, 7, 162, 7, 163, 7, 164, 7, 165, 7, 166, 7, 167, 7, 168, 7, 169, 7, 170, 7, 171, 7, 172, 7, 173, 7, 174, 7, 175, 7, 176, 7, 177, 7, 178, 7, 179, 7, 180, 7, 181, 7, 182, 7, 183, 7, 184, 7, 185, 7, 186, 7, 187, 7, 188, 8, 3, 8, 4, 8, 5, 8, 6, 8, 7, 8, 8, 8, 9, 8, 10, 8, 11, 8, 12, 8, 13, 8, 14, 8, 15, 8, 16, 8, 17, 8, 18, 8, 19, 8, 20, 8, 21, 8, 22, 8, 23, 8, 24, 8, 25, 8, 26, 8, 27, 8, 28, 8, 29, 8, 30, 8, 31, 8, 32, 8, 33, 8, 34, 8, 35, 8, 36, 8, 37, 8, 38, 8, 39, 8, 40, 8, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 8, 51, 8, 52, 8, 53, 8, 54, 8, 55, 8, 56, 8, 57, 8, 58, 8, 59, 8, 60, 8, 61, 8, 62, 8, 63, 8, 64, 8, 65, 8, 66, 8, 67, 8, 68, 8, 69, 8, 70, 8, 71, 8, 72, 8, 73, 8, 74, 8, 75, 8, 76, 8, 77, 8, 78, 8, 79, 8, 80, 8, 81, 8, 82, 8, 83, 8, 84, 8, 85, 8, 86, 8, 87, 8, 88, 8, 89, 8, 90, 8, 91, 8, 92, 8, 93, 8, 94, 8, 95, 8, 96, 8, 97, 8, 98, 8, 99, 8, 100, 8, 101, 8, 102, 8, 103, 8, 104, 8, 105, 8, 106, 8, 107, 8, 108, 8, 109, 8, 110, 8, 111, 8, 112, 8, 113, 8, 114, 8, 115, 8, 116, 8, 117, 8, 118, 8, 119, 8, 120, 8, 121, 8, 122, 8, 123, 8, 124, 8, 125, 8, 126, 8, 127, 8, 128, 8, 129, 8, 130, 8, 131, 8, 132, 8, 133, 8, 134, 8, 135, 8, 136, 8, 137, 8, 138, 8, 139, 8, 140, 8, 141, 8, 142, 8, 143, 8, 144, 8, 145, 8, 146, 8, 147, 8, 148, 8, 154, 8, 155, 8, 156, 8, 157, 8, 158, 8, 159, 8, 160, 8, 161, 8, 162, 8, 163, 8, 164, 8, 165, 8, 166, 8, 167, 8, 168, 8, 169, 8, 170, 8, 171, 8, 172, 8, 173, 8, 174, 8, 175, 8, 176, 8, 177, 8, 178, 8, 179, 8, 180, 8, 181, 8, 182, 8, 183, 8, 184, 8, 185, 8, 186, 8, 187, 8, 188, 9, 3, 9, 4, 9, 5, 9, 6, 9, 7, 9, 8, 9, 9, 9, 10, 9, 11, 9, 12, 9, 13, 9, 14, 9, 15, 9, 16, 9, 17, 9, 18, 9, 19, 9, 20, 9, 21, 9, 22, 9, 23, 9, 24, 9, 25, 9, 26, 9, 27, 9, 28, 9, 29, 9, 30, 9, 31, 9, 32, 9, 33, 9, 34, 9, 35, 9, 36, 9, 37, 9, 38, 9, 39, 9, 40, 9, 41, 9, 42, 9, 43, 9, 44, 9, 45, 9, 46, 9, 47, 9, 48, 9, 49, 9, 50, 9, 51, 9, 52, 9, 53, 9, 54, 9, 55, 9, 56, 9, 57, 9, 58, 9, 59, 9, 60, 9, 61, 9, 62, 9, 63, 9, 64, 9, 65, 9, 66, 9, 67, 9, 68, 9, 69, 9, 70, 9, 71, 9, 72, 9, 73, 9, 74, 9, 75, 9, 76, 9, 77, 9, 78, 9, 79, 9, 80, 9, 81, 9, 82, 9, 83, 9, 84, 9, 85, 9, 86, 9, 87, 9, 88, 9, 89, 9, 90, 9, 91, 9, 92, 9, 93, 9, 94, 9, 95, 9, 96, 9, 97, 9, 98, 9, 99, 9, 100, 9, 101, 9, 102, 9, 103, 9, 104, 9, 105, 9, 106, 9, 107, 9, 108, 9, 109, 9, 110, 9, 111, 9, 112, 9, 113, 9, 114, 9, 115, 9, 116, 9, 117, 9, 118, 9, 119, 9, 120, 9, 121, 9, 122, 9, 123, 9, 124, 9, 125, 9, 126, 9, 127, 9, 128, 9, 129, 9, 130, 9, 131, 9, 132, 9, 133, 9, 134, 9, 135, 9, 136, 9, 137, 9, 138, 9, 139, 9, 140, 9, 141, 9, 142, 9, 143, 9, 144, 9, 145, 9, 146, 9, 147, 9, 162, 9, 163, 9, 164, 9, 165, 9, 166, 9, 167, 9, 168, 9, 169, 9, 170, 9, 171, 9, 172, 9, 173, 9, 174, 9, 175, 9, 176, 9, 177, 9, 178, 9, 179, 9, 180, 9, 181, 9, 182, 9, 183, 9, 184, 9, 185, 9, 186, 9, 187, 9, 188, 10, 3, 10, 4, 10, 5, 10, 6, 10, 7, 10, 8, 10, 9, 10, 10, 10, 11, 10, 12, 10, 13, 10, 14, 10, 15, 10, 16, 10, 17, 10, 18, 10, 19, 10, 20, 10, 21, 10, 22, 10, 23, 10, 24, 10, 25, 10, 26, 10, 27, 10, 28, 10, 29, 10, 30, 10, 31, 10, 32, 10, 33, 10, 34, 10, 35, 10, 36, 10, 37, 10, 38, 10, 39, 10, 40, 10, 41, 10, 42, 10, 43, 10, 44, 10, 45, 10, 46, 10, 47, 10, 48, 10, 49, 10, 50, 10, 51, 10, 52, 10, 53, 10, 54, 10, 55, 10, 56, 10, 57, 10, 58, 10, 59, 10, 60, 10, 61, 10, 62, 10, 63, 10, 64, 10, 65, 10, 66, 10, 67, 10, 68, 10, 69, 10, 70, 10, 71, 10, 72, 10, 73, 10, 74, 10, 75, 10, 76, 10, 77, 10, 78, 10, 79, 10, 80, 10, 81, 10, 82, 10, 83, 10, 84, 10, 85, 10, 86, 10, 87, 10, 88, 10, 89, 10, 90, 10, 91, 10, 92, 10, 93, 10, 94, 10, 95, 10, 96, 10, 97, 10, 98, 10, 99, 10, 100, 10, 101, 10, 102, 10, 103, 10, 104, 10, 105, 10, 106, 10, 107, 10, 108, 10, 109, 10, 110, 10, 111, 10, 112, 10, 113, 10, 114, 10, 115, 10, 116, 10, 117, 10, 118, 10, 119, 10, 120, 10, 121, 10, 122, 10, 123, 10, 124, 10, 125, 10, 126, 10, 127, 10, 128, 10, 129, 10, 130, 10, 131, 10, 132, 10, 133, 10, 134, 10, 135, 10, 136, 10, 137, 10, 138, 10, 139, 10, 140, 10, 141, 10, 142, 10, 143, 10, 144, 10, 145, 10, 146, 10, 147, 10, 162, 10, 163, 10, 164, 10, 165, 10, 166, 10, 167, 10, 168, 10, 169, 10, 170, 10, 171, 10, 172, 10, 173, 10, 174, 10, 175, 10, 176, 10, 177, 10, 178, 10, 179, 10, 180, 10, 181, 10, 182, 10, 183, 10, 184, 10, 185, 10, 186, 10, 187, 10, 188, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 11, 11, 11, 12, 11, 13, 11, 14, 11, 15, 11, 16, 11, 17, 11, 18, 11, 19, 11, 20, 11, 21, 11, 22, 11, 23, 11, 24, 11, 25, 11, 26, 11, 27, 11, 28, 11, 29, 11, 30, 11, 31, 11, 32, 11, 33, 11, 34, 11, 35, 11, 36, 11, 37, 11, 38, 11, 39, 11, 40, 11, 41, 11, 42, 11, 43, 11, 44, 11, 45, 11, 46, 11, 47, 11, 48, 11, 49, 11, 50, 11, 51, 11, 52, 11, 53, 11, 54, 11, 55, 11, 56, 11, 57, 11, 58, 11, 59, 11, 60, 11, 61, 11, 62, 11, 63, 11, 64, 11, 65, 11, 66, 11, 67, 11, 68, 11, 69, 11, 70, 11, 71, 11, 72, 11, 73, 11, 74, 11, 75, 11, 76, 11, 77, 11, 78, 11, 79, 11, 80, 11, 81, 11, 82, 11, 83, 11, 84, 11, 85, 11, 86, 11, 87, 11, 88, 11, 89, 11, 90, 11, 91, 11, 92, 11, 93, 11, 94, 11, 95, 11, 96, 11, 97, 11, 98, 11, 99, 11, 100, 11, 101, 11, 102, 11, 103, 11, 104, 11, 105, 11, 106, 11, 107, 11, 108, 11, 109, 11, 110, 11, 111, 11, 112, 11, 113, 11, 114, 11, 115, 11, 116, 11, 117, 11, 118, 11, 119, 11, 120, 11, 121, 11, 122, 11, 123, 11, 124, 11, 125, 11, 126, 11, 127, 11, 128, 11, 129, 11, 130, 11, 131, 11, 132, 11, 133, 11, 134, 11, 135, 11, 136, 11, 137, 11, 138, 11, 139, 11, 140, 11, 141, 11, 142, 11, 143, 11, 144, 11, 145, 11, 146, 11, 163, 11, 164, 11, 165, 11, 166, 11, 167, 11, 168, 11, 169, 11, 170, 11, 171, 11, 172, 11, 173, 11, 174, 11, 175, 11, 176, 11, 177, 11, 178, 11, 179, 11, 180, 11, 181, 11, 182, 11, 183, 11, 184, 11, 185, 11, 186, 11, 187, 11, 188, 12, 3, 12, 4, 12, 5, 12, 6, 12, 7, 12, 8, 12, 9, 12, 10, 12, 11, 12, 12, 12, 13, 12, 14, 12, 15, 12, 16, 12, 17, 12, 18, 12, 19, 12, 20, 12, 21, 12, 22, 12, 23, 12, 24, 12, 25, 12, 26, 12, 27, 12, 28, 12, 29, 12, 30, 12, 31, 12, 32, 12, 33, 12, 34, 12, 35, 12, 36, 12, 37, 12, 38, 12, 39, 12, 40, 12, 41, 12, 42, 12, 43, 12, 44, 12, 45, 12, 46, 12, 47, 12, 48, 12, 49, 12, 50, 12, 51, 12, 52, 12, 53, 12, 54, 12, 55, 12, 56, 12, 57, 12, 58, 12, 59, 12, 60, 12, 61, 12, 62, 12, 63, 12, 64, 12, 65, 12, 66, 12, 67, 12, 68, 12, 69, 12, 70, 12, 71, 12, 72, 12, 73, 12, 74, 12, 75, 12, 76, 12, 77, 12, 78, 12, 79, 12, 80, 12, 81, 12, 82, 12, 83, 12, 84, 12, 85, 12, 86, 12, 87, 12, 88, 12, 89, 12, 90, 12, 91, 12, 92, 12, 93, 12, 94, 12, 95, 12, 96, 12, 97, 12, 98, 12, 99, 12, 100, 12, 101, 12, 102, 12, 103, 12, 104, 12, 105, 12, 106, 12, 107, 12, 108, 12, 109, 12, 110, 12, 111, 12, 112, 12, 113, 12, 114, 12, 115, 12, 116, 12, 117, 12, 118, 12, 119, 12, 120, 12, 121, 12, 122, 12, 123, 12, 124, 12, 125, 12, 126, 12, 127, 12, 128, 12, 129, 12, 130, 12, 131, 12, 132, 12, 133, 12, 134, 12, 135, 12, 136, 12, 137, 12, 138, 12, 139, 12, 140, 12, 141, 12, 142, 12, 143, 12, 144, 12, 145, 12, 164, 12, 165, 12, 166, 12, 167, 12, 168, 12, 169, 12, 170, 12, 171, 12, 172, 12, 173, 12, 174, 12, 175, 12, 176, 12, 177, 12, 178, 12, 179, 12, 180, 12, 181, 12, 182, 12, 183, 12, 184, 12, 185, 12, 186, 12, 187, 12, 188, 13, 3, 13, 4, 13, 5, 13, 6, 13, 7, 13, 8, 13, 9, 13, 10, 13, 11, 13, 12, 13, 13, 13, 14, 13, 15, 13, 16, 13, 17, 13, 18, 13, 19, 13, 20, 13, 21, 13, 22, 13, 23, 13, 24, 13, 25, 13, 26, 13, 27, 13, 28, 13, 29, 13, 30, 13, 31, 13, 32, 13, 33, 13, 34, 13, 35, 13, 36, 13, 37, 13, 38, 13, 39, 13, 40, 13, 41, 13, 42, 13, 43, 13, 44, 13, 45, 13, 46, 13, 47, 13, 48, 13, 49, 13, 50, 13, 51, 13, 52, 13, 53, 13, 54, 13, 55, 13, 56, 13, 57, 13, 58, 13, 59, 13, 60, 13, 61, 13, 62, 13, 63, 13, 64, 13, 65, 13, 66, 13, 67, 13, 68, 13, 69, 13, 70, 13, 71, 13, 72, 13, 73, 13, 74, 13, 75, 13, 76, 13, 77, 13, 78, 13, 79, 13, 80, 13, 81, 13, 82, 13, 83, 13, 84, 13, 85, 13, 86, 13, 87, 13, 88, 13, 89, 13, 90, 13, 91, 13, 92, 13, 93, 13, 94, 13, 95, 13, 96, 13, 97, 13, 98, 13, 99, 13, 100, 13, 101, 13, 102, 13, 103, 13, 104, 13, 105, 13, 106, 13, 107, 13, 108, 13, 109, 13, 110, 13, 111, 13, 112, 13, 113, 13, 114, 13, 115, 13, 116, 13, 117, 13, 118, 13, 119, 13, 120, 13, 121, 13, 122, 13, 123, 13, 124, 13, 125, 13, 126, 13, 127, 13, 128, 13, 129, 13, 130, 13, 131, 13, 132, 13, 133, 13, 134, 13, 135, 13, 136, 13, 137, 13, 138, 13, 139, 13, 140, 13, 141, 13, 142, 13, 143, 13, 144, 13, 165, 13, 166, 13, 167, 13, 168, 13, 169, 13, 170, 13, 171, 13, 172, 13, 173, 13, 174, 13, 175, 13, 176, 13, 177, 13, 178, 13, 179, 13, 180, 13, 181, 13, 182, 13, 183, 13, 184, 13, 185, 13, 186, 13, 187, 13, 188, 14, 3, 14, 4, 14, 5, 14, 6, 14, 7, 14, 8, 14, 9, 14, 10, 14, 11, 14, 12, 14, 13, 14, 14, 14, 15, 14, 16, 14, 17, 14, 18, 14, 19, 14, 20, 14, 21, 14, 22, 14, 23, 14, 24, 14, 25, 14, 26, 14, 27, 14, 28, 14, 29, 14, 30, 14, 31, 14, 32, 14, 33, 14, 34, 14, 35, 14, 36, 14, 37, 14, 38, 14, 39, 14, 40, 14, 41, 14, 42, 14, 43, 14, 44, 14, 45, 14, 46, 14, 47, 14, 48, 14, 49, 14, 50, 14, 51, 14, 52, 14, 53, 14, 54, 14, 55, 14, 56, 14, 57, 14, 58, 14, 59, 14, 60, 14, 61, 14, 62, 14, 63, 14, 64, 14, 65, 14, 66, 14, 67, 14, 68, 14, 69, 14, 70, 14, 71, 14, 72, 14, 73, 14, 74, 14, 75, 14, 76, 14, 77, 14, 78, 14, 79, 14, 80, 14, 81, 14, 82, 14, 83, 14, 84, 14, 85, 14, 86, 14, 87, 14, 88, 14, 89, 14, 90, 14, 91, 14, 92, 14, 93, 14, 94, 14, 95, 14, 96, 14, 97, 14, 98, 14, 99, 14, 100, 14, 101, 14, 102, 14, 103, 14, 104, 14, 105, 14, 106, 14, 107, 14, 108, 14, 109, 14, 110, 14, 111, 14, 112, 14, 113, 14, 114, 14, 115, 14, 116, 14, 117, 14, 118, 14, 119, 14, 120, 14, 121, 14, 122, 14, 123, 14, 124, 14, 125, 14, 126, 14, 127, 14, 128, 14, 129, 14, 130, 14, 131, 14, 132, 14, 133, 14, 134, 14, 135, 14, 136, 14, 137, 14, 138, 14, 139, 14, 140, 14, 141, 14, 142, 14, 143, 14, 144, 14, 165, 14, 166, 14, 167, 14, 168, 14, 169, 14, 170, 14, 171, 14, 172, 14, 173, 14, 174, 14, 175, 14, 176, 14, 177, 14, 178, 14, 179, 14, 180, 14, 181, 14, 182, 14, 183, 14, 184, 14, 185, 14, 186, 14, 187, 14, 188, 15, 3, 15, 4, 15, 5, 15, 6, 15, 7, 15, 8, 15, 9, 15, 10, 15, 11, 15, 12, 15, 13, 15, 14, 15, 15, 15, 16, 15, 17, 15, 18, 15, 19, 15, 20, 15, 21, 15, 22, 15, 23, 15, 24, 15, 25, 15, 26, 15, 27, 15, 28, 15, 29, 15, 30, 15, 31, 15, 32, 15, 33, 15, 34, 15, 35, 15, 36, 15, 37, 15, 38, 15, 39, 15, 40, 15, 41, 15, 42, 15, 43, 15, 44, 15, 45, 15, 46, 15, 47, 15, 48, 15, 49, 15, 50, 15, 51, 15, 52, 15, 53, 15, 54, 15, 55, 15, 56, 15, 57, 15, 58, 15, 59, 15, 60, 15, 61, 15, 62, 15, 63, 15, 64, 15, 65, 15, 66, 15, 67, 15, 68, 15, 69, 15, 70, 15, 71, 15, 72, 15, 73, 15, 74, 15, 75, 15, 76, 15, 77, 15, 78, 15, 79, 15, 80, 15, 81, 15, 82, 15, 83, 15, 84, 15, 85, 15, 86, 15, 87, 15, 88, 15, 89, 15, 90, 15, 91, 15, 92, 15, 93, 15, 94, 15, 95, 15, 96, 15, 97, 15, 98, 15, 99, 15, 100, 15, 101, 15, 102, 15, 103, 15, 104, 15, 105, 15, 106, 15, 107, 15, 108, 15, 109, 15, 110, 15, 111, 15, 112, 15, 113, 15, 114, 15, 115, 15, 116, 15, 117, 15, 118, 15, 119, 15, 120, 15, 121, 15, 122, 15, 123, 15, 124, 15, 125, 15, 126, 15, 127, 15, 128, 15, 129, 15, 130, 15, 131, 15, 132, 15, 133, 15, 134, 15, 135, 15, 136, 15, 137, 15, 138, 15, 139, 15, 140, 15, 141, 15, 142, 15, 143, 15, 166, 15, 167, 15, 168, 15, 169, 15, 170, 15, 171, 15, 172, 15, 173, 15, 174, 15, 175, 15, 176, 15, 177, 15, 178, 15, 179, 15, 180, 15, 181, 15, 182, 15, 183, 15, 184, 15, 185, 15, 186, 15, 187, 15, 188, 16, 3, 16, 4, 16, 5, 16, 6, 16, 7, 16, 8, 16, 9, 16, 10, 16, 11, 16, 12, 16, 13, 16, 14, 16, 15, 16, 16, 16, 17, 16, 18, 16, 19, 16, 20, 16, 21, 16, 22, 16, 23, 16, 24, 16, 25, 16, 26, 16, 27, 16, 28, 16, 29, 16, 30, 16, 31, 16, 32, 16, 33, 16, 34, 16, 35, 16, 36, 16, 37, 16, 38, 16, 39, 16, 40, 16, 41, 16, 42, 16, 43, 16, 44, 16, 45, 16, 46, 16, 47, 16, 48, 16, 49, 16, 50, 16, 51, 16, 52, 16, 53, 16, 54, 16, 55, 16, 56, 16, 57, 16, 58, 16, 59, 16, 60, 16, 61, 16, 62, 16, 63, 16, 64, 16, 65, 16, 66, 16, 67, 16, 68, 16, 69, 16, 70, 16, 71, 16, 72, 16, 73, 16, 74, 16, 75, 16, 76, 16, 77, 16, 78, 16, 79, 16, 80, 16, 81, 16, 82, 16, 83, 16, 84, 16, 85, 16, 86, 16, 87, 16, 88, 16, 89, 16, 90, 16, 91, 16, 92, 16, 93, 16, 94, 16, 95, 16, 96, 16, 97, 16, 98, 16, 99, 16, 100, 16, 101, 16, 102, 16, 103, 16, 104, 16, 105, 16, 106, 16, 107, 16, 108, 16, 109, 16, 110, 16, 111, 16, 112, 16, 113, 16, 114, 16, 115, 16, 116, 16, 117, 16, 118, 16, 119, 16, 120, 16, 121, 16, 122, 16, 123, 16, 124, 16, 125, 16, 126, 16, 127, 16, 128, 16, 129, 16, 130, 16, 131, 16, 132, 16, 133, 16, 134, 16, 135, 16, 136, 16, 137, 16, 138, 16, 139, 16, 140, 16, 141, 16, 142, 16, 167, 16, 168, 16, 169, 16, 170, 16, 171, 16, 172, 16, 173, 16, 174, 16, 175, 16, 176, 16, 177, 16, 178, 16, 179, 16, 180, 16, 181, 16, 182, 16, 183, 16, 184, 16, 185, 16, 186, 16, 187, 16, 188, 17, 3, 17, 4, 17, 5, 17, 6, 17, 7, 17, 8, 17, 9, 17, 10, 17, 11, 17, 12, 17, 13, 17, 14, 17, 15, 17, 16, 17, 17, 17, 18, 17, 19, 17, 20, 17, 21, 17, 22, 17, 23, 17, 24, 17, 25, 17, 26, 17, 27, 17, 28, 17, 29, 17, 30, 17, 31, 17, 32, 17, 33, 17, 34, 17, 35, 17, 36, 17, 37, 17, 38, 17, 39, 17, 40, 17, 41, 17, 42, 17, 43, 17, 44, 17, 45, 17, 46, 17, 47, 17, 48, 17, 49, 17, 50, 17, 51, 17, 52, 17, 53, 17, 54, 17, 55, 17, 56, 17, 57, 17, 58, 17, 59, 17, 60, 17, 61, 17, 62, 17, 63, 17, 64, 17, 65, 17, 66, 17, 67, 17, 68, 17, 69, 17, 70, 17, 71, 17, 72, 17, 73, 17, 74, 17, 75, 17, 76, 17, 77, 17, 78, 17, 79, 17, 80, 17, 81, 17, 82, 17, 83, 17, 84, 17, 85, 17, 86, 17, 87, 17, 88, 17, 89, 17, 90, 17, 91, 17, 92, 17, 93, 17, 94, 17, 95, 17, 96, 17, 97, 17, 98, 17, 99, 17, 100, 17, 101, 17, 102, 17, 103, 17, 104, 17, 105, 17, 106, 17, 107, 17, 108, 17, 109, 17, 110, 17, 111, 17, 112, 17, 113, 17, 114, 17, 115, 17, 116, 17, 117, 17, 118, 17, 119, 17, 120, 17, 121, 17, 122, 17, 123, 17, 124, 17, 125, 17, 126, 17, 127, 17, 128, 17, 129, 17, 130, 17, 131, 17, 132, 17, 133, 17, 134, 17, 135, 17, 136, 17, 137, 17, 138, 17, 139, 17, 140, 17, 141, 17, 142, 17, 167, 17, 168, 17, 169, 17, 170, 17, 171, 17, 172, 17, 173, 17, 174, 17, 175, 17, 176, 17, 177, 17, 178, 17, 179, 17, 180, 17, 181, 17, 182, 17, 183, 17, 184, 17, 185, 17, 186, 17, 187, 17, 188, 18, 3, 18, 4, 18, 5, 18, 6, 18, 7, 18, 8, 18, 9, 18, 10, 18, 11, 18, 12, 18, 13, 18, 14, 18, 15, 18, 16, 18, 17, 18, 18, 18, 19, 18, 20, 18, 21, 18, 22, 18, 23, 18, 24, 18, 25, 18, 26, 18, 27, 18, 28, 18, 29, 18, 30, 18, 31, 18, 32, 18, 33, 18, 34, 18, 35, 18, 36, 18, 37, 18, 38, 18, 39, 18, 40, 18, 41, 18, 42, 18, 43, 18, 44, 18, 45, 18, 46, 18, 47, 18, 48, 18, 49, 18, 50, 18, 51, 18, 52, 18, 53, 18, 54, 18, 55, 18, 56, 18, 57, 18, 58, 18, 59, 18, 60, 18, 61, 18, 62, 18, 63, 18, 64, 18, 65, 18, 66, 18, 67, 18, 68, 18, 69, 18, 70, 18, 71, 18, 72, 18, 73, 18, 74, 18, 75, 18, 76, 18, 77, 18, 78, 18, 79, 18, 80, 18, 81, 18, 82, 18, 83, 18, 84, 18, 85, 18, 86, 18, 87, 18, 88, 18, 89, 18, 90, 18, 91, 18, 92, 18, 93, 18, 94, 18, 95, 18, 96, 18, 97, 18, 98, 18, 99, 18, 100, 18, 101, 18, 102, 18, 103, 18, 104, 18, 105, 18, 106, 18, 107, 18, 108, 18, 109, 18, 110, 18, 111, 18, 112, 18, 113, 18, 114, 18, 115, 18, 116, 18, 117, 18, 118, 18, 119, 18, 120, 18, 121, 18, 122, 18, 123, 18, 124, 18, 125, 18, 126, 18, 127, 18, 128, 18, 129, 18, 130, 18, 131, 18, 132, 18, 133, 18, 134, 18, 135, 18, 136, 18, 137, 18, 138, 18, 139, 18, 140, 18, 141, 18, 142, 18, 168, 18, 169, 18, 170, 18, 171, 18, 172, 18, 173, 18, 174, 18, 175, 18, 176, 18, 177, 18, 178, 18, 179, 18, 180, 18, 181, 18, 182, 18, 183, 18, 184, 18, 185, 18, 186, 18, 187, 18, 188, 19, 3, 19, 4, 19, 5, 19, 6, 19, 7, 19, 8, 19, 9, 19, 10, 19, 11, 19, 12, 19, 13, 19, 14, 19, 15, 19, 16, 19, 17, 19, 18, 19, 19, 19, 20, 19, 21, 19, 22, 19, 23, 19, 24, 19, 25, 19, 26, 19, 27, 19, 28, 19, 29, 19, 30, 19, 31, 19, 32, 19, 33, 19, 34, 19, 35, 19, 36, 19, 37, 19, 38, 19, 39, 19, 40, 19, 41, 19, 42, 19, 43, 19, 44, 19, 45, 19, 46, 19, 47, 19, 48, 19, 49, 19, 50, 19, 51, 19, 52, 19, 53, 19, 54, 19, 55, 19, 56, 19, 57, 19, 58, 19, 59, 19, 60, 19, 61, 19, 62, 19, 63, 19, 64, 19, 65, 19, 66, 19, 67, 19, 68, 19, 69, 19, 70, 19, 71, 19, 72, 19, 73, 19, 74, 19, 75, 19, 76, 19, 77, 19, 78, 19, 79, 19, 80, 19, 81, 19, 82, 19, 83, 19, 84, 19, 85, 19, 86, 19, 87, 19, 88, 19, 89, 19, 90, 19, 91, 19, 92, 19, 93, 19, 94, 19, 95, 19, 96, 19, 97, 19, 98, 19, 99, 19, 100, 19, 101, 19, 102, 19, 103, 19, 104, 19, 105, 19, 106, 19, 107, 19, 108, 19, 109, 19, 110, 19, 111, 19, 112, 19, 113, 19, 114, 19, 115, 19, 116, 19, 117, 19, 118, 19, 119, 19, 120, 19, 121, 19, 122, 19, 123, 19, 124, 19, 125, 19, 126, 19, 127, 19, 128, 19, 129, 19, 130, 19, 131, 19, 132, 19, 133, 19, 134, 19, 135, 19, 136, 19, 137, 19, 138, 19, 139, 19, 140, 19, 141, 19, 168, 19, 169, 19, 170, 19, 171, 19, 172, 19, 173, 19, 174, 19, 175, 19, 176, 19, 177, 19, 178, 19, 179, 19, 180, 19, 181, 19, 182, 19, 183, 19, 184, 19, 185, 19, 186, 19, 187, 19, 188, 20, 3, 20, 4, 20, 5, 20, 6, 20, 7, 20, 8, 20, 9, 20, 10, 20, 11, 20, 12, 20, 13, 20, 14, 20, 15, 20, 16, 20, 17, 20, 18, 20, 19, 20, 20, 20, 21, 20, 22, 20, 23, 20, 24, 20, 25, 20, 26, 20, 27, 20, 28, 20, 29, 20, 30, 20, 31, 20, 32, 20, 33, 20, 34, 20, 35, 20, 36, 20, 37, 20, 38, 20, 39, 20, 40, 20, 41, 20, 42, 20, 43, 20, 44, 20, 45, 20, 46, 20, 47, 20, 48, 20, 49, 20, 50, 20, 51, 20, 52, 20, 53, 20, 54, 20, 55, 20, 56, 20, 57, 20, 58, 20, 59, 20, 60, 20, 61, 20, 62, 20, 63, 20, 64, 20, 65, 20, 66, 20, 67, 20, 68, 20, 69, 20, 70, 20, 71, 20, 72, 20, 73, 20, 74, 20, 75, 20, 76, 20, 77, 20, 78, 20, 79, 20, 80, 20, 81, 20, 82, 20, 83, 20, 84, 20, 85, 20, 86, 20, 87, 20, 88, 20, 89, 20, 90, 20, 91, 20, 92, 20, 93, 20, 94, 20, 95, 20, 96, 20, 97, 20, 98, 20, 99, 20, 100, 20, 101, 20, 102, 20, 103, 20, 104, 20, 105, 20, 106, 20, 107, 20, 108, 20, 109, 20, 110, 20, 111, 20, 112, 20, 113, 20, 114, 20, 115, 20, 116, 20, 117, 20, 118, 20, 119, 20, 120, 20, 121, 20, 122, 20, 123, 20, 124, 20, 125, 20, 126, 20, 127, 20, 128, 20, 129, 20, 130, 20, 131, 20, 132, 20, 133, 20, 134, 20, 135, 20, 136, 20, 137, 20, 138, 20, 139, 20, 140, 20, 141, 20, 168, 20, 169, 20, 170, 20, 171, 20, 172, 20, 173, 20, 174, 20, 175, 20, 176, 20, 177, 20, 178, 20, 179, 20, 180, 20, 181, 20, 182, 20, 183, 20, 184, 20, 185, 20, 186, 20, 187, 20, 188, 21, 3, 21, 4, 21, 5, 21, 6, 21, 7, 21, 8, 21, 9, 21, 10, 21, 11, 21, 12, 21, 13, 21, 14, 21, 15, 21, 16, 21, 17, 21, 18, 21, 19, 21, 20, 21, 21, 21, 22, 21, 23, 21, 24, 21, 25, 21, 26, 21, 27, 21, 28, 21, 29, 21, 30, 21, 31, 21, 32, 21, 33, 21, 34, 21, 35, 21, 36, 21, 37, 21, 38, 21, 39, 21, 40, 21, 41, 21, 42, 21, 43, 21, 44, 21, 45, 21, 46, 21, 47, 21, 48, 21, 49, 21, 50, 21, 51, 21, 52, 21, 53, 21, 54, 21, 55, 21, 56, 21, 57, 21, 58, 21, 59, 21, 60, 21, 61, 21, 62, 21, 63, 21, 64, 21, 65, 21, 66, 21, 67, 21, 68, 21, 69, 21, 70, 21, 71, 21, 72, 21, 73, 21, 74, 21, 75, 21, 76, 21, 77, 21, 78, 21, 79, 21, 80, 21, 81, 21, 82, 21, 83, 21, 84, 21, 85, 21, 86, 21, 87, 21, 88, 21, 89, 21, 90, 21, 91, 21, 92, 21, 93, 21, 94, 21, 95, 21, 96, 21, 97, 21, 98, 21, 99, 21, 100, 21, 101, 21, 102, 21, 103, 21, 104, 21, 105, 21, 106, 21, 107, 21, 108, 21, 109, 21, 110, 21, 111, 21, 112, 21, 113, 21, 114, 21, 115, 21, 116, 21, 117, 21, 118, 21, 119, 21, 120, 21, 121, 21, 122, 21, 123, 21, 124, 21, 125, 21, 126, 21, 127, 21, 128, 21, 129, 21, 130, 21, 131, 21, 132, 21, 133, 21, 134, 21, 135, 21, 136, 21, 137, 21, 138, 21, 139, 21, 140, 21, 141, 21, 167, 21, 168, 21, 169, 21, 170, 21, 171, 21, 172, 21, 173, 21, 174, 21, 175, 21, 176, 21, 177, 21, 178, 21, 179, 21, 180, 21, 181, 21, 182, 21, 183, 21, 184, 21, 185, 21, 186, 21, 187, 21, 188, 22, 3, 22, 4, 22, 5, 22, 6, 22, 7, 22, 8, 22, 9, 22, 10, 22, 11, 22, 12, 22, 13, 22, 14, 22, 15, 22, 16, 22, 17, 22, 18, 22, 19, 22, 20, 22, 21, 22, 22, 22, 23, 22, 24, 22, 25, 22, 26, 22, 27, 22, 28, 22, 29, 22, 30, 22, 31, 22, 32, 22, 33, 22, 34, 22, 35, 22, 36, 22, 37, 22, 38, 22, 39, 22, 40, 22, 41, 22, 42, 22, 43, 22, 44, 22, 45, 22, 46, 22, 47, 22, 48, 22, 49, 22, 50, 22, 51, 22, 52, 22, 53, 22, 54, 22, 55, 22, 56, 22, 57, 22, 58, 22, 59, 22, 60, 22, 61, 22, 62, 22, 63, 22, 64, 22, 65, 22, 66, 22, 67, 22, 68, 22, 69, 22, 70, 22, 71, 22, 72, 22, 73, 22, 74, 22, 75, 22, 76, 22, 77, 22, 78, 22, 79, 22, 80, 22, 81, 22, 82, 22, 83, 22, 84, 22, 85, 22, 86, 22, 87, 22, 88, 22, 89, 22, 90, 22, 91, 22, 92, 22, 93, 22, 94, 22, 95, 22, 96, 22, 97, 22, 98, 22, 99, 22, 100, 22, 101, 22, 102, 22, 103, 22, 104, 22, 105, 22, 106, 22, 107, 22, 108, 22, 109, 22, 110, 22, 111, 22, 112, 22, 113, 22, 114, 22, 115, 22, 116, 22, 117, 22, 118, 22, 119, 22, 120, 22, 121, 22, 122, 22, 123, 22, 124, 22, 125, 22, 126, 22, 127, 22, 128, 22, 129, 22, 130, 22, 131, 22, 132, 22, 133, 22, 134, 22, 135, 22, 136, 22, 137, 22, 138, 22, 139, 22, 140, 22, 167, 22, 168, 22, 169, 22, 170, 22, 171, 22, 172, 22, 173, 22, 174, 22, 175, 22, 176, 22, 177, 22, 178, 22, 179, 22, 180, 22, 181, 22, 182, 22, 183, 22, 184, 22, 185, 22, 186, 22, 187, 22, 188, 23, 3, 23, 4, 23, 5, 23, 6, 23, 7, 23, 8, 23, 9, 23, 10, 23, 11, 23, 12, 23, 13, 23, 14, 23, 15, 23, 16, 23, 17, 23, 18, 23, 19, 23, 20, 23, 21, 23, 22, 23, 23, 23, 24, 23, 25, 23, 26, 23, 27, 23, 28, 23, 29, 23, 30, 23, 31, 23, 32, 23, 33, 23, 34, 23, 35, 23, 36, 23, 37, 23, 38, 23, 39, 23, 40, 23, 41, 23, 42, 23, 43, 23, 44, 23, 45, 23, 46, 23, 47, 23, 48, 23, 49, 23, 50, 23, 51, 23, 52, 23, 53, 23, 54, 23, 55, 23, 56, 23, 57, 23, 58, 23, 59, 23, 60, 23, 61, 23, 62, 23, 63, 23, 64, 23, 65, 23, 66, 23, 67, 23, 68, 23, 69, 23, 70, 23, 71, 23, 72, 23, 73, 23, 74, 23, 75, 23, 76, 23, 77, 23, 78, 23, 79, 23, 80, 23, 81, 23, 82, 23, 83, 23, 84, 23, 85, 23, 86, 23, 87, 23, 88, 23, 89, 23, 90, 23, 91, 23, 92, 23, 93, 23, 94, 23, 95, 23, 96, 23, 97, 23, 98, 23, 99, 23, 100, 23, 101, 23, 102, 23, 103, 23, 104, 23, 105, 23, 106, 23, 107, 23, 108, 23, 109, 23, 110, 23, 111, 23, 112, 23, 113, 23, 114, 23, 115, 23, 116, 23, 117, 23, 118, 23, 119, 23, 120, 23, 121, 23, 122, 23, 123, 23, 124, 23, 125, 23, 126, 23, 127, 23, 128, 23, 129, 23, 130, 23, 131, 23, 132, 23, 133, 23, 134, 23, 135, 23, 136, 23, 137, 23, 138, 23, 139, 23, 140, 23, 167, 23, 168, 23, 169, 23, 170, 23, 171, 23, 172, 23, 173, 23, 174, 23, 175, 23, 176, 23, 177, 23, 178, 23, 179, 23, 180, 23, 181, 23, 182, 23, 183, 23, 184, 23, 185, 23, 186, 23, 187, 23, 188, 24, 3, 24, 4, 24, 5, 24, 6, 24, 7, 24, 8, 24, 9, 24, 10, 24, 11, 24, 12, 24, 13, 24, 14, 24, 15, 24, 16, 24, 17, 24, 18, 24, 19, 24, 20, 24, 21, 24, 22, 24, 23, 24, 24, 24, 25, 24, 26, 24, 27, 24, 28, 24, 29, 24, 30, 24, 31, 24, 32, 24, 33, 24, 34, 24, 35, 24, 36, 24, 37, 24, 38, 24, 39, 24, 40, 24, 41, 24, 42, 24, 43, 24, 44, 24, 45, 24, 46, 24, 47, 24, 48, 24, 49, 24, 50, 24, 51, 24, 52, 24, 53, 24, 54, 24, 55, 24, 56, 24, 57, 24, 58, 24, 59, 24, 60, 24, 61, 24, 62, 24, 63, 24, 64, 24, 65, 24, 66, 24, 67, 24, 68, 24, 69, 24, 70, 24, 71, 24, 72, 24, 73, 24, 74, 24, 75, 24, 76, 24, 77, 24, 78, 24, 79, 24, 80, 24, 81, 24, 82, 24, 83, 24, 84, 24, 85, 24, 86, 24, 87, 24, 88, 24, 89, 24, 90, 24, 91, 24, 92, 24, 93, 24, 94, 24, 95, 24, 96, 24, 97, 24, 98, 24, 99, 24, 100, 24, 101, 24, 102, 24, 103, 24, 104, 24, 105, 24, 106, 24, 107, 24, 108, 24, 109, 24, 110, 24, 111, 24, 112, 24, 113, 24, 114, 24, 115, 24, 116, 24, 117, 24, 118, 24, 119, 24, 120, 24, 121, 24, 122, 24, 123, 24, 124, 24, 125, 24, 126, 24, 127, 24, 128, 24, 129, 24, 130, 24, 131, 24, 132, 24, 133, 24, 134, 24, 135, 24, 136, 24, 137, 24, 138, 24, 139, 24, 167, 24, 168, 24, 169, 24, 170, 24, 171, 24, 172, 24, 173, 24, 174, 24, 175, 24, 176, 24, 177, 24, 178, 24, 179, 24, 180, 24, 181, 24, 182, 24, 183, 24, 184, 24, 185, 24, 186, 24, 187, 24, 188, 25, 3, 25, 4, 25, 5, 25, 6, 25, 7, 25, 8, 25, 9, 25, 10, 25, 11, 25, 12, 25, 13, 25, 14, 25, 15, 25, 16, 25, 17, 25, 18, 25, 19, 25, 20, 25, 21, 25, 22, 25, 23, 25, 24, 25, 25, 25, 26, 25, 27, 25, 28, 25, 29, 25, 30, 25, 31, 25, 32, 25, 33, 25, 34, 25, 35, 25, 36, 25, 37, 25, 38, 25, 39, 25, 40, 25, 41, 25, 42, 25, 43, 25, 44, 25, 45, 25, 46, 25, 47, 25, 48, 25, 49, 25, 50, 25, 51, 25, 52, 25, 53, 25, 54, 25, 55, 25, 56, 25, 57, 25, 58, 25, 59, 25, 60, 25, 61, 25, 62, 25, 63, 25, 64, 25, 65, 25, 66, 25, 67, 25, 68, 25, 69, 25, 70, 25, 71, 25, 72, 25, 73, 25, 74, 25, 75, 25, 76, 25, 77, 25, 78, 25, 79, 25, 80, 25, 81, 25, 82, 25, 83, 25, 84, 25, 85, 25, 86, 25, 87, 25, 88, 25, 89, 25, 90, 25, 91, 25, 92, 25, 93, 25, 94, 25, 95, 25, 96, 25, 97, 25, 98, 25, 99, 25, 100, 25, 101, 25, 102, 25, 103, 25, 104, 25, 105, 25, 106, 25, 107, 25, 108, 25, 109, 25, 110, 25, 111, 25, 112, 25, 113, 25, 114, 25, 115, 25, 116, 25, 117, 25, 118, 25, 119, 25, 120, 25, 121, 25, 122, 25, 123, 25, 124, 25, 125, 25, 126, 25, 127, 25, 128, 25, 129, 25, 130, 25, 131, 25, 132, 25, 133, 25, 134, 25, 135, 25, 136, 25, 137, 25, 138, 25, 139, 25, 167, 25, 168, 25, 169, 25, 170, 25, 171, 25, 172, 25, 173, 25, 174, 25, 175, 25, 176, 25, 177, 25, 178, 25, 179, 25, 180, 25, 181, 25, 182, 25, 183, 25, 184, 25, 185, 25, 186, 25, 187, 25, 188, 26, 3, 26, 4, 26, 5, 26, 6, 26, 7, 26, 8, 26, 9, 26, 10, 26, 11, 26, 12, 26, 13, 26, 14, 26, 15, 26, 16, 26, 17, 26, 18, 26, 19, 26, 20, 26, 21, 26, 22, 26, 23, 26, 24, 26, 25, 26, 26, 26, 27, 26, 28, 26, 29, 26, 30, 26, 31, 26, 32, 26, 33, 26, 34, 26, 35, 26, 36, 26, 37, 26, 38, 26, 39, 26, 40, 26, 41, 26, 42, 26, 43, 26, 44, 26, 45, 26, 46, 26, 47, 26, 48, 26, 49, 26, 50, 26, 51, 26, 52, 26, 53, 26, 54, 26, 55, 26, 56, 26, 57, 26, 58, 26, 59, 26, 60, 26, 61, 26, 62, 26, 63, 26, 64, 26, 65, 26, 66, 26, 67, 26, 68, 26, 69, 26, 70, 26, 71, 26, 72, 26, 73, 26, 74, 26, 75, 26, 76, 26, 77, 26, 78, 26, 79, 26, 80, 26, 81, 26, 82, 26, 83, 26, 84, 26, 85, 26, 86, 26, 87, 26, 88, 26, 89, 26, 90, 26, 91, 26, 92, 26, 93, 26, 94, 26, 95, 26, 96, 26, 97, 26, 98, 26, 99, 26, 100, 26, 101, 26, 102, 26, 103, 26, 104, 26, 105, 26, 106, 26, 107, 26, 108, 26, 109, 26, 110, 26, 111, 26, 112, 26, 113, 26, 114, 26, 115, 26, 116, 26, 117, 26, 118, 26, 119, 26, 120, 26, 121, 26, 122, 26, 123, 26, 124, 26, 125, 26, 126, 26, 127, 26, 128, 26, 129, 26, 130, 26, 131, 26, 132, 26, 133, 26, 134, 26, 135, 26, 136, 26, 137, 26, 138, 26, 167, 26, 168, 26, 169, 26, 170, 26, 171, 26, 172, 26, 173, 26, 174, 26, 175, 26, 176, 26, 177, 26, 178, 26, 179, 26, 180, 26, 181, 26, 182, 26, 183, 26, 184, 26, 185, 26, 186, 26, 187, 26, 188, 27, 3, 27, 4, 27, 5, 27, 6, 27, 7, 27, 8, 27, 9, 27, 10, 27, 11, 27, 12, 27, 13, 27, 14, 27, 15, 27, 16, 27, 17, 27, 18, 27, 19, 27, 20, 27, 21, 27, 22, 27, 23, 27, 24, 27, 25, 27, 26, 27, 27, 27, 28, 27, 29, 27, 30, 27, 31, 27, 32, 27, 33, 27, 34, 27, 35, 27, 36, 27, 37, 27, 38, 27, 39, 27, 40, 27, 41, 27, 42, 27, 43, 27, 44, 27, 45, 27, 46, 27, 47, 27, 48, 27, 49, 27, 50, 27, 51, 27, 52, 27, 53, 27, 54, 27, 55, 27, 56, 27, 57, 27, 58, 27, 59, 27, 60, 27, 61, 27, 62, 27, 63, 27, 64, 27, 65, 27, 66, 27, 67, 27, 68, 27, 69, 27, 70, 27, 71, 27, 72, 27, 73, 27, 74, 27, 75, 27, 76, 27, 77, 27, 78, 27, 79, 27, 80, 27, 81, 27, 82, 27, 83, 27, 84, 27, 85, 27, 86, 27, 87, 27, 88, 27, 89, 27, 90, 27, 91, 27, 92, 27, 93, 27, 94, 27, 95, 27, 96, 27, 97, 27, 98, 27, 99, 27, 100, 27, 101, 27, 102, 27, 103, 27, 104, 27, 105, 27, 106, 27, 107, 27, 108, 27, 109, 27, 110, 27, 111, 27, 112, 27, 113, 27, 114, 27, 115, 27, 116, 27, 117, 27, 118, 27, 119, 27, 120, 27, 121, 27, 122, 27, 123, 27, 124, 27, 125, 27, 126, 27, 127, 27, 128, 27, 129, 27, 130, 27, 131, 27, 132, 27, 133, 27, 134, 27, 135, 27, 136, 27, 137, 27, 138, 27, 167, 27, 168, 27, 169, 27, 170, 27, 171, 27, 172, 27, 173, 27, 174, 27, 175, 27, 176, 27, 177, 27, 178, 27, 179, 27, 180, 27, 181, 27, 182, 27, 183, 27, 184, 27, 185, 27, 186, 27, 187, 27, 188, 28, 3, 28, 4, 28, 5, 28, 6, 28, 7, 28, 8, 28, 9, 28, 10, 28, 11, 28, 12, 28, 13, 28, 14, 28, 15, 28, 16, 28, 17, 28, 18, 28, 19, 28, 20, 28, 21, 28, 22, 28, 23, 28, 24, 28, 25, 28, 26, 28, 27, 28, 28, 28, 29, 28, 30, 28, 31, 28, 32, 28, 33, 28, 34, 28, 35, 28, 36, 28, 37, 28, 38, 28, 39, 28, 40, 28, 41, 28, 42, 28, 43, 28, 44, 28, 45, 28, 46, 28, 47, 28, 48, 28, 49, 28, 50, 28, 51, 28, 52, 28, 53, 28, 54, 28, 55, 28, 56, 28, 57, 28, 58, 28, 59, 28, 60, 28, 61, 28, 62, 28, 63, 28, 64, 28, 65, 28, 66, 28, 67, 28, 68, 28, 69, 28, 70, 28, 71, 28, 72, 28, 73, 28, 74, 28, 75, 28, 76, 28, 77, 28, 78, 28, 79, 28, 80, 28, 81, 28, 82, 28, 83, 28, 84, 28, 85, 28, 86, 28, 87, 28, 88, 28, 89, 28, 90, 28, 91, 28, 92, 28, 93, 28, 94, 28, 95, 28, 96, 28, 97, 28, 98, 28, 99, 28, 100, 28, 101, 28, 102, 28, 103, 28, 104, 28, 105, 28, 106, 28, 107, 28, 108, 28, 109, 28, 110, 28, 111, 28, 112, 28, 113, 28, 114, 28, 115, 28, 116, 28, 117, 28, 118, 28, 119, 28, 120, 28, 121, 28, 122, 28, 123, 28, 124, 28, 125, 28, 126, 28, 127, 28, 128, 28, 129, 28, 130, 28, 131, 28, 132, 28, 133, 28, 134, 28, 135, 28, 136, 28, 137, 28, 167, 28, 168, 28, 169, 28, 170, 28, 171, 28, 172, 28, 173, 28, 174, 28, 175, 28, 176, 28, 177, 28, 178, 28, 179, 28, 180, 28, 181, 28, 182, 28, 183, 28, 184, 28, 185, 28, 186, 28, 187, 28, 188, 29, 3, 29, 4, 29, 5, 29, 6, 29, 7, 29, 8, 29, 9, 29, 10, 29, 11, 29, 12, 29, 13, 29, 14, 29, 15, 29, 16, 29, 17, 29, 18, 29, 19, 29, 20, 29, 21, 29, 22, 29, 23, 29, 24, 29, 25, 29, 26, 29, 27, 29, 28, 29, 29, 29, 30, 29, 31, 29, 32, 29, 33, 29, 34, 29, 35, 29, 36, 29, 37, 29, 38, 29, 39, 29, 40, 29, 41, 29, 42, 29, 43, 29, 44, 29, 45, 29, 46, 29, 47, 29, 48, 29, 49, 29, 50, 29, 51, 29, 52, 29, 53, 29, 54, 29, 55, 29, 56, 29, 57, 29, 58, 29, 59, 29, 60, 29, 61, 29, 62, 29, 63, 29, 64, 29, 65, 29, 66, 29, 67, 29, 68, 29, 69, 29, 70, 29, 71, 29, 72, 29, 73, 29, 74, 29, 75, 29, 76, 29, 77, 29, 78, 29, 79, 29, 80, 29, 81, 29, 82, 29, 83, 29, 84, 29, 85, 29, 86, 29, 87, 29, 88, 29, 89, 29, 90, 29, 91, 29, 92, 29, 93, 29, 94, 29, 95, 29, 96, 29, 97, 29, 98, 29, 99, 29, 100, 29, 101, 29, 102, 29, 103, 29, 104, 29, 105, 29, 106, 29, 107, 29, 108, 29, 109, 29, 110, 29, 111, 29, 112, 29, 113, 29, 114, 29, 115, 29, 116, 29, 117, 29, 118, 29, 119, 29, 120, 29, 121, 29, 122, 29, 123, 29, 124, 29, 125, 29, 126, 29, 127, 29, 128, 29, 129, 29, 130, 29, 131, 29, 132, 29, 133, 29, 134, 29, 135, 29, 136, 29, 167, 29, 168, 29, 169, 29, 170, 29, 171, 29, 172, 29, 173, 29, 174, 29, 175, 29, 176, 29, 177, 29, 178, 29, 179, 29, 180, 29, 181, 29, 182, 29, 183, 29, 184, 29, 185, 29, 186, 29, 187, 29, 188, 30, 3, 30, 4, 30, 5, 30, 6, 30, 7, 30, 8, 30, 9, 30, 10, 30, 11, 30, 12, 30, 13, 30, 14, 30, 15, 30, 16, 30, 17, 30, 18, 30, 19, 30, 20, 30, 21, 30, 22, 30, 23, 30, 24, 30, 25, 30, 26, 30, 27, 30, 28, 30, 29, 30, 30, 30, 31, 30, 32, 30, 33, 30, 34, 30, 35, 30, 36, 30, 37, 30, 38, 30, 39, 30, 40, 30, 41, 30, 42, 30, 43, 30, 44, 30, 45, 30, 46, 30, 47, 30, 48, 30, 49, 30, 50, 30, 51, 30, 52, 30, 53, 30, 54, 30, 55, 30, 56, 30, 57, 30, 58, 30, 59, 30, 60, 30, 61, 30, 62, 30, 63, 30, 64, 30, 65, 30, 66, 30, 67, 30, 68, 30, 69, 30, 70, 30, 71, 30, 72, 30, 73, 30, 74, 30, 75, 30, 76, 30, 77, 30, 78, 30, 79, 30, 80, 30, 81, 30, 82, 30, 83, 30, 84, 30, 85, 30, 86, 30, 87, 30, 88, 30, 89, 30, 90, 30, 91, 30, 92, 30, 93, 30, 94, 30, 95, 30, 96, 30, 97, 30, 98, 30, 99, 30, 100, 30, 101, 30, 102, 30, 103, 30, 104, 30, 105, 30, 106, 30, 107, 30, 108, 30, 109, 30, 110, 30, 111, 30, 112, 30, 113, 30, 114, 30, 115, 30, 116, 30, 117, 30, 118, 30, 119, 30, 120, 30, 121, 30, 122, 30, 123, 30, 124, 30, 125, 30, 126, 30, 127, 30, 128, 30, 129, 30, 130, 30, 131, 30, 132, 30, 133, 30, 134, 30, 135, 30, 136, 30, 167, 30, 168, 30, 169, 30, 170, 30, 171, 30, 172, 30, 173, 30, 174, 30, 175, 30, 176, 30, 177, 30, 178, 30, 179, 30, 180, 30, 181, 30, 182, 30, 183, 30, 184, 30, 185, 30, 186, 30, 187, 30, 188, 31, 3, 31, 4, 31, 5, 31, 6, 31, 7, 31, 8, 31, 9, 31, 10, 31, 11, 31, 12, 31, 13, 31, 14, 31, 15, 31, 16, 31, 17, 31, 18, 31, 19, 31, 20, 31, 21, 31, 22, 31, 23, 31, 24, 31, 25, 31, 26, 31, 27, 31, 28, 31, 29, 31, 30, 31, 31, 31, 32, 31, 33, 31, 34, 31, 35, 31, 36, 31, 37, 31, 38, 31, 39, 31, 40, 31, 41, 31, 42, 31, 43, 31, 44, 31, 45, 31, 46, 31, 47, 31, 48, 31, 49, 31, 50, 31, 51, 31, 52, 31, 53, 31, 54, 31, 55, 31, 56, 31, 57, 31, 58, 31, 59, 31, 60, 31, 61, 31, 62, 31, 63, 31, 64, 31, 65, 31, 66, 31, 67, 31, 68, 31, 69, 31, 70, 31, 71, 31, 72, 31, 73, 31, 74, 31, 75, 31, 76, 31, 77, 31, 78, 31, 79, 31, 80, 31, 81, 31, 82, 31, 83, 31, 84, 31, 85, 31, 86, 31, 87, 31, 88, 31, 89, 31, 90, 31, 91, 31, 92, 31, 93, 31, 94, 31, 95, 31, 96, 31, 97, 31, 98, 31, 99, 31, 100, 31, 101, 31, 102, 31, 103, 31, 104, 31, 105, 31, 106, 31, 107, 31, 108, 31, 109, 31, 110, 31, 111, 31, 112, 31, 113, 31, 114, 31, 115, 31, 116, 31, 117, 31, 118, 31, 119, 31, 120, 31, 121, 31, 122, 31, 123, 31, 124, 31, 125, 31, 126, 31, 127, 31, 128, 31, 129, 31, 130, 31, 131, 31, 132, 31, 133, 31, 134, 31, 135, 31, 167, 31, 168, 31, 169, 31, 170, 31, 171, 31, 172, 31, 173, 31, 174, 31, 175, 31, 176, 31, 177, 31, 178, 31, 179, 31, 180, 31, 181, 31, 182, 31, 183, 31, 184, 31, 185, 31, 186, 31, 187, 31, 188, 32, 3, 32, 4, 32, 5, 32, 6, 32, 7, 32, 8, 32, 9, 32, 10, 32, 11, 32, 12, 32, 13, 32, 14, 32, 15, 32, 16, 32, 17, 32, 18, 32, 19, 32, 20, 32, 21, 32, 22, 32, 23, 32, 24, 32, 25, 32, 26, 32, 27, 32, 28, 32, 29, 32, 30, 32, 31, 32, 32, 32, 33, 32, 34, 32, 35, 32, 36, 32, 37, 32, 38, 32, 39, 32, 40, 32, 41, 32, 42, 32, 43, 32, 44, 32, 45, 32, 46, 32, 47, 32, 48, 32, 49, 32, 50, 32, 51, 32, 52, 32, 53, 32, 54, 32, 55, 32, 56, 32, 57, 32, 58, 32, 59, 32, 60, 32, 61, 32, 62, 32, 63, 32, 64, 32, 65, 32, 66, 32, 67, 32, 68, 32, 69, 32, 70, 32, 71, 32, 72, 32, 73, 32, 74, 32, 75, 32, 76, 32, 77, 32, 78, 32, 79, 32, 80, 32, 81, 32, 82, 32, 83, 32, 84, 32, 85, 32, 86, 32, 87, 32, 88, 32, 89, 32, 90, 32, 91, 32, 92, 32, 93, 32, 94, 32, 95, 32, 96, 32, 97, 32, 98, 32, 99, 32, 100, 32, 101, 32, 102, 32, 103, 32, 104, 32, 105, 32, 106, 32, 107, 32, 108, 32, 109, 32, 110, 32, 111, 32, 112, 32, 113, 32, 114, 32, 115, 32, 116, 32, 117, 32, 118, 32, 119, 32, 120, 32, 121, 32, 122, 32, 123, 32, 124, 32, 125, 32, 126, 32, 127, 32, 128, 32, 129, 32, 130, 32, 131, 32, 132, 32, 133, 32, 134, 32, 135, 32, 167, 32, 168, 32, 169, 32, 170, 32, 171, 32, 172, 32, 173, 32, 174, 32, 175, 32, 176, 32, 177, 32, 178, 32, 179, 32, 180, 32, 181, 32, 182, 32, 183, 32, 184, 32, 185, 32, 186, 32, 187, 32, 188, 33, 3, 33, 4, 33, 5, 33, 6, 33, 7, 33, 8, 33, 9, 33, 10, 33, 11, 33, 12, 33, 13, 33, 14, 33, 15, 33, 16, 33, 17, 33, 18, 33, 19, 33, 20, 33, 21, 33, 22, 33, 23, 33, 24, 33, 25, 33, 26, 33, 27, 33, 28, 33, 29, 33, 30, 33, 31, 33, 32, 33, 33, 33, 34, 33, 35, 33, 36, 33, 37, 33, 38, 33, 39, 33, 40, 33, 41, 33, 42, 33, 43, 33, 44, 33, 45, 33, 46, 33, 47, 33, 48, 33, 49, 33, 50, 33, 51, 33, 52, 33, 53, 33, 54, 33, 55, 33, 56, 33, 57, 33, 58, 33, 59, 33, 60, 33, 61, 33, 62, 33, 63, 33, 64, 33, 65, 33, 66, 33, 67, 33, 68, 33, 69, 33, 70, 33, 71, 33, 72, 33, 73, 33, 74, 33, 75, 33, 76, 33, 77, 33, 78, 33, 79, 33, 80, 33, 81, 33, 82, 33, 83, 33, 84, 33, 85, 33, 86, 33, 87, 33, 88, 33, 89, 33, 90, 33, 91, 33, 92, 33, 93, 33, 94, 33, 95, 33, 96, 33, 97, 33, 98, 33, 99, 33, 100, 33, 101, 33, 102, 33, 103, 33, 104, 33, 105, 33, 106, 33, 107, 33, 108, 33, 109, 33, 110, 33, 111, 33, 112, 33, 113, 33, 114, 33, 115, 33, 116, 33, 117, 33, 118, 33, 119, 33, 120, 33, 121, 33, 122, 33, 123, 33, 124, 33, 125, 33, 126, 33, 127, 33, 128, 33, 129, 33, 130, 33, 131, 33, 132, 33, 133, 33, 134, 33, 167, 33, 168, 33, 169, 33, 170, 33, 171, 33, 172, 33, 173, 33, 174, 33, 175, 33, 176, 33, 177, 33, 178, 33, 179, 33, 180, 33, 181, 33, 182, 33, 183, 33, 184, 33, 185, 33, 186, 33, 187, 33, 188, 34, 3, 34, 4, 34, 5, 34, 6, 34, 7, 34, 8, 34, 9, 34, 10, 34, 11, 34, 12, 34, 13, 34, 14, 34, 15, 34, 16, 34, 17, 34, 18, 34, 19, 34, 20, 34, 21, 34, 22, 34, 23, 34, 24, 34, 25, 34, 26, 34, 27, 34, 28, 34, 29, 34, 30, 34, 31, 34, 32, 34, 33, 34, 34, 34, 35, 34, 36, 34, 37, 34, 38, 34, 39, 34, 40, 34, 41, 34, 42, 34, 43, 34, 44, 34, 45, 34, 46, 34, 47, 34, 48, 34, 49, 34, 50, 34, 51, 34, 52, 34, 53, 34, 54, 34, 55, 34, 56, 34, 57, 34, 58, 34, 59, 34, 60, 34, 61, 34, 62, 34, 63, 34, 64, 34, 65, 34, 66, 34, 67, 34, 68, 34, 69, 34, 70, 34, 71, 34, 72, 34, 73, 34, 74, 34, 75, 34, 76, 34, 77, 34, 78, 34, 79, 34, 80, 34, 81, 34, 82, 34, 83, 34, 84, 34, 85, 34, 86, 34, 87, 34, 88, 34, 89, 34, 90, 34, 91, 34, 92, 34, 93, 34, 94, 34, 95, 34, 96, 34, 97, 34, 98, 34, 99, 34, 100, 34, 101, 34, 102, 34, 103, 34, 104, 34, 105, 34, 106, 34, 107, 34, 108, 34, 109, 34, 110, 34, 111, 34, 112, 34, 113, 34, 114, 34, 115, 34, 116, 34, 117, 34, 118, 34, 119, 34, 120, 34, 121, 34, 122, 34, 123, 34, 124, 34, 125, 34, 126, 34, 127, 34, 128, 34, 129, 34, 130, 34, 131, 34, 132, 34, 133, 34, 167, 34, 168, 34, 169, 34, 170, 34, 171, 34, 172, 34, 173, 34, 174, 34, 175, 34, 176, 34, 177, 34, 178, 34, 179, 34, 180, 34, 181, 34, 182, 34, 183, 34, 184, 34, 185, 34, 186, 34, 187, 34, 188, 35, 3, 35, 4, 35, 5, 35, 6, 35, 7, 35, 8, 35, 9, 35, 10, 35, 11, 35, 12, 35, 13, 35, 14, 35, 15, 35, 16, 35, 17, 35, 18, 35, 19, 35, 20, 35, 21, 35, 22, 35, 23, 35, 24, 35, 25, 35, 26, 35, 27, 35, 28, 35, 29, 35, 30, 35, 31, 35, 32, 35, 33, 35, 34, 35, 35, 35, 36, 35, 37, 35, 38, 35, 39, 35, 40, 35, 41, 35, 42, 35, 43, 35, 44, 35, 45, 35, 46, 35, 47, 35, 48, 35, 49, 35, 50, 35, 51, 35, 52, 35, 53, 35, 54, 35, 55, 35, 56, 35, 57, 35, 58, 35, 59, 35, 60, 35, 61, 35, 62, 35, 63, 35, 64, 35, 65, 35, 66, 35, 67, 35, 68, 35, 69, 35, 70, 35, 71, 35, 72, 35, 73, 35, 74, 35, 75, 35, 76, 35, 77, 35, 78, 35, 79, 35, 80, 35, 81, 35, 82, 35, 83, 35, 84, 35, 85, 35, 86, 35, 87, 35, 88, 35, 89, 35, 90, 35, 91, 35, 92, 35, 93, 35, 94, 35, 95, 35, 96, 35, 97, 35, 98, 35, 99, 35, 100, 35, 101, 35, 102, 35, 103, 35, 104, 35, 105, 35, 106, 35, 107, 35, 108, 35, 109, 35, 110, 35, 111, 35, 112, 35, 113, 35, 114, 35, 115, 35, 116, 35, 117, 35, 118, 35, 119, 35, 120, 35, 121, 35, 122, 35, 123, 35, 124, 35, 125, 35, 126, 35, 127, 35, 128, 35, 129, 35, 130, 35, 131, 35, 132, 35, 133, 35, 167, 35, 168, 35, 169, 35, 170, 35, 171, 35, 172, 35, 173, 35, 174, 35, 175, 35, 176, 35, 177, 35, 178, 35, 179, 35, 180, 35, 181, 35, 182, 35, 183, 35, 184, 35, 185, 35, 186, 35, 187, 35, 188, 36, 3, 36, 4, 36, 5, 36, 6, 36, 7, 36, 8, 36, 9, 36, 10, 36, 11, 36, 12, 36, 13, 36, 14, 36, 15, 36, 16, 36, 17, 36, 18, 36, 19, 36, 20, 36, 21, 36, 22, 36, 23, 36, 24, 36, 25, 36, 26, 36, 27, 36, 28, 36, 29, 36, 30, 36, 31, 36, 32, 36, 33, 36, 34, 36, 35, 36, 36, 36, 37, 36, 38, 36, 39, 36, 40, 36, 41, 36, 42, 36, 43, 36, 44, 36, 45, 36, 46, 36, 47, 36, 48, 36, 49, 36, 50, 36, 51, 36, 52, 36, 53, 36, 54, 36, 55, 36, 56, 36, 57, 36, 58, 36, 59, 36, 60, 36, 61, 36, 62, 36, 63, 36, 64, 36, 65, 36, 66, 36, 67, 36, 68, 36, 69, 36, 70, 36, 71, 36, 72, 36, 73, 36, 74, 36, 75, 36, 76, 36, 77, 36, 78, 36, 79, 36, 80, 36, 81, 36, 82, 36, 83, 36, 84, 36, 85, 36, 86, 36, 87, 36, 88, 36, 89, 36, 90, 36, 91, 36, 92, 36, 93, 36, 94, 36, 95, 36, 96, 36, 97, 36, 98, 36, 99, 36, 100, 36, 101, 36, 102, 36, 103, 36, 104, 36, 105, 36, 106, 36, 107, 36, 108, 36, 109, 36, 110, 36, 111, 36, 112, 36, 113, 36, 114, 36, 115, 36, 116, 36, 117, 36, 118, 36, 119, 36, 120, 36, 121, 36, 122, 36, 123, 36, 124, 36, 125, 36, 126, 36, 127, 36, 128, 36, 129, 36, 130, 36, 131, 36, 132, 36, 166, 36, 167, 36, 168, 36, 169, 36, 170, 36, 171, 36, 172, 36, 173, 36, 174, 36, 175, 36, 176, 36, 177, 36, 178, 36, 179, 36, 180, 36, 181, 36, 182, 36, 183, 36, 184, 36, 185, 36, 186, 36, 187, 36, 188, 37, 3, 37, 4, 37, 5, 37, 6, 37, 7, 37, 8, 37, 9, 37, 10, 37, 11, 37, 12, 37, 13, 37, 14, 37, 15, 37, 16, 37, 17, 37, 18, 37, 19, 37, 20, 37, 21, 37, 22, 37, 23, 37, 24, 37, 25, 37, 26, 37, 27, 37, 28, 37, 29, 37, 30, 37, 31, 37, 32, 37, 33, 37, 34, 37, 35, 37, 36, 37, 37, 37, 38, 37, 39, 37, 40, 37, 41, 37, 42, 37, 43, 37, 44, 37, 45, 37, 46, 37, 47, 37, 48, 37, 49, 37, 50, 37, 51, 37, 52, 37, 53, 37, 54, 37, 55, 37, 56, 37, 57, 37, 58, 37, 59, 37, 60, 37, 61, 37, 62, 37, 63, 37, 64, 37, 65, 37, 66, 37, 67, 37, 68, 37, 69, 37, 70, 37, 71, 37, 72, 37, 73, 37, 74, 37, 75, 37, 76, 37, 77, 37, 78, 37, 79, 37, 80, 37, 81, 37, 82, 37, 83, 37, 84, 37, 85, 37, 86, 37, 87, 37, 88, 37, 89, 37, 90, 37, 91, 37, 92, 37, 93, 37, 94, 37, 95, 37, 96, 37, 97, 37, 98, 37, 99, 37, 100, 37, 101, 37, 102, 37, 103, 37, 104, 37, 105, 37, 106, 37, 107, 37, 108, 37, 109, 37, 110, 37, 111, 37, 112, 37, 113, 37, 114, 37, 115, 37, 116, 37, 117, 37, 118, 37, 119, 37, 120, 37, 121, 37, 122, 37, 123, 37, 124, 37, 125, 37, 126, 37, 127, 37, 128, 37, 129, 37, 130, 37, 131, 37, 166, 37, 167, 37, 168, 37, 169, 37, 170, 37, 171, 37, 172, 37, 173, 37, 174, 37, 175, 37, 176, 37, 177, 37, 178, 37, 179, 37, 180, 37, 181, 37, 182, 37, 183, 37, 184, 37, 185, 37, 186, 37, 187, 37, 188, 38, 3, 38, 4, 38, 5, 38, 6, 38, 7, 38, 8, 38, 9, 38, 10, 38, 11, 38, 12, 38, 13, 38, 14, 38, 15, 38, 16, 38, 17, 38, 18, 38, 19, 38, 20, 38, 21, 38, 22, 38, 23, 38, 24, 38, 25, 38, 26, 38, 27, 38, 28, 38, 29, 38, 30, 38, 31, 38, 32, 38, 33, 38, 34, 38, 35, 38, 36, 38, 37, 38, 38, 38, 39, 38, 40, 38, 41, 38, 42, 38, 43, 38, 44, 38, 45, 38, 46, 38, 47, 38, 48, 38, 49, 38, 50, 38, 51, 38, 52, 38, 53, 38, 54, 38, 55, 38, 56, 38, 57, 38, 58, 38, 59, 38, 60, 38, 61, 38, 62, 38, 63, 38, 64, 38, 65, 38, 66, 38, 67, 38, 68, 38, 69, 38, 70, 38, 71, 38, 72, 38, 73, 38, 74, 38, 75, 38, 76, 38, 77, 38, 78, 38, 79, 38, 80, 38, 81, 38, 82, 38, 83, 38, 84, 38, 85, 38, 86, 38, 87, 38, 88, 38, 89, 38, 90, 38, 91, 38, 92, 38, 93, 38, 94, 38, 95, 38, 96, 38, 97, 38, 98, 38, 99, 38, 100, 38, 101, 38, 102, 38, 103, 38, 104, 38, 105, 38, 106, 38, 107, 38, 108, 38, 109, 38, 110, 38, 111, 38, 112, 38, 113, 38, 114, 38, 115, 38, 116, 38, 117, 38, 118, 38, 119, 38, 120, 38, 121, 38, 122, 38, 123, 38, 124, 38, 125, 38, 126, 38, 127, 38, 128, 38, 129, 38, 130, 38, 131, 38, 166, 38, 167, 38, 168, 38, 169, 38, 170, 38, 171, 38, 172, 38, 173, 38, 174, 38, 175, 38, 176, 38, 177, 38, 178, 38, 179, 38, 180, 38, 181, 38, 182, 38, 183, 38, 184, 38, 185, 38, 186, 38, 187, 38, 188, 39, 3, 39, 4, 39, 5, 39, 6, 39, 7, 39, 8, 39, 9, 39, 10, 39, 11, 39, 12, 39, 13, 39, 14, 39, 15, 39, 16, 39, 17, 39, 18, 39, 19, 39, 20, 39, 21, 39, 22, 39, 23, 39, 24, 39, 25, 39, 26, 39, 27, 39, 28, 39, 29, 39, 30, 39, 31, 39, 32, 39, 33, 39, 34, 39, 35, 39, 36, 39, 37, 39, 38, 39, 39, 39, 40, 39, 41, 39, 42, 39, 43, 39, 44, 39, 45, 39, 46, 39, 47, 39, 48, 39, 49, 39, 50, 39, 51, 39, 52, 39, 53, 39, 54, 39, 55, 39, 56, 39, 57, 39, 58, 39, 59, 39, 60, 39, 61, 39, 62, 39, 63, 39, 64, 39, 65, 39, 66, 39, 67, 39, 68, 39, 69, 39, 70, 39, 71, 39, 72, 39, 73, 39, 74, 39, 75, 39, 76, 39, 77, 39, 78, 39, 79, 39, 80, 39, 81, 39, 82, 39, 83, 39, 84, 39, 85, 39, 86, 39, 87, 39, 88, 39, 89, 39, 90, 39, 91, 39, 92, 39, 93, 39, 94, 39, 95, 39, 96, 39, 97, 39, 98, 39, 99, 39, 100, 39, 101, 39, 102, 39, 103, 39, 104, 39, 105, 39, 106, 39, 107, 39, 108, 39, 109, 39, 110, 39, 111, 39, 112, 39, 113, 39, 114, 39, 115, 39, 116, 39, 117, 39, 118, 39, 119, 39, 120, 39, 121, 39, 122, 39, 123, 39, 124, 39, 125, 39, 126, 39, 127, 39, 128, 39, 129, 39, 130, 39, 166, 39, 167, 39, 168, 39, 169, 39, 170, 39, 171, 39, 172, 39, 173, 39, 174, 39, 175, 39, 176, 39, 177, 39, 178, 39, 179, 39, 180, 39, 181, 39, 182, 39, 183, 39, 184, 39, 185, 39, 186, 39, 187, 39, 188, 40, 3, 40, 4, 40, 5, 40, 6, 40, 7, 40, 8, 40, 9, 40, 10, 40, 11, 40, 12, 40, 13, 40, 14, 40, 15, 40, 16, 40, 17, 40, 18, 40, 19, 40, 20, 40, 21, 40, 22, 40, 23, 40, 24, 40, 25, 40, 26, 40, 27, 40, 28, 40, 29, 40, 30, 40, 31, 40, 32, 40, 33, 40, 34, 40, 35, 40, 36, 40, 37, 40, 38, 40, 39, 40, 40, 40, 41, 40, 42, 40, 43, 40, 44, 40, 45, 40, 46, 40, 47, 40, 48, 40, 49, 40, 50, 40, 51, 40, 52, 40, 53, 40, 54, 40, 55, 40, 56, 40, 57, 40, 58, 40, 59, 40, 60, 40, 61, 40, 62, 40, 63, 40, 64, 40, 65, 40, 66, 40, 67, 40, 68, 40, 69, 40, 70, 40, 71, 40, 72, 40, 73, 40, 74, 40, 75, 40, 76, 40, 77, 40, 78, 40, 79, 40, 80, 40, 81, 40, 82, 40, 83, 40, 84, 40, 85, 40, 86, 40, 87, 40, 88, 40, 89, 40, 90, 40, 91, 40, 92, 40, 93, 40, 94, 40, 95, 40, 96, 40, 97, 40, 98, 40, 99, 40, 100, 40, 101, 40, 102, 40, 103, 40, 104, 40, 105, 40, 106, 40, 107, 40, 108, 40, 109, 40, 110, 40, 111, 40, 112, 40, 113, 40, 114, 40, 115, 40, 116, 40, 117, 40, 118, 40, 119, 40, 120, 40, 121, 40, 122, 40, 123, 40, 124, 40, 125, 40, 126, 40, 127, 40, 128, 40, 129, 40, 130, 40, 166, 40, 167, 40, 168, 40, 169, 40, 170, 40, 171, 40, 172, 40, 173, 40, 174, 40, 175, 40, 176, 40, 177, 40, 178, 40, 179, 40, 180, 40, 181, 40, 182, 40, 183, 40, 184, 40, 185, 40, 186, 40, 187, 40, 188, 41, 3, 41, 4, 41, 5, 41, 6, 41, 7, 41, 8, 41, 9, 41, 10, 41, 11, 41, 12, 41, 13, 41, 14, 41, 15, 41, 16, 41, 17, 41, 18, 41, 19, 41, 20, 41, 21, 41, 22, 41, 23, 41, 24, 41, 25, 41, 26, 41, 27, 41, 28, 41, 29, 41, 30, 41, 31, 41, 32, 41, 33, 41, 34, 41, 35, 41, 36, 41, 37, 41, 38, 41, 39, 41, 40, 41, 41, 41, 42, 41, 43, 41, 44, 41, 45, 41, 46, 41, 47, 41, 48, 41, 49, 41, 50, 41, 51, 41, 52, 41, 53, 41, 54, 41, 55, 41, 56, 41, 57, 41, 58, 41, 59, 41, 60, 41, 61, 41, 62, 41, 63, 41, 64, 41, 65, 41, 66, 41, 67, 41, 68, 41, 69, 41, 70, 41, 71, 41, 72, 41, 73, 41, 74, 41, 75, 41, 76, 41, 77, 41, 78, 41, 79, 41, 80, 41, 81, 41, 82, 41, 83, 41, 84, 41, 85, 41, 86, 41, 87, 41, 88, 41, 89, 41, 90, 41, 91, 41, 92, 41, 93, 41, 94, 41, 95, 41, 96, 41, 97, 41, 98, 41, 99, 41, 100, 41, 101, 41, 102, 41, 103, 41, 104, 41, 105, 41, 106, 41, 107, 41, 108, 41, 109, 41, 110, 41, 111, 41, 112, 41, 113, 41, 114, 41, 115, 41, 116, 41, 117, 41, 118, 41, 119, 41, 120, 41, 121, 41, 122, 41, 123, 41, 124, 41, 125, 41, 126, 41, 127, 41, 128, 41, 129, 41, 166, 41, 167, 41, 168, 41, 169, 41, 170, 41, 171, 41, 172, 41, 173, 41, 174, 41, 175, 41, 176, 41, 177, 41, 178, 41, 179, 41, 180, 41, 181, 41, 182, 41, 183, 41, 184, 41, 185, 41, 186, 41, 187, 41, 188, 42, 3, 42, 4, 42, 5, 42, 6, 42, 7, 42, 8, 42, 9, 42, 10, 42, 11, 42, 12, 42, 13, 42, 14, 42, 15, 42, 16, 42, 17, 42, 18, 42, 19, 42, 20, 42, 21, 42, 22, 42, 23, 42, 24, 42, 25, 42, 26, 42, 27, 42, 28, 42, 29, 42, 30, 42, 31, 42, 32, 42, 33, 42, 34, 42, 35, 42, 36, 42, 37, 42, 38, 42, 39, 42, 40, 42, 41, 42, 42, 42, 43, 42, 44, 42, 45, 42, 46, 42, 47, 42, 48, 42, 49, 42, 50, 42, 51, 42, 52, 42, 53, 42, 54, 42, 55, 42, 56, 42, 57, 42, 58, 42, 59, 42, 60, 42, 61, 42, 62, 42, 63, 42, 64, 42, 65, 42, 66, 42, 67, 42, 68, 42, 69, 42, 70, 42, 71, 42, 72, 42, 73, 42, 74, 42, 75, 42, 76, 42, 77, 42, 78, 42, 79, 42, 80, 42, 81, 42, 82, 42, 83, 42, 84, 42, 85, 42, 86, 42, 87, 42, 88, 42, 89, 42, 90, 42, 91, 42, 92, 42, 93, 42, 94, 42, 95, 42, 96, 42, 97, 42, 98, 42, 99, 42, 100, 42, 101, 42, 102, 42, 103, 42, 104, 42, 105, 42, 106, 42, 107, 42, 108, 42, 109, 42, 110, 42, 111, 42, 112, 42, 113, 42, 114, 42, 115, 42, 116, 42, 117, 42, 118, 42, 119, 42, 120, 42, 121, 42, 122, 42, 123, 42, 124, 42, 125, 42, 126, 42, 127, 42, 128, 42, 166, 42, 167, 42, 168, 42, 169, 42, 170, 42, 171, 42, 172, 42, 173, 42, 174, 42, 175, 42, 176, 42, 177, 42, 178, 42, 179, 42, 180, 42, 181, 42, 182, 42, 183, 42, 184, 42, 185, 42, 186, 42, 187, 42, 188, 43, 3, 43, 4, 43, 5, 43, 6, 43, 7, 43, 8, 43, 9, 43, 10, 43, 11, 43, 12, 43, 13, 43, 14, 43, 15, 43, 16, 43, 17, 43, 18, 43, 19, 43, 20, 43, 21, 43, 22, 43, 23, 43, 24, 43, 25, 43, 26, 43, 27, 43, 28, 43, 29, 43, 30, 43, 31, 43, 32, 43, 33, 43, 34, 43, 35, 43, 36, 43, 37, 43, 38, 43, 39, 43, 40, 43, 41, 43, 42, 43, 43, 43, 44, 43, 45, 43, 46, 43, 47, 43, 48, 43, 49, 43, 50, 43, 51, 43, 52, 43, 53, 43, 54, 43, 55, 43, 56, 43, 57, 43, 58, 43, 59, 43, 60, 43, 61, 43, 62, 43, 63, 43, 64, 43, 65, 43, 66, 43, 67, 43, 68, 43, 69, 43, 70, 43, 71, 43, 72, 43, 73, 43, 74, 43, 75, 43, 76, 43, 77, 43, 78, 43, 79, 43, 80, 43, 81, 43, 82, 43, 83, 43, 84, 43, 85, 43, 86, 43, 87, 43, 88, 43, 89, 43, 90, 43, 91, 43, 92, 43, 93, 43, 94, 43, 95, 43, 96, 43, 97, 43, 98, 43, 99, 43, 100, 43, 101, 43, 102, 43, 103, 43, 104, 43, 105, 43, 106, 43, 107, 43, 108, 43, 109, 43, 110, 43, 111, 43, 112, 43, 113, 43, 114, 43, 115, 43, 116, 43, 117, 43, 118, 43, 119, 43, 120, 43, 121, 43, 122, 43, 123, 43, 124, 43, 125, 43, 126, 43, 127, 43, 166, 43, 167, 43, 168, 43, 169, 43, 170, 43, 171, 43, 172, 43, 173, 43, 174, 43, 175, 43, 176, 43, 177, 43, 178, 43, 179, 43, 180, 43, 181, 43, 182, 43, 183, 43, 184, 43, 185, 43, 186, 43, 187, 43, 188, 44, 3, 44, 4, 44, 5, 44, 6, 44, 7, 44, 8, 44, 9, 44, 10, 44, 11, 44, 12, 44, 13, 44, 14, 44, 15, 44, 16, 44, 17, 44, 18, 44, 19, 44, 20, 44, 21, 44, 22, 44, 23, 44, 24, 44, 25, 44, 26, 44, 27, 44, 28, 44, 29, 44, 30, 44, 31, 44, 32, 44, 33, 44, 34, 44, 35, 44, 36, 44, 37, 44, 38, 44, 39, 44, 40, 44, 41, 44, 42, 44, 43, 44, 44, 44, 45, 44, 46, 44, 47, 44, 48, 44, 49, 44, 50, 44, 51, 44, 52, 44, 53, 44, 54, 44, 55, 44, 56, 44, 57, 44, 58, 44, 59, 44, 60, 44, 61, 44, 62, 44, 63, 44, 64, 44, 65, 44, 66, 44, 67, 44, 68, 44, 69, 44, 70, 44, 71, 44, 72, 44, 73, 44, 74, 44, 75, 44, 76, 44, 77, 44, 78, 44, 79, 44, 80, 44, 81, 44, 82, 44, 83, 44, 84, 44, 85, 44, 86, 44, 87, 44, 88, 44, 89, 44, 90, 44, 91, 44, 92, 44, 93, 44, 94, 44, 95, 44, 96, 44, 97, 44, 98, 44, 99, 44, 100, 44, 101, 44, 102, 44, 103, 44, 104, 44, 105, 44, 106, 44, 107, 44, 108, 44, 109, 44, 110, 44, 111, 44, 112, 44, 113, 44, 114, 44, 115, 44, 116, 44, 117, 44, 118, 44, 119, 44, 120, 44, 121, 44, 122, 44, 123, 44, 124, 44, 125, 44, 126, 44, 166, 44, 167, 44, 168, 44, 169, 44, 170, 44, 171, 44, 172, 44, 173, 44, 174, 44, 175, 44, 176, 44, 177, 44, 178, 44, 179, 44, 180, 44, 181, 44, 182, 44, 183, 44, 184, 44, 185, 44, 186, 44, 187, 44, 188, 45, 3, 45, 4, 45, 5, 45, 6, 45, 7, 45, 8, 45, 9, 45, 10, 45, 11, 45, 12, 45, 13, 45, 14, 45, 15, 45, 16, 45, 17, 45, 18, 45, 19, 45, 20, 45, 21, 45, 22, 45, 23, 45, 24, 45, 25, 45, 26, 45, 27, 45, 28, 45, 29, 45, 30, 45, 31, 45, 32, 45, 33, 45, 34, 45, 35, 45, 36, 45, 37, 45, 38, 45, 39, 45, 40, 45, 41, 45, 42, 45, 43, 45, 44, 45, 45, 45, 46, 45, 47, 45, 48, 45, 49, 45, 50, 45, 51, 45, 52, 45, 53, 45, 54, 45, 55, 45, 56, 45, 57, 45, 58, 45, 59, 45, 60, 45, 61, 45, 62, 45, 63, 45, 64, 45, 65, 45, 66, 45, 67, 45, 68, 45, 69, 45, 70, 45, 71, 45, 72, 45, 73, 45, 74, 45, 75, 45, 76, 45, 77, 45, 78, 45, 79, 45, 80, 45, 81, 45, 82, 45, 83, 45, 84, 45, 85, 45, 86, 45, 87, 45, 88, 45, 89, 45, 90, 45, 91, 45, 92, 45, 93, 45, 94, 45, 95, 45, 96, 45, 97, 45, 98, 45, 99, 45, 100, 45, 101, 45, 102, 45, 103, 45, 104, 45, 105, 45, 106, 45, 107, 45, 108, 45, 109, 45, 110, 45, 111, 45, 112, 45, 113, 45, 114, 45, 115, 45, 116, 45, 117, 45, 118, 45, 119, 45, 120, 45, 121, 45, 122, 45, 123, 45, 124, 45, 125, 45, 166, 45, 167, 45, 168, 45, 169, 45, 170, 45, 171, 45, 172, 45, 173, 45, 174, 45, 175, 45, 176, 45, 177, 45, 178, 45, 179, 45, 180, 45, 181, 45, 182, 45, 183, 45, 184, 45, 185, 45, 186, 45, 187, 45, 188, 46, 3, 46, 4, 46, 5, 46, 6, 46, 7, 46, 8, 46, 9, 46, 10, 46, 11, 46, 12, 46, 13, 46, 14, 46, 15, 46, 16, 46, 17, 46, 18, 46, 19, 46, 20, 46, 21, 46, 22, 46, 23, 46, 24, 46, 25, 46, 26, 46, 27, 46, 28, 46, 29, 46, 30, 46, 31, 46, 32, 46, 33, 46, 34, 46, 35, 46, 36, 46, 37, 46, 38, 46, 39, 46, 40, 46, 41, 46, 42, 46, 43, 46, 44, 46, 45, 46, 46, 46, 47, 46, 48, 46, 49, 46, 50, 46, 51, 46, 52, 46, 53, 46, 54, 46, 55, 46, 56, 46, 57, 46, 58, 46, 59, 46, 60, 46, 61, 46, 62, 46, 63, 46, 64, 46, 65, 46, 66, 46, 67, 46, 68, 46, 69, 46, 70, 46, 71, 46, 72, 46, 73, 46, 74, 46, 75, 46, 76, 46, 77, 46, 78, 46, 79, 46, 80, 46, 81, 46, 82, 46, 83, 46, 84, 46, 85, 46, 86, 46, 87, 46, 88, 46, 89, 46, 90, 46, 91, 46, 92, 46, 93, 46, 94, 46, 95, 46, 96, 46, 97, 46, 98, 46, 99, 46, 100, 46, 101, 46, 102, 46, 103, 46, 104, 46, 105, 46, 106, 46, 107, 46, 108, 46, 109, 46, 110, 46, 111, 46, 112, 46, 113, 46, 114, 46, 115, 46, 116, 46, 117, 46, 118, 46, 119, 46, 120, 46, 121, 46, 122, 46, 123, 46, 124, 46, 165, 46, 166, 46, 167, 46, 168, 46, 169, 46, 170, 46, 171, 46, 172, 46, 173, 46, 174, 46, 175, 46, 176, 46, 177, 46, 178, 46, 179, 46, 180, 46, 181, 46, 182, 46, 183, 46, 184, 46, 185, 46, 186, 46, 187, 46, 188, 47, 3, 47, 4, 47, 5, 47, 6, 47, 7, 47, 8, 47, 9, 47, 10, 47, 11, 47, 12, 47, 13, 47, 14, 47, 15, 47, 16, 47, 17, 47, 18, 47, 19, 47, 20, 47, 21, 47, 22, 47, 23, 47, 24, 47, 25, 47, 26, 47, 27, 47, 28, 47, 29, 47, 30, 47, 31, 47, 32, 47, 33, 47, 34, 47, 35, 47, 36, 47, 37, 47, 38, 47, 39, 47, 40, 47, 41, 47, 42, 47, 43, 47, 44, 47, 45, 47, 46, 47, 47, 47, 48, 47, 49, 47, 50, 47, 51, 47, 52, 47, 53, 47, 54, 47, 55, 47, 56, 47, 57, 47, 58, 47, 59, 47, 60, 47, 61, 47, 62, 47, 63, 47, 64, 47, 65, 47, 66, 47, 67, 47, 68, 47, 69, 47, 70, 47, 71, 47, 72, 47, 73, 47, 74, 47, 75, 47, 76, 47, 77, 47, 78, 47, 79, 47, 80, 47, 81, 47, 82, 47, 83, 47, 84, 47, 85, 47, 86, 47, 87, 47, 88, 47, 89, 47, 90, 47, 91, 47, 92, 47, 93, 47, 94, 47, 95, 47, 96, 47, 97, 47, 98, 47, 99, 47, 100, 47, 101, 47, 102, 47, 103, 47, 104, 47, 105, 47, 106, 47, 107, 47, 108, 47, 109, 47, 110, 47, 111, 47, 112, 47, 113, 47, 114, 47, 115, 47, 116, 47, 117, 47, 118, 47, 119, 47, 120, 47, 121, 47, 122, 47, 123, 47, 165, 47, 166, 47, 167, 47, 168, 47, 169, 47, 170, 47, 171, 47, 172, 47, 173, 47, 174, 47, 175, 47, 176, 47, 177, 47, 178, 47, 179, 47, 180, 47, 181, 47, 182, 47, 183, 47, 184, 47, 185, 47, 186, 47, 187, 47, 188, 48, 3, 48, 4, 48, 5, 48, 6, 48, 7, 48, 8, 48, 9, 48, 10, 48, 11, 48, 12, 48, 13, 48, 14, 48, 15, 48, 16, 48, 17, 48, 18, 48, 19, 48, 20, 48, 21, 48, 22, 48, 23, 48, 24, 48, 25, 48, 26, 48, 27, 48, 28, 48, 29, 48, 30, 48, 31, 48, 32, 48, 33, 48, 34, 48, 35, 48, 36, 48, 37, 48, 38, 48, 39, 48, 40, 48, 41, 48, 42, 48, 43, 48, 44, 48, 45, 48, 46, 48, 47, 48, 48, 48, 49, 48, 50, 48, 51, 48, 52, 48, 53, 48, 54, 48, 55, 48, 56, 48, 57, 48, 58, 48, 59, 48, 60, 48, 61, 48, 62, 48, 63, 48, 64, 48, 65, 48, 66, 48, 67, 48, 68, 48, 69, 48, 70, 48, 71, 48, 72, 48, 73, 48, 74, 48, 75, 48, 76, 48, 77, 48, 78, 48, 79, 48, 80, 48, 81, 48, 82, 48, 83, 48, 84, 48, 85, 48, 86, 48, 87, 48, 88, 48, 89, 48, 90, 48, 91, 48, 92, 48, 93, 48, 94, 48, 95, 48, 96, 48, 97, 48, 98, 48, 99, 48, 100, 48, 101, 48, 102, 48, 103, 48, 104, 48, 105, 48, 106, 48, 107, 48, 108, 48, 109, 48, 110, 48, 111, 48, 112, 48, 113, 48, 114, 48, 115, 48, 116, 48, 117, 48, 118, 48, 119, 48, 120, 48, 121, 48, 122, 48, 165, 48, 166, 48, 167, 48, 168, 48, 169, 48, 170, 48, 171, 48, 172, 48, 173, 48, 174, 48, 175, 48, 176, 48, 177, 48, 178, 48, 179, 48, 180, 48, 181, 48, 182, 48, 183, 48, 184, 48, 185, 48, 186, 48, 187, 48, 188, 49, 3, 49, 4, 49, 5, 49, 6, 49, 7, 49, 8, 49, 9, 49, 10, 49, 11, 49, 12, 49, 13, 49, 14, 49, 15, 49, 16, 49, 17, 49, 18, 49, 19, 49, 20, 49, 21, 49, 22, 49, 23, 49, 24, 49, 25, 49, 26, 49, 27, 49, 28, 49, 29, 49, 30, 49, 31, 49, 32, 49, 33, 49, 34, 49, 35, 49, 36, 49, 37, 49, 38, 49, 39, 49, 40, 49, 41, 49, 42, 49, 43, 49, 44, 49, 45, 49, 46, 49, 47, 49, 48, 49, 49, 49, 50, 49, 51, 49, 52, 49, 53, 49, 54, 49, 55, 49, 56, 49, 57, 49, 58, 49, 59, 49, 60, 49, 61, 49, 62, 49, 63, 49, 64, 49, 65, 49, 66, 49, 67, 49, 68, 49, 69, 49, 70, 49, 71, 49, 72, 49, 73, 49, 74, 49, 75, 49, 76, 49, 77, 49, 78, 49, 79, 49, 80, 49, 81, 49, 82, 49, 83, 49, 84, 49, 85, 49, 86, 49, 87, 49, 88, 49, 89, 49, 90, 49, 91, 49, 92, 49, 93, 49, 94, 49, 95, 49, 96, 49, 97, 49, 98, 49, 99, 49, 100, 49, 101, 49, 102, 49, 103, 49, 104, 49, 105, 49, 106, 49, 107, 49, 108, 49, 109, 49, 110, 49, 111, 49, 112, 49, 113, 49, 114, 49, 115, 49, 116, 49, 117, 49, 118, 49, 119, 49, 120, 49, 121, 49, 165, 49, 166, 49, 167, 49, 168, 49, 169, 49, 170, 49, 171, 49, 172, 49, 173, 49, 174, 49, 175, 49, 176, 49, 177, 49, 178, 49, 179, 49, 180, 49, 181, 49, 182, 49, 183, 49, 184, 49, 185, 49, 186, 49, 187, 49, 188, 50, 3, 50, 4, 50, 5, 50, 6, 50, 7, 50, 8, 50, 9, 50, 10, 50, 11, 50, 12, 50, 13, 50, 14, 50, 15, 50, 16, 50, 17, 50, 18, 50, 19, 50, 20, 50, 21, 50, 22, 50, 23, 50, 24, 50, 25, 50, 26, 50, 27, 50, 28, 50, 29, 50, 30, 50, 31, 50, 32, 50, 33, 50, 34, 50, 35, 50, 36, 50, 37, 50, 38, 50, 39, 50, 40, 50, 41, 50, 42, 50, 43, 50, 44, 50, 45, 50, 46, 50, 47, 50, 48, 50, 49, 50, 50, 50, 51, 50, 52, 50, 53, 50, 54, 50, 55, 50, 56, 50, 57, 50, 58, 50, 59, 50, 60, 50, 61, 50, 62, 50, 63, 50, 64, 50, 65, 50, 66, 50, 67, 50, 68, 50, 69, 50, 70, 50, 71, 50, 72, 50, 73, 50, 74, 50, 75, 50, 76, 50, 77, 50, 78, 50, 79, 50, 80, 50, 81, 50, 82, 50, 83, 50, 84, 50, 85, 50, 86, 50, 87, 50, 88, 50, 89, 50, 90, 50, 91, 50, 92, 50, 93, 50, 94, 50, 95, 50, 96, 50, 97, 50, 98, 50, 99, 50, 100, 50, 101, 50, 102, 50, 103, 50, 104, 50, 105, 50, 106, 50, 107, 50, 108, 50, 109, 50, 110, 50, 111, 50, 112, 50, 113, 50, 114, 50, 115, 50, 116, 50, 117, 50, 118, 50, 119, 50, 120, 50, 165, 50, 166, 50, 167, 50, 168, 50, 169, 50, 170, 50, 171, 50, 172, 50, 173, 50, 174, 50, 175, 50, 176, 50, 177, 50, 178, 50, 179, 50, 180, 50, 181, 50, 182, 50, 183, 50, 184, 50, 185, 50, 186, 50, 187, 50, 188, 51, 3, 51, 4, 51, 5, 51, 6, 51, 7, 51, 8, 51, 9, 51, 10, 51, 11, 51, 12, 51, 13, 51, 14, 51, 15, 51, 16, 51, 17, 51, 18, 51, 19, 51, 20, 51, 21, 51, 22, 51, 23, 51, 24, 51, 25, 51, 26, 51, 27, 51, 28, 51, 29, 51, 30, 51, 31, 51, 32, 51, 33, 51, 34, 51, 35, 51, 36, 51, 37, 51, 38, 51, 39, 51, 40, 51, 41, 51, 42, 51, 43, 51, 44, 51, 45, 51, 46, 51, 47, 51, 48, 51, 49, 51, 50, 51, 51, 51, 52, 51, 53, 51, 54, 51, 55, 51, 56, 51, 57, 51, 58, 51, 59, 51, 60, 51, 61, 51, 62, 51, 63, 51, 64, 51, 65, 51, 66, 51, 67, 51, 68, 51, 69, 51, 70, 51, 71, 51, 72, 51, 73, 51, 74, 51, 75, 51, 76, 51, 77, 51, 78, 51, 79, 51, 80, 51, 81, 51, 82, 51, 83, 51, 84, 51, 85, 51, 86, 51, 87, 51, 88, 51, 89, 51, 90, 51, 91, 51, 92, 51, 93, 51, 94, 51, 95, 51, 96, 51, 97, 51, 98, 51, 99, 51, 100, 51, 101, 51, 102, 51, 103, 51, 104, 51, 105, 51, 106, 51, 107, 51, 108, 51, 109, 51, 110, 51, 111, 51, 112, 51, 113, 51, 114, 51, 115, 51, 116, 51, 117, 51, 118, 51, 119, 51, 165, 51, 166, 51, 167, 51, 168, 51, 169, 51, 170, 51, 171, 51, 172, 51, 173, 51, 174, 51, 175, 51, 176, 51, 177, 51, 178, 51, 179, 51, 180, 51, 181, 51, 182, 51, 183, 51, 184, 51, 185, 51, 186, 51, 187, 51, 188, 52, 3, 52, 4, 52, 5, 52, 6, 52, 7, 52, 8, 52, 9, 52, 10, 52, 11, 52, 12, 52, 13, 52, 14, 52, 15, 52, 16, 52, 17, 52, 18, 52, 19, 52, 20, 52, 21, 52, 22, 52, 23, 52, 24, 52, 25, 52, 26, 52, 27, 52, 28, 52, 29, 52, 30, 52, 31, 52, 32, 52, 33, 52, 34, 52, 35, 52, 36, 52, 37, 52, 38, 52, 39, 52, 40, 52, 41, 52, 42, 52, 43, 52, 44, 52, 45, 52, 46, 52, 47, 52, 48, 52, 49, 52, 50, 52, 51, 52, 52, 52, 53, 52, 54, 52, 55, 52, 56, 52, 57, 52, 58, 52, 59, 52, 60, 52, 61, 52, 62, 52, 63, 52, 64, 52, 65, 52, 66, 52, 67, 52, 68, 52, 69, 52, 70, 52, 71, 52, 72, 52, 73, 52, 74, 52, 75, 52, 76, 52, 77, 52, 78, 52, 79, 52, 80, 52, 81, 52, 82, 52, 83, 52, 84, 52, 85, 52, 86, 52, 87, 52, 88, 52, 89, 52, 90, 52, 91, 52, 92, 52, 93, 52, 94, 52, 95, 52, 96, 52, 97, 52, 98, 52, 99, 52, 100, 52, 101, 52, 102, 52, 103, 52, 104, 52, 105, 52, 106, 52, 107, 52, 108, 52, 109, 52, 110, 52, 111, 52, 112, 52, 113, 52, 114, 52, 115, 52, 116, 52, 117, 52, 165, 52, 166, 52, 167, 52, 168, 52, 169, 52, 170, 52, 171, 52, 172, 52, 173, 52, 174, 52, 175, 52, 176, 52, 177, 52, 178, 52, 179, 52, 180, 52, 181, 52, 182, 52, 183, 52, 184, 52, 185, 52, 186, 52, 187, 52, 188, 53, 3, 53, 4, 53, 5, 53, 6, 53, 7, 53, 8, 53, 9, 53, 10, 53, 11, 53, 12, 53, 13, 53, 14, 53, 15, 53, 16, 53, 17, 53, 18, 53, 19, 53, 20, 53, 21, 53, 22, 53, 23, 53, 24, 53, 25, 53, 26, 53, 27, 53, 28, 53, 29, 53, 30, 53, 31, 53, 32, 53, 33, 53, 34, 53, 35, 53, 36, 53, 37, 53, 38, 53, 39, 53, 40, 53, 41, 53, 42, 53, 43, 53, 44, 53, 45, 53, 46, 53, 47, 53, 48, 53, 49, 53, 50, 53, 51, 53, 52, 53, 53, 53, 54, 53, 55, 53, 56, 53, 57, 53, 58, 53, 59, 53, 60, 53, 61, 53, 62, 53, 63, 53, 64, 53, 65, 53, 66, 53, 67, 53, 68, 53, 69, 53, 70, 53, 71, 53, 72, 53, 73, 53, 74, 53, 75, 53, 76, 53, 77, 53, 78, 53, 79, 53, 80, 53, 81, 53, 82, 53, 83, 53, 84, 53, 85, 53, 86, 53, 87, 53, 88, 53, 89, 53, 90, 53, 91, 53, 92, 53, 93, 53, 94, 53, 95, 53, 96, 53, 97, 53, 98, 53, 99, 53, 100, 53, 101, 53, 102, 53, 103, 53, 104, 53, 105, 53, 106, 53, 107, 53, 108, 53, 109, 53, 110, 53, 111, 53, 112, 53, 113, 53, 114, 53, 115, 53, 116, 53, 165, 53, 166, 53, 167, 53, 168, 53, 169, 53, 170, 53, 171, 53, 172, 53, 173, 53, 174, 53, 175, 53, 176, 53, 177, 53, 178, 53, 179, 53, 180, 53, 181, 53, 182, 53, 183, 53, 184, 53, 185, 53, 186, 53, 187, 53, 188, 54, 3, 54, 4, 54, 5, 54, 6, 54, 7, 54, 8, 54, 9, 54, 10, 54, 11, 54, 12, 54, 13, 54, 14, 54, 15, 54, 16, 54, 17, 54, 18, 54, 19, 54, 20, 54, 21, 54, 22, 54, 23, 54, 24, 54, 25, 54, 26, 54, 27, 54, 28, 54, 29, 54, 30, 54, 31, 54, 32, 54, 33, 54, 34, 54, 35, 54, 36, 54, 37, 54, 38, 54, 39, 54, 40, 54, 41, 54, 42, 54, 43, 54, 44, 54, 45, 54, 46, 54, 47, 54, 48, 54, 49, 54, 50, 54, 51, 54, 52, 54, 53, 54, 54, 54, 55, 54, 56, 54, 57, 54, 58, 54, 59, 54, 60, 54, 61, 54, 62, 54, 63, 54, 64, 54, 65, 54, 66, 54, 67, 54, 68, 54, 69, 54, 70, 54, 71, 54, 72, 54, 73, 54, 74, 54, 75, 54, 76, 54, 77, 54, 78, 54, 79, 54, 80, 54, 81, 54, 82, 54, 83, 54, 84, 54, 85, 54, 86, 54, 87, 54, 88, 54, 89, 54, 90, 54, 91, 54, 92, 54, 93, 54, 94, 54, 95, 54, 96, 54, 97, 54, 98, 54, 99, 54, 100, 54, 101, 54, 102, 54, 103, 54, 104, 54, 105, 54, 106, 54, 107, 54, 108, 54, 109, 54, 110, 54, 111, 54, 112, 54, 113, 54, 114, 54, 115, 54, 165, 54, 166, 54, 167, 54, 168, 54, 169, 54, 170, 54, 171, 54, 172, 54, 173, 54, 174, 54, 175, 54, 176, 54, 177, 54, 178, 54, 179, 54, 180, 54, 181, 54, 182, 54, 183, 54, 184, 54, 185, 54, 186, 54, 187, 54, 188, 55, 3, 55, 4, 55, 5, 55, 6, 55, 7, 55, 8, 55, 9, 55, 10, 55, 11, 55, 12, 55, 13, 55, 14, 55, 15, 55, 16, 55, 17, 55, 18, 55, 19, 55, 20, 55, 21, 55, 22, 55, 23, 55, 24, 55, 25, 55, 26, 55, 27, 55, 28, 55, 29, 55, 30, 55, 31, 55, 32, 55, 33, 55, 34, 55, 35, 55, 36, 55, 37, 55, 38, 55, 39, 55, 40, 55, 41, 55, 42, 55, 43, 55, 44, 55, 45, 55, 46, 55, 47, 55, 48, 55, 49, 55, 50, 55, 51, 55, 52, 55, 53, 55, 54, 55, 55, 55, 56, 55, 57, 55, 58, 55, 59, 55, 60, 55, 61, 55, 62, 55, 63, 55, 64, 55, 65, 55, 66, 55, 67, 55, 68, 55, 69, 55, 70, 55, 71, 55, 72, 55, 73, 55, 74, 55, 75, 55, 76, 55, 77, 55, 78, 55, 79, 55, 80, 55, 81, 55, 82, 55, 83, 55, 84, 55, 85, 55, 86, 55, 87, 55, 88, 55, 89, 55, 90, 55, 91, 55, 92, 55, 93, 55, 94, 55, 95, 55, 96, 55, 97, 55, 98, 55, 99, 55, 100, 55, 101, 55, 102, 55, 103, 55, 104, 55, 105, 55, 106, 55, 107, 55, 108, 55, 109, 55, 110, 55, 111, 55, 112, 55, 113, 55, 114, 55, 165, 55, 166, 55, 167, 55, 168, 55, 169, 55, 170, 55, 171, 55, 172, 55, 173, 55, 174, 55, 175, 55, 176, 55, 177, 55, 178, 55, 179, 55, 180, 55, 181, 55, 182, 55, 183, 55, 184, 55, 185, 55, 186, 55, 187, 55, 188, 56, 3, 56, 4, 56, 5, 56, 6, 56, 7, 56, 8, 56, 9, 56, 10, 56, 11, 56, 12, 56, 13, 56, 14, 56, 15, 56, 16, 56, 17, 56, 18, 56, 19, 56, 20, 56, 21, 56, 22, 56, 23, 56, 24, 56, 25, 56, 26, 56, 27, 56, 28, 56, 29, 56, 30, 56, 31, 56, 32, 56, 33, 56, 34, 56, 35, 56, 36, 56, 37, 56, 38, 56, 39, 56, 40, 56, 41, 56, 42, 56, 43, 56, 44, 56, 45, 56, 46, 56, 47, 56, 48, 56, 49, 56, 50, 56, 51, 56, 52, 56, 53, 56, 54, 56, 55, 56, 56, 56, 57, 56, 58, 56, 59, 56, 60, 56, 61, 56, 62, 56, 63, 56, 64, 56, 65, 56, 66, 56, 67, 56, 68, 56, 69, 56, 70, 56, 71, 56, 72, 56, 73, 56, 74, 56, 75, 56, 76, 56, 77, 56, 78, 56, 79, 56, 80, 56, 81, 56, 82, 56, 83, 56, 84, 56, 85, 56, 86, 56, 87, 56, 88, 56, 89, 56, 90, 56, 91, 56, 92, 56, 93, 56, 94, 56, 95, 56, 96, 56, 97, 56, 98, 56, 99, 56, 100, 56, 101, 56, 102, 56, 103, 56, 104, 56, 105, 56, 106, 56, 107, 56, 108, 56, 109, 56, 110, 56, 111, 56, 112, 56, 113, 56, 165, 56, 166, 56, 167, 56, 168, 56, 169, 56, 170, 56, 171, 56, 172, 56, 173, 56, 174, 56, 175, 56, 176, 56, 177, 56, 178, 56, 179, 56, 180, 56, 181, 56, 182, 56, 183, 56, 184, 56, 185, 56, 186, 56, 187, 56, 188, 57, 3, 57, 4, 57, 5, 57, 6, 57, 7, 57, 8, 57, 9, 57, 10, 57, 11, 57, 12, 57, 13, 57, 14, 57, 15, 57, 16, 57, 17, 57, 18, 57, 19, 57, 20, 57, 21, 57, 22, 57, 23, 57, 24, 57, 25, 57, 26, 57, 27, 57, 28, 57, 29, 57, 30, 57, 31, 57, 32, 57, 33, 57, 34, 57, 35, 57, 36, 57, 37, 57, 38, 57, 39, 57, 40, 57, 41, 57, 42, 57, 43, 57, 44, 57, 45, 57, 46, 57, 47, 57, 48, 57, 49, 57, 50, 57, 51, 57, 52, 57, 53, 57, 54, 57, 55, 57, 56, 57, 57, 57, 58, 57, 59, 57, 60, 57, 61, 57, 62, 57, 63, 57, 64, 57, 65, 57, 66, 57, 67, 57, 68, 57, 69, 57, 70, 57, 71, 57, 72, 57, 73, 57, 74, 57, 75, 57, 76, 57, 77, 57, 78, 57, 79, 57, 80, 57, 81, 57, 82, 57, 83, 57, 84, 57, 85, 57, 86, 57, 87, 57, 88, 57, 89, 57, 90, 57, 91, 57, 92, 57, 93, 57, 94, 57, 95, 57, 96, 57, 97, 57, 98, 57, 99, 57, 100, 57, 101, 57, 102, 57, 103, 57, 104, 57, 105, 57, 106, 57, 107, 57, 108, 57, 109, 57, 110, 57, 111, 57, 112, 57, 113, 57, 165, 57, 166, 57, 167, 57, 168, 57, 169, 57, 170, 57, 171, 57, 172, 57, 173, 57, 174, 57, 175, 57, 176, 57, 177, 57, 178, 57, 179, 57, 180, 57, 181, 57, 182, 57, 183, 57, 184, 57, 185, 57, 186, 57, 187, 57, 188, 58, 3, 58, 4, 58, 5, 58, 6, 58, 7, 58, 8, 58, 9, 58, 10, 58, 11, 58, 12, 58, 13, 58, 14, 58, 15, 58, 16, 58, 17, 58, 18, 58, 19, 58, 20, 58, 21, 58, 22, 58, 23, 58, 24, 58, 25, 58, 26, 58, 27, 58, 28, 58, 29, 58, 30, 58, 31, 58, 32, 58, 33, 58, 34, 58, 35, 58, 36, 58, 37, 58, 38, 58, 39, 58, 40, 58, 41, 58, 42, 58, 43, 58, 44, 58, 45, 58, 46, 58, 47, 58, 48, 58, 49, 58, 50, 58, 51, 58, 52, 58, 53, 58, 54, 58, 55, 58, 56, 58, 57, 58, 58, 58, 59, 58, 60, 58, 61, 58, 62, 58, 63, 58, 64, 58, 65, 58, 66, 58, 67, 58, 68, 58, 69, 58, 70, 58, 71, 58, 72, 58, 73, 58, 74, 58, 75, 58, 76, 58, 77, 58, 78, 58, 79, 58, 80, 58, 81, 58, 82, 58, 83, 58, 84, 58, 85, 58, 86, 58, 87, 58, 88, 58, 89, 58, 90, 58, 91, 58, 92, 58, 93, 58, 94, 58, 95, 58, 96, 58, 97, 58, 98, 58, 99, 58, 100, 58, 101, 58, 102, 58, 103, 58, 104, 58, 105, 58, 106, 58, 107, 58, 108, 58, 109, 58, 110, 58, 111, 58, 112, 58, 165, 58, 166, 58, 167, 58, 168, 58, 169, 58, 170, 58, 171, 58, 172, 58, 173, 58, 174, 58, 175, 58, 176, 58, 177, 58, 178, 58, 179, 58, 180, 58, 181, 58, 182, 58, 183, 58, 184, 58, 185, 58, 186, 58, 187, 58, 188, 59, 3, 59, 4, 59, 5, 59, 6, 59, 7, 59, 8, 59, 9, 59, 10, 59, 11, 59, 12, 59, 13, 59, 14, 59, 15, 59, 16, 59, 17, 59, 18, 59, 19, 59, 20, 59, 21, 59, 22, 59, 23, 59, 24, 59, 25, 59, 26, 59, 27, 59, 28, 59, 29, 59, 30, 59, 31, 59, 32, 59, 33, 59, 34, 59, 35, 59, 36, 59, 37, 59, 38, 59, 39, 59, 40, 59, 41, 59, 42, 59, 43, 59, 44, 59, 45, 59, 46, 59, 47, 59, 48, 59, 49, 59, 50, 59, 51, 59, 52, 59, 53, 59, 54, 59, 55, 59, 56, 59, 57, 59, 58, 59, 59, 59, 60, 59, 61, 59, 62, 59, 63, 59, 64, 59, 65, 59, 66, 59, 67, 59, 68, 59, 69, 59, 70, 59, 71, 59, 72, 59, 73, 59, 74, 59, 75, 59, 76, 59, 77, 59, 78, 59, 79, 59, 80, 59, 81, 59, 82, 59, 83, 59, 84, 59, 85, 59, 86, 59, 87, 59, 88, 59, 89, 59, 90, 59, 91, 59, 92, 59, 93, 59, 94, 59, 95, 59, 96, 59, 97, 59, 98, 59, 99, 59, 100, 59, 101, 59, 102, 59, 103, 59, 104, 59, 105, 59, 106, 59, 107, 59, 108, 59, 109, 59, 110, 59, 111, 59, 112, 59, 165, 59, 166, 59, 167, 59, 168, 59, 169, 59, 170, 59, 171, 59, 172, 59, 173, 59, 174, 59, 175, 59, 176, 59, 177, 59, 178, 59, 179, 59, 180, 59, 181, 59, 182, 59, 183, 59, 184, 59, 185, 59, 186, 59, 187, 59, 188, 60, 3, 60, 4, 60, 5, 60, 6, 60, 7, 60, 8, 60, 9, 60, 10, 60, 11, 60, 12, 60, 13, 60, 14, 60, 15, 60, 16, 60, 17, 60, 18, 60, 19, 60, 20, 60, 21, 60, 22, 60, 23, 60, 24, 60, 25, 60, 26, 60, 27, 60, 28, 60, 29, 60, 30, 60, 31, 60, 32, 60, 33, 60, 34, 60, 35, 60, 36, 60, 37, 60, 38, 60, 39, 60, 40, 60, 41, 60, 42, 60, 43, 60, 44, 60, 45, 60, 46, 60, 47, 60, 48, 60, 49, 60, 50, 60, 51, 60, 52, 60, 53, 60, 54, 60, 55, 60, 56, 60, 57, 60, 58, 60, 59, 60, 60, 60, 61, 60, 62, 60, 63, 60, 64, 60, 65, 60, 66, 60, 67, 60, 68, 60, 69, 60, 70, 60, 71, 60, 72, 60, 73, 60, 74, 60, 75, 60, 76, 60, 77, 60, 78, 60, 79, 60, 80, 60, 81, 60, 82, 60, 83, 60, 84, 60, 85, 60, 86, 60, 87, 60, 88, 60, 89, 60, 90, 60, 91, 60, 92, 60, 93, 60, 94, 60, 95, 60, 96, 60, 97, 60, 98, 60, 99, 60, 100, 60, 101, 60, 102, 60, 103, 60, 104, 60, 105, 60, 106, 60, 107, 60, 108, 60, 109, 60, 110, 60, 111, 60, 165, 60, 166, 60, 167, 60, 168, 60, 169, 60, 170, 60, 171, 60, 172, 60, 173, 60, 174, 60, 175, 60, 176, 60, 177, 60, 178, 60, 179, 60, 180, 60, 181, 60, 182, 60, 183, 60, 184, 60, 185, 60, 186, 60, 187, 60, 188, 61, 3, 61, 4, 61, 5, 61, 6, 61, 7, 61, 8, 61, 9, 61, 10, 61, 11, 61, 12, 61, 13, 61, 14, 61, 15, 61, 16, 61, 17, 61, 18, 61, 19, 61, 20, 61, 21, 61, 22, 61, 23, 61, 24, 61, 25, 61, 26, 61, 27, 61, 28, 61, 29, 61, 30, 61, 31, 61, 32, 61, 33, 61, 34, 61, 35, 61, 36, 61, 37, 61, 38, 61, 39, 61, 40, 61, 41, 61, 42, 61, 43, 61, 44, 61, 45, 61, 46, 61, 47, 61, 48, 61, 49, 61, 50, 61, 51, 61, 52, 61, 53, 61, 54, 61, 55, 61, 56, 61, 57, 61, 58, 61, 59, 61, 60, 61, 61, 61, 69, 61, 70, 61, 71, 61, 72, 61, 73, 61, 74, 61, 75, 61, 76, 61, 77, 61, 78, 61, 79, 61, 80, 61, 81, 61, 82, 61, 83, 61, 84, 61, 85, 61, 86, 61, 87, 61, 88, 61, 89, 61, 90, 61, 91, 61, 92, 61, 93, 61, 94, 61, 95, 61, 96, 61, 97, 61, 98, 61, 99, 61, 100, 61, 101, 61, 102, 61, 103, 61, 104, 61, 105, 61, 106, 61, 107, 61, 108, 61, 109, 61, 110, 61, 111, 61, 165, 61, 166, 61, 167, 61, 168, 61, 169, 61, 170, 61, 171, 61, 172, 61, 173, 61, 174, 61, 175, 61, 176, 61, 177, 61, 178, 61, 179, 61, 180, 61, 181, 61, 182, 61, 183, 61, 184, 61, 185, 61, 186, 61, 187, 61, 188, 62, 3, 62, 4, 62, 5, 62, 6, 62, 7, 62, 8, 62, 9, 62, 10, 62, 11, 62, 12, 62, 13, 62, 14, 62, 15, 62, 16, 62, 17, 62, 18, 62, 19, 62, 20, 62, 21, 62, 22, 62, 23, 62, 24, 62, 25, 62, 26, 62, 27, 62, 28, 62, 29, 62, 30, 62, 31, 62, 32, 62, 33, 62, 34, 62, 35, 62, 36, 62, 37, 62, 38, 62, 39, 62, 40, 62, 41, 62, 42, 62, 43, 62, 44, 62, 45, 62, 46, 62, 47, 62, 48, 62, 49, 62, 50, 62, 51, 62, 52, 62, 53, 62, 54, 62, 55, 62, 56, 62, 57, 62, 58, 62, 59, 62, 71, 62, 72, 62, 73, 62, 74, 62, 75, 62, 76, 62, 77, 62, 78, 62, 79, 62, 80, 62, 81, 62, 82, 62, 83, 62, 84, 62, 85, 62, 86, 62, 87, 62, 88, 62, 89, 62, 90, 62, 91, 62, 92, 62, 93, 62, 94, 62, 95, 62, 96, 62, 97, 62, 98, 62, 99, 62, 100, 62, 101, 62, 102, 62, 103, 62, 104, 62, 105, 62, 106, 62, 107, 62, 108, 62, 109, 62, 110, 62, 111, 62, 166, 62, 167, 62, 168, 62, 169, 62, 170, 62, 171, 62, 172, 62, 173, 62, 174, 62, 175, 62, 176, 62, 177, 62, 178, 62, 179, 62, 180, 62, 181, 62, 182, 62, 183, 62, 184, 62, 185, 62, 186, 62, 187, 62, 188, 63, 3, 63, 4, 63, 5, 63, 6, 63, 7, 63, 8, 63, 9, 63, 10, 63, 11, 63, 12, 63, 13, 63, 14, 63, 15, 63, 16, 63, 17, 63, 18, 63, 19, 63, 20, 63, 21, 63, 22, 63, 23, 63, 24, 63, 25, 63, 26, 63, 27, 63, 28, 63, 29, 63, 30, 63, 31, 63, 32, 63, 33, 63, 34, 63, 35, 63, 36, 63, 37, 63, 38, 63, 39, 63, 40, 63, 41, 63, 42, 63, 43, 63, 44, 63, 45, 63, 46, 63, 47, 63, 48, 63, 49, 63, 50, 63, 51, 63, 52, 63, 53, 63, 54, 63, 55, 63, 56, 63, 57, 63, 72, 63, 73, 63, 74, 63, 75, 63, 76, 63, 77, 63, 78, 63, 79, 63, 80, 63, 81, 63, 82, 63, 83, 63, 84, 63, 85, 63, 86, 63, 87, 63, 88, 63, 89, 63, 90, 63, 91, 63, 92, 63, 93, 63, 94, 63, 95, 63, 96, 63, 97, 63, 98, 63, 99, 63, 100, 63, 101, 63, 102, 63, 103, 63, 104, 63, 105, 63, 106, 63, 107, 63, 108, 63, 109, 63, 110, 63, 166, 63, 167, 63, 168, 63, 169, 63, 170, 63, 171, 63, 172, 63, 173, 63, 174, 63, 175, 63, 176, 63, 177, 63, 178, 63, 179, 63, 180, 63, 181, 63, 182, 63, 183, 63, 184, 63, 185, 63, 186, 63, 187, 63, 188, 64, 3, 64, 4, 64, 5, 64, 6, 64, 7, 64, 8, 64, 9, 64, 10, 64, 11, 64, 12, 64, 13, 64, 14, 64, 15, 64, 16, 64, 17, 64, 18, 64, 19, 64, 20, 64, 21, 64, 22, 64, 23, 64, 24, 64, 25, 64, 26, 64, 27, 64, 28, 64, 29, 64, 30, 64, 31, 64, 32, 64, 33, 64, 34, 64, 35, 64, 36, 64, 37, 64, 38, 64, 39, 64, 40, 64, 41, 64, 42, 64, 43, 64, 44, 64, 45, 64, 46, 64, 47, 64, 48, 64, 49, 64, 50, 64, 51, 64, 52, 64, 53, 64, 54, 64, 55, 64, 56, 64, 72, 64, 73, 64, 74, 64, 75, 64, 76, 64, 77, 64, 78, 64, 79, 64, 80, 64, 81, 64, 82, 64, 83, 64, 84, 64, 85, 64, 86, 64, 87, 64, 88, 64, 89, 64, 90, 64, 91, 64, 92, 64, 93, 64, 94, 64, 95, 64, 96, 64, 97, 64, 98, 64, 99, 64, 100, 64, 101, 64, 102, 64, 103, 64, 104, 64, 105, 64, 106, 64, 107, 64, 108, 64, 109, 64, 110, 64, 111, 64, 166, 64, 167, 64, 168, 64, 169, 64, 170, 64, 171, 64, 172, 64, 173, 64, 174, 64, 175, 64, 176, 64, 177, 64, 178, 64, 179, 64, 180, 64, 181, 64, 182, 64, 183, 64, 184, 64, 185, 64, 186, 64, 187, 64, 188, 65, 3, 65, 4, 65, 5, 65, 6, 65, 7, 65, 8, 65, 9, 65, 10, 65, 11, 65, 12, 65, 13, 65, 14, 65, 15, 65, 16, 65, 17, 65, 18, 65, 19, 65, 20, 65, 21, 65, 22, 65, 23, 65, 24, 65, 25, 65, 26, 65, 27, 65, 28, 65, 29, 65, 30, 65, 31, 65, 32, 65, 33, 65, 34, 65, 35, 65, 36, 65, 37, 65, 38, 65, 39, 65, 40, 65, 41, 65, 42, 65, 43, 65, 44, 65, 45, 65, 46, 65, 47, 65, 48, 65, 49, 65, 50, 65, 51, 65, 52, 65, 53, 65, 54, 65, 55, 65, 73, 65, 74, 65, 75, 65, 76, 65, 77, 65, 78, 65, 79, 65, 80, 65, 81, 65, 82, 65, 83, 65, 84, 65, 85, 65, 86, 65, 87, 65, 88, 65, 89, 65, 90, 65, 91, 65, 92, 65, 93, 65, 94, 65, 95, 65, 96, 65, 97, 65, 98, 65, 99, 65, 100, 65, 101, 65, 102, 65, 103, 65, 104, 65, 105, 65, 106, 65, 107, 65, 108, 65, 109, 65, 110, 65, 111, 65, 166, 65, 167, 65, 168, 65, 169, 65, 170, 65, 171, 65, 172, 65, 173, 65, 174, 65, 175, 65, 176, 65, 177, 65, 178, 65, 179, 65, 180, 65, 181, 65, 182, 65, 183, 65, 184, 65, 185, 65, 186, 65, 187, 65, 188, 66, 3, 66, 4, 66, 5, 66, 6, 66, 7, 66, 8, 66, 9, 66, 10, 66, 11, 66, 12, 66, 13, 66, 14, 66, 15, 66, 16, 66, 17, 66, 18, 66, 19, 66, 20, 66, 21, 66, 22, 66, 23, 66, 24, 66, 25, 66, 26, 66, 27, 66, 28, 66, 29, 66, 30, 66, 31, 66, 32, 66, 33, 66, 34, 66, 35, 66, 36, 66, 37, 66, 38, 66, 39, 66, 40, 66, 41, 66, 42, 66, 43, 66, 44, 66, 45, 66, 46, 66, 47, 66, 48, 66, 49, 66, 50, 66, 51, 66, 52, 66, 53, 66, 54, 66, 74, 66, 75, 66, 76, 66, 77, 66, 78, 66, 79, 66, 80, 66, 81, 66, 82, 66, 83, 66, 84, 66, 85, 66, 86, 66, 87, 66, 88, 66, 89, 66, 90, 66, 91, 66, 92, 66, 93, 66, 94, 66, 95, 66, 96, 66, 97, 66, 98, 66, 99, 66, 100, 66, 101, 66, 102, 66, 103, 66, 104, 66, 105, 66, 106, 66, 107, 66, 108, 66, 109, 66, 110, 66, 111, 66, 166, 66, 167, 66, 168, 66, 169, 66, 170, 66, 171, 66, 172, 66, 173, 66, 174, 66, 175, 66, 176, 66, 177, 66, 178, 66, 179, 66, 180, 66, 181, 66, 182, 66, 183, 66, 184, 66, 185, 66, 186, 66, 187, 66, 188, 67, 3, 67, 4, 67, 5, 67, 6, 67, 7, 67, 8, 67, 9, 67, 10, 67, 11, 67, 12, 67, 13, 67, 14, 67, 15, 67, 16, 67, 17, 67, 18, 67, 19, 67, 20, 67, 21, 67, 22, 67, 23, 67, 24, 67, 25, 67, 26, 67, 27, 67, 28, 67, 29, 67, 30, 67, 31, 67, 32, 67, 33, 67, 34, 67, 35, 67, 36, 67, 37, 67, 38, 67, 39, 67, 40, 67, 41, 67, 42, 67, 43, 67, 44, 67, 45, 67, 46, 67, 47, 67, 48, 67, 49, 67, 50, 67, 51, 67, 52, 67, 53, 67, 75, 67, 76, 67, 77, 67, 78, 67, 79, 67, 80, 67, 81, 67, 82, 67, 83, 67, 84, 67, 85, 67, 86, 67, 87, 67, 88, 67, 89, 67, 90, 67, 91, 67, 92, 67, 93, 67, 94, 67, 95, 67, 96, 67, 97, 67, 98, 67, 99, 67, 100, 67, 101, 67, 102, 67, 103, 67, 104, 67, 105, 67, 106, 67, 107, 67, 108, 67, 109, 67, 110, 67, 111, 67, 166, 67, 167, 67, 168, 67, 169, 67, 170, 67, 171, 67, 172, 67, 173, 67, 174, 67, 175, 67, 176, 67, 177, 67, 178, 67, 179, 67, 180, 67, 181, 67, 182, 67, 183, 67, 184, 67, 185, 67, 186, 67, 187, 67, 188, 68, 3, 68, 4, 68, 5, 68, 6, 68, 7, 68, 8, 68, 9, 68, 10, 68, 11, 68, 12, 68, 13, 68, 14, 68, 15, 68, 16, 68, 17, 68, 18, 68, 19, 68, 20, 68, 21, 68, 22, 68, 23, 68, 24, 68, 25, 68, 26, 68, 27, 68, 28, 68, 29, 68, 30, 68, 31, 68, 32, 68, 33, 68, 34, 68, 35, 68, 36, 68, 37, 68, 38, 68, 39, 68, 40, 68, 41, 68, 42, 68, 43, 68, 44, 68, 45, 68, 46, 68, 47, 68, 48, 68, 49, 68, 50, 68, 51, 68, 52, 68, 53, 68, 75, 68, 76, 68, 77, 68, 78, 68, 79, 68, 80, 68, 81, 68, 82, 68, 83, 68, 84, 68, 85, 68, 86, 68, 87, 68, 88, 68, 89, 68, 90, 68, 91, 68, 92, 68, 93, 68, 94, 68, 95, 68, 96, 68, 97, 68, 98, 68, 99, 68, 100, 68, 101, 68, 102, 68, 103, 68, 104, 68, 105, 68, 106, 68, 107, 68, 108, 68, 109, 68, 110, 68, 111, 68, 166, 68, 167, 68, 168, 68, 169, 68, 170, 68, 171, 68, 172, 68, 173, 68, 174, 68, 175, 68, 176, 68, 177, 68, 178, 68, 179, 68, 180, 68, 181, 68, 182, 68, 183, 68, 184, 68, 185, 68, 186, 68, 187, 68, 188, 69, 3, 69, 4, 69, 5, 69, 6, 69, 7, 69, 8, 69, 9, 69, 10, 69, 11, 69, 12, 69, 13, 69, 14, 69, 15, 69, 16, 69, 17, 69, 18, 69, 19, 69, 20, 69, 21, 69, 22, 69, 23, 69, 24, 69, 25, 69, 26, 69, 27, 69, 28, 69, 29, 69, 30, 69, 31, 69, 32, 69, 33, 69, 34, 69, 35, 69, 36, 69, 37, 69, 38, 69, 39, 69, 40, 69, 41, 69, 42, 69, 43, 69, 44, 69, 45, 69, 46, 69, 47, 69, 48, 69, 49, 69, 50, 69, 51, 69, 52, 69, 76, 69, 77, 69, 78, 69, 79, 69, 80, 69, 81, 69, 82, 69, 83, 69, 84, 69, 85, 69, 86, 69, 87, 69, 88, 69, 89, 69, 90, 69, 91, 69, 92, 69, 93, 69, 94, 69, 95, 69, 96, 69, 97, 69, 98, 69, 99, 69, 100, 69, 101, 69, 102, 69, 103, 69, 104, 69, 105, 69, 106, 69, 107, 69, 108, 69, 109, 69, 110, 69, 111, 69, 112, 69, 166, 69, 167, 69, 168, 69, 169, 69, 170, 69, 171, 69, 172, 69, 173, 69, 174, 69, 175, 69, 176, 69, 177, 69, 178, 69, 179, 69, 180, 69, 181, 69, 182, 69, 183, 69, 184, 69, 185, 69, 186, 69, 187, 69, 188, 70, 3, 70, 4, 70, 5, 70, 6, 70, 7, 70, 8, 70, 9, 70, 10, 70, 11, 70, 12, 70, 13, 70, 14, 70, 15, 70, 16, 70, 17, 70, 18, 70, 19, 70, 20, 70, 21, 70, 22, 70, 23, 70, 24, 70, 25, 70, 26, 70, 27, 70, 28, 70, 29, 70, 30, 70, 31, 70, 32, 70, 33, 70, 34, 70, 35, 70, 36, 70, 37, 70, 38, 70, 39, 70, 40, 70, 41, 70, 42, 70, 43, 70, 44, 70, 45, 70, 46, 70, 47, 70, 48, 70, 49, 70, 50, 70, 51, 70, 52, 70, 76, 70, 77, 70, 78, 70, 79, 70, 80, 70, 81, 70, 82, 70, 83, 70, 84, 70, 85, 70, 86, 70, 87, 70, 88, 70, 89, 70, 90, 70, 91, 70, 92, 70, 93, 70, 94, 70, 95, 70, 96, 70, 97, 70, 98, 70, 99, 70, 100, 70, 101, 70, 102, 70, 103, 70, 104, 70, 105, 70, 106, 70, 107, 70, 108, 70, 109, 70, 110, 70, 111, 70, 112, 70, 166, 70, 167, 70, 168, 70, 169, 70, 170, 70, 171, 70, 172, 70, 173, 70, 174, 70, 175, 70, 176, 70, 177, 70, 178, 70, 179, 70, 180, 70, 181, 70, 182, 70, 183, 70, 184, 70, 185, 70, 186, 70, 187, 70, 188, 71, 3, 71, 4, 71, 5, 71, 6, 71, 7, 71, 8, 71, 9, 71, 10, 71, 11, 71, 12, 71, 13, 71, 14, 71, 15, 71, 16, 71, 17, 71, 18, 71, 19, 71, 20, 71, 21, 71, 22, 71, 23, 71, 24, 71, 25, 71, 26, 71, 27, 71, 28, 71, 29, 71, 30, 71, 31, 71, 32, 71, 33, 71, 34, 71, 35, 71, 36, 71, 37, 71, 38, 71, 39, 71, 40, 71, 41, 71, 42, 71, 43, 71, 44, 71, 45, 71, 46, 71, 47, 71, 48, 71, 49, 71, 50, 71, 51, 71, 52, 71, 76, 71, 77, 71, 78, 71, 79, 71, 80, 71, 81, 71, 82, 71, 83, 71, 84, 71, 85, 71, 86, 71, 87, 71, 88, 71, 89, 71, 90, 71, 91, 71, 92, 71, 93, 71, 94, 71, 95, 71, 96, 71, 97, 71, 98, 71, 99, 71, 100, 71, 101, 71, 102, 71, 103, 71, 104, 71, 105, 71, 106, 71, 107, 71, 108, 71, 109, 71, 110, 71, 111, 71, 112, 71, 113, 71, 114, 71, 115, 71, 166, 71, 167, 71, 168, 71, 169, 71, 170, 71, 171, 71, 172, 71, 173, 71, 174, 71, 175, 71, 176, 71, 177, 71, 178, 71, 179, 71, 180, 71, 181, 71, 182, 71, 183, 71, 184, 71, 185, 71, 186, 71, 187, 71, 188, 72, 3, 72, 4, 72, 5, 72, 6, 72, 7, 72, 8, 72, 9, 72, 10, 72, 11, 72, 12, 72, 13, 72, 14, 72, 15, 72, 16, 72, 17, 72, 18, 72, 19, 72, 20, 72, 21, 72, 22, 72, 23, 72, 24, 72, 25, 72, 26, 72, 27, 72, 28, 72, 29, 72, 30, 72, 31, 72, 32, 72, 33, 72, 34, 72, 35, 72, 36, 72, 37, 72, 38, 72, 39, 72, 40, 72, 41, 72, 42, 72, 43, 72, 44, 72, 45, 72, 46, 72, 47, 72, 48, 72, 49, 72, 50, 72, 51, 72, 76, 72, 77, 72, 78, 72, 79, 72, 80, 72, 81, 72, 82, 72, 83, 72, 84, 72, 85, 72, 86, 72, 87, 72, 88, 72, 89, 72, 90, 72, 91, 72, 92, 72, 93, 72, 94, 72, 95, 72, 96, 72, 97, 72, 98, 72, 99, 72, 100, 72, 101, 72, 102, 72, 103, 72, 104, 72, 105, 72, 106, 72, 107, 72, 108, 72, 109, 72, 110, 72, 111, 72, 112, 72, 113, 72, 114, 72, 115, 72, 116, 72, 117, 72, 167, 72, 168, 72, 169, 72, 170, 72, 171, 72, 172, 72, 173, 72, 174, 72, 175, 72, 176, 72, 177, 72, 178, 72, 179, 72, 180, 72, 181, 72, 182, 72, 183, 72, 184, 72, 185, 72, 186, 72, 187, 72, 188, 73, 3, 73, 4, 73, 5, 73, 6, 73, 7, 73, 8, 73, 9, 73, 10, 73, 11, 73, 12, 73, 13, 73, 14, 73, 15, 73, 16, 73, 17, 73, 18, 73, 19, 73, 20, 73, 21, 73, 22, 73, 23, 73, 24, 73, 25, 73, 26, 73, 27, 73, 28, 73, 29, 73, 30, 73, 31, 73, 32, 73, 33, 73, 34, 73, 35, 73, 36, 73, 37, 73, 38, 73, 39, 73, 40, 73, 41, 73, 42, 73, 43, 73, 44, 73, 45, 73, 46, 73, 47, 73, 48, 73, 49, 73, 50, 73, 51, 73, 77, 73, 78, 73, 79, 73, 80, 73, 81, 73, 82, 73, 83, 73, 84, 73, 85, 73, 86, 73, 87, 73, 88, 73, 89, 73, 90, 73, 91, 73, 92, 73, 93, 73, 94, 73, 95, 73, 96, 73, 97, 73, 98, 73, 99, 73, 100, 73, 101, 73, 102, 73, 103, 73, 104, 73, 105, 73, 106, 73, 107, 73, 108, 73, 109, 73, 110, 73, 111, 73, 112, 73, 113, 73, 114, 73, 115, 73, 116, 73, 117, 73, 118, 73, 119, 73, 167, 73, 168, 73, 169, 73, 170, 73, 171, 73, 172, 73, 173, 73, 174, 73, 175, 73, 176, 73, 177, 73, 178, 73, 179, 73, 180, 73, 181, 73, 182, 73, 183, 73, 184, 73, 185, 73, 186, 73, 187, 73, 188, 74, 3, 74, 4, 74, 5, 74, 6, 74, 7, 74, 8, 74, 9, 74, 10, 74, 11, 74, 12, 74, 13, 74, 14, 74, 15, 74, 16, 74, 17, 74, 18, 74, 19, 74, 20, 74, 21, 74, 22, 74, 23, 74, 24, 74, 25, 74, 26, 74, 27, 74, 28, 74, 29, 74, 30, 74, 31, 74, 32, 74, 33, 74, 34, 74, 35, 74, 36, 74, 37, 74, 38, 74, 39, 74, 40, 74, 41, 74, 42, 74, 43, 74, 44, 74, 45, 74, 46, 74, 47, 74, 48, 74, 49, 74, 50, 74, 51, 74, 77, 74, 78, 74, 79, 74, 80, 74, 81, 74, 82, 74, 83, 74, 84, 74, 85, 74, 86, 74, 87, 74, 88, 74, 89, 74, 90, 74, 91, 74, 92, 74, 93, 74, 94, 74, 95, 74, 96, 74, 97, 74, 98, 74, 99, 74, 100, 74, 101, 74, 102, 74, 103, 74, 104, 74, 105, 74, 106, 74, 107, 74, 108, 74, 109, 74, 110, 74, 111, 74, 112, 74, 113, 74, 114, 74, 115, 74, 116, 74, 117, 74, 118, 74, 119, 74, 120, 74, 121, 74, 167, 74, 168, 74, 169, 74, 170, 74, 171, 74, 172, 74, 173, 74, 174, 74, 175, 74, 176, 74, 177, 74, 178, 74, 179, 74, 180, 74, 181, 74, 182, 74, 183, 74, 184, 74, 185, 74, 186, 74, 187, 74, 188, 75, 3, 75, 4, 75, 5, 75, 6, 75, 7, 75, 8, 75, 9, 75, 10, 75, 11, 75, 12, 75, 13, 75, 14, 75, 15, 75, 16, 75, 17, 75, 18, 75, 19, 75, 20, 75, 21, 75, 22, 75, 23, 75, 24, 75, 25, 75, 26, 75, 27, 75, 28, 75, 29, 75, 30, 75, 31, 75, 32, 75, 33, 75, 34, 75, 35, 75, 36, 75, 37, 75, 38, 75, 39, 75, 40, 75, 41, 75, 42, 75, 43, 75, 44, 75, 45, 75, 46, 75, 47, 75, 48, 75, 49, 75, 50, 75, 51, 75, 77, 75, 78, 75, 79, 75, 80, 75, 81, 75, 82, 75, 83, 75, 84, 75, 85, 75, 86, 75, 87, 75, 88, 75, 89, 75, 90, 75, 91, 75, 92, 75, 93, 75, 94, 75, 95, 75, 96, 75, 97, 75, 98, 75, 99, 75, 100, 75, 101, 75, 102, 75, 103, 75, 104, 75, 105, 75, 106, 75, 107, 75, 108, 75, 109, 75, 110, 75, 111, 75, 112, 75, 113, 75, 114, 75, 115, 75, 116, 75, 117, 75, 118, 75, 119, 75, 120, 75, 121, 75, 167, 75, 168, 75, 169, 75, 170, 75, 171, 75, 172, 75, 173, 75, 174, 75, 175, 75, 176, 75, 177, 75, 178, 75, 179, 75, 180, 75, 181, 75, 182, 75, 183, 75, 184, 75, 185, 75, 186, 75, 187, 75, 188, 76, 3, 76, 4, 76, 5, 76, 6, 76, 7, 76, 8, 76, 9, 76, 10, 76, 11, 76, 12, 76, 13, 76, 14, 76, 15, 76, 16, 76, 17, 76, 18, 76, 19, 76, 20, 76, 21, 76, 22, 76, 23, 76, 24, 76, 25, 76, 26, 76, 27, 76, 28, 76, 29, 76, 30, 76, 31, 76, 32, 76, 33, 76, 34, 76, 35, 76, 36, 76, 37, 76, 38, 76, 39, 76, 40, 76, 41, 76, 42, 76, 43, 76, 44, 76, 45, 76, 46, 76, 47, 76, 48, 76, 49, 76, 50, 76, 51, 76, 77, 76, 78, 76, 79, 76, 80, 76, 81, 76, 82, 76, 83, 76, 84, 76, 85, 76, 86, 76, 87, 76, 88, 76, 89, 76, 90, 76, 91, 76, 92, 76, 93, 76, 94, 76, 95, 76, 96, 76, 97, 76, 98, 76, 99, 76, 100, 76, 101, 76, 102, 76, 103, 76, 104, 76, 105, 76, 106, 76, 107, 76, 108, 76, 109, 76, 110, 76, 111, 76, 112, 76, 113, 76, 114, 76, 115, 76, 116, 76, 117, 76, 118, 76, 119, 76, 120, 76, 121, 76, 167, 76, 168, 76, 169, 76, 170, 76, 171, 76, 172, 76, 173, 76, 174, 76, 175, 76, 176, 76, 177, 76, 178, 76, 179, 76, 180, 76, 181, 76, 182, 76, 183, 76, 184, 76, 185, 76, 186, 76, 187, 76, 188, 77, 3, 77, 4, 77, 5, 77, 6, 77, 7, 77, 8, 77, 9, 77, 10, 77, 11, 77, 12, 77, 13, 77, 14, 77, 15, 77, 16, 77, 17, 77, 18, 77, 19, 77, 20, 77, 21, 77, 22, 77, 23, 77, 24, 77, 25, 77, 26, 77, 27, 77, 28, 77, 29, 77, 30, 77, 31, 77, 32, 77, 33, 77, 34, 77, 35, 77, 36, 77, 37, 77, 38, 77, 39, 77, 40, 77, 41, 77, 42, 77, 43, 77, 44, 77, 45, 77, 46, 77, 47, 77, 48, 77, 49, 77, 50, 77, 51, 77, 77, 77, 78, 77, 79, 77, 80, 77, 81, 77, 82, 77, 83, 77, 84, 77, 85, 77, 86, 77, 87, 77, 88, 77, 89, 77, 90, 77, 91, 77, 92, 77, 93, 77, 94, 77, 95, 77, 96, 77, 97, 77, 98, 77, 99, 77, 100, 77, 101, 77, 102, 77, 103, 77, 104, 77, 105, 77, 106, 77, 107, 77, 108, 77, 109, 77, 110, 77, 111, 77, 112, 77, 113, 77, 114, 77, 115, 77, 116, 77, 117, 77, 118, 77, 119, 77, 120, 77, 121, 77, 167, 77, 168, 77, 169, 77, 170, 77, 171, 77, 172, 77, 173, 77, 174, 77, 175, 77, 176, 77, 177, 77, 178, 77, 179, 77, 180, 77, 181, 77, 182, 77, 183, 77, 184, 77, 185, 77, 186, 77, 187, 77, 188, 78, 3, 78, 4, 78, 5, 78, 6, 78, 7, 78, 8, 78, 9, 78, 10, 78, 11, 78, 12, 78, 13, 78, 14, 78, 15, 78, 16, 78, 17, 78, 18, 78, 19, 78, 20, 78, 21, 78, 22, 78, 23, 78, 24, 78, 25, 78, 26, 78, 27, 78, 28, 78, 29, 78, 30, 78, 31, 78, 32, 78, 33, 78, 34, 78, 35, 78, 36, 78, 37, 78, 38, 78, 39, 78, 40, 78, 41, 78, 42, 78, 43, 78, 44, 78, 45, 78, 46, 78, 47, 78, 48, 78, 49, 78, 50, 78, 51, 78, 77, 78, 78, 78, 79, 78, 80, 78, 81, 78, 82, 78, 83, 78, 84, 78, 85, 78, 86, 78, 87, 78, 88, 78, 89, 78, 90, 78, 91, 78, 92, 78, 93, 78, 94, 78, 95, 78, 96, 78, 97, 78, 98, 78, 99, 78, 100, 78, 101, 78, 102, 78, 103, 78, 104, 78, 105, 78, 106, 78, 107, 78, 108, 78, 109, 78, 110, 78, 111, 78, 112, 78, 113, 78, 114, 78, 115, 78, 116, 78, 117, 78, 118, 78, 119, 78, 120, 78, 121, 78, 167, 78, 168, 78, 169, 78, 170, 78, 171, 78, 172, 78, 173, 78, 174, 78, 175, 78, 176, 78, 177, 78, 178, 78, 179, 78, 180, 78, 181, 78, 182, 78, 183, 78, 184, 78, 185, 78, 186, 78, 187, 78, 188, 79, 3, 79, 4, 79, 5, 79, 6, 79, 7, 79, 8, 79, 9, 79, 10, 79, 11, 79, 12, 79, 13, 79, 14, 79, 15, 79, 16, 79, 17, 79, 18, 79, 19, 79, 20, 79, 21, 79, 22, 79, 23, 79, 24, 79, 25, 79, 26, 79, 27, 79, 28, 79, 29, 79, 30, 79, 31, 79, 32, 79, 33, 79, 34, 79, 35, 79, 36, 79, 37, 79, 38, 79, 39, 79, 40, 79, 41, 79, 42, 79, 43, 79, 44, 79, 45, 79, 46, 79, 47, 79, 48, 79, 49, 79, 50, 79, 78, 79, 79, 79, 80, 79, 81, 79, 82, 79, 83, 79, 84, 79, 85, 79, 86, 79, 87, 79, 88, 79, 89, 79, 90, 79, 91, 79, 92, 79, 93, 79, 94, 79, 95, 79, 96, 79, 97, 79, 98, 79, 99, 79, 100, 79, 101, 79, 102, 79, 103, 79, 104, 79, 105, 79, 106, 79, 107, 79, 108, 79, 109, 79, 110, 79, 111, 79, 112, 79, 113, 79, 114, 79, 115, 79, 116, 79, 117, 79, 118, 79, 119, 79, 120, 79, 121, 79, 167, 79, 168, 79, 169, 79, 170, 79, 171, 79, 172, 79, 173, 79, 174, 79, 175, 79, 176, 79, 177, 79, 178, 79, 179, 79, 180, 79, 181, 79, 182, 79, 183, 79, 184, 79, 185, 79, 186, 79, 187, 79, 188, 80, 3, 80, 4, 80, 5, 80, 6, 80, 7, 80, 8, 80, 9, 80, 10, 80, 11, 80, 12, 80, 13, 80, 14, 80, 15, 80, 16, 80, 17, 80, 18, 80, 19, 80, 20, 80, 21, 80, 22, 80, 23, 80, 24, 80, 25, 80, 26, 80, 27, 80, 28, 80, 29, 80, 30, 80, 31, 80, 32, 80, 33, 80, 34, 80, 35, 80, 36, 80, 37, 80, 38, 80, 39, 80, 40, 80, 41, 80, 42, 80, 43, 80, 44, 80, 45, 80, 46, 80, 47, 80, 48, 80, 49, 80, 50, 80, 78, 80, 79, 80, 80, 80, 81, 80, 82, 80, 83, 80, 84, 80, 85, 80, 86, 80, 87, 80, 88, 80, 89, 80, 90, 80, 91, 80, 92, 80, 93, 80, 94, 80, 95, 80, 96, 80, 97, 80, 98, 80, 99, 80, 100, 80, 101, 80, 102, 80, 103, 80, 104, 80, 105, 80, 106, 80, 107, 80, 108, 80, 109, 80, 110, 80, 111, 80, 112, 80, 113, 80, 114, 80, 115, 80, 116, 80, 117, 80, 118, 80, 119, 80, 120, 80, 121, 80, 168, 80, 169, 80, 170, 80, 171, 80, 172, 80, 173, 80, 174, 80, 175, 80, 176, 80, 177, 80, 178, 80, 179, 80, 180, 80, 181, 80, 182, 80, 183, 80, 184, 80, 185, 80, 186, 80, 187, 80, 188, 81, 3, 81, 4, 81, 5, 81, 6, 81, 7, 81, 8, 81, 9, 81, 10, 81, 11, 81, 12, 81, 13, 81, 14, 81, 15, 81, 16, 81, 17, 81, 18, 81, 19, 81, 20, 81, 21, 81, 22, 81, 23, 81, 24, 81, 25, 81, 26, 81, 27, 81, 28, 81, 29, 81, 30, 81, 31, 81, 32, 81, 33, 81, 34, 81, 35, 81, 36, 81, 37, 81, 38, 81, 39, 81, 40, 81, 41, 81, 42, 81, 43, 81, 44, 81, 45, 81, 46, 81, 47, 81, 48, 81, 49, 81, 50, 81, 78, 81, 79, 81, 80, 81, 81, 81, 82, 81, 83, 81, 84, 81, 85, 81, 86, 81, 87, 81, 88, 81, 89, 81, 90, 81, 91, 81, 92, 81, 93, 81, 94, 81, 95, 81, 96, 81, 97, 81, 98, 81, 99, 81, 100, 81, 101, 81, 102, 81, 103, 81, 104, 81, 105, 81, 106, 81, 107, 81, 108, 81, 109, 81, 110, 81, 111, 81, 112, 81, 113, 81, 114, 81, 115, 81, 116, 81, 117, 81, 118, 81, 119, 81, 120, 81, 121, 81, 168, 81, 169, 81, 170, 81, 171, 81, 172, 81, 173, 81, 174, 81, 175, 81, 176, 81, 177, 81, 178, 81, 179, 81, 180, 81, 181, 81, 182, 81, 183, 81, 184, 81, 185, 81, 186, 81, 187, 81, 188, 82, 3, 82, 4, 82, 5, 82, 6, 82, 7, 82, 8, 82, 9, 82, 10, 82, 11, 82, 12, 82, 13, 82, 14, 82, 15, 82, 16, 82, 17, 82, 18, 82, 19, 82, 20, 82, 21, 82, 22, 82, 23, 82, 24, 82, 25, 82, 26, 82, 27, 82, 28, 82, 29, 82, 30, 82, 31, 82, 32, 82, 33, 82, 34, 82, 35, 82, 36, 82, 37, 82, 38, 82, 39, 82, 40, 82, 41, 82, 42, 82, 43, 82, 44, 82, 45, 82, 46, 82, 47, 82, 48, 82, 49, 82, 50, 82, 78, 82, 79, 82, 80, 82, 81, 82, 82, 82, 83, 82, 84, 82, 85, 82, 86, 82, 87, 82, 88, 82, 89, 82, 90, 82, 91, 82, 92, 82, 93, 82, 94, 82, 95, 82, 96, 82, 97, 82, 98, 82, 99, 82, 100, 82, 101, 82, 102, 82, 103, 82, 104, 82, 105, 82, 106, 82, 107, 82, 108, 82, 109, 82, 110, 82, 111, 82, 112, 82, 113, 82, 114, 82, 115, 82, 116, 82, 117, 82, 118, 82, 119, 82, 120, 82, 121, 82, 168, 82, 169, 82, 170, 82, 171, 82, 172, 82, 173, 82, 174, 82, 175, 82, 176, 82, 177, 82, 178, 82, 179, 82, 180, 82, 181, 82, 182, 82, 183, 82, 184, 82, 185, 82, 186, 82, 187, 82, 188, 83, 3, 83, 4, 83, 5, 83, 6, 83, 7, 83, 8, 83, 9, 83, 10, 83, 11, 83, 12, 83, 13, 83, 14, 83, 15, 83, 16, 83, 17, 83, 18, 83, 19, 83, 20, 83, 21, 83, 22, 83, 23, 83, 24, 83, 25, 83, 26, 83, 27, 83, 28, 83, 29, 83, 30, 83, 31, 83, 32, 83, 33, 83, 34, 83, 35, 83, 36, 83, 37, 83, 38, 83, 39, 83, 40, 83, 41, 83, 42, 83, 43, 83, 44, 83, 45, 83, 46, 83, 47, 83, 48, 83, 49, 83, 50, 83, 78, 83, 79, 83, 80, 83, 81, 83, 82, 83, 83, 83, 84, 83, 85, 83, 86, 83, 87, 83, 88, 83, 89, 83, 90, 83, 91, 83, 92, 83, 93, 83, 94, 83, 95, 83, 96, 83, 97, 83, 98, 83, 99, 83, 100, 83, 101, 83, 102, 83, 103, 83, 104, 83, 105, 83, 106, 83, 107, 83, 108, 83, 109, 83, 110, 83, 111, 83, 112, 83, 113, 83, 114, 83, 115, 83, 116, 83, 117, 83, 118, 83, 119, 83, 120, 83, 121, 83, 168, 83, 169, 83, 170, 83, 171, 83, 172, 83, 173, 83, 174, 83, 175, 83, 176, 83, 177, 83, 178, 83, 179, 83, 180, 83, 181, 83, 182, 83, 183, 83, 184, 83, 185, 83, 186, 83, 187, 83, 188, 84, 3, 84, 4, 84, 5, 84, 6, 84, 7, 84, 8, 84, 9, 84, 10, 84, 11, 84, 12, 84, 13, 84, 14, 84, 15, 84, 16, 84, 17, 84, 18, 84, 19, 84, 20, 84, 21, 84, 22, 84, 23, 84, 24, 84, 25, 84, 26, 84, 27, 84, 28, 84, 29, 84, 30, 84, 31, 84, 32, 84, 33, 84, 34, 84, 35, 84, 36, 84, 37, 84, 38, 84, 39, 84, 40, 84, 41, 84, 42, 84, 43, 84, 44, 84, 45, 84, 46, 84, 47, 84, 48, 84, 49, 84, 50, 84, 78, 84, 79, 84, 80, 84, 81, 84, 82, 84, 83, 84, 84, 84, 85, 84, 86, 84, 87, 84, 88, 84, 89, 84, 90, 84, 91, 84, 92, 84, 93, 84, 94, 84, 95, 84, 96, 84, 97, 84, 98, 84, 99, 84, 100, 84, 101, 84, 102, 84, 103, 84, 104, 84, 105, 84, 106, 84, 107, 84, 108, 84, 109, 84, 110, 84, 111, 84, 112, 84, 113, 84, 114, 84, 115, 84, 116, 84, 117, 84, 118, 84, 119, 84, 120, 84, 121, 84, 168, 84, 169, 84, 170, 84, 171, 84, 172, 84, 173, 84, 174, 84, 175, 84, 176, 84, 177, 84, 178, 84, 179, 84, 180, 84, 181, 84, 182, 84, 183, 84, 184, 84, 185, 84, 186, 84, 187, 84, 188, 85, 3, 85, 4, 85, 5, 85, 6, 85, 7, 85, 8, 85, 9, 85, 10, 85, 11, 85, 12, 85, 13, 85, 14, 85, 15, 85, 16, 85, 17, 85, 18, 85, 19, 85, 20, 85, 21, 85, 22, 85, 23, 85, 24, 85, 25, 85, 26, 85, 27, 85, 28, 85, 29, 85, 30, 85, 31, 85, 32, 85, 33, 85, 34, 85, 35, 85, 36, 85, 37, 85, 38, 85, 39, 85, 40, 85, 41, 85, 42, 85, 43, 85, 44, 85, 45, 85, 46, 85, 47, 85, 48, 85, 49, 85, 50, 85, 78, 85, 79, 85, 80, 85, 81, 85, 82, 85, 83, 85, 84, 85, 85, 85, 86, 85, 87, 85, 88, 85, 89, 85, 90, 85, 91, 85, 92, 85, 93, 85, 94, 85, 95, 85, 96, 85, 97, 85, 98, 85, 99, 85, 100, 85, 101, 85, 102, 85, 103, 85, 104, 85, 105, 85, 106, 85, 107, 85, 108, 85, 109, 85, 110, 85, 111, 85, 112, 85, 113, 85, 114, 85, 115, 85, 116, 85, 117, 85, 118, 85, 119, 85, 120, 85, 121, 85, 168, 85, 169, 85, 170, 85, 171, 85, 172, 85, 173, 85, 174, 85, 175, 85, 176, 85, 177, 85, 178, 85, 179, 85, 180, 85, 181, 85, 182, 85, 183, 85, 184, 85, 185, 85, 186, 85, 187, 85, 188, 86, 3, 86, 4, 86, 5, 86, 6, 86, 7, 86, 8, 86, 9, 86, 10, 86, 11, 86, 12, 86, 13, 86, 14, 86, 15, 86, 16, 86, 17, 86, 18, 86, 19, 86, 20, 86, 21, 86, 22, 86, 23, 86, 24, 86, 25, 86, 26, 86, 27, 86, 28, 86, 29, 86, 30, 86, 31, 86, 32, 86, 33, 86, 34, 86, 35, 86, 36, 86, 37, 86, 38, 86, 39, 86, 40, 86, 41, 86, 42, 86, 43, 86, 44, 86, 45, 86, 46, 86, 47, 86, 48, 86, 49, 86, 50, 86, 78, 86, 79, 86, 80, 86, 81, 86, 82, 86, 83, 86, 84, 86, 85, 86, 86, 86, 87, 86, 88, 86, 89, 86, 90, 86, 91, 86, 92, 86, 93, 86, 94, 86, 95, 86, 96, 86, 97, 86, 98, 86, 99, 86, 100, 86, 101, 86, 102, 86, 103, 86, 104, 86, 105, 86, 106, 86, 107, 86, 108, 86, 109, 86, 110, 86, 111, 86, 112, 86, 113, 86, 114, 86, 115, 86, 116, 86, 117, 86, 118, 86, 119, 86, 120, 86, 121, 86, 168, 86, 169, 86, 170, 86, 171, 86, 172, 86, 173, 86, 174, 86, 175, 86, 176, 86, 177, 86, 178, 86, 179, 86, 180, 86, 181, 86, 182, 86, 183, 86, 184, 86, 185, 86, 186, 86, 187, 86, 188, 87, 3, 87, 4, 87, 5, 87, 6, 87, 7, 87, 8, 87, 9, 87, 10, 87, 11, 87, 12, 87, 13, 87, 14, 87, 15, 87, 16, 87, 17, 87, 18, 87, 19, 87, 20, 87, 21, 87, 22, 87, 23, 87, 24, 87, 25, 87, 26, 87, 27, 87, 28, 87, 29, 87, 30, 87, 31, 87, 32, 87, 33, 87, 34, 87, 35, 87, 36, 87, 37, 87, 38, 87, 39, 87, 40, 87, 41, 87, 42, 87, 43, 87, 44, 87, 45, 87, 46, 87, 47, 87, 48, 87, 49, 87, 50, 87, 78, 87, 79, 87, 80, 87, 81, 87, 82, 87, 83, 87, 84, 87, 85, 87, 86, 87, 87, 87, 88, 87, 89, 87, 90, 87, 91, 87, 92, 87, 93, 87, 94, 87, 95, 87, 96, 87, 97, 87, 98, 87, 99, 87, 100, 87, 101, 87, 102, 87, 103, 87, 104, 87, 105, 87, 106, 87, 107, 87, 108, 87, 109, 87, 110, 87, 111, 87, 112, 87, 113, 87, 114, 87, 115, 87, 116, 87, 117, 87, 118, 87, 119, 87, 120, 87, 121, 87, 169, 87, 170, 87, 171, 87, 172, 87, 173, 87, 174, 87, 175, 87, 176, 87, 177, 87, 178, 87, 179, 87, 180, 87, 181, 87, 182, 87, 183, 87, 184, 87, 185, 87, 186, 87, 187, 87, 188, 88, 3, 88, 4, 88, 5, 88, 6, 88, 7, 88, 8, 88, 9, 88, 10, 88, 11, 88, 12, 88, 13, 88, 14, 88, 15, 88, 16, 88, 17, 88, 18, 88, 19, 88, 20, 88, 21, 88, 22, 88, 23, 88, 24, 88, 25, 88, 26, 88, 27, 88, 28, 88, 29, 88, 30, 88, 31, 88, 32, 88, 33, 88, 34, 88, 35, 88, 36, 88, 37, 88, 38, 88, 39, 88, 40, 88, 41, 88, 42, 88, 43, 88, 44, 88, 45, 88, 46, 88, 47, 88, 48, 88, 49, 88, 50, 88, 77, 88, 78, 88, 79, 88, 80, 88, 81, 88, 82, 88, 83, 88, 84, 88, 85, 88, 86, 88, 87, 88, 88, 88, 89, 88, 90, 88, 91, 88, 92, 88, 93, 88, 94, 88, 95, 88, 96, 88, 97, 88, 98, 88, 99, 88, 100, 88, 101, 88, 102, 88, 103, 88, 104, 88, 105, 88, 106, 88, 107, 88, 108, 88, 109, 88, 110, 88, 111, 88, 112, 88, 113, 88, 114, 88, 115, 88, 116, 88, 117, 88, 118, 88, 119, 88, 120, 88, 121, 88, 169, 88, 170, 88, 171, 88, 172, 88, 173, 88, 174, 88, 175, 88, 176, 88, 177, 88, 178, 88, 179, 88, 180, 88, 181, 88, 182, 88, 183, 88, 184, 88, 185, 88, 186, 88, 187, 88, 188, 89, 3, 89, 4, 89, 5, 89, 6, 89, 7, 89, 8, 89, 9, 89, 10, 89, 11, 89, 12, 89, 13, 89, 14, 89, 15, 89, 16, 89, 17, 89, 18, 89, 19, 89, 20, 89, 21, 89, 22, 89, 23, 89, 24, 89, 25, 89, 26, 89, 27, 89, 28, 89, 29, 89, 30, 89, 31, 89, 32, 89, 33, 89, 34, 89, 35, 89, 36, 89, 37, 89, 38, 89, 39, 89, 40, 89, 41, 89, 42, 89, 43, 89, 44, 89, 45, 89, 46, 89, 47, 89, 48, 89, 49, 89, 50, 89, 77, 89, 78, 89, 79, 89, 80, 89, 81, 89, 82, 89, 83, 89, 84, 89, 85, 89, 86, 89, 87, 89, 88, 89, 89, 89, 90, 89, 91, 89, 92, 89, 93, 89, 94, 89, 95, 89, 96, 89, 97, 89, 98, 89, 99, 89, 100, 89, 101, 89, 102, 89, 103, 89, 104, 89, 105, 89, 106, 89, 107, 89, 108, 89, 109, 89, 110, 89, 111, 89, 112, 89, 113, 89, 114, 89, 115, 89, 116, 89, 117, 89, 118, 89, 119, 89, 120, 89, 121, 89, 169, 89, 170, 89, 171, 89, 172, 89, 173, 89, 174, 89, 175, 89, 176, 89, 177, 89, 178, 89, 179, 89, 180, 89, 181, 89, 182, 89, 183, 89, 184, 89, 185, 89, 186, 89, 187, 89, 188, 90, 3, 90, 4, 90, 5, 90, 6, 90, 7, 90, 8, 90, 9, 90, 10, 90, 11, 90, 12, 90, 13, 90, 14, 90, 15, 90, 16, 90, 17, 90, 18, 90, 19, 90, 20, 90, 21, 90, 22, 90, 23, 90, 24, 90, 25, 90, 26, 90, 27, 90, 28, 90, 29, 90, 30, 90, 31, 90, 32, 90, 33, 90, 34, 90, 35, 90, 36, 90, 37, 90, 38, 90, 39, 90, 40, 90, 41, 90, 42, 90, 43, 90, 44, 90, 45, 90, 46, 90, 47, 90, 48, 90, 49, 90, 50, 90, 51, 90, 77, 90, 78, 90, 79, 90, 80, 90, 81, 90, 82, 90, 83, 90, 84, 90, 85, 90, 86, 90, 87, 90, 88, 90, 89, 90, 90, 90, 91, 90, 92, 90, 93, 90, 94, 90, 95, 90, 96, 90, 97, 90, 98, 90, 99, 90, 100, 90, 101, 90, 102, 90, 103, 90, 104, 90, 105, 90, 106, 90, 107, 90, 108, 90, 109, 90, 110, 90, 111, 90, 112, 90, 113, 90, 114, 90, 115, 90, 116, 90, 117, 90, 118, 90, 119, 90, 120, 90, 121, 90, 169, 90, 170, 90, 171, 90, 172, 90, 173, 90, 174, 90, 175, 90, 176, 90, 177, 90, 178, 90, 179, 90, 180, 90, 181, 90, 182, 90, 183, 90, 184, 90, 185, 90, 186, 90, 187, 90, 188, 91, 3, 91, 4, 91, 5, 91, 6, 91, 7, 91, 8, 91, 9, 91, 10, 91, 11, 91, 12, 91, 13, 91, 14, 91, 15, 91, 16, 91, 17, 91, 18, 91, 19, 91, 20, 91, 21, 91, 22, 91, 23, 91, 24, 91, 25, 91, 26, 91, 27, 91, 28, 91, 29, 91, 30, 91, 31, 91, 32, 91, 33, 91, 34, 91, 35, 91, 36, 91, 37, 91, 38, 91, 39, 91, 40, 91, 41, 91, 42, 91, 43, 91, 44, 91, 45, 91, 46, 91, 47, 91, 48, 91, 49, 91, 50, 91, 51, 91, 77, 91, 78, 91, 79, 91, 80, 91, 81, 91, 82, 91, 83, 91, 84, 91, 85, 91, 86, 91, 87, 91, 88, 91, 89, 91, 90, 91, 91, 91, 92, 91, 93, 91, 94, 91, 95, 91, 96, 91, 97, 91, 98, 91, 99, 91, 100, 91, 101, 91, 102, 91, 103, 91, 104, 91, 105, 91, 106, 91, 107, 91, 108, 91, 109, 91, 110, 91, 111, 91, 112, 91, 113, 91, 114, 91, 115, 91, 116, 91, 117, 91, 118, 91, 119, 91, 120, 91, 169, 91, 170, 91, 171, 91, 172, 91, 173, 91, 174, 91, 175, 91, 176, 91, 177, 91, 178, 91, 179, 91, 180, 91, 181, 91, 182, 91, 183, 91, 184, 91, 185, 91, 186, 91, 187, 91, 188, 92, 3, 92, 4, 92, 5, 92, 6, 92, 7, 92, 8, 92, 9, 92, 10, 92, 11, 92, 12, 92, 13, 92, 14, 92, 15, 92, 16, 92, 17, 92, 18, 92, 19, 92, 20, 92, 21, 92, 22, 92, 23, 92, 24, 92, 25, 92, 26, 92, 27, 92, 28, 92, 29, 92, 30, 92, 31, 92, 32, 92, 33, 92, 34, 92, 35, 92, 36, 92, 37, 92, 38, 92, 39, 92, 40, 92, 41, 92, 42, 92, 43, 92, 44, 92, 45, 92, 46, 92, 47, 92, 48, 92, 49, 92, 50, 92, 51, 92, 76, 92, 77, 92, 78, 92, 79, 92, 80, 92, 81, 92, 82, 92, 83, 92, 84, 92, 85, 92, 86, 92, 87, 92, 88, 92, 89, 92, 90, 92, 91, 92, 92, 92, 93, 92, 94, 92, 95, 92, 96, 92, 97, 92, 98, 92, 99, 92, 100, 92, 101, 92, 102, 92, 103, 92, 104, 92, 105, 92, 106, 92, 107, 92, 108, 92, 109, 92, 110, 92, 111, 92, 112, 92, 113, 92, 114, 92, 115, 92, 116, 92, 117, 92, 118, 92, 119, 92, 120, 92, 169, 92, 170, 92, 171, 92, 172, 92, 173, 92, 174, 92, 175, 92, 176, 92, 177, 92, 178, 92, 179, 92, 180, 92, 181, 92, 182, 92, 183, 92, 184, 92, 185, 92, 186, 92, 187, 92, 188, 93, 3, 93, 4, 93, 5, 93, 6, 93, 7, 93, 8, 93, 9, 93, 10, 93, 11, 93, 12, 93, 13, 93, 14, 93, 15, 93, 16, 93, 17, 93, 18, 93, 19, 93, 20, 93, 21, 93, 22, 93, 23, 93, 24, 93, 25, 93, 26, 93, 27, 93, 28, 93, 29, 93, 30, 93, 31, 93, 32, 93, 33, 93, 34, 93, 35, 93, 36, 93, 37, 93, 38, 93, 39, 93, 40, 93, 41, 93, 42, 93, 43, 93, 44, 93, 45, 93, 46, 93, 47, 93, 48, 93, 49, 93, 50, 93, 51, 93, 76, 93, 77, 93, 78, 93, 79, 93, 80, 93, 81, 93, 82, 93, 83, 93, 84, 93, 85, 93, 86, 93, 87, 93, 88, 93, 89, 93, 90, 93, 91, 93, 92, 93, 93, 93, 94, 93, 95, 93, 96, 93, 97, 93, 98, 93, 99, 93, 100, 93, 101, 93, 102, 93, 103, 93, 104, 93, 105, 93, 106, 93, 107, 93, 108, 93, 109, 93, 110, 93, 111, 93, 112, 93, 113, 93, 114, 93, 115, 93, 116, 93, 117, 93, 118, 93, 119, 93, 120, 93, 169, 93, 170, 93, 171, 93, 172, 93, 173, 93, 174, 93, 175, 93, 176, 93, 177, 93, 178, 93, 179, 93, 180, 93, 181, 93, 182, 93, 183, 93, 184, 93, 185, 93, 186, 93, 187, 93, 188, 94, 3, 94, 4, 94, 5, 94, 6, 94, 7, 94, 8, 94, 9, 94, 10, 94, 11, 94, 12, 94, 13, 94, 14, 94, 15, 94, 16, 94, 17, 94, 18, 94, 19, 94, 20, 94, 21, 94, 22, 94, 23, 94, 24, 94, 25, 94, 26, 94, 27, 94, 28, 94, 29, 94, 30, 94, 31, 94, 32, 94, 33, 94, 34, 94, 35, 94, 36, 94, 37, 94, 38, 94, 39, 94, 40, 94, 41, 94, 42, 94, 43, 94, 44, 94, 45, 94, 46, 94, 47, 94, 48, 94, 49, 94, 50, 94, 51, 94, 76, 94, 77, 94, 78, 94, 79, 94, 80, 94, 81, 94, 82, 94, 83, 94, 84, 94, 85, 94, 86, 94, 87, 94, 88, 94, 89, 94, 90, 94, 91, 94, 92, 94, 93, 94, 94, 94, 95, 94, 96, 94, 97, 94, 98, 94, 99, 94, 100, 94, 101, 94, 102, 94, 103, 94, 104, 94, 105, 94, 106, 94, 107, 94, 108, 94, 109, 94, 110, 94, 111, 94, 112, 94, 113, 94, 114, 94, 115, 94, 116, 94, 117, 94, 118, 94, 119, 94, 120, 94, 169, 94, 170, 94, 171, 94, 172, 94, 173, 94, 174, 94, 175, 94, 176, 94, 177, 94, 178, 94, 179, 94, 180, 94, 181, 94, 182, 94, 183, 94, 184, 94, 185, 94, 186, 94, 187, 94, 188, 95, 3, 95, 4, 95, 5, 95, 6, 95, 7, 95, 8, 95, 9, 95, 10, 95, 11, 95, 12, 95, 13, 95, 14, 95, 15, 95, 16, 95, 17, 95, 18, 95, 19, 95, 20, 95, 21, 95, 22, 95, 23, 95, 24, 95, 25, 95, 26, 95, 27, 95, 28, 95, 29, 95, 30, 95, 31, 95, 32, 95, 33, 95, 34, 95, 35, 95, 36, 95, 37, 95, 38, 95, 39, 95, 40, 95, 41, 95, 42, 95, 43, 95, 44, 95, 45, 95, 46, 95, 47, 95, 48, 95, 49, 95, 50, 95, 51, 95, 52, 95, 76, 95, 77, 95, 78, 95, 79, 95, 80, 95, 81, 95, 82, 95, 83, 95, 84, 95, 85, 95, 86, 95, 87, 95, 88, 95, 89, 95, 90, 95, 91, 95, 92, 95, 93, 95, 94, 95, 95, 95, 96, 95, 97, 95, 98, 95, 99, 95, 100, 95, 101, 95, 102, 95, 103, 95, 104, 95, 105, 95, 106, 95, 107, 95, 108, 95, 109, 95, 110, 95, 111, 95, 112, 95, 113, 95, 114, 95, 115, 95, 116, 95, 117, 95, 118, 95, 119, 95, 169, 95, 170, 95, 171, 95, 172, 95, 173, 95, 174, 95, 175, 95, 176, 95, 177, 95, 178, 95, 179, 95, 180, 95, 181, 95, 182, 95, 183, 95, 184, 95, 185, 95, 186, 95, 187, 95, 188, 96, 3, 96, 4, 96, 5, 96, 6, 96, 7, 96, 8, 96, 9, 96, 10, 96, 11, 96, 12, 96, 13, 96, 14, 96, 15, 96, 16, 96, 17, 96, 18, 96, 19, 96, 20, 96, 21, 96, 22, 96, 23, 96, 24, 96, 25, 96, 26, 96, 27, 96, 28, 96, 29, 96, 30, 96, 31, 96, 32, 96, 33, 96, 34, 96, 35, 96, 36, 96, 37, 96, 38, 96, 39, 96, 40, 96, 41, 96, 42, 96, 43, 96, 44, 96, 45, 96, 46, 96, 47, 96, 48, 96, 49, 96, 50, 96, 51, 96, 52, 96, 75, 96, 76, 96, 77, 96, 78, 96, 79, 96, 80, 96, 81, 96, 82, 96, 83, 96, 84, 96, 85, 96, 86, 96, 87, 96, 88, 96, 89, 96, 90, 96, 91, 96, 92, 96, 93, 96, 94, 96, 95, 96, 96, 96, 97, 96, 98, 96, 99, 96, 100, 96, 101, 96, 102, 96, 103, 96, 104, 96, 105, 96, 106, 96, 107, 96, 108, 96, 109, 96, 110, 96, 111, 96, 112, 96, 113, 96, 114, 96, 115, 96, 116, 96, 117, 96, 118, 96, 170, 96, 171, 96, 172, 96, 173, 96, 174, 96, 175, 96, 176, 96, 177, 96, 178, 96, 179, 96, 180, 96, 181, 96, 182, 96, 183, 96, 184, 96, 185, 96, 186, 96, 187, 96, 188, 97, 3, 97, 4, 97, 5, 97, 6, 97, 7, 97, 8, 97, 9, 97, 10, 97, 11, 97, 12, 97, 13, 97, 14, 97, 15, 97, 16, 97, 17, 97, 18, 97, 19, 97, 20, 97, 21, 97, 22, 97, 23, 97, 24, 97, 25, 97, 26, 97, 27, 97, 28, 97, 29, 97, 30, 97, 31, 97, 32, 97, 33, 97, 34, 97, 35, 97, 36, 97, 37, 97, 38, 97, 39, 97, 40, 97, 41, 97, 42, 97, 43, 97, 44, 97, 45, 97, 46, 97, 47, 97, 48, 97, 49, 97, 50, 97, 51, 97, 52, 97, 53, 97, 75, 97, 76, 97, 77, 97, 78, 97, 79, 97, 80, 97, 81, 97, 82, 97, 83, 97, 84, 97, 85, 97, 86, 97, 87, 97, 88, 97, 89, 97, 90, 97, 91, 97, 92, 97, 93, 97, 94, 97, 95, 97, 96, 97, 97, 97, 98, 97, 99, 97, 100, 97, 101, 97, 102, 97, 103, 97, 104, 97, 105, 97, 106, 97, 107, 97, 108, 97, 109, 97, 110, 97, 111, 97, 112, 97, 113, 97, 114, 97, 115, 97, 116, 97, 170, 97, 171, 97, 172, 97, 173, 97, 174, 97, 175, 97, 176, 97, 177, 97, 178, 97, 179, 97, 180, 97, 181, 97, 182, 97, 183, 97, 184, 97, 185, 97, 186, 97, 187, 97, 188, 98, 3, 98, 4, 98, 5, 98, 6, 98, 7, 98, 8, 98, 9, 98, 10, 98, 11, 98, 12, 98, 13, 98, 14, 98, 15, 98, 16, 98, 17, 98, 18, 98, 19, 98, 20, 98, 21, 98, 22, 98, 23, 98, 24, 98, 25, 98, 26, 98, 27, 98, 28, 98, 29, 98, 30, 98, 31, 98, 32, 98, 33, 98, 34, 98, 35, 98, 36, 98, 37, 98, 38, 98, 39, 98, 40, 98, 41, 98, 42, 98, 43, 98, 44, 98, 45, 98, 46, 98, 47, 98, 48, 98, 49, 98, 50, 98, 51, 98, 52, 98, 53, 98, 73, 98, 74, 98, 75, 98, 76, 98, 77, 98, 78, 98, 79, 98, 80, 98, 81, 98, 82, 98, 83, 98, 84, 98, 85, 98, 86, 98, 87, 98, 88, 98, 89, 98, 90, 98, 91, 98, 92, 98, 93, 98, 94, 98, 95, 98, 96, 98, 97, 98, 98, 98, 99, 98, 100, 98, 101, 98, 102, 98, 103, 98, 104, 98, 105, 98, 106, 98, 107, 98, 108, 98, 109, 98, 110, 98, 111, 98, 112, 98, 113, 98, 114, 98, 170, 98, 171, 98, 172, 98, 173, 98, 174, 98, 175, 98, 176, 98, 177, 98, 178, 98, 179, 98, 180, 98, 181, 98, 182, 98, 183, 98, 184, 98, 185, 98, 186, 98, 187, 98, 188, 99, 3, 99, 4, 99, 5, 99, 6, 99, 7, 99, 8, 99, 9, 99, 10, 99, 11, 99, 12, 99, 13, 99, 14, 99, 15, 99, 16, 99, 17, 99, 18, 99, 19, 99, 20, 99, 21, 99, 22, 99, 23, 99, 24, 99, 25, 99, 26, 99, 27, 99, 28, 99, 29, 99, 30, 99, 31, 99, 32, 99, 33, 99, 34, 99, 35, 99, 36, 99, 37, 99, 38, 99, 39, 99, 40, 99, 41, 99, 42, 99, 43, 99, 44, 99, 45, 99, 46, 99, 47, 99, 48, 99, 49, 99, 50, 99, 51, 99, 52, 99, 53, 99, 54, 99, 72, 99, 73, 99, 74, 99, 75, 99, 76, 99, 77, 99, 78, 99, 79, 99, 80, 99, 81, 99, 82, 99, 83, 99, 84, 99, 85, 99, 86, 99, 87, 99, 88, 99, 89, 99, 90, 99, 91, 99, 92, 99, 93, 99, 94, 99, 95, 99, 96, 99, 97, 99, 98, 99, 99, 99, 100, 99, 101, 99, 102, 99, 103, 99, 104, 99, 105, 99, 106, 99, 107, 99, 108, 99, 109, 99, 110, 99, 111, 99, 170, 99, 171, 99, 172, 99, 173, 99, 174, 99, 175, 99, 176, 99, 177, 99, 178, 99, 179, 99, 180, 99, 181, 99, 182, 99, 183, 99, 184, 99, 185, 99, 186, 99, 187, 99, 188, 100, 3, 100, 4, 100, 5, 100, 6, 100, 7, 100, 8, 100, 9, 100, 10, 100, 11, 100, 12, 100, 13, 100, 14, 100, 15, 100, 16, 100, 17, 100, 18, 100, 19, 100, 20, 100, 21, 100, 22, 100, 23, 100, 24, 100, 25, 100, 26, 100, 27, 100, 28, 100, 29, 100, 30, 100, 31, 100, 32, 100, 33, 100, 34, 100, 35, 100, 36, 100, 37, 100, 38, 100, 39, 100, 40, 100, 41, 100, 42, 100, 43, 100, 44, 100, 45, 100, 46, 100, 47, 100, 48, 100, 49, 100, 50, 100, 51, 100, 52, 100, 53, 100, 54, 100, 55, 100, 72, 100, 73, 100, 74, 100, 75, 100, 76, 100, 77, 100, 78, 100, 79, 100, 80, 100, 81, 100, 82, 100, 83, 100, 84, 100, 85, 100, 86, 100, 87, 100, 88, 100, 89, 100, 90, 100, 91, 100, 92, 100, 93, 100, 94, 100, 95, 100, 96, 100, 97, 100, 98, 100, 99, 100, 100, 100, 101, 100, 102, 100, 103, 100, 104, 100, 105, 100, 106, 100, 107, 100, 108, 100, 170, 100, 171, 100, 172, 100, 173, 100, 174, 100, 175, 100, 176, 100, 177, 100, 178, 100, 179, 100, 180, 100, 181, 100, 182, 100, 183, 100, 184, 100, 185, 100, 186, 100, 187, 100, 188, 101, 3, 101, 4, 101, 5, 101, 6, 101, 7, 101, 8, 101, 9, 101, 10, 101, 11, 101, 12, 101, 13, 101, 14, 101, 15, 101, 16, 101, 17, 101, 18, 101, 19, 101, 20, 101, 21, 101, 22, 101, 23, 101, 24, 101, 25, 101, 26, 101, 27, 101, 28, 101, 29, 101, 30, 101, 31, 101, 32, 101, 33, 101, 34, 101, 35, 101, 36, 101, 37, 101, 38, 101, 39, 101, 40, 101, 41, 101, 42, 101, 43, 101, 44, 101, 45, 101, 46, 101, 47, 101, 48, 101, 49, 101, 50, 101, 51, 101, 52, 101, 53, 101, 54, 101, 55, 101, 56, 101, 57, 101, 71, 101, 72, 101, 73, 101, 74, 101, 75, 101, 76, 101, 77, 101, 78, 101, 79, 101, 80, 101, 81, 101, 82, 101, 83, 101, 84, 101, 85, 101, 86, 101, 87, 101, 88, 101, 89, 101, 90, 101, 91, 101, 92, 101, 93, 101, 94, 101, 95, 101, 96, 101, 97, 101, 98, 101, 99, 101, 100, 101, 101, 101, 102, 101, 103, 101, 104, 101, 105, 101, 170, 101, 171, 101, 172, 101, 173, 101, 174, 101, 175, 101, 176, 101, 177, 101, 178, 101, 179, 101, 180, 101, 181, 101, 182, 101, 183, 101, 184, 101, 185, 101, 186, 101, 187, 101, 188, 102, 3, 102, 4, 102, 5, 102, 6, 102, 7, 102, 8, 102, 9, 102, 10, 102, 11, 102, 12, 102, 13, 102, 14, 102, 15, 102, 16, 102, 17, 102, 18, 102, 19, 102, 20, 102, 21, 102, 22, 102, 23, 102, 24, 102, 25, 102, 26, 102, 27, 102, 28, 102, 29, 102, 30, 102, 31, 102, 32, 102, 33, 102, 34, 102, 35, 102, 36, 102, 37, 102, 38, 102, 39, 102, 40, 102, 41, 102, 42, 102, 43, 102, 44, 102, 45, 102, 46, 102, 47, 102, 48, 102, 49, 102, 50, 102, 51, 102, 52, 102, 53, 102, 54, 102, 55, 102, 56, 102, 57, 102, 58, 102, 59, 102, 60, 102, 69, 102, 70, 102, 71, 102, 72, 102, 73, 102, 74, 102, 75, 102, 76, 102, 77, 102, 78, 102, 79, 102, 80, 102, 81, 102, 82, 102, 83, 102, 84, 102, 85, 102, 86, 102, 87, 102, 88, 102, 89, 102, 90, 102, 91, 102, 92, 102, 93, 102, 94, 102, 95, 102, 96, 102, 97, 102, 98, 102, 99, 102, 100, 102, 101, 102, 102, 102, 103, 102, 170, 102, 171, 102, 172, 102, 173, 102, 174, 102, 175, 102, 176, 102, 177, 102, 178, 102, 179, 102, 180, 102, 181, 102, 182, 102, 183, 102, 184, 102, 185, 102, 186, 102, 187, 102, 188, 103, 3, 103, 4, 103, 5, 103, 6, 103, 7, 103, 8, 103, 9, 103, 10, 103, 11, 103, 12, 103, 13, 103, 14, 103, 15, 103, 16, 103, 17, 103, 18, 103, 19, 103, 20, 103, 21, 103, 22, 103, 23, 103, 24, 103, 25, 103, 26, 103, 27, 103, 28, 103, 29, 103, 30, 103, 31, 103, 32, 103, 33, 103, 34, 103, 35, 103, 36, 103, 37, 103, 38, 103, 39, 103, 40, 103, 41, 103, 42, 103, 43, 103, 44, 103, 45, 103, 46, 103, 47, 103, 48, 103, 49, 103, 50, 103, 51, 103, 52, 103, 53, 103, 54, 103, 55, 103, 56, 103, 57, 103, 58, 103, 59, 103, 60, 103, 61, 103, 62, 103, 63, 103, 64, 103, 65, 103, 66, 103, 67, 103, 68, 103, 69, 103, 70, 103, 71, 103, 72, 103, 73, 103, 74, 103, 75, 103, 76, 103, 77, 103, 78, 103, 79, 103, 80, 103, 81, 103, 82, 103, 83, 103, 84, 103, 85, 103, 86, 103, 87, 103, 88, 103, 89, 103, 90, 103, 91, 103, 92, 103, 93, 103, 94, 103, 95, 103, 96, 103, 97, 103, 98, 103, 99, 103, 100, 103, 170, 103, 171, 103, 172, 103, 173, 103, 174, 103, 175, 103, 176, 103, 177, 103, 178, 103, 179, 103, 180, 103, 181, 103, 182, 103, 183, 103, 184, 103, 185, 103, 186, 103, 187, 103, 188, 104, 3, 104, 4, 104, 5, 104, 6, 104, 7, 104, 8, 104, 9, 104, 10, 104, 11, 104, 12, 104, 13, 104, 14, 104, 15, 104, 16, 104, 17, 104, 18, 104, 19, 104, 20, 104, 21, 104, 22, 104, 23, 104, 24, 104, 25, 104, 26, 104, 27, 104, 28, 104, 29, 104, 30, 104, 31, 104, 32, 104, 33, 104, 34, 104, 35, 104, 36, 104, 37, 104, 38, 104, 39, 104, 40, 104, 41, 104, 42, 104, 43, 104, 44, 104, 45, 104, 46, 104, 47, 104, 48, 104, 49, 104, 50, 104, 51, 104, 52, 104, 53, 104, 54, 104, 55, 104, 56, 104, 57, 104, 58, 104, 59, 104, 60, 104, 61, 104, 62, 104, 63, 104, 64, 104, 65, 104, 66, 104, 67, 104, 68, 104, 69, 104, 70, 104, 71, 104, 72, 104, 73, 104, 74, 104, 75, 104, 76, 104, 77, 104, 78, 104, 79, 104, 80, 104, 81, 104, 82, 104, 83, 104, 84, 104, 85, 104, 86, 104, 87, 104, 88, 104, 89, 104, 90, 104, 91, 104, 92, 104, 93, 104, 94, 104, 95, 104, 96, 104, 97, 104, 170, 104, 171, 104, 172, 104, 173, 104, 174, 104, 175, 104, 176, 104, 177, 104, 178, 104, 179, 104, 180, 104, 181, 104, 182, 104, 183, 104, 184, 104, 185, 104, 186, 104, 187, 104, 188, 105, 3, 105, 4, 105, 5, 105, 6, 105, 7, 105, 8, 105, 9, 105, 10, 105, 11, 105, 12, 105, 13, 105, 14, 105, 15, 105, 16, 105, 17, 105, 18, 105, 19, 105, 20, 105, 21, 105, 22, 105, 23, 105, 24, 105, 25, 105, 26, 105, 27, 105, 28, 105, 29, 105, 30, 105, 31, 105, 32, 105, 33, 105, 34, 105, 35, 105, 36, 105, 37, 105, 38, 105, 39, 105, 40, 105, 41, 105, 42, 105, 43, 105, 44, 105, 45, 105, 46, 105, 47, 105, 48, 105, 49, 105, 50, 105, 51, 105, 52, 105, 53, 105, 54, 105, 55, 105, 56, 105, 57, 105, 58, 105, 59, 105, 60, 105, 61, 105, 62, 105, 63, 105, 64, 105, 65, 105, 66, 105, 67, 105, 68, 105, 69, 105, 70, 105, 71, 105, 72, 105, 73, 105, 74, 105, 75, 105, 76, 105, 77, 105, 78, 105, 79, 105, 80, 105, 81, 105, 82, 105, 83, 105, 84, 105, 85, 105, 86, 105, 87, 105, 88, 105, 89, 105, 90, 105, 91, 105, 92, 105, 93, 105, 94, 105, 95, 105, 170, 105, 171, 105, 172, 105, 173, 105, 174, 105, 175, 105, 176, 105, 177, 105, 178, 105, 179, 105, 180, 105, 181, 105, 182, 105, 183, 105, 184, 105, 185, 105, 186, 105, 187, 105, 188, 106, 3, 106, 4, 106, 5, 106, 6, 106, 7, 106, 8, 106, 9, 106, 10, 106, 11, 106, 12, 106, 13, 106, 14, 106, 15, 106, 16, 106, 17, 106, 18, 106, 19, 106, 20, 106, 21, 106, 22, 106, 23, 106, 24, 106, 25, 106, 26, 106, 27, 106, 28, 106, 29, 106, 30, 106, 31, 106, 32, 106, 33, 106, 34, 106, 35, 106, 36, 106, 37, 106, 38, 106, 39, 106, 40, 106, 41, 106, 42, 106, 43, 106, 44, 106, 45, 106, 46, 106, 47, 106, 48, 106, 49, 106, 50, 106, 51, 106, 52, 106, 53, 106, 54, 106, 55, 106, 56, 106, 57, 106, 58, 106, 59, 106, 60, 106, 61, 106, 62, 106, 63, 106, 64, 106, 65, 106, 66, 106, 67, 106, 68, 106, 69, 106, 70, 106, 71, 106, 72, 106, 73, 106, 74, 106, 75, 106, 76, 106, 77, 106, 78, 106, 79, 106, 80, 106, 81, 106, 82, 106, 83, 106, 84, 106, 85, 106, 86, 106, 87, 106, 88, 106, 89, 106, 90, 106, 91, 106, 92, 106, 93, 106, 170, 106, 171, 106, 172, 106, 173, 106, 174, 106, 175, 106, 176, 106, 177, 106, 178, 106, 179, 106, 180, 106, 181, 106, 182, 106, 183, 106, 184, 106, 185, 106, 186, 106, 187, 106, 188, 107, 3, 107, 4, 107, 5, 107, 6, 107, 7, 107, 8, 107, 9, 107, 10, 107, 11, 107, 12, 107, 13, 107, 14, 107, 15, 107, 16, 107, 17, 107, 18, 107, 19, 107, 20, 107, 21, 107, 22, 107, 23, 107, 24, 107, 25, 107, 26, 107, 27, 107, 28, 107, 29, 107, 30, 107, 31, 107, 32, 107, 33, 107, 34, 107, 35, 107, 36, 107, 37, 107, 38, 107, 39, 107, 40, 107, 41, 107, 42, 107, 43, 107, 44, 107, 45, 107, 46, 107, 47, 107, 48, 107, 49, 107, 50, 107, 51, 107, 52, 107, 53, 107, 54, 107, 55, 107, 56, 107, 57, 107, 58, 107, 59, 107, 60, 107, 61, 107, 62, 107, 63, 107, 64, 107, 65, 107, 66, 107, 67, 107, 68, 107, 69, 107, 70, 107, 71, 107, 72, 107, 73, 107, 74, 107, 75, 107, 76, 107, 77, 107, 78, 107, 79, 107, 80, 107, 81, 107, 82, 107, 83, 107, 84, 107, 85, 107, 86, 107, 87, 107, 88, 107, 89, 107, 90, 107, 170, 107, 171, 107, 172, 107, 173, 107, 174, 107, 175, 107, 176, 107, 177, 107, 178, 107, 179, 107, 180, 107, 181, 107, 182, 107, 183, 107, 184, 107, 185, 107, 186, 107, 187, 107, 188, 108, 3, 108, 4, 108, 5, 108, 6, 108, 7, 108, 8, 108, 9, 108, 10, 108, 11, 108, 12, 108, 13, 108, 14, 108, 15, 108, 16, 108, 17, 108, 18, 108, 19, 108, 20, 108, 21, 108, 22, 108, 23, 108, 24, 108, 25, 108, 26, 108, 27, 108, 28, 108, 29, 108, 30, 108, 31, 108, 32, 108, 33, 108, 34, 108, 35, 108, 36, 108, 37, 108, 38, 108, 39, 108, 40, 108, 41, 108, 42, 108, 43, 108, 44, 108, 45, 108, 46, 108, 47, 108, 48, 108, 49, 108, 50, 108, 51, 108, 52, 108, 53, 108, 54, 108, 55, 108, 56, 108, 57, 108, 58, 108, 59, 108, 60, 108, 61, 108, 62, 108, 63, 108, 64, 108, 65, 108, 66, 108, 67, 108, 68, 108, 69, 108, 70, 108, 71, 108, 72, 108, 73, 108, 74, 108, 75, 108, 76, 108, 77, 108, 78, 108, 79, 108, 80, 108, 81, 108, 82, 108, 83, 108, 84, 108, 85, 108, 86, 108, 87, 108, 88, 108, 89, 108, 170, 108, 171, 108, 172, 108, 173, 108, 174, 108, 175, 108, 176, 108, 177, 108, 178, 108, 179, 108, 180, 108, 181, 108, 182, 108, 183, 108, 184, 108, 185, 108, 186, 108, 187, 108, 188, 109, 3, 109, 4, 109, 5, 109, 6, 109, 7, 109, 8, 109, 9, 109, 10, 109, 11, 109, 12, 109, 13, 109, 14, 109, 15, 109, 16, 109, 17, 109, 18, 109, 19, 109, 20, 109, 21, 109, 22, 109, 23, 109, 24, 109, 25, 109, 26, 109, 27, 109, 28, 109, 29, 109, 30, 109, 31, 109, 32, 109, 33, 109, 34, 109, 35, 109, 36, 109, 37, 109, 38, 109, 39, 109, 40, 109, 41, 109, 42, 109, 43, 109, 44, 109, 45, 109, 46, 109, 47, 109, 48, 109, 49, 109, 50, 109, 51, 109, 52, 109, 53, 109, 54, 109, 55, 109, 56, 109, 57, 109, 58, 109, 59, 109, 60, 109, 61, 109, 62, 109, 63, 109, 64, 109, 65, 109, 66, 109, 67, 109, 68, 109, 69, 109, 70, 109, 71, 109, 72, 109, 73, 109, 74, 109, 75, 109, 76, 109, 77, 109, 78, 109, 79, 109, 80, 109, 81, 109, 82, 109, 83, 109, 84, 109, 85, 109, 86, 109, 87, 109, 88, 109, 170, 109, 171, 109, 172, 109, 173, 109, 174, 109, 175, 109, 176, 109, 177, 109, 178, 109, 179, 109, 180, 109, 181, 109, 182, 109, 183, 109, 184, 109, 185, 109, 186, 109, 187, 109, 188, 110, 3, 110, 4, 110, 5, 110, 6, 110, 7, 110, 8, 110, 9, 110, 10, 110, 11, 110, 12, 110, 13, 110, 14, 110, 15, 110, 16, 110, 17, 110, 18, 110, 19, 110, 20, 110, 21, 110, 22, 110, 23, 110, 24, 110, 25, 110, 26, 110, 27, 110, 28, 110, 29, 110, 30, 110, 31, 110, 32, 110, 33, 110, 34, 110, 35, 110, 36, 110, 37, 110, 38, 110, 39, 110, 40, 110, 41, 110, 42, 110, 43, 110, 44, 110, 45, 110, 46, 110, 47, 110, 48, 110, 49, 110, 50, 110, 51, 110, 52, 110, 53, 110, 54, 110, 55, 110, 56, 110, 57, 110, 58, 110, 59, 110, 60, 110, 61, 110, 62, 110, 63, 110, 64, 110, 65, 110, 66, 110, 67, 110, 68, 110, 69, 110, 70, 110, 71, 110, 72, 110, 73, 110, 74, 110, 75, 110, 76, 110, 77, 110, 78, 110, 79, 110, 80, 110, 81, 110, 82, 110, 83, 110, 84, 110, 85, 110, 86, 110, 87, 110, 170, 110, 171, 110, 172, 110, 173, 110, 174, 110, 175, 110, 176, 110, 177, 110, 178, 110, 179, 110, 180, 110, 181, 110, 182, 110, 183, 110, 184, 110, 185, 110, 186, 110, 187, 110, 188, 111, 3, 111, 4, 111, 5, 111, 6, 111, 7, 111, 8, 111, 9, 111, 10, 111, 11, 111, 12, 111, 13, 111, 14, 111, 15, 111, 16, 111, 17, 111, 18, 111, 19, 111, 20, 111, 21, 111, 22, 111, 23, 111, 24, 111, 25, 111, 26, 111, 27, 111, 28, 111, 29, 111, 30, 111, 31, 111, 32, 111, 33, 111, 34, 111, 35, 111, 36, 111, 37, 111, 38, 111, 39, 111, 40, 111, 41, 111, 42, 111, 43, 111, 44, 111, 45, 111, 46, 111, 47, 111, 48, 111, 49, 111, 50, 111, 51, 111, 52, 111, 53, 111, 54, 111, 55, 111, 56, 111, 57, 111, 58, 111, 59, 111, 60, 111, 61, 111, 62, 111, 63, 111, 64, 111, 65, 111, 66, 111, 67, 111, 68, 111, 69, 111, 70, 111, 71, 111, 72, 111, 73, 111, 74, 111, 75, 111, 76, 111, 77, 111, 78, 111, 79, 111, 80, 111, 81, 111, 82, 111, 83, 111, 84, 111, 85, 111, 170, 111, 171, 111, 172, 111, 173, 111, 174, 111, 175, 111, 176, 111, 177, 111, 178, 111, 179, 111, 180, 111, 181, 111, 182, 111, 183, 111, 184, 111, 185, 111, 186, 111, 187, 111, 188, 112, 3, 112, 4, 112, 5, 112, 6, 112, 7, 112, 8, 112, 9, 112, 10, 112, 11, 112, 12, 112, 13, 112, 14, 112, 15, 112, 16, 112, 17, 112, 18, 112, 19, 112, 20, 112, 21, 112, 22, 112, 23, 112, 24, 112, 25, 112, 26, 112, 27, 112, 28, 112, 29, 112, 30, 112, 31, 112, 32, 112, 33, 112, 34, 112, 35, 112, 36, 112, 37, 112, 38, 112, 39, 112, 40, 112, 41, 112, 42, 112, 43, 112, 44, 112, 45, 112, 46, 112, 47, 112, 48, 112, 49, 112, 50, 112, 51, 112, 52, 112, 53, 112, 54, 112, 55, 112, 56, 112, 57, 112, 58, 112, 59, 112, 60, 112, 61, 112, 62, 112, 63, 112, 64, 112, 65, 112, 66, 112, 67, 112, 68, 112, 69, 112, 70, 112, 71, 112, 72, 112, 73, 112, 74, 112, 75, 112, 76, 112, 77, 112, 78, 112, 79, 112, 80, 112, 81, 112, 82, 112, 83, 112, 84, 112, 170, 112, 171, 112, 172, 112, 173, 112, 174, 112, 175, 112, 176, 112, 177, 112, 178, 112, 179, 112, 180, 112, 181, 112, 182, 112, 183, 112, 184, 112, 185, 112, 186, 112, 187, 112, 188, 113, 3, 113, 4, 113, 5, 113, 6, 113, 7, 113, 8, 113, 9, 113, 10, 113, 11, 113, 12, 113, 13, 113, 14, 113, 15, 113, 16, 113, 17, 113, 18, 113, 19, 113, 20, 113, 21, 113, 22, 113, 23, 113, 24, 113, 25, 113, 26, 113, 27, 113, 28, 113, 29, 113, 30, 113, 31, 113, 32, 113, 33, 113, 34, 113, 35, 113, 36, 113, 37, 113, 38, 113, 39, 113, 40, 113, 41, 113, 42, 113, 43, 113, 44, 113, 45, 113, 46, 113, 47, 113, 48, 113, 49, 113, 50, 113, 51, 113, 52, 113, 53, 113, 54, 113, 55, 113, 56, 113, 57, 113, 58, 113, 59, 113, 60, 113, 61, 113, 62, 113, 63, 113, 64, 113, 65, 113, 66, 113, 67, 113, 68, 113, 69, 113, 70, 113, 71, 113, 72, 113, 73, 113, 74, 113, 75, 113, 76, 113, 77, 113, 78, 113, 79, 113, 80, 113, 81, 113, 82, 113, 83, 113, 170, 113, 171, 113, 172, 113, 173, 113, 174, 113, 175, 113, 176, 113, 177, 113, 178, 113, 179, 113, 180, 113, 181, 113, 182, 113, 183, 113, 184, 113, 185, 113, 186, 113, 187, 113, 188, 114, 3, 114, 4, 114, 5, 114, 6, 114, 7, 114, 8, 114, 9, 114, 10, 114, 11, 114, 12, 114, 13, 114, 14, 114, 15, 114, 16, 114, 17, 114, 18, 114, 19, 114, 20, 114, 21, 114, 22, 114, 23, 114, 24, 114, 25, 114, 26, 114, 27, 114, 28, 114, 29, 114, 30, 114, 31, 114, 32, 114, 33, 114, 34, 114, 35, 114, 36, 114, 37, 114, 38, 114, 39, 114, 40, 114, 41, 114, 42, 114, 43, 114, 44, 114, 45, 114, 46, 114, 47, 114, 48, 114, 49, 114, 50, 114, 51, 114, 52, 114, 53, 114, 54, 114, 55, 114, 56, 114, 57, 114, 58, 114, 59, 114, 60, 114, 61, 114, 62, 114, 63, 114, 64, 114, 65, 114, 66, 114, 67, 114, 68, 114, 69, 114, 70, 114, 71, 114, 72, 114, 73, 114, 74, 114, 75, 114, 76, 114, 77, 114, 78, 114, 79, 114, 80, 114, 81, 114, 82, 114, 170, 114, 171, 114, 172, 114, 173, 114, 174, 114, 175, 114, 176, 114, 177, 114, 178, 114, 179, 114, 180, 114, 181, 114, 182, 114, 183, 114, 184, 114, 185, 114, 186, 114, 187, 114, 188, 115, 3, 115, 4, 115, 5, 115, 6, 115, 7, 115, 8, 115, 9, 115, 10, 115, 11, 115, 12, 115, 13, 115, 14, 115, 15, 115, 16, 115, 17, 115, 18, 115, 19, 115, 20, 115, 21, 115, 22, 115, 23, 115, 24, 115, 25, 115, 26, 115, 27, 115, 28, 115, 29, 115, 30, 115, 31, 115, 32, 115, 33, 115, 34, 115, 35, 115, 36, 115, 37, 115, 38, 115, 39, 115, 40, 115, 41, 115, 42, 115, 43, 115, 44, 115, 45, 115, 46, 115, 47, 115, 48, 115, 49, 115, 50, 115, 51, 115, 52, 115, 53, 115, 54, 115, 55, 115, 56, 115, 57, 115, 58, 115, 59, 115, 60, 115, 61, 115, 62, 115, 63, 115, 64, 115, 65, 115, 66, 115, 67, 115, 68, 115, 69, 115, 70, 115, 71, 115, 72, 115, 73, 115, 74, 115, 75, 115, 76, 115, 77, 115, 78, 115, 79, 115, 80, 115, 81, 115, 170, 115, 171, 115, 172, 115, 173, 115, 174, 115, 175, 115, 176, 115, 177, 115, 178, 115, 179, 115, 180, 115, 181, 115, 182, 115, 183, 115, 184, 115, 185, 115, 186, 115, 187, 115, 188, 116, 3, 116, 4, 116, 5, 116, 6, 116, 7, 116, 8, 116, 9, 116, 10, 116, 11, 116, 12, 116, 13, 116, 14, 116, 15, 116, 16, 116, 17, 116, 18, 116, 19, 116, 20, 116, 21, 116, 22, 116, 23, 116, 24, 116, 25, 116, 26, 116, 27, 116, 28, 116, 29, 116, 30, 116, 31, 116, 32, 116, 33, 116, 34, 116, 35, 116, 36, 116, 37, 116, 38, 116, 39, 116, 40, 116, 41, 116, 42, 116, 43, 116, 44, 116, 45, 116, 46, 116, 47, 116, 48, 116, 49, 116, 50, 116, 51, 116, 52, 116, 53, 116, 54, 116, 55, 116, 56, 116, 57, 116, 58, 116, 59, 116, 60, 116, 61, 116, 62, 116, 63, 116, 64, 116, 65, 116, 66, 116, 67, 116, 68, 116, 69, 116, 70, 116, 71, 116, 72, 116, 73, 116, 74, 116, 75, 116, 76, 116, 77, 116, 78, 116, 79, 116, 170, 116, 171, 116, 172, 116, 173, 116, 174, 116, 175, 116, 176, 116, 177, 116, 178, 116, 179, 116, 180, 116, 181, 116, 182, 116, 183, 116, 184, 116, 185, 116, 186, 116, 187, 116, 188, 117, 3, 117, 4, 117, 5, 117, 6, 117, 7, 117, 8, 117, 9, 117, 10, 117, 11, 117, 12, 117, 13, 117, 14, 117, 15, 117, 16, 117, 17, 117, 18, 117, 19, 117, 20, 117, 21, 117, 22, 117, 23, 117, 24, 117, 25, 117, 26, 117, 27, 117, 28, 117, 29, 117, 30, 117, 31, 117, 32, 117, 33, 117, 34, 117, 35, 117, 36, 117, 37, 117, 38, 117, 39, 117, 40, 117, 41, 117, 42, 117, 43, 117, 44, 117, 45, 117, 46, 117, 47, 117, 48, 117, 49, 117, 50, 117, 51, 117, 52, 117, 53, 117, 54, 117, 55, 117, 56, 117, 57, 117, 58, 117, 59, 117, 60, 117, 61, 117, 62, 117, 63, 117, 64, 117, 65, 117, 66, 117, 67, 117, 68, 117, 69, 117, 70, 117, 71, 117, 72, 117, 73, 117, 74, 117, 75, 117, 76, 117, 77, 117, 78, 117, 170, 117, 171, 117, 172, 117, 173, 117, 174, 117, 175, 117, 176, 117, 177, 117, 178, 117, 179, 117, 180, 117, 181, 117, 182, 117, 183, 117, 184, 117, 185, 117, 186, 117, 187, 117, 188, 118, 3, 118, 4, 118, 5, 118, 6, 118, 7, 118, 8, 118, 9, 118, 10, 118, 11, 118, 12, 118, 13, 118, 14, 118, 15, 118, 16, 118, 17, 118, 18, 118, 19, 118, 20, 118, 21, 118, 22, 118, 23, 118, 24, 118, 25, 118, 26, 118, 27, 118, 28, 118, 29, 118, 30, 118, 31, 118, 32, 118, 33, 118, 34, 118, 35, 118, 36, 118, 37, 118, 38, 118, 39, 118, 40, 118, 41, 118, 42, 118, 43, 118, 44, 118, 45, 118, 46, 118, 47, 118, 48, 118, 49, 118, 50, 118, 51, 118, 52, 118, 53, 118, 54, 118, 55, 118, 56, 118, 57, 118, 58, 118, 59, 118, 60, 118, 61, 118, 62, 118, 63, 118, 64, 118, 65, 118, 66, 118, 67, 118, 68, 118, 69, 118, 70, 118, 71, 118, 72, 118, 73, 118, 74, 118, 75, 118, 76, 118, 77, 118, 170, 118, 171, 118, 172, 118, 173, 118, 174, 118, 175, 118, 176, 118, 177, 118, 178, 118, 179, 118, 180, 118, 181, 118, 182, 118, 183, 118, 184, 118, 185, 118, 186, 118, 187, 118, 188, 119, 3, 119, 4, 119, 5, 119, 6, 119, 7, 119, 8, 119, 9, 119, 10, 119, 11, 119, 12, 119, 13, 119, 14, 119, 15, 119, 16, 119, 17, 119, 18, 119, 19, 119, 20, 119, 21, 119, 22, 119, 23, 119, 24, 119, 25, 119, 26, 119, 27, 119, 28, 119, 29, 119, 30, 119, 31, 119, 32, 119, 33, 119, 34, 119, 35, 119, 36, 119, 37, 119, 38, 119, 39, 119, 40, 119, 41, 119, 42, 119, 43, 119, 44, 119, 45, 119, 46, 119, 47, 119, 48, 119, 49, 119, 50, 119, 51, 119, 52, 119, 53, 119, 54, 119, 55, 119, 56, 119, 57, 119, 58, 119, 59, 119, 60, 119, 61, 119, 62, 119, 63, 119, 64, 119, 65, 119, 66, 119, 67, 119, 68, 119, 69, 119, 70, 119, 71, 119, 72, 119, 73, 119, 74, 119, 75, 119, 76, 119, 77, 119, 170, 119, 171, 119, 172, 119, 173, 119, 174, 119, 175, 119, 176, 119, 177, 119, 178, 119, 179, 119, 180, 119, 181, 119, 182, 119, 183, 119, 184, 119, 185, 119, 186, 119, 187, 119, 188, 120, 3, 120, 4, 120, 5, 120, 6, 120, 7, 120, 8, 120, 9, 120, 10, 120, 11, 120, 12, 120, 13, 120, 14, 120, 15, 120, 16, 120, 17, 120, 18, 120, 19, 120, 20, 120, 21, 120, 22, 120, 23, 120, 24, 120, 25, 120, 26, 120, 27, 120, 28, 120, 29, 120, 30, 120, 31, 120, 32, 120, 33, 120, 34, 120, 35, 120, 36, 120, 37, 120, 38, 120, 39, 120, 40, 120, 41, 120, 42, 120, 43, 120, 44, 120, 45, 120, 46, 120, 47, 120, 48, 120, 49, 120, 50, 120, 51, 120, 52, 120, 53, 120, 54, 120, 55, 120, 56, 120, 57, 120, 58, 120, 59, 120, 60, 120, 61, 120, 62, 120, 63, 120, 64, 120, 65, 120, 66, 120, 67, 120, 68, 120, 69, 120, 70, 120, 71, 120, 72, 120, 73, 120, 74, 120, 75, 120, 76, 120, 170, 120, 171, 120, 172, 120, 173, 120, 174, 120, 175, 120, 176, 120, 177, 120, 178, 120, 179, 120, 180, 120, 181, 120, 182, 120, 183, 120, 184, 120, 185, 120, 186, 120, 187, 120, 188, 121, 3, 121, 4, 121, 5, 121, 6, 121, 7, 121, 8, 121, 9, 121, 10, 121, 11, 121, 12, 121, 13, 121, 14, 121, 15, 121, 16, 121, 17, 121, 18, 121, 19, 121, 20, 121, 21, 121, 22, 121, 23, 121, 24, 121, 25, 121, 26, 121, 27, 121, 28, 121, 29, 121, 30, 121, 31, 121, 32, 121, 33, 121, 34, 121, 35, 121, 36, 121, 37, 121, 38, 121, 39, 121, 40, 121, 41, 121, 42, 121, 43, 121, 44, 121, 45, 121, 46, 121, 47, 121, 48, 121, 49, 121, 50, 121, 51, 121, 52, 121, 53, 121, 54, 121, 55, 121, 56, 121, 57, 121, 58, 121, 59, 121, 60, 121, 61, 121, 62, 121, 63, 121, 64, 121, 65, 121, 66, 121, 67, 121, 68, 121, 69, 121, 70, 121, 71, 121, 72, 121, 73, 121, 74, 121, 75, 121, 170, 121, 171, 121, 172, 121, 173, 121, 174, 121, 175, 121, 176, 121, 177, 121, 178, 121, 179, 121, 180, 121, 181, 121, 182, 121, 183, 121, 184, 121, 185, 121, 186, 121, 187, 121, 188, 122, 3, 122, 4, 122, 5, 122, 6, 122, 7, 122, 8, 122, 9, 122, 10, 122, 11, 122, 12, 122, 13, 122, 14, 122, 15, 122, 16, 122, 17, 122, 18, 122, 19, 122, 20, 122, 21, 122, 22, 122, 23, 122, 24, 122, 25, 122, 26, 122, 27, 122, 28, 122, 29, 122, 30, 122, 31, 122, 32, 122, 33, 122, 34, 122, 35, 122, 36, 122, 37, 122, 38, 122, 39, 122, 40, 122, 41, 122, 42, 122, 43, 122, 44, 122, 45, 122, 46, 122, 47, 122, 48, 122, 49, 122, 50, 122, 51, 122, 52, 122, 53, 122, 54, 122, 55, 122, 56, 122, 57, 122, 58, 122, 59, 122, 60, 122, 61, 122, 62, 122, 63, 122, 64, 122, 65, 122, 66, 122, 67, 122, 68, 122, 69, 122, 70, 122, 71, 122, 72, 122, 73, 122, 74, 122, 75, 122, 171, 122, 172, 122, 173, 122, 174, 122, 175, 122, 176, 122, 177, 122, 178, 122, 179, 122, 180, 122, 181, 122, 182, 122, 183, 122, 184, 122, 185, 122, 186, 122, 187, 122, 188, 123, 3, 123, 4, 123, 5, 123, 6, 123, 7, 123, 8, 123, 9, 123, 10, 123, 11, 123, 12, 123, 13, 123, 14, 123, 15, 123, 16, 123, 17, 123, 18, 123, 19, 123, 20, 123, 21, 123, 22, 123, 23, 123, 24, 123, 25, 123, 26, 123, 27, 123, 28, 123, 29, 123, 30, 123, 31, 123, 32, 123, 33, 123, 34, 123, 35, 123, 36, 123, 37, 123, 38, 123, 39, 123, 40, 123, 41, 123, 42, 123, 43, 123, 44, 123, 45, 123, 46, 123, 47, 123, 48, 123, 49, 123, 50, 123, 51, 123, 52, 123, 53, 123, 54, 123, 55, 123, 56, 123, 57, 123, 58, 123, 59, 123, 60, 123, 61, 123, 62, 123, 63, 123, 64, 123, 65, 123, 66, 123, 67, 123, 68, 123, 69, 123, 70, 123, 71, 123, 72, 123, 73, 123, 74, 123, 171, 123, 172, 123, 173, 123, 174, 123, 175, 123, 176, 123, 177, 123, 178, 123, 179, 123, 180, 123, 181, 123, 182, 123, 183, 123, 184, 123, 185, 123, 186, 123, 187, 123, 188, 124, 3, 124, 4, 124, 5, 124, 6, 124, 7, 124, 8, 124, 9, 124, 10, 124, 11, 124, 12, 124, 13, 124, 14, 124, 15, 124, 16, 124, 17, 124, 18, 124, 19, 124, 20, 124, 21, 124, 22, 124, 23, 124, 24, 124, 25, 124, 26, 124, 27, 124, 28, 124, 29, 124, 30, 124, 31, 124, 32, 124, 33, 124, 34, 124, 35, 124, 36, 124, 37, 124, 38, 124, 39, 124, 40, 124, 41, 124, 42, 124, 43, 124, 44, 124, 45, 124, 46, 124, 47, 124, 48, 124, 49, 124, 50, 124, 51, 124, 52, 124, 53, 124, 54, 124, 55, 124, 56, 124, 57, 124, 58, 124, 59, 124, 60, 124, 61, 124, 62, 124, 63, 124, 64, 124, 65, 124, 66, 124, 67, 124, 68, 124, 69, 124, 70, 124, 71, 124, 72, 124, 73, 124, 74, 124, 171, 124, 172, 124, 173, 124, 174, 124, 175, 124, 176, 124, 177, 124, 178, 124, 179, 124, 180, 124, 181, 124, 182, 124, 183, 124, 184, 124, 185, 124, 186, 124, 187, 124, 188, 125, 3, 125, 4, 125, 5, 125, 6, 125, 7, 125, 8, 125, 9, 125, 10, 125, 11, 125, 12, 125, 13, 125, 14, 125, 15, 125, 16, 125, 17, 125, 18, 125, 19, 125, 20, 125, 21, 125, 22, 125, 23, 125, 24, 125, 25, 125, 26, 125, 27, 125, 28, 125, 29, 125, 30, 125, 31, 125, 32, 125, 33, 125, 34, 125, 35, 125, 36, 125, 37, 125, 38, 125, 39, 125, 40, 125, 41, 125, 42, 125, 43, 125, 44, 125, 45, 125, 46, 125, 47, 125, 48, 125, 49, 125, 50, 125, 51, 125, 52, 125, 53, 125, 54, 125, 55, 125, 56, 125, 57, 125, 58, 125, 59, 125, 60, 125, 61, 125, 62, 125, 63, 125, 64, 125, 65, 125, 66, 125, 67, 125, 68, 125, 69, 125, 70, 125, 71, 125, 72, 125, 73, 125, 74, 125, 171, 125, 172, 125, 173, 125, 174, 125, 175, 125, 176, 125, 177, 125, 178, 125, 179, 125, 180, 125, 181, 125, 182, 125, 183, 125, 184, 125, 185, 125, 186, 125, 187, 125, 188, 126, 3, 126, 4, 126, 5, 126, 6, 126, 7, 126, 8, 126, 9, 126, 10, 126, 11, 126, 12, 126, 13, 126, 14, 126, 15, 126, 16, 126, 17, 126, 18, 126, 19, 126, 20, 126, 21, 126, 22, 126, 23, 126, 24, 126, 25, 126, 26, 126, 27, 126, 28, 126, 29, 126, 30, 126, 31, 126, 32, 126, 33, 126, 34, 126, 35, 126, 36, 126, 37, 126, 38, 126, 39, 126, 40, 126, 41, 126, 42, 126, 43, 126, 44, 126, 45, 126, 46, 126, 47, 126, 48, 126, 49, 126, 50, 126, 51, 126, 52, 126, 53, 126, 54, 126, 55, 126, 56, 126, 57, 126, 58, 126, 59, 126, 60, 126, 61, 126, 62, 126, 63, 126, 64, 126, 65, 126, 66, 126, 67, 126, 68, 126, 69, 126, 70, 126, 71, 126, 72, 126, 73, 126, 171, 126, 172, 126, 173, 126, 174, 126, 175, 126, 176, 126, 177, 126, 178, 126, 179, 126, 180, 126, 181, 126, 182, 126, 183, 126, 184, 126, 185, 126, 186, 126, 187, 126, 188, 127, 3, 127, 4, 127, 5, 127, 6, 127, 7, 127, 8, 127, 9, 127, 10, 127, 11, 127, 12, 127, 13, 127, 14, 127, 15, 127, 16, 127, 17, 127, 18, 127, 19, 127, 20, 127, 21, 127, 22, 127, 23, 127, 24, 127, 25, 127, 26, 127, 27, 127, 28, 127, 29, 127, 30, 127, 31, 127, 32, 127, 33, 127, 34, 127, 35, 127, 36, 127, 37, 127, 38, 127, 39, 127, 40, 127, 41, 127, 42, 127, 43, 127, 44, 127, 45, 127, 46, 127, 47, 127, 48, 127, 49, 127, 50, 127, 51, 127, 52, 127, 53, 127, 54, 127, 55, 127, 56, 127, 57, 127, 58, 127, 59, 127, 60, 127, 61, 127, 62, 127, 63, 127, 64, 127, 65, 127, 66, 127, 67, 127, 68, 127, 69, 127, 70, 127, 71, 127, 72, 127, 73, 127, 171, 127, 172, 127, 173, 127, 174, 127, 175, 127, 176, 127, 177, 127, 178, 127, 179, 127, 180, 127, 181, 127, 182, 127, 183, 127, 184, 127, 185, 127, 186, 127, 187, 127, 188, 128, 3, 128, 4, 128, 5, 128, 6, 128, 7, 128, 8, 128, 9, 128, 10, 128, 11, 128, 12, 128, 13, 128, 14, 128, 15, 128, 16, 128, 17, 128, 18, 128, 19, 128, 20, 128, 21, 128, 22, 128, 23, 128, 24, 128, 25, 128, 26, 128, 27, 128, 28, 128, 29, 128, 30, 128, 31, 128, 32, 128, 33, 128, 34, 128, 35, 128, 36, 128, 37, 128, 38, 128, 39, 128, 40, 128, 41, 128, 42, 128, 43, 128, 44, 128, 45, 128, 46, 128, 47, 128, 48, 128, 49, 128, 50, 128, 51, 128, 52, 128, 53, 128, 54, 128, 55, 128, 56, 128, 57, 128, 58, 128, 59, 128, 60, 128, 61, 128, 62, 128, 63, 128, 64, 128, 65, 128, 66, 128, 67, 128, 68, 128, 69, 128, 70, 128, 71, 128, 72, 128, 73, 128, 171, 128, 172, 128, 173, 128, 174, 128, 175, 128, 176, 128, 177, 128, 178, 128, 179, 128, 180, 128, 181, 128, 182, 128, 183, 128, 184, 128, 185, 128, 186, 128, 187, 128, 188, 129, 3, 129, 4, 129, 5, 129, 6, 129, 7, 129, 8, 129, 9, 129, 10, 129, 11, 129, 12, 129, 13, 129, 14, 129, 15, 129, 16, 129, 17, 129, 18, 129, 19, 129, 20, 129, 21, 129, 22, 129, 23, 129, 24, 129, 25, 129, 26, 129, 27, 129, 28, 129, 29, 129, 30, 129, 31, 129, 32, 129, 33, 129, 34, 129, 35, 129, 36, 129, 37, 129, 38, 129, 39, 129, 40, 129, 41, 129, 42, 129, 43, 129, 44, 129, 45, 129, 46, 129, 47, 129, 48, 129, 49, 129, 50, 129, 51, 129, 52, 129, 53, 129, 54, 129, 55, 129, 56, 129, 57, 129, 58, 129, 59, 129, 60, 129, 61, 129, 62, 129, 63, 129, 64, 129, 65, 129, 66, 129, 67, 129, 68, 129, 69, 129, 70, 129, 71, 129, 72, 129, 171, 129, 172, 129, 173, 129, 174, 129, 175, 129, 176, 129, 177, 129, 178, 129, 179, 129, 180, 129, 181, 129, 182, 129, 183, 129, 184, 129, 185, 129, 186, 129, 187, 129, 188, 130, 3, 130, 4, 130, 5, 130, 6, 130, 7, 130, 8, 130, 9, 130, 10, 130, 11, 130, 12, 130, 13, 130, 14, 130, 15, 130, 16, 130, 17, 130, 18, 130, 19, 130, 20, 130, 21, 130, 22, 130, 23, 130, 24, 130, 25, 130, 26, 130, 27, 130, 28, 130, 29, 130, 30, 130, 31, 130, 32, 130, 33, 130, 34, 130, 35, 130, 36, 130, 37, 130, 38, 130, 39, 130, 40, 130, 41, 130, 42, 130, 43, 130, 44, 130, 45, 130, 46, 130, 47, 130, 48, 130, 49, 130, 50, 130, 51, 130, 52, 130, 53, 130, 54, 130, 55, 130, 56, 130, 57, 130, 58, 130, 59, 130, 60, 130, 61, 130, 62, 130, 63, 130, 64, 130, 65, 130, 66, 130, 67, 130, 68, 130, 69, 130, 70, 130, 71, 130, 72, 130, 171, 130, 172, 130, 173, 130, 174, 130, 175, 130, 176, 130, 177, 130, 178, 130, 179, 130, 180, 130, 181, 130, 182, 130, 183, 130, 184, 130, 185, 130, 186, 130, 187, 130, 188, 131, 3, 131, 4, 131, 5, 131, 6, 131, 7, 131, 8, 131, 9, 131, 10, 131, 11, 131, 12, 131, 13, 131, 14, 131, 15, 131, 16, 131, 17, 131, 18, 131, 19, 131, 20, 131, 21, 131, 22, 131, 23, 131, 24, 131, 25, 131, 26, 131, 27, 131, 28, 131, 29, 131, 30, 131, 31, 131, 32, 131, 33, 131, 34, 131, 35, 131, 36, 131, 37, 131, 38, 131, 39, 131, 40, 131, 41, 131, 42, 131, 43, 131, 44, 131, 45, 131, 46, 131, 47, 131, 48, 131, 49, 131, 50, 131, 51, 131, 52, 131, 53, 131, 54, 131, 55, 131, 56, 131, 57, 131, 58, 131, 59, 131, 60, 131, 61, 131, 62, 131, 63, 131, 64, 131, 65, 131, 66, 131, 67, 131, 68, 131, 69, 131, 70, 131, 71, 131, 171, 131, 172, 131, 173, 131, 174, 131, 175, 131, 176, 131, 177, 131, 178, 131, 179, 131, 180, 131, 181, 131, 182, 131, 183, 131, 184, 131, 185, 131, 186, 131, 187, 131, 188, 132, 3, 132, 4, 132, 5, 132, 6, 132, 7, 132, 8, 132, 9, 132, 10, 132, 11, 132, 12, 132, 13, 132, 14, 132, 15, 132, 16, 132, 17, 132, 18, 132, 19, 132, 20, 132, 21, 132, 22, 132, 23, 132, 24, 132, 25, 132, 26, 132, 27, 132, 28, 132, 29, 132, 30, 132, 31, 132, 32, 132, 33, 132, 34, 132, 35, 132, 36, 132, 37, 132, 38, 132, 39, 132, 40, 132, 41, 132, 42, 132, 43, 132, 44, 132, 45, 132, 46, 132, 47, 132, 48, 132, 49, 132, 50, 132, 51, 132, 52, 132, 53, 132, 54, 132, 55, 132, 56, 132, 57, 132, 58, 132, 59, 132, 60, 132, 61, 132, 62, 132, 63, 132, 64, 132, 65, 132, 66, 132, 67, 132, 68, 132, 69, 132, 70, 132, 171, 132, 172, 132, 173, 132, 174, 132, 175, 132, 176, 132, 177, 132, 178, 132, 179, 132, 180, 132, 181, 132, 182, 132, 183, 132, 184, 132, 185, 132, 186, 132, 187, 132, 188, 133, 3, 133, 4, 133, 5, 133, 6, 133, 7, 133, 8, 133, 9, 133, 10, 133, 11, 133, 12, 133, 13, 133, 14, 133, 15, 133, 16, 133, 17, 133, 18, 133, 19, 133, 20, 133, 21, 133, 22, 133, 23, 133, 24, 133, 25, 133, 26, 133, 27, 133, 28, 133, 29, 133, 30, 133, 31, 133, 32, 133, 33, 133, 34, 133, 35, 133, 36, 133, 37, 133, 38, 133, 39, 133, 40, 133, 41, 133, 42, 133, 43, 133, 44, 133, 45, 133, 46, 133, 47, 133, 48, 133, 49, 133, 50, 133, 51, 133, 52, 133, 53, 133, 54, 133, 55, 133, 56, 133, 57, 133, 58, 133, 59, 133, 60, 133, 61, 133, 62, 133, 63, 133, 64, 133, 65, 133, 66, 133, 67, 133, 68, 133, 69, 133, 70, 133, 171, 133, 172, 133, 173, 133, 174, 133, 175, 133, 176, 133, 177, 133, 178, 133, 179, 133, 180, 133, 181, 133, 182, 133, 183, 133, 184, 133, 185, 133, 186, 133, 187, 133, 188, 134, 3, 134, 4, 134, 5, 134, 6, 134, 7, 134, 8, 134, 9, 134, 10, 134, 11, 134, 12, 134, 13, 134, 14, 134, 15, 134, 16, 134, 17, 134, 18, 134, 19, 134, 20, 134, 21, 134, 22, 134, 23, 134, 24, 134, 25, 134, 26, 134, 27, 134, 28, 134, 29, 134, 30, 134, 31, 134, 32, 134, 33, 134, 34, 134, 35, 134, 36, 134, 37, 134, 38, 134, 39, 134, 40, 134, 41, 134, 42, 134, 43, 134, 44, 134, 45, 134, 46, 134, 47, 134, 48, 134, 49, 134, 50, 134, 51, 134, 52, 134, 53, 134, 54, 134, 55, 134, 56, 134, 57, 134, 58, 134, 59, 134, 60, 134, 61, 134, 62, 134, 63, 134, 64, 134, 65, 134, 66, 134, 67, 134, 68, 134, 69, 134, 171, 134, 172, 134, 173, 134, 174, 134, 175, 134, 176, 134, 177, 134, 178, 134, 179, 134, 180, 134, 181, 134, 182, 134, 183, 134, 184, 134, 185, 134, 186, 134, 187, 134, 188, 135, 3, 135, 4, 135, 5, 135, 6, 135, 7, 135, 8, 135, 9, 135, 10, 135, 11, 135, 12, 135, 13, 135, 14, 135, 15, 135, 16, 135, 17, 135, 18, 135, 19, 135, 20, 135, 21, 135, 22, 135, 23, 135, 24, 135, 25, 135, 26, 135, 27, 135, 28, 135, 29, 135, 30, 135, 31, 135, 32, 135, 33, 135, 34, 135, 35, 135, 36, 135, 37, 135, 38, 135, 39, 135, 40, 135, 41, 135, 42, 135, 43, 135, 44, 135, 45, 135, 46, 135, 47, 135, 48, 135, 49, 135, 50, 135, 51, 135, 52, 135, 53, 135, 54, 135, 55, 135, 56, 135, 57, 135, 58, 135, 59, 135, 60, 135, 61, 135, 62, 135, 63, 135, 64, 135, 65, 135, 66, 135, 67, 135, 68, 135, 171, 135, 172, 135, 173, 135, 174, 135, 175, 135, 176, 135, 177, 135, 178, 135, 179, 135, 180, 135, 181, 135, 182, 135, 183, 135, 184, 135, 185, 135, 186, 135, 187, 135, 188, 136, 3, 136, 4, 136, 5, 136, 6, 136, 7, 136, 8, 136, 9, 136, 10, 136, 11, 136, 12, 136, 13, 136, 14, 136, 15, 136, 16, 136, 17, 136, 18, 136, 19, 136, 20, 136, 21, 136, 22, 136, 23, 136, 24, 136, 25, 136, 26, 136, 27, 136, 28, 136, 29, 136, 30, 136, 31, 136, 32, 136, 33, 136, 34, 136, 35, 136, 36, 136, 37, 136, 38, 136, 39, 136, 40, 136, 41, 136, 42, 136, 43, 136, 44, 136, 45, 136, 46, 136, 47, 136, 48, 136, 49, 136, 50, 136, 51, 136, 52, 136, 53, 136, 54, 136, 55, 136, 56, 136, 57, 136, 58, 136, 59, 136, 60, 136, 61, 136, 62, 136, 63, 136, 64, 136, 65, 136, 66, 136, 67, 136, 171, 136, 172, 136, 173, 136, 174, 136, 175, 136, 176, 136, 177, 136, 178, 136, 179, 136, 180, 136, 181, 136, 182, 136, 183, 136, 184, 136, 185, 136, 186, 136, 187, 136, 188, 137, 3, 137, 4, 137, 5, 137, 6, 137, 7, 137, 8, 137, 9, 137, 10, 137, 11, 137, 12, 137, 13, 137, 14, 137, 15, 137, 16, 137, 17, 137, 18, 137, 19, 137, 20, 137, 21, 137, 22, 137, 23, 137, 24, 137, 25, 137, 26, 137, 27, 137, 28, 137, 29, 137, 30, 137, 31, 137, 32, 137, 33, 137, 34, 137, 35, 137, 36, 137, 37, 137, 38, 137, 39, 137, 40, 137, 41, 137, 42, 137, 43, 137, 44, 137, 45, 137, 46, 137, 47, 137, 48, 137, 49, 137, 50, 137, 51, 137, 52, 137, 53, 137, 54, 137, 55, 137, 56, 137, 57, 137, 58, 137, 59, 137, 60, 137, 61, 137, 62, 137, 63, 137, 64, 137, 65, 137, 66, 137, 171, 137, 172, 137, 173, 137, 174, 137, 175, 137, 176, 137, 177, 137, 178, 137, 179, 137, 180, 137, 181, 137, 182, 137, 183, 137, 184, 137, 185, 137, 186, 137, 187, 137, 188, 138, 3, 138, 4, 138, 5, 138, 6, 138, 7, 138, 8, 138, 9, 138, 10, 138, 11, 138, 12, 138, 13, 138, 14, 138, 15, 138, 16, 138, 17, 138, 18, 138, 19, 138, 20, 138, 21, 138, 22, 138, 23, 138, 24, 138, 25, 138, 26, 138, 27, 138, 28, 138, 29, 138, 30, 138, 31, 138, 32, 138, 33, 138, 34, 138, 35, 138, 36, 138, 37, 138, 38, 138, 39, 138, 40, 138, 41, 138, 42, 138, 43, 138, 44, 138, 45, 138, 46, 138, 47, 138, 48, 138, 49, 138, 50, 138, 51, 138, 52, 138, 53, 138, 54, 138, 55, 138, 56, 138, 57, 138, 58, 138, 59, 138, 60, 138, 61, 138, 62, 138, 63, 138, 64, 138, 65, 138, 66, 138, 171, 138, 172, 138, 173, 138, 174, 138, 175, 138, 176, 138, 177, 138, 178, 138, 179, 138, 180, 138, 181, 138, 182, 138, 183, 138, 184, 138, 185, 138, 186, 138, 187, 138, 188, 139, 3, 139, 4, 139, 5, 139, 6, 139, 7, 139, 8, 139, 9, 139, 10, 139, 11, 139, 12, 139, 13, 139, 14, 139, 15, 139, 16, 139, 17, 139, 18, 139, 19, 139, 20, 139, 21, 139, 22, 139, 23, 139, 24, 139, 25, 139, 26, 139, 27, 139, 28, 139, 29, 139, 30, 139, 31, 139, 32, 139, 33, 139, 34, 139, 35, 139, 36, 139, 37, 139, 38, 139, 39, 139, 40, 139, 41, 139, 42, 139, 43, 139, 44, 139, 45, 139, 46, 139, 47, 139, 48, 139, 49, 139, 50, 139, 51, 139, 52, 139, 53, 139, 54, 139, 55, 139, 56, 139, 57, 139, 58, 139, 59, 139, 60, 139, 61, 139, 62, 139, 63, 139, 64, 139, 65, 139, 171, 139, 172, 139, 173, 139, 174, 139, 175, 139, 176, 139, 177, 139, 178, 139, 179, 139, 180, 139, 181, 139, 182, 139, 183, 139, 184, 139, 185, 139, 186, 139, 187, 139, 188, 140, 3, 140, 4, 140, 5, 140, 6, 140, 7, 140, 8, 140, 9, 140, 10, 140, 11, 140, 12, 140, 13, 140, 14, 140, 15, 140, 16, 140, 17, 140, 18, 140, 19, 140, 20, 140, 21, 140, 22, 140, 23, 140, 24, 140, 25, 140, 26, 140, 27, 140, 28, 140, 29, 140, 30, 140, 31, 140, 32, 140, 33, 140, 34, 140, 35, 140, 36, 140, 37, 140, 38, 140, 39, 140, 40, 140, 41, 140, 42, 140, 43, 140, 44, 140, 45, 140, 46, 140, 47, 140, 48, 140, 49, 140, 50, 140, 51, 140, 52, 140, 53, 140, 54, 140, 55, 140, 56, 140, 57, 140, 58, 140, 59, 140, 60, 140, 61, 140, 62, 140, 63, 140, 64, 140, 171, 140, 172, 140, 173, 140, 174, 140, 175, 140, 176, 140, 177, 140, 178, 140, 179, 140, 180, 140, 181, 140, 182, 140, 183, 140, 184, 140, 185, 140, 186, 140, 187, 140, 188, 141, 3, 141, 4, 141, 5, 141, 6, 141, 7, 141, 8, 141, 9, 141, 10, 141, 11, 141, 12, 141, 13, 141, 14, 141, 15, 141, 16, 141, 17, 141, 18, 141, 19, 141, 20, 141, 21, 141, 22, 141, 23, 141, 24, 141, 25, 141, 26, 141, 27, 141, 28, 141, 29, 141, 30, 141, 31, 141, 32, 141, 33, 141, 34, 141, 35, 141, 36, 141, 37, 141, 38, 141, 39, 141, 40, 141, 41, 141, 42, 141, 43, 141, 44, 141, 45, 141, 46, 141, 47, 141, 48, 141, 49, 141, 50, 141, 51, 141, 52, 141, 53, 141, 54, 141, 55, 141, 56, 141, 57, 141, 58, 141, 59, 141, 60, 141, 61, 141, 62, 141, 63, 141, 171, 141, 172, 141, 173, 141, 174, 141, 175, 141, 176, 141, 177, 141, 178, 141, 179, 141, 180, 141, 181, 141, 182, 141, 183, 141, 184, 141, 185, 141, 186, 141, 187, 141, 188, 142, 3, 142, 4, 142, 5, 142, 6, 142, 7, 142, 8, 142, 9, 142, 10, 142, 11, 142, 12, 142, 13, 142, 14, 142, 15, 142, 16, 142, 17, 142, 18, 142, 19, 142, 20, 142, 21, 142, 22, 142, 23, 142, 24, 142, 25, 142, 26, 142, 27, 142, 28, 142, 29, 142, 30, 142, 31, 142, 32, 142, 33, 142, 34, 142, 35, 142, 36, 142, 37, 142, 38, 142, 39, 142, 40, 142, 41, 142, 42, 142, 43, 142, 44, 142, 45, 142, 46, 142, 47, 142, 48, 142, 49, 142, 50, 142, 51, 142, 52, 142, 53, 142, 54, 142, 55, 142, 56, 142, 57, 142, 58, 142, 59, 142, 60, 142, 61, 142, 62, 142, 171, 142, 172, 142, 173, 142, 174, 142, 175, 142, 176, 142, 177, 142, 178, 142, 179, 142, 180, 142, 181, 142, 182, 142, 183, 142, 184, 142, 185, 142, 186, 142, 187, 142, 188, 143, 3, 143, 4, 143, 5, 143, 6, 143, 7, 143, 8, 143, 9, 143, 10, 143, 11, 143, 12, 143, 13, 143, 14, 143, 15, 143, 16, 143, 17, 143, 18, 143, 19, 143, 20, 143, 21, 143, 22, 143, 23, 143, 24, 143, 25, 143, 26, 143, 27, 143, 28, 143, 29, 143, 30, 143, 31, 143, 32, 143, 33, 143, 34, 143, 35, 143, 36, 143, 37, 143, 38, 143, 39, 143, 40, 143, 41, 143, 42, 143, 43, 143, 44, 143, 45, 143, 46, 143, 47, 143, 48, 143, 49, 143, 50, 143, 51, 143, 52, 143, 53, 143, 54, 143, 55, 143, 56, 143, 57, 143, 58, 143, 59, 143, 60, 143, 61, 143, 171, 143, 172, 143, 173, 143, 174, 143, 175, 143, 176, 143, 177, 143, 178, 143, 179, 143, 180, 143, 181, 143, 182, 143, 183, 143, 184, 143, 185, 143, 186, 143, 187, 143, 188, 144, 3, 144, 4, 144, 5, 144, 6, 144, 7, 144, 8, 144, 9, 144, 10, 144, 11, 144, 12, 144, 13, 144, 14, 144, 15, 144, 16, 144, 17, 144, 18, 144, 19, 144, 20, 144, 21, 144, 22, 144, 23, 144, 24, 144, 25, 144, 26, 144, 27, 144, 28, 144, 29, 144, 30, 144, 31, 144, 32, 144, 33, 144, 34, 144, 35, 144, 36, 144, 37, 144, 38, 144, 39, 144, 40, 144, 41, 144, 42, 144, 43, 144, 44, 144, 45, 144, 46, 144, 47, 144, 48, 144, 49, 144, 50, 144, 51, 144, 52, 144, 53, 144, 54, 144, 55, 144, 56, 144, 57, 144, 58, 144, 59, 144, 60, 144, 171, 144, 172, 144, 173, 144, 174, 144, 175, 144, 176, 144, 177, 144, 178, 144, 179, 144, 180, 144, 181, 144, 182, 144, 183, 144, 184, 144, 185, 144, 186, 144, 187, 144, 188, 145, 3, 145, 4, 145, 5, 145, 6, 145, 7, 145, 8, 145, 9, 145, 10, 145, 11, 145, 12, 145, 13, 145, 14, 145, 15, 145, 16, 145, 17, 145, 18, 145, 19, 145, 20, 145, 21, 145, 22, 145, 23, 145, 24, 145, 25, 145, 26, 145, 27, 145, 28, 145, 29, 145, 30, 145, 31, 145, 32, 145, 33, 145, 34, 145, 35, 145, 36, 145, 37, 145, 38, 145, 39, 145, 40, 145, 41, 145, 42, 145, 43, 145, 44, 145, 45, 145, 46, 145, 47, 145, 48, 145, 49, 145, 50, 145, 51, 145, 52, 145, 53, 145, 54, 145, 55, 145, 56, 145, 57, 145, 58, 145, 59, 145, 171, 145, 172, 145, 173, 145, 174, 145, 175, 145, 176, 145, 177, 145, 178, 145, 179, 145, 180, 145, 181, 145, 182, 145, 183, 145, 184, 145, 185, 145, 186, 145, 187, 145, 188, 146, 3, 146, 4, 146, 5, 146, 6, 146, 7, 146, 8, 146, 9, 146, 10, 146, 11, 146, 12, 146, 13, 146, 14, 146, 15, 146, 16, 146, 17, 146, 18, 146, 19, 146, 20, 146, 21, 146, 22, 146, 23, 146, 24, 146, 25, 146, 26, 146, 27, 146, 28, 146, 29, 146, 30, 146, 31, 146, 32, 146, 33, 146, 34, 146, 35, 146, 36, 146, 37, 146, 38, 146, 39, 146, 40, 146, 41, 146, 42, 146, 43, 146, 44, 146, 45, 146, 46, 146, 47, 146, 48, 146, 49, 146, 50, 146, 51, 146, 52, 146, 53, 146, 54, 146, 55, 146, 56, 146, 57, 146, 58, 146, 171, 146, 172, 146, 173, 146, 174, 146, 175, 146, 176, 146, 177, 146, 178, 146, 179, 146, 180, 146, 181, 146, 182, 146, 183, 146, 184, 146, 185, 146, 186, 146, 187, 146, 188, 147, 3, 147, 4, 147, 5, 147, 6, 147, 7, 147, 8, 147, 9, 147, 10, 147, 11, 147, 12, 147, 13, 147, 14, 147, 15, 147, 16, 147, 17, 147, 18, 147, 19, 147, 20, 147, 21, 147, 22, 147, 23, 147, 24, 147, 25, 147, 26, 147, 27, 147, 28, 147, 29, 147, 30, 147, 31, 147, 32, 147, 33, 147, 34, 147, 35, 147, 36, 147, 37, 147, 38, 147, 39, 147, 40, 147, 41, 147, 42, 147, 43, 147, 44, 147, 45, 147, 46, 147, 47, 147, 48, 147, 49, 147, 50, 147, 51, 147, 52, 147, 53, 147, 54, 147, 55, 147, 56, 147, 171, 147, 172, 147, 173, 147, 174, 147, 175, 147, 176, 147, 177, 147, 178, 147, 179, 147, 180, 147, 181, 147, 182, 147, 183, 147, 184, 147, 185, 147, 186, 147, 187, 147, 188, 148, 3, 148, 4, 148, 5, 148, 6, 148, 7, 148, 8, 148, 9, 148, 10, 148, 11, 148, 12, 148, 13, 148, 14, 148, 15, 148, 16, 148, 17, 148, 18, 148, 19, 148, 20, 148, 21, 148, 22, 148, 23, 148, 24, 148, 25, 148, 26, 148, 27, 148, 28, 148, 29, 148, 30, 148, 31, 148, 32, 148, 33, 148, 34, 148, 35, 148, 36, 148, 37, 148, 38, 148, 39, 148, 40, 148, 41, 148, 42, 148, 43, 148, 44, 148, 45, 148, 46, 148, 47, 148, 48, 148, 49, 148, 50, 148, 51, 148, 52, 148, 53, 148, 171, 148, 172, 148, 173, 148, 174, 148, 175, 148, 176, 148, 177, 148, 178, 148, 179, 148, 180, 148, 181, 148, 182, 148, 183, 148, 184, 148, 185, 148, 186, 148, 187, 148, 188, 149, 3, 149, 4, 149, 5, 149, 6, 149, 7, 149, 8, 149, 9, 149, 10, 149, 11, 149, 12, 149, 13, 149, 14, 149, 15, 149, 16, 149, 17, 149, 18, 149, 19, 149, 20, 149, 21, 149, 22, 149, 23, 149, 24, 149, 25, 149, 26, 149, 27, 149, 28, 149, 29, 149, 30, 149, 31, 149, 32, 149, 33, 149, 34, 149, 35, 149, 36, 149, 37, 149, 38, 149, 39, 149, 40, 149, 41, 149, 42, 149, 43, 149, 44, 149, 45, 149, 46, 149, 47, 149, 48, 149, 49, 149, 50, 149, 171, 149, 172, 149, 173, 149, 174, 149, 175, 149, 176, 149, 177, 149, 178, 149, 179, 149, 180, 149, 181, 149, 182, 149, 183, 149, 184, 149, 185, 149, 186, 149, 187, 149, 188, 150, 3, 150, 4, 150, 5, 150, 6, 150, 7, 150, 8, 150, 9, 150, 10, 150, 11, 150, 12, 150, 13, 150, 14, 150, 15, 150, 16, 150, 17, 150, 18, 150, 19, 150, 20, 150, 21, 150, 22, 150, 23, 150, 24, 150, 25, 150, 26, 150, 27, 150, 28, 150, 29, 150, 30, 150, 31, 150, 32, 150, 33, 150, 34, 150, 35, 150, 36, 150, 37, 150, 38, 150, 39, 150, 40, 150, 41, 150, 42, 150, 43, 150, 44, 150, 45, 150, 46, 150, 47, 150, 171, 150, 172, 150, 173, 150, 174, 150, 175, 150, 176, 150, 177, 150, 178, 150, 179, 150, 180, 150, 181, 150, 182, 150, 183, 150, 184, 150, 185, 150, 186, 150, 187, 150, 188, 151, 3, 151, 4, 151, 5, 151, 6, 151, 7, 151, 8, 151, 9, 151, 10, 151, 11, 151, 12, 151, 13, 151, 14, 151, 15, 151, 16, 151, 17, 151, 18, 151, 19, 151, 20, 151, 21, 151, 22, 151, 23, 151, 24, 151, 25, 151, 26, 151, 27, 151, 28, 151, 29, 151, 30, 151, 31, 151, 32, 151, 33, 151, 34, 151, 35, 151, 36, 151, 37, 151, 38, 151, 39, 151, 40, 151, 41, 151, 42, 151, 43, 151, 44, 151, 45, 151, 46, 151, 171, 151, 172, 151, 173, 151, 174, 151, 175, 151, 176, 151, 177, 151, 178, 151, 179, 151, 180, 151, 181, 151, 182, 151, 183, 151, 184, 151, 185, 151, 186, 151, 187, 151, 188, 152, 3, 152, 4, 152, 5, 152, 6, 152, 7, 152, 8, 152, 9, 152, 10, 152, 11, 152, 12, 152, 13, 152, 14, 152, 15, 152, 16, 152, 17, 152, 18, 152, 19, 152, 20, 152, 21, 152, 22, 152, 23, 152, 24, 152, 25, 152, 26, 152, 27, 152, 28, 152, 29, 152, 30, 152, 31, 152, 32, 152, 33, 152, 34, 152, 35, 152, 36, 152, 37, 152, 38, 152, 39, 152, 40, 152, 41, 152, 42, 152, 43, 152, 44, 152, 45, 152, 46, 152, 171, 152, 172, 152, 173, 152, 174, 152, 175, 152, 176, 152, 177, 152, 178, 152, 179, 152, 180, 152, 181, 152, 182, 152, 183, 152, 184, 152, 185, 152, 186, 152, 187, 152, 188, 153, 3, 153, 4, 153, 5, 153, 6, 153, 7, 153, 8, 153, 9, 153, 10, 153, 11, 153, 12, 153, 13, 153, 14, 153, 15, 153, 16, 153, 17, 153, 18, 153, 19, 153, 20, 153, 21, 153, 22, 153, 23, 153, 24, 153, 25, 153, 26, 153, 27, 153, 28, 153, 29, 153, 30, 153, 31, 153, 32, 153, 33, 153, 34, 153, 35, 153, 36, 153, 37, 153, 38, 153, 39, 153, 40, 153, 41, 153, 42, 153, 43, 153, 44, 153, 45, 153, 171, 153, 172, 153, 173, 153, 174, 153, 175, 153, 176, 153, 177, 153, 178, 153, 179, 153, 180, 153, 181, 153, 182, 153, 183, 153, 184, 153, 185, 153, 186, 153, 187, 153, 188, 154, 3, 154, 4, 154, 5, 154, 6, 154, 7, 154, 8, 154, 9, 154, 10, 154, 11, 154, 12, 154, 13, 154, 14, 154, 15, 154, 16, 154, 17, 154, 18, 154, 19, 154, 20, 154, 21, 154, 22, 154, 23, 154, 24, 154, 25, 154, 26, 154, 27, 154, 28, 154, 29, 154, 30, 154, 31, 154, 32, 154, 33, 154, 34, 154, 35, 154, 36, 154, 37, 154, 38, 154, 39, 154, 40, 154, 41, 154, 42, 154, 43, 154, 44, 154, 45, 154, 171, 154, 172, 154, 173, 154, 174, 154, 175, 154, 176, 154, 177, 154, 178, 154, 179, 154, 180, 154, 181, 154, 182, 154, 183, 154, 184, 154, 185, 154, 186, 154, 187, 154, 188, 155, 3, 155, 4, 155, 5, 155, 6, 155, 7, 155, 8, 155, 9, 155, 10, 155, 11, 155, 12, 155, 13, 155, 14, 155, 15, 155, 16, 155, 17, 155, 18, 155, 19, 155, 20, 155, 21, 155, 22, 155, 23, 155, 24, 155, 25, 155, 26, 155, 27, 155, 28, 155, 29, 155, 30, 155, 31, 155, 32, 155, 33, 155, 34, 155, 35, 155, 36, 155, 37, 155, 38, 155, 39, 155, 40, 155, 41, 155, 42, 155, 43, 155, 44, 155, 45, 155, 171, 155, 172, 155, 173, 155, 174, 155, 175, 155, 176, 155, 177, 155, 178, 155, 179, 155, 180, 155, 181, 155, 182, 155, 183, 155, 184, 155, 185, 155, 186, 155, 187, 155, 188, 156, 3, 156, 4, 156, 5, 156, 6, 156, 7, 156, 8, 156, 9, 156, 10, 156, 11, 156, 12, 156, 13, 156, 14, 156, 15, 156, 16, 156, 17, 156, 18, 156, 19, 156, 20, 156, 21, 156, 22, 156, 23, 156, 24, 156, 25, 156, 26, 156, 27, 156, 28, 156, 29, 156, 30, 156, 31, 156, 32, 156, 33, 156, 34, 156, 35, 156, 36, 156, 37, 156, 38, 156, 39, 156, 40, 156, 41, 156, 42, 156, 43, 156, 44, 156, 45, 156, 171, 156, 172, 156, 173, 156, 174, 156, 175, 156, 176, 156, 177, 156, 178, 156, 179, 156, 180, 156, 181, 156, 182, 156, 183, 156, 184, 156, 185, 156, 186, 156, 187, 156, 188, 157, 3, 157, 4, 157, 5, 157, 6, 157, 7, 157, 8, 157, 9, 157, 10, 157, 11, 157, 12, 157, 13, 157, 14, 157, 15, 157, 16, 157, 17, 157, 18, 157, 19, 157, 20, 157, 21, 157, 22, 157, 23, 157, 24, 157, 25, 157, 26, 157, 27, 157, 28, 157, 29, 157, 30, 157, 31, 157, 32, 157, 33, 157, 34, 157, 35, 157, 36, 157, 37, 157, 38, 157, 39, 157, 40, 157, 41, 157, 42, 157, 43, 157, 44, 157, 171, 157, 172, 157, 173, 157, 174, 157, 175, 157, 176, 157, 177, 157, 178, 157, 179, 157, 180, 157, 181, 157, 182, 157, 183, 157, 184, 157, 185, 157, 186, 157, 187, 157, 188, 158, 3, 158, 4, 158, 5, 158, 6, 158, 7, 158, 8, 158, 9, 158, 10, 158, 11, 158, 12, 158, 13, 158, 14, 158, 15, 158, 16, 158, 17, 158, 18, 158, 19, 158, 20, 158, 21, 158, 22, 158, 23, 158, 24, 158, 25, 158, 26, 158, 27, 158, 28, 158, 29, 158, 30, 158, 31, 158, 32, 158, 33, 158, 34, 158, 35, 158, 36, 158, 37, 158, 38, 158, 39, 158, 40, 158, 41, 158, 42, 158, 43, 158, 44, 158, 171, 158, 172, 158, 173, 158, 174, 158, 175, 158, 176, 158, 177, 158, 178, 158, 179, 158, 180, 158, 181, 158, 182, 158, 183, 158, 184, 158, 185, 158, 186, 158, 187, 158, 188, 159, 3, 159, 4, 159, 5, 159, 6, 159, 7, 159, 8, 159, 9, 159, 10, 159, 11, 159, 12, 159, 13, 159, 14, 159, 15, 159, 16, 159, 17, 159, 18, 159, 19, 159, 20, 159, 21, 159, 22, 159, 23, 159, 24, 159, 25, 159, 26, 159, 27, 159, 28, 159, 29, 159, 30, 159, 31, 159, 32, 159, 33, 159, 34, 159, 35, 159, 36, 159, 37, 159, 38, 159, 39, 159, 40, 159, 41, 159, 42, 159, 43, 159, 44, 159, 171, 159, 172, 159, 173, 159, 174, 159, 175, 159, 176, 159, 177, 159, 178, 159, 179, 159, 180, 159, 181, 159, 182, 159, 183, 159, 184, 159, 185, 159, 186, 159, 187, 159, 188, 160, 3, 160, 4, 160, 5, 160, 6, 160, 7, 160, 8, 160, 9, 160, 10, 160, 11, 160, 12, 160, 13, 160, 14, 160, 15, 160, 16, 160, 17, 160, 18, 160, 19, 160, 20, 160, 21, 160, 22, 160, 23, 160, 24, 160, 25, 160, 26, 160, 27, 160, 28, 160, 29, 160, 30, 160, 31, 160, 32, 160, 33, 160, 34, 160, 35, 160, 36, 160, 37, 160, 38, 160, 39, 160, 40, 160, 41, 160, 42, 160, 43, 160, 44, 160, 45, 160, 171, 160, 172, 160, 173, 160, 174, 160, 175, 160, 176, 160, 177, 160, 178, 160, 179, 160, 180, 160, 181, 160, 182, 160, 183, 160, 184, 160, 185, 160, 186, 160, 187, 160, 188, 161, 3, 161, 4, 161, 5, 161, 6, 161, 7, 161, 8, 161, 9, 161, 10, 161, 11, 161, 12, 161, 13, 161, 14, 161, 15, 161, 16, 161, 17, 161, 18, 161, 19, 161, 20, 161, 21, 161, 22, 161, 23, 161, 24, 161, 25, 161, 26, 161, 27, 161, 28, 161, 29, 161, 30, 161, 31, 161, 32, 161, 33, 161, 34, 161, 35, 161, 36, 161, 37, 161, 38, 161, 39, 161, 40, 161, 41, 161, 42, 161, 43, 161, 44, 161, 45, 161, 171, 161, 172, 161, 173, 161, 174, 161, 175, 161, 176, 161, 177, 161, 178, 161, 179, 161, 180, 161, 181, 161, 182, 161, 183, 161, 184, 161, 185, 161, 186, 161, 187, 161, 188, 162, 3, 162, 4, 162, 5, 162, 6, 162, 7, 162, 8, 162, 9, 162, 10, 162, 11, 162, 12, 162, 13, 162, 14, 162, 15, 162, 16, 162, 17, 162, 18, 162, 19, 162, 20, 162, 21, 162, 22, 162, 23, 162, 24, 162, 25, 162, 26, 162, 27, 162, 28, 162, 29, 162, 30, 162, 31, 162, 32, 162, 33, 162, 34, 162, 35, 162, 36, 162, 37, 162, 38, 162, 39, 162, 40, 162, 41, 162, 42, 162, 43, 162, 44, 162, 45, 162, 171, 162, 172, 162, 173, 162, 174, 162, 175, 162, 176, 162, 177, 162, 178, 162, 179, 162, 180, 162, 181, 162, 182, 162, 183, 162, 184, 162, 185, 162, 186, 162, 187, 162, 188, 163, 3, 163, 4, 163, 5, 163, 6, 163, 7, 163, 8, 163, 9, 163, 10, 163, 11, 163, 12, 163, 13, 163, 14, 163, 15, 163, 16, 163, 17, 163, 18, 163, 19, 163, 20, 163, 21, 163, 22, 163, 23, 163, 24, 163, 25, 163, 26, 163, 27, 163, 28, 163, 29, 163, 30, 163, 31, 163, 32, 163, 33, 163, 34, 163, 35, 163, 36, 163, 37, 163, 38, 163, 39, 163, 40, 163, 41, 163, 42, 163, 43, 163, 44, 163, 45, 163, 171, 163, 172, 163, 173, 163, 174, 163, 175, 163, 176, 163, 177, 163, 178, 163, 179, 163, 180, 163, 181, 163, 182, 163, 183, 163, 184, 163, 185, 163, 186, 163, 187, 163, 188, 164, 3, 164, 4, 164, 5, 164, 6, 164, 7, 164, 8, 164, 9, 164, 10, 164, 11, 164, 12, 164, 13, 164, 14, 164, 15, 164, 16, 164, 17, 164, 18, 164, 19, 164, 20, 164, 21, 164, 22, 164, 23, 164, 24, 164, 25, 164, 26, 164, 27, 164, 28, 164, 29, 164, 30, 164, 31, 164, 32, 164, 33, 164, 34, 164, 35, 164, 36, 164, 37, 164, 38, 164, 39, 164, 40, 164, 41, 164, 42, 164, 43, 164, 44, 164, 45, 164, 171, 164, 172, 164, 173, 164, 174, 164, 175, 164, 176, 164, 177, 164, 178, 164, 179, 164, 180, 164, 181, 164, 182, 164, 183, 164, 184, 164, 185, 164, 186, 164, 187, 164, 188, 165, 3, 165, 4, 165, 5, 165, 6, 165, 7, 165, 8, 165, 9, 165, 10, 165, 11, 165, 12, 165, 13, 165, 14, 165, 15, 165, 16, 165, 17, 165, 18, 165, 19, 165, 20, 165, 21, 165, 22, 165, 23, 165, 24, 165, 25, 165, 26, 165, 27, 165, 28, 165, 29, 165, 30, 165, 31, 165, 32, 165, 33, 165, 34, 165, 35, 165, 36, 165, 37, 165, 38, 165, 39, 165, 40, 165, 41, 165, 42, 165, 43, 165, 44, 165, 45, 165, 171, 165, 172, 165, 173, 165, 174, 165, 175, 165, 176, 165, 177, 165, 178, 165, 179, 165, 180, 165, 181, 165, 182, 165, 183, 165, 184, 165, 185, 165, 186, 165, 187, 165, 188, 166, 3, 166, 4, 166, 5, 166, 6, 166, 7, 166, 8, 166, 9, 166, 10, 166, 11, 166, 12, 166, 13, 166, 14, 166, 15, 166, 16, 166, 17, 166, 18, 166, 19, 166, 20, 166, 21, 166, 22, 166, 23, 166, 24, 166, 25, 166, 26, 166, 27, 166, 28, 166, 29, 166, 30, 166, 31, 166, 32, 166, 33, 166, 34, 166, 35, 166, 36, 166, 37, 166, 38, 166, 39, 166, 40, 166, 41, 166, 42, 166, 43, 166, 44, 166, 45, 166, 171, 166, 172, 166, 173, 166, 174, 166, 175, 166, 176, 166, 177, 166, 178, 166, 179, 166, 180, 166, 181, 166, 182, 166, 183, 166, 184, 166, 185, 166, 186, 166, 187, 166, 188, 167, 3, 167, 4, 167, 5, 167, 6, 167, 7, 167, 8, 167, 9, 167, 10, 167, 11, 167, 12, 167, 13, 167, 14, 167, 15, 167, 16, 167, 17, 167, 18, 167, 19, 167, 20, 167, 21, 167, 22, 167, 23, 167, 24, 167, 25, 167, 26, 167, 27, 167, 28, 167, 29, 167, 30, 167, 31, 167, 32, 167, 33, 167, 34, 167, 35, 167, 36, 167, 37, 167, 38, 167, 39, 167, 40, 167, 41, 167, 42, 167, 43, 167, 44, 167, 45, 167, 46, 167, 171, 167, 172, 167, 173, 167, 174, 167, 175, 167, 176, 167, 177, 167, 178, 167, 179, 167, 180, 167, 181, 167, 182, 167, 183, 167, 184, 167, 185, 167, 186, 167, 187, 167, 188, 168, 3, 168, 4, 168, 5, 168, 6, 168, 7, 168, 8, 168, 9, 168, 10, 168, 11, 168, 12, 168, 13, 168, 14, 168, 15, 168, 16, 168, 17, 168, 18, 168, 19, 168, 20, 168, 21, 168, 22, 168, 23, 168, 24, 168, 25, 168, 26, 168, 27, 168, 28, 168, 29, 168, 30, 168, 31, 168, 32, 168, 33, 168, 34, 168, 35, 168, 36, 168, 37, 168, 38, 168, 39, 168, 40, 168, 41, 168, 42, 168, 43, 168, 44, 168, 45, 168, 46, 168, 47, 168, 171, 168, 172, 168, 173, 168, 174, 168, 175, 168, 176, 168, 177, 168, 178, 168, 179, 168, 180, 168, 181, 168, 182, 168, 183, 168, 184, 168, 185, 168, 186, 168, 187, 168, 188, 169, 3, 169, 4, 169, 5, 169, 6, 169, 7, 169, 8, 169, 9, 169, 10, 169, 11, 169, 12, 169, 13, 169, 14, 169, 15, 169, 16, 169, 17, 169, 18, 169, 19, 169, 20, 169, 21, 169, 22, 169, 23, 169, 24, 169, 25, 169, 26, 169, 27, 169, 28, 169, 29, 169, 30, 169, 31, 169, 32, 169, 33, 169, 34, 169, 35, 169, 36, 169, 37, 169, 38, 169, 39, 169, 40, 169, 41, 169, 42, 169, 43, 169, 44, 169, 45, 169, 46, 169, 47, 169, 48, 169, 171, 169, 172, 169, 173, 169, 174, 169, 175, 169, 176, 169, 177, 169, 178, 169, 179, 169, 180, 169, 181, 169, 182, 169, 183, 169, 184, 169, 185, 169, 186, 169, 187, 169, 188, 170, 3, 170, 4, 170, 5, 170, 6, 170, 7, 170, 8, 170, 9, 170, 10, 170, 11, 170, 12, 170, 13, 170, 14, 170, 15, 170, 16, 170, 17, 170, 18, 170, 19, 170, 20, 170, 21, 170, 22, 170, 23, 170, 24, 170, 25, 170, 26, 170, 27, 170, 28, 170, 29, 170, 30, 170, 31, 170, 32, 170, 33, 170, 34, 170, 35, 170, 36, 170, 37, 170, 38, 170, 39, 170, 40, 170, 41, 170, 42, 170, 43, 170, 44, 170, 45, 170, 46, 170, 47, 170, 48, 170, 171, 170, 172, 170, 173, 170, 174, 170, 175, 170, 176, 170, 177, 170, 178, 170, 179, 170, 180, 170, 181, 170, 182, 170, 183, 170, 184, 170, 185, 170, 186, 170, 187, 170, 188, 171, 3, 171, 4, 171, 5, 171, 6, 171, 7, 171, 8, 171, 9, 171, 10, 171, 11, 171, 12, 171, 13, 171, 14, 171, 15, 171, 16, 171, 17, 171, 18, 171, 19, 171, 20, 171, 21, 171, 22, 171, 23, 171, 24, 171, 25, 171, 26, 171, 27, 171, 28, 171, 29, 171, 30, 171, 31, 171, 32, 171, 33, 171, 34, 171, 35, 171, 36, 171, 37, 171, 38, 171, 39, 171, 40, 171, 41, 171, 42, 171, 43, 171, 44, 171, 45, 171, 46, 171, 47, 171, 48, 171, 49, 171, 171, 171, 172, 171, 173, 171, 174, 171, 175, 171, 176, 171, 177, 171, 178, 171, 179, 171, 180, 171, 181, 171, 182, 171, 183, 171, 184, 171, 185, 171, 186, 171, 187, 171, 188, 172, 3, 172, 4, 172, 5, 172, 6, 172, 7, 172, 8, 172, 9, 172, 10, 172, 11, 172, 12, 172, 13, 172, 14, 172, 15, 172, 16, 172, 17, 172, 18, 172, 19, 172, 20, 172, 21, 172, 22, 172, 23, 172, 24, 172, 25, 172, 26, 172, 27, 172, 28, 172, 29, 172, 30, 172, 31, 172, 32, 172, 33, 172, 34, 172, 35, 172, 36, 172, 37, 172, 38, 172, 39, 172, 40, 172, 41, 172, 42, 172, 43, 172, 44, 172, 45, 172, 46, 172, 47, 172, 48, 172, 49, 172, 50, 172, 171, 172, 172, 172, 173, 172, 174, 172, 175, 172, 176, 172, 177, 172, 178, 172, 179, 172, 180, 172, 181, 172, 182, 172, 183, 172, 184, 172, 185, 172, 186, 172, 187, 172, 188, 173, 3, 173, 4, 173, 5, 173, 6, 173, 7, 173, 8, 173, 9, 173, 10, 173, 11, 173, 12, 173, 13, 173, 14, 173, 15, 173, 16, 173, 17, 173, 18, 173, 19, 173, 20, 173, 21, 173, 22, 173, 23, 173, 24, 173, 25, 173, 26, 173, 27, 173, 28, 173, 29, 173, 30, 173, 31, 173, 32, 173, 33, 173, 34, 173, 35, 173, 36, 173, 37, 173, 38, 173, 39, 173, 40, 173, 41, 173, 42, 173, 43, 173, 44, 173, 45, 173, 46, 173, 47, 173, 48, 173, 49, 173, 50, 173, 51, 173, 171, 173, 172, 173, 173, 173, 174, 173, 175, 173, 176, 173, 177, 173, 178, 173, 179, 173, 180, 173, 181, 173, 182, 173, 183, 173, 184, 173, 185, 173, 186, 173, 187, 173, 188, 174, 3, 174, 4, 174, 5, 174, 6, 174, 7, 174, 8, 174, 9, 174, 10, 174, 11, 174, 12, 174, 13, 174, 14, 174, 15, 174, 16, 174, 17, 174, 18, 174, 19, 174, 20, 174, 21, 174, 22, 174, 23, 174, 24, 174, 25, 174, 26, 174, 27, 174, 28, 174, 29, 174, 30, 174, 31, 174, 32, 174, 33, 174, 34, 174, 35, 174, 36, 174, 37, 174, 38, 174, 39, 174, 40, 174, 41, 174, 42, 174, 43, 174, 44, 174, 45, 174, 46, 174, 47, 174, 48, 174, 49, 174, 50, 174, 51, 174, 52, 174, 171, 174, 172, 174, 173, 174, 174, 174, 175, 174, 176, 174, 177, 174, 178, 174, 179, 174, 180, 174, 181, 174, 182, 174, 183, 174, 184, 174, 185, 174, 186, 174, 187, 174, 188, 175, 3, 175, 4, 175, 5, 175, 6, 175, 7, 175, 8, 175, 9, 175, 10, 175, 11, 175, 12, 175, 13, 175, 14, 175, 15, 175, 16, 175, 17, 175, 18, 175, 19, 175, 20, 175, 21, 175, 22, 175, 23, 175, 24, 175, 25, 175, 26, 175, 27, 175, 28, 175, 29, 175, 30, 175, 31, 175, 32, 175, 33, 175, 34, 175, 35, 175, 36, 175, 37, 175, 38, 175, 39, 175, 40, 175, 41, 175, 42, 175, 43, 175, 44, 175, 45, 175, 46, 175, 47, 175, 48, 175, 49, 175, 50, 175, 51, 175, 52, 175, 171, 175, 172, 175, 173, 175, 174, 175, 175, 175, 176, 175, 177, 175, 178, 175, 179, 175, 180, 175, 181, 175, 182, 175, 183, 175, 184, 175, 185, 175, 186, 175, 187, 175, 188, 176, 3, 176, 4, 176, 5, 176, 6, 176, 7, 176, 8, 176, 9, 176, 10, 176, 11, 176, 12, 176, 13, 176, 14, 176, 15, 176, 16, 176, 17, 176, 18, 176, 19, 176, 20, 176, 21, 176, 22, 176, 23, 176, 24, 176, 25, 176, 26, 176, 27, 176, 28, 176, 29, 176, 30, 176, 31, 176, 32, 176, 33, 176, 34, 176, 35, 176, 36, 176, 37, 176, 38, 176, 39, 176, 40, 176, 41, 176, 42, 176, 43, 176, 44, 176, 45, 176, 46, 176, 47, 176, 48, 176, 49, 176, 50, 176, 51, 176, 52, 176, 53, 176, 171, 176, 172, 176, 173, 176, 174, 176, 175, 176, 176, 176, 177, 176, 178, 176, 179, 176, 180, 176, 181, 176, 182, 176, 183, 176, 184, 176, 185, 176, 186, 176, 187, 176, 188, 177, 3, 177, 4, 177, 5, 177, 6, 177, 7, 177, 8, 177, 9, 177, 10, 177, 11, 177, 12, 177, 13, 177, 14, 177, 15, 177, 16, 177, 17, 177, 18, 177, 19, 177, 20, 177, 21, 177, 22, 177, 23, 177, 24, 177, 25, 177, 26, 177, 27, 177, 28, 177, 29, 177, 30, 177, 31, 177, 32, 177, 33, 177, 34, 177, 35, 177, 36, 177, 37, 177, 38, 177, 39, 177, 40, 177, 41, 177, 42, 177, 43, 177, 44, 177, 45, 177, 46, 177, 47, 177, 48, 177, 49, 177, 50, 177, 51, 177, 52, 177, 53, 177, 54, 177, 171, 177, 172, 177, 173, 177, 174, 177, 175, 177, 176, 177, 177, 177, 178, 177, 179, 177, 180, 177, 181, 177, 182, 177, 183, 177, 184, 177, 185, 177, 186, 177, 187, 177, 188, 178, 3, 178, 4, 178, 5, 178, 6, 178, 7, 178, 8, 178, 9, 178, 10, 178, 11, 178, 12, 178, 13, 178, 14, 178, 15, 178, 16, 178, 17, 178, 18, 178, 19, 178, 20, 178, 21, 178, 22, 178, 23, 178, 24, 178, 25, 178, 26, 178, 27, 178, 28, 178, 29, 178, 30, 178, 31, 178, 32, 178, 33, 178, 34, 178, 35, 178, 36, 178, 37, 178, 38, 178, 39, 178, 40, 178, 41, 178, 42, 178, 43, 178, 44, 178, 45, 178, 46, 178, 47, 178, 48, 178, 49, 178, 50, 178, 51, 178, 52, 178, 53, 178, 54, 178, 171, 178, 172, 178, 173, 178, 174, 178, 175, 178, 176, 178, 177, 178, 178, 178, 179, 178, 180, 178, 181, 178, 182, 178, 183, 178, 184, 178, 185, 178, 186, 178, 187, 178, 188, 179, 3, 179, 4, 179, 5, 179, 6, 179, 7, 179, 8, 179, 9, 179, 10, 179, 11, 179, 12, 179, 13, 179, 14, 179, 15, 179, 16, 179, 17, 179, 18, 179, 19, 179, 20, 179, 21, 179, 22, 179, 23, 179, 24, 179, 25, 179, 26, 179, 27, 179, 28, 179, 29, 179, 30, 179, 31, 179, 32, 179, 33, 179, 34, 179, 35, 179, 36, 179, 37, 179, 38, 179, 39, 179, 40, 179, 41, 179, 42, 179, 43, 179, 44, 179, 45, 179, 46, 179, 47, 179, 48, 179, 49, 179, 50, 179, 51, 179, 52, 179, 53, 179, 54, 179, 171, 179, 172, 179, 173, 179, 174, 179, 175, 179, 176, 179, 177, 179, 178, 179, 179, 179, 180, 179, 181, 179, 182, 179, 183, 179, 184, 179, 185, 179, 186, 179, 187, 179, 188, 180, 3, 180, 4, 180, 5, 180, 6, 180, 7, 180, 8, 180, 9, 180, 10, 180, 11, 180, 12, 180, 13, 180, 14, 180, 15, 180, 16, 180, 17, 180, 18, 180, 19, 180, 20, 180, 21, 180, 22, 180, 23, 180, 24, 180, 25, 180, 26, 180, 27, 180, 28, 180, 29, 180, 30, 180, 31, 180, 32, 180, 33, 180, 34, 180, 35, 180, 36, 180, 37, 180, 38, 180, 39, 180, 40, 180, 41, 180, 42, 180, 43, 180, 44, 180, 45, 180, 46, 180, 47, 180, 48, 180, 49, 180, 50, 180, 51, 180, 52, 180, 53, 180, 54, 180, 171, 180, 172, 180, 173, 180, 174, 180, 175, 180, 176, 180, 177, 180, 178, 180, 179, 180, 180, 180, 181, 180, 182, 180, 183, 180, 184, 180, 185, 180, 186, 180, 187, 180, 188, 181, 3, 181, 4, 181, 5, 181, 6, 181, 7, 181, 8, 181, 9, 181, 10, 181, 11, 181, 12, 181, 13, 181, 14, 181, 15, 181, 16, 181, 17, 181, 18, 181, 19, 181, 20, 181, 21, 181, 22, 181, 23, 181, 24, 181, 25, 181, 26, 181, 27, 181, 28, 181, 29, 181, 30, 181, 31, 181, 32, 181, 33, 181, 34, 181, 35, 181, 36, 181, 37, 181, 38, 181, 39, 181, 40, 181, 41, 181, 42, 181, 43, 181, 44, 181, 45, 181, 46, 181, 47, 181, 48, 181, 49, 181, 50, 181, 51, 181, 52, 181, 53, 181, 54, 181, 171, 181, 172, 181, 173, 181, 174, 181, 175, 181, 176, 181, 177, 181, 178, 181, 179, 181, 180, 181, 181, 181, 182, 181, 183, 181, 184, 181, 185, 181, 186, 181, 187, 181, 188, 182, 3, 182, 4, 182, 5, 182, 6, 182, 7, 182, 8, 182, 9, 182, 10, 182, 11, 182, 12, 182, 13, 182, 14, 182, 15, 182, 16, 182, 17, 182, 18, 182, 19, 182, 20, 182, 21, 182, 22, 182, 23, 182, 24, 182, 25, 182, 26, 182, 27, 182, 28, 182, 29, 182, 30, 182, 31, 182, 32, 182, 33, 182, 34, 182, 35, 182, 36, 182, 37, 182, 38, 182, 39, 182, 40, 182, 41, 182, 42, 182, 43, 182, 44, 182, 45, 182, 46, 182, 47, 182, 48, 182, 49, 182, 50, 182, 51, 182, 52, 182, 53, 182, 54, 182, 171, 182, 172, 182, 173, 182, 174, 182, 175, 182, 176, 182, 177, 182, 178, 182, 179, 182, 180, 182, 181, 182, 182, 182, 183, 182, 184, 182, 185, 182, 186, 182, 187, 182, 188, 183, 3, 183, 4, 183, 5, 183, 6, 183, 7, 183, 8, 183, 9, 183, 10, 183, 11, 183, 12, 183, 13, 183, 14, 183, 15, 183, 16, 183, 17, 183, 18, 183, 19, 183, 20, 183, 21, 183, 22, 183, 23, 183, 24, 183, 25, 183, 26, 183, 27, 183, 28, 183, 29, 183, 30, 183, 31, 183, 32, 183, 33, 183, 34, 183, 35, 183, 36, 183, 37, 183, 38, 183, 39, 183, 40, 183, 41, 183, 42, 183, 43, 183, 44, 183, 45, 183, 46, 183, 47, 183, 48, 183, 49, 183, 50, 183, 51, 183, 52, 183, 53, 183, 54, 183, 171, 183, 172, 183, 173, 183, 174, 183, 175, 183, 176, 183, 177, 183, 178, 183, 179, 183, 180, 183, 181, 183, 182, 183, 183, 183, 184, 183, 185, 183, 186, 183, 187, 183, 188, 184, 3, 184, 4, 184, 5, 184, 6, 184, 7, 184, 8, 184, 9, 184, 10, 184, 11, 184, 12, 184, 13, 184, 14, 184, 15, 184, 16, 184, 17, 184, 18, 184, 19, 184, 20, 184, 21, 184, 22, 184, 23, 184, 24, 184, 25, 184, 26, 184, 27, 184, 28, 184, 29, 184, 30, 184, 31, 184, 32, 184, 33, 184, 34, 184, 35, 184, 36, 184, 37, 184, 38, 184, 39, 184, 40, 184, 41, 184, 42, 184, 43, 184, 44, 184, 45, 184, 46, 184, 47, 184, 48, 184, 49, 184, 50, 184, 51, 184, 52, 184, 53, 184, 54, 184, 171, 184, 172, 184, 173, 184, 174, 184, 175, 184, 176, 184, 177, 184, 178, 184, 179, 184, 180, 184, 181, 184, 182, 184, 183, 184, 184, 184, 185, 184, 186, 184, 187, 184, 188, 185, 3, 185, 4, 185, 5, 185, 6, 185, 7, 185, 8, 185, 9, 185, 10, 185, 11, 185, 12, 185, 13, 185, 14, 185, 15, 185, 16, 185, 17, 185, 18, 185, 19, 185, 20, 185, 21, 185, 22, 185, 23, 185, 24, 185, 25, 185, 26, 185, 27, 185, 28, 185, 29, 185, 30, 185, 31, 185, 32, 185, 33, 185, 34, 185, 35, 185, 36, 185, 37, 185, 38, 185, 39, 185, 40, 185, 41, 185, 42, 185, 43, 185, 44, 185, 45, 185, 46, 185, 47, 185, 48, 185, 49, 185, 50, 185, 51, 185, 52, 185, 53, 185, 54, 185, 171, 185, 172, 185, 173, 185, 174, 185, 175, 185, 176, 185, 177, 185, 178, 185, 179, 185, 180, 185, 181, 185, 182, 185, 183, 185, 184, 185, 185, 185, 186, 185, 187, 185, 188, 186, 3, 186, 4, 186, 5, 186, 6, 186, 7, 186, 8, 186, 9, 186, 10, 186, 11, 186, 12, 186, 13, 186, 14, 186, 15, 186, 16, 186, 17, 186, 18, 186, 19, 186, 20, 186, 21, 186, 22, 186, 23, 186, 24, 186, 25, 186, 26, 186, 27, 186, 28, 186, 29, 186, 30, 186, 31, 186, 32, 186, 33, 186, 34, 186, 35, 186, 36, 186, 37, 186, 38, 186, 39, 186, 40, 186, 41, 186, 42, 186, 43, 186, 44, 186, 45, 186, 46, 186, 47, 186, 48, 186, 49, 186, 50, 186, 51, 186, 52, 186, 53, 186, 54, 186, 171, 186, 172, 186, 173, 186, 174, 186, 175, 186, 176, 186, 177, 186, 178, 186, 179, 186, 180, 186, 181, 186, 182, 186, 183, 186, 184, 186, 185, 186, 186, 186, 187, 186, 188, 187, 3, 187, 4, 187, 5, 187, 6, 187, 7, 187, 8, 187, 9, 187, 10, 187, 11, 187, 12, 187, 13, 187, 14, 187, 15, 187, 16, 187, 17, 187, 18, 187, 19, 187, 20, 187, 21, 187, 22, 187, 23, 187, 24, 187, 25, 187, 26, 187, 27, 187, 28, 187, 29, 187, 30, 187, 31, 187, 32, 187, 33, 187, 34, 187, 35, 187, 36, 187, 37, 187, 38, 187, 39, 187, 40, 187, 41, 187, 42, 187, 43, 187, 44, 187, 45, 187, 46, 187, 47, 187, 48, 187, 49, 187, 50, 187, 51, 187, 52, 187, 53, 187, 54, 187, 171, 187, 172, 187, 173, 187, 174, 187, 175, 187, 176, 187, 177, 187, 178, 187, 179, 187, 180, 187, 181, 187, 182, 187, 183, 187, 184, 187, 185, 187, 186, 187, 187, 187, 188, 188, 3, 188, 4, 188, 5, 188, 6, 188, 7, 188, 8, 188, 9, 188, 10, 188, 11, 188, 12, 188, 13, 188, 14, 188, 15, 188, 16, 188, 17, 188, 18, 188, 19, 188, 20, 188, 21, 188, 22, 188, 23, 188, 24, 188, 25, 188, 26, 188, 27, 188, 28, 188, 29, 188, 30, 188, 31, 188, 32, 188, 33, 188, 34, 188, 35, 188, 36, 188, 37, 188, 38, 188, 39, 188, 40, 188, 41, 188, 42, 188, 43, 188, 44, 188, 45, 188, 46, 188, 47, 188, 48, 188, 49, 188, 50, 188, 51, 188, 52, 188, 53, 188, 54, 188, 171, 188, 172, 188, 173, 188, 174, 188, 175, 188, 176, 188, 177, 188, 178, 188, 179, 188, 180, 188, 181, 188, 182, 188, 183, 188, 184, 188, 185, 188, 186, 188, 187, 188, 188, 189, 3, 189, 4, 189, 5, 189, 6, 189, 7, 189, 8, 189, 9, 189, 10, 189, 11, 189, 12, 189, 13, 189, 14, 189, 15, 189, 16, 189, 17, 189, 18, 189, 19, 189, 20, 189, 21, 189, 22, 189, 23, 189, 24, 189, 25, 189, 26, 189, 27, 189, 28, 189, 29, 189, 30, 189, 31, 189, 32, 189, 33, 189, 34, 189, 35, 189, 36, 189, 37, 189, 38, 189, 39, 189, 40, 189, 41, 189, 42, 189, 43, 189, 44, 189, 45, 189, 46, 189, 47, 189, 48, 189, 49, 189, 50, 189, 51, 189, 52, 189, 53, 189, 54, 189, 55, 189, 171, 189, 172, 189, 173, 189, 174, 189, 175, 189, 176, 189, 177, 189, 178, 189, 179, 189, 180, 189, 181, 189, 182, 189, 183, 189, 184, 189, 185, 189, 186, 189, 187, 189, 188, 190, 3, 190, 4, 190, 5, 190, 6, 190, 7, 190, 8, 190, 9, 190, 10, 190, 11, 190, 12, 190, 13, 190, 14, 190, 15, 190, 16, 190, 17, 190, 18, 190, 19, 190, 20, 190, 21, 190, 22, 190, 23, 190, 24, 190, 25, 190, 26, 190, 27, 190, 28, 190, 29, 190, 30, 190, 31, 190, 32, 190, 33, 190, 34, 190, 35, 190, 36, 190, 37, 190, 38, 190, 39, 190, 40, 190, 41, 190, 42, 190, 43, 190, 44, 190, 45, 190, 46, 190, 47, 190, 48, 190, 49, 190, 50, 190, 51, 190, 52, 190, 53, 190, 54, 190, 55, 190, 171, 190, 172, 190, 173, 190, 174, 190, 175, 190, 176, 190, 177, 190, 178, 190, 179, 190, 180, 190, 181, 190, 182, 190, 183, 190, 184, 190, 185, 190, 186, 190, 187, 190, 188, 191, 3, 191, 4, 191, 5, 191, 6, 191, 7, 191, 8, 191, 9, 191, 10, 191, 11, 191, 12, 191, 13, 191, 14, 191, 15, 191, 16, 191, 17, 191, 18, 191, 19, 191, 20, 191, 21, 191, 22, 191, 23, 191, 24, 191, 25, 191, 26, 191, 27, 191, 28, 191, 29, 191, 30, 191, 31, 191, 32, 191, 33, 191, 34, 191, 35, 191, 36, 191, 37, 191, 38, 191, 39, 191, 40, 191, 41, 191, 42, 191, 43, 191, 44, 191, 45, 191, 46, 191, 47, 191, 48, 191, 49, 191, 50, 191, 51, 191, 52, 191, 53, 191, 54, 191, 55, 191, 171, 191, 172, 191, 173, 191, 174, 191, 175, 191, 176, 191, 177, 191, 178, 191, 179, 191, 180, 191, 181, 191, 182, 191, 183, 191, 184, 191, 185, 191, 186, 191, 187, 191, 188, 192, 3, 192, 4, 192, 5, 192, 6, 192, 7, 192, 8, 192, 9, 192, 10, 192, 11, 192, 12, 192, 13, 192, 14, 192, 15, 192, 16, 192, 17, 192, 18, 192, 19, 192, 20, 192, 21, 192, 22, 192, 23, 192, 24, 192, 25, 192, 26, 192, 27, 192, 28, 192, 29, 192, 30, 192, 31, 192, 32, 192, 33, 192, 34, 192, 35, 192, 36, 192, 37, 192, 38, 192, 39, 192, 40, 192, 41, 192, 42, 192, 43, 192, 44, 192, 45, 192, 46, 192, 47, 192, 48, 192, 49, 192, 50, 192, 51, 192, 52, 192, 53, 192, 54, 192, 55, 192, 171, 192, 172, 192, 173, 192, 174, 192, 175, 192, 176, 192, 177, 192, 178, 192, 179, 192, 180, 192, 181, 192, 182, 192, 183, 192, 184, 192, 185, 192, 186, 192, 187, 192, 188, 193, 3, 193, 4, 193, 5, 193, 6, 193, 7, 193, 8, 193, 9, 193, 10, 193, 11, 193, 12, 193, 13, 193, 14, 193, 15, 193, 16, 193, 17, 193, 18, 193, 19, 193, 20, 193, 21, 193, 22, 193, 23, 193, 24, 193, 25, 193, 26, 193, 27, 193, 28, 193, 29, 193, 30, 193, 31, 193, 32, 193, 33, 193, 34, 193, 35, 193, 36, 193, 37, 193, 38, 193, 39, 193, 40, 193, 41, 193, 42, 193, 43, 193, 44, 193, 45, 193, 46, 193, 47, 193, 48, 193, 49, 193, 50, 193, 51, 193, 52, 193, 53, 193, 54, 193, 55, 193, 171, 193, 172, 193, 173, 193, 174, 193, 175, 193, 176, 193, 177, 193, 178, 193, 179, 193, 180, 193, 181, 193, 182, 193, 183, 193, 184, 193, 185, 193, 186, 193, 187, 193, 188, 194, 3, 194, 4, 194, 5, 194, 6, 194, 7, 194, 8, 194, 9, 194, 10, 194, 11, 194, 12, 194, 13, 194, 14, 194, 15, 194, 16, 194, 17, 194, 18, 194, 19, 194, 20, 194, 21, 194, 22, 194, 23, 194, 24, 194, 25, 194, 26, 194, 27, 194, 28, 194, 29, 194, 30, 194, 31, 194, 32, 194, 33, 194, 34, 194, 35, 194, 36, 194, 37, 194, 38, 194, 39, 194, 40, 194, 41, 194, 42, 194, 43, 194, 44, 194, 45, 194, 46, 194, 47, 194, 48, 194, 49, 194, 50, 194, 51, 194, 52, 194, 53, 194, 54, 194, 55, 194, 56, 194, 171, 194, 172, 194, 173, 194, 174, 194, 175, 194, 176, 194, 177, 194, 178, 194, 179, 194, 180, 194, 181, 194, 182, 194, 183, 194, 184, 194, 185, 194, 186, 194, 187, 194, 188, 195, 3, 195, 4, 195, 5, 195, 6, 195, 7, 195, 8, 195, 9, 195, 10, 195, 11, 195, 12, 195, 13, 195, 14, 195, 15, 195, 16, 195, 17, 195, 18, 195, 19, 195, 20, 195, 21, 195, 22, 195, 23, 195, 24, 195, 25, 195, 26, 195, 27, 195, 28, 195, 29, 195, 30, 195, 31, 195, 32, 195, 33, 195, 34, 195, 35, 195, 36, 195, 37, 195, 38, 195, 39, 195, 40, 195, 41, 195, 42, 195, 43, 195, 44, 195, 45, 195, 46, 195, 47, 195, 48, 195, 49, 195, 50, 195, 51, 195, 52, 195, 53, 195, 54, 195, 55, 195, 56, 195, 171, 195, 172, 195, 173, 195, 174, 195, 175, 195, 176, 195, 177, 195, 178, 195, 179, 195, 180, 195, 181, 195, 182, 195, 183, 195, 184, 195, 185, 195, 186, 195, 187, 195, 188, 196, 3, 196, 4, 196, 5, 196, 6, 196, 7, 196, 8, 196, 9, 196, 10, 196, 11, 196, 12, 196, 13, 196, 14, 196, 15, 196, 16, 196, 17, 196, 18, 196, 19, 196, 20, 196, 21, 196, 22, 196, 23, 196, 24, 196, 25, 196, 26, 196, 27, 196, 28, 196, 29, 196, 30, 196, 31, 196, 32, 196, 33, 196, 34, 196, 35, 196, 36, 196, 37, 196, 38, 196, 39, 196, 40, 196, 41, 196, 42, 196, 43, 196, 44, 196, 45, 196, 46, 196, 47, 196, 48, 196, 49, 196, 50, 196, 51, 196, 52, 196, 53, 196, 54, 196, 55, 196, 56, 196, 171, 196, 172, 196, 173, 196, 174, 196, 175, 196, 176, 196, 177, 196, 178, 196, 179, 196, 180, 196, 181, 196, 182, 196, 183, 196, 184, 196, 185, 196, 186, 196, 187, 196, 188, 197, 3, 197, 4, 197, 5, 197, 6, 197, 7, 197, 8, 197, 9, 197, 10, 197, 11, 197, 12, 197, 13, 197, 14, 197, 15, 197, 16, 197, 17, 197, 18, 197, 19, 197, 20, 197, 21, 197, 22, 197, 23, 197, 24, 197, 25, 197, 26, 197, 27, 197, 28, 197, 29, 197, 30, 197, 31, 197, 32, 197, 33, 197, 34, 197, 35, 197, 36, 197, 37, 197, 38, 197, 39, 197, 40, 197, 41, 197, 42, 197, 43, 197, 44, 197, 45, 197, 46, 197, 47, 197, 48, 197, 49, 197, 50, 197, 51, 197, 52, 197, 53, 197, 54, 197, 55, 197, 56, 197, 171, 197, 172, 197, 173, 197, 174, 197, 175, 197, 176, 197, 177, 197, 178, 197, 179, 197, 180, 197, 181, 197, 182, 197, 183, 197, 184, 197, 185, 197, 186, 197, 187, 197, 188, 198, 3, 198, 4, 198, 5, 198, 6, 198, 7, 198, 8, 198, 9, 198, 10, 198, 11, 198, 12, 198, 13, 198, 14, 198, 15, 198, 16, 198, 17, 198, 18, 198, 19, 198, 20, 198, 21, 198, 22, 198, 23, 198, 24, 198, 25, 198, 26, 198, 27, 198, 28, 198, 29, 198, 30, 198, 31, 198, 32, 198, 33, 198, 34, 198, 35, 198, 36, 198, 37, 198, 38, 198, 39, 198, 40, 198, 41, 198, 42, 198, 43, 198, 44, 198, 45, 198, 46, 198, 47, 198, 48, 198, 49, 198, 50, 198, 51, 198, 52, 198, 53, 198, 54, 198, 55, 198, 56, 198, 57, 198, 170, 198, 171, 198, 172, 198, 173, 198, 174, 198, 175, 198, 176, 198, 177, 198, 178, 198, 179, 198, 180, 198, 181, 198, 182, 198, 183, 198, 184, 198, 185, 198, 186, 198, 187, 198, 188, 199, 3, 199, 4, 199, 5, 199, 6, 199, 7, 199, 8, 199, 9, 199, 10, 199, 11, 199, 12, 199, 13, 199, 14, 199, 15, 199, 16, 199, 17, 199, 18, 199, 19, 199, 20, 199, 21, 199, 22, 199, 23, 199, 24, 199, 25, 199, 26, 199, 27, 199, 28, 199, 29, 199, 30, 199, 31, 199, 32, 199, 33, 199, 34, 199, 35, 199, 36, 199, 37, 199, 38, 199, 39, 199, 40, 199, 41, 199, 42, 199, 43, 199, 44, 199, 45, 199, 46, 199, 47, 199, 48, 199, 49, 199, 50, 199, 51, 199, 52, 199, 53, 199, 54, 199, 55, 199, 56, 199, 57, 199, 58, 199, 59, 199, 60, 199, 170, 199, 171, 199, 172, 199, 173, 199, 174, 199, 175, 199, 176, 199, 177, 199, 178, 199, 179, 199, 180, 199, 181, 199, 182, 199, 183, 199, 184, 199, 185, 199, 186, 199, 187, 199, 188, 200, 3, 200, 4, 200, 5, 200, 6, 200, 7, 200, 8, 200, 9, 200, 10, 200, 11, 200, 12, 200, 13, 200, 14, 200, 15, 200, 16, 200, 17, 200, 18, 200, 19, 200, 20, 200, 21, 200, 22, 200, 23, 200, 24, 200, 25, 200, 26, 200, 27, 200, 28, 200, 29, 200, 30, 200, 31, 200, 32, 200, 33, 200, 34, 200, 35, 200, 36, 200, 37, 200, 38, 200, 39, 200, 40, 200, 41, 200, 42, 200, 43, 200, 44, 200, 45, 200, 46, 200, 47, 200, 48, 200, 49, 200, 50, 200, 51, 200, 52, 200, 53, 200, 54, 200, 55, 200, 56, 200, 57, 200, 58, 200, 59, 200, 60, 200, 61, 200, 62, 200, 63, 200, 170, 200, 171, 200, 172, 200, 173, 200, 174, 200, 175, 200, 176, 200, 177, 200, 178, 200, 179, 200, 180, 200, 181, 200, 182, 200, 183, 200, 184, 200, 185, 200, 186, 200, 187, 200, 188, 201, 3, 201, 4, 201, 5, 201, 6, 201, 7, 201, 8, 201, 9, 201, 10, 201, 11, 201, 12, 201, 13, 201, 14, 201, 15, 201, 16, 201, 17, 201, 18, 201, 19, 201, 20, 201, 21, 201, 22, 201, 23, 201, 24, 201, 25, 201, 26, 201, 27, 201, 28, 201, 29, 201, 30, 201, 31, 201, 32, 201, 33, 201, 34, 201, 35, 201, 36, 201, 37, 201, 38, 201, 39, 201, 40, 201, 41, 201, 42, 201, 43, 201, 44, 201, 45, 201, 46, 201, 47, 201, 48, 201, 49, 201, 50, 201, 51, 201, 52, 201, 53, 201, 54, 201, 55, 201, 56, 201, 57, 201, 58, 201, 59, 201, 60, 201, 61, 201, 62, 201, 63, 201, 64, 201, 65, 201, 66, 201, 170, 201, 171, 201, 172, 201, 173, 201, 174, 201, 175, 201, 176, 201, 177, 201, 178, 201, 179, 201, 180, 201, 181, 201, 182, 201, 183, 201, 184, 201, 185, 201, 186, 201, 187, 201, 188, 202, 3, 202, 4, 202, 5, 202, 6, 202, 7, 202, 8, 202, 9, 202, 10, 202, 11, 202, 12, 202, 13, 202, 14, 202, 15, 202, 16, 202, 17, 202, 18, 202, 19, 202, 20, 202, 21, 202, 22, 202, 23, 202, 24, 202, 25, 202, 26, 202, 27, 202, 28, 202, 29, 202, 30, 202, 31, 202, 32, 202, 33, 202, 34, 202, 35, 202, 36, 202, 37, 202, 38, 202, 39, 202, 40, 202, 41, 202, 42, 202, 43, 202, 44, 202, 45, 202, 46, 202, 47, 202, 48, 202, 49, 202, 50, 202, 51, 202, 52, 202, 53, 202, 54, 202, 55, 202, 56, 202, 57, 202, 58, 202, 59, 202, 60, 202, 61, 202, 62, 202, 63, 202, 64, 202, 65, 202, 66, 202, 67, 202, 68, 202, 69, 202, 70, 202, 170, 202, 171, 202, 172, 202, 173, 202, 174, 202, 175, 202, 176, 202, 177, 202, 178, 202, 179, 202, 180, 202, 181, 202, 182, 202, 183, 202, 184, 202, 185, 202, 186, 202, 187, 202, 188, 203, 3, 203, 4, 203, 5, 203, 6, 203, 7, 203, 8, 203, 9, 203, 10, 203, 11, 203, 12, 203, 13, 203, 14, 203, 15, 203, 16, 203, 17, 203, 18, 203, 19, 203, 20, 203, 21, 203, 22, 203, 23, 203, 24, 203, 25, 203, 26, 203, 27, 203, 28, 203, 29, 203, 30, 203, 31, 203, 32, 203, 33, 203, 34, 203, 35, 203, 36, 203, 37, 203, 38, 203, 39, 203, 40, 203, 41, 203, 42, 203, 43, 203, 44, 203, 45, 203, 46, 203, 47, 203, 48, 203, 49, 203, 50, 203, 51, 203, 52, 203, 53, 203, 54, 203, 55, 203, 56, 203, 57, 203, 58, 203, 59, 203, 60, 203, 61, 203, 62, 203, 63, 203, 64, 203, 65, 203, 66, 203, 67, 203, 68, 203, 69, 203, 70, 203, 71, 203, 72, 203, 73, 203, 74, 203, 75, 203, 170, 203, 171, 203, 172, 203, 173, 203, 174, 203, 175, 203, 176, 203, 177, 203, 178, 203, 179, 203, 180, 203, 181, 203, 182, 203, 183, 203, 184, 203, 185, 203, 186, 203, 187, 203, 188, 204, 3, 204, 4, 204, 5, 204, 6, 204, 7, 204, 8, 204, 9, 204, 10, 204, 11, 204, 12, 204, 13, 204, 14, 204, 15, 204, 16, 204, 17, 204, 18, 204, 19, 204, 20, 204, 21, 204, 22, 204, 23, 204, 24, 204, 25, 204, 26, 204, 27, 204, 28, 204, 29, 204, 30, 204, 31, 204, 32, 204, 33, 204, 34, 204, 35, 204, 36, 204, 37, 204, 38, 204, 39, 204, 40, 204, 41, 204, 42, 204, 43, 204, 44, 204, 45, 204, 46, 204, 47, 204, 48, 204, 49, 204, 50, 204, 51, 204, 52, 204, 53, 204, 54, 204, 55, 204, 56, 204, 57, 204, 58, 204, 59, 204, 60, 204, 61, 204, 62, 204, 63, 204, 64, 204, 65, 204, 66, 204, 67, 204, 68, 204, 69, 204, 70, 204, 71, 204, 72, 204, 73, 204, 74, 204, 75, 204, 76, 204, 77, 204, 78, 204, 79, 204, 170, 204, 171, 204, 172, 204, 173, 204, 174, 204, 175, 204, 176, 204, 177, 204, 178, 204, 179, 204, 180, 204, 181, 204, 182, 204, 183, 204, 184, 204, 185, 204, 186, 204, 187, 204, 188, 205, 3, 205, 4, 205, 5, 205, 6, 205, 7, 205, 8, 205, 9, 205, 10, 205, 11, 205, 12, 205, 13, 205, 14, 205, 15, 205, 16, 205, 17, 205, 18, 205, 19, 205, 20, 205, 21, 205, 22, 205, 23, 205, 24, 205, 25, 205, 26, 205, 27, 205, 28, 205, 29, 205, 30, 205, 31, 205, 32, 205, 33, 205, 34, 205, 35, 205, 36, 205, 37, 205, 38, 205, 39, 205, 40, 205, 41, 205, 42, 205, 43, 205, 44, 205, 45, 205, 46, 205, 47, 205, 48, 205, 49, 205, 50, 205, 51, 205, 52, 205, 53, 205, 54, 205, 55, 205, 56, 205, 57, 205, 58, 205, 59, 205, 60, 205, 61, 205, 62, 205, 63, 205, 64, 205, 65, 205, 66, 205, 67, 205, 68, 205, 69, 205, 70, 205, 71, 205, 72, 205, 73, 205, 74, 205, 75, 205, 76, 205, 77, 205, 78, 205, 79, 205, 80, 205, 81, 205, 82, 205, 83, 205, 84, 205, 85, 205, 86, 205, 87, 205, 170, 205, 171, 205, 172, 205, 173, 205, 174, 205, 175, 205, 176, 205, 177, 205, 178, 205, 179, 205, 180, 205, 181, 205, 182, 205, 183, 205, 184, 205, 185, 205, 186, 205, 187, 205, 188, 206, 3, 206, 4, 206, 5, 206, 6, 206, 7, 206, 8, 206, 9, 206, 10, 206, 11, 206, 12, 206, 13, 206, 14, 206, 15, 206, 16, 206, 17, 206, 18, 206, 19, 206, 20, 206, 21, 206, 22, 206, 23, 206, 24, 206, 25, 206, 26, 206, 27, 206, 28, 206, 29, 206, 30, 206, 31, 206, 32, 206, 33, 206, 34, 206, 35, 206, 36, 206, 37, 206, 38, 206, 39, 206, 40, 206, 41, 206, 42, 206, 43, 206, 44, 206, 45, 206, 46, 206, 47, 206, 48, 206, 49, 206, 50, 206, 51, 206, 52, 206, 53, 206, 54, 206, 55, 206, 56, 206, 57, 206, 58, 206, 59, 206, 60, 206, 61, 206, 62, 206, 63, 206, 64, 206, 65, 206, 66, 206, 67, 206, 68, 206, 69, 206, 70, 206, 71, 206, 72, 206, 73, 206, 74, 206, 75, 206, 76, 206, 77, 206, 78, 206, 79, 206, 80, 206, 81, 206, 82, 206, 83, 206, 84, 206, 85, 206, 86, 206, 87, 206, 88, 206, 89, 206, 170, 206, 171, 206, 172, 206, 173, 206, 174, 206, 175, 206, 176, 206, 177, 206, 178, 206, 179, 206, 180, 206, 181, 206, 182, 206, 183, 206, 184, 206, 185, 206, 186, 206, 187, 206, 188, 207, 3, 207, 4, 207, 5, 207, 6, 207, 7, 207, 8, 207, 9, 207, 10, 207, 11, 207, 12, 207, 13, 207, 14, 207, 15, 207, 16, 207, 17, 207, 18, 207, 19, 207, 20, 207, 21, 207, 22, 207, 23, 207, 24, 207, 25, 207, 26, 207, 27, 207, 28, 207, 29, 207, 30, 207, 31, 207, 32, 207, 33, 207, 34, 207, 35, 207, 36, 207, 37, 207, 38, 207, 39, 207, 40, 207, 41, 207, 42, 207, 43, 207, 44, 207, 45, 207, 46, 207, 47, 207, 48, 207, 49, 207, 50, 207, 51, 207, 52, 207, 53, 207, 54, 207, 55, 207, 56, 207, 57, 207, 58, 207, 59, 207, 60, 207, 61, 207, 62, 207, 63, 207, 64, 207, 65, 207, 66, 207, 67, 207, 68, 207, 69, 207, 70, 207, 71, 207, 72, 207, 73, 207, 74, 207, 75, 207, 76, 207, 77, 207, 78, 207, 79, 207, 80, 207, 81, 207, 82, 207, 83, 207, 84, 207, 85, 207, 86, 207, 87, 207, 88, 207, 89, 207, 90, 207, 170, 207, 171, 207, 172, 207, 173, 207, 174, 207, 175, 207, 176, 207, 177, 207, 178, 207, 179, 207, 180, 207, 181, 207, 182, 207, 183, 207, 184, 207, 185, 207, 186, 207, 187, 207, 188, 208, 3, 208, 4, 208, 5, 208, 6, 208, 7, 208, 8, 208, 9, 208, 10, 208, 11, 208, 12, 208, 13, 208, 14, 208, 15, 208, 16, 208, 17, 208, 18, 208, 19, 208, 20, 208, 21, 208, 22, 208, 23, 208, 24, 208, 25, 208, 26, 208, 27, 208, 28, 208, 29, 208, 30, 208, 31, 208, 32, 208, 33, 208, 34, 208, 35, 208, 36, 208, 37, 208, 38, 208, 39, 208, 40, 208, 41, 208, 42, 208, 43, 208, 44, 208, 45, 208, 46, 208, 47, 208, 48, 208, 49, 208, 50, 208, 51, 208, 52, 208, 53, 208, 54, 208, 55, 208, 56, 208, 57, 208, 58, 208, 59, 208, 60, 208, 61, 208, 62, 208, 63, 208, 64, 208, 65, 208, 66, 208, 67, 208, 68, 208, 69, 208, 70, 208, 71, 208, 72, 208, 73, 208, 74, 208, 75, 208, 76, 208, 77, 208, 78, 208, 79, 208, 80, 208, 81, 208, 82, 208, 83, 208, 84, 208, 85, 208, 86, 208, 87, 208, 88, 208, 89, 208, 90, 208, 91, 208, 170, 208, 171, 208, 172, 208, 173, 208, 174, 208, 175, 208, 176, 208, 177, 208, 178, 208, 179, 208, 180, 208, 181, 208, 182, 208, 183, 208, 184, 208, 185, 208, 186, 208, 187, 208, 188, 209, 3, 209, 4, 209, 5, 209, 6, 209, 7, 209, 8, 209, 9, 209, 10, 209, 11, 209, 12, 209, 13, 209, 14, 209, 15, 209, 16, 209, 17, 209, 18, 209, 19, 209, 20, 209, 21, 209, 22, 209, 23, 209, 24, 209, 25, 209, 26, 209, 27, 209, 28, 209, 29, 209, 30, 209, 31, 209, 32, 209, 33, 209, 34, 209, 35, 209, 36, 209, 37, 209, 38, 209, 39, 209, 40, 209, 41, 209, 42, 209, 43, 209, 44, 209, 45, 209, 46, 209, 47, 209, 48, 209, 49, 209, 50, 209, 51, 209, 52, 209, 53, 209, 54, 209, 55, 209, 56, 209, 57, 209, 58, 209, 59, 209, 60, 209, 61, 209, 62, 209, 63, 209, 64, 209, 65, 209, 66, 209, 67, 209, 68, 209, 69, 209, 70, 209, 71, 209, 72, 209, 73, 209, 74, 209, 75, 209, 76, 209, 77, 209, 78, 209, 79, 209, 80, 209, 81, 209, 82, 209, 83, 209, 84, 209, 85, 209, 86, 209, 87, 209, 88, 209, 89, 209, 90, 209, 91, 209, 169, 209, 170, 209, 171, 209, 172, 209, 173, 209, 174, 209, 175, 209, 176, 209, 177, 209, 178, 209, 179, 209, 180, 209, 181, 209, 182, 209, 183, 209, 184, 209, 185, 209, 186, 209, 187, 209, 188, 210, 3, 210, 4, 210, 5, 210, 6, 210, 7, 210, 8, 210, 9, 210, 10, 210, 11, 210, 12, 210, 13, 210, 14, 210, 15, 210, 16, 210, 17, 210, 18, 210, 19, 210, 20, 210, 21, 210, 22, 210, 23, 210, 24, 210, 25, 210, 26, 210, 27, 210, 28, 210, 29, 210, 30, 210, 31, 210, 32, 210, 33, 210, 34, 210, 35, 210, 36, 210, 37, 210, 38, 210, 39, 210, 40, 210, 41, 210, 42, 210, 43, 210, 44, 210, 45, 210, 46, 210, 47, 210, 48, 210, 49, 210, 50, 210, 51, 210, 52, 210, 53, 210, 54, 210, 55, 210, 56, 210, 57, 210, 58, 210, 59, 210, 60, 210, 61, 210, 62, 210, 63, 210, 64, 210, 65, 210, 66, 210, 67, 210, 68, 210, 69, 210, 70, 210, 71, 210, 72, 210, 73, 210, 74, 210, 75, 210, 76, 210, 77, 210, 78, 210, 79, 210, 80, 210, 81, 210, 82, 210, 83, 210, 84, 210, 85, 210, 86, 210, 87, 210, 88, 210, 89, 210, 90, 210, 91, 210, 92, 210, 169, 210, 170, 210, 171, 210, 172, 210, 173, 210, 174, 210, 175, 210, 176, 210, 177, 210, 178, 210, 179, 210, 180, 210, 181, 210, 182, 210, 183, 210, 184, 210, 185, 210, 186, 210, 187, 210, 188, 211, 3, 211, 4, 211, 5, 211, 6, 211, 7, 211, 8, 211, 9, 211, 10, 211, 11, 211, 12, 211, 13, 211, 14, 211, 15, 211, 16, 211, 17, 211, 18, 211, 19, 211, 20, 211, 21, 211, 22, 211, 23, 211, 24, 211, 25, 211, 26, 211, 27, 211, 28, 211, 29, 211, 30, 211, 31, 211, 32, 211, 33, 211, 34, 211, 35, 211, 36, 211, 37, 211, 38, 211, 39, 211, 40, 211, 41, 211, 42, 211, 43, 211, 44, 211, 45, 211, 46, 211, 47, 211, 48, 211, 49, 211, 50, 211, 51, 211, 52, 211, 53, 211, 54, 211, 55, 211, 56, 211, 57, 211, 58, 211, 59, 211, 60, 211, 61, 211, 62, 211, 63, 211, 64, 211, 65, 211, 66, 211, 67, 211, 68, 211, 69, 211, 70, 211, 71, 211, 72, 211, 73, 211, 74, 211, 75, 211, 76, 211, 77, 211, 78, 211, 79, 211, 80, 211, 81, 211, 82, 211, 83, 211, 84, 211, 85, 211, 86, 211, 87, 211, 88, 211, 89, 211, 90, 211, 91, 211, 92, 211, 93, 211, 169, 211, 170, 211, 171, 211, 172, 211, 173, 211, 174, 211, 175, 211, 176, 211, 177, 211, 178, 211, 179, 211, 180, 211, 181, 211, 182, 211, 183, 211, 184, 211, 185, 211, 186, 211, 187, 211, 188, 212, 3, 212, 4, 212, 5, 212, 6, 212, 7, 212, 8, 212, 9, 212, 10, 212, 11, 212, 12, 212, 13, 212, 14, 212, 15, 212, 16, 212, 17, 212, 18, 212, 19, 212, 20, 212, 21, 212, 22, 212, 23, 212, 24, 212, 25, 212, 26, 212, 27, 212, 28, 212, 29, 212, 30, 212, 31, 212, 32, 212, 33, 212, 34, 212, 35, 212, 36, 212, 37, 212, 38, 212, 39, 212, 40, 212, 41, 212, 42, 212, 43, 212, 44, 212, 45, 212, 46, 212, 47, 212, 48, 212, 49, 212, 50, 212, 51, 212, 52, 212, 53, 212, 54, 212, 55, 212, 56, 212, 57, 212, 58, 212, 59, 212, 60, 212, 61, 212, 62, 212, 63, 212, 64, 212, 65, 212, 66, 212, 67, 212, 68, 212, 69, 212, 70, 212, 71, 212, 72, 212, 73, 212, 74, 212, 75, 212, 76, 212, 77, 212, 78, 212, 79, 212, 80, 212, 81, 212, 82, 212, 83, 212, 84, 212, 85, 212, 86, 212, 87, 212, 88, 212, 89, 212, 90, 212, 91, 212, 92, 212, 93, 212, 94, 212, 169, 212, 170, 212, 171, 212, 172, 212, 173, 212, 174, 212, 175, 212, 176, 212, 177, 212, 178, 212, 179, 212, 180, 212, 181, 212, 182, 212, 183, 212, 184, 212, 185, 212, 186, 212, 187, 212, 188, 213, 3, 213, 4, 213, 5, 213, 6, 213, 7, 213, 8, 213, 9, 213, 10, 213, 11, 213, 12, 213, 13, 213, 14, 213, 15, 213, 16, 213, 17, 213, 18, 213, 19, 213, 20, 213, 21, 213, 22, 213, 23, 213, 24, 213, 25, 213, 26, 213, 27, 213, 28, 213, 29, 213, 30, 213, 31, 213, 32, 213, 33, 213, 34, 213, 35, 213, 36, 213, 37, 213, 38, 213, 39, 213, 40, 213, 41, 213, 42, 213, 43, 213, 44, 213, 45, 213, 46, 213, 47, 213, 48, 213, 49, 213, 50, 213, 51, 213, 52, 213, 53, 213, 54, 213, 55, 213, 56, 213, 57, 213, 58, 213, 59, 213, 60, 213, 61, 213, 62, 213, 63, 213, 64, 213, 65, 213, 66, 213, 67, 213, 68, 213, 69, 213, 70, 213, 71, 213, 72, 213, 73, 213, 74, 213, 75, 213, 76, 213, 77, 213, 78, 213, 79, 213, 80, 213, 81, 213, 82, 213, 83, 213, 84, 213, 85, 213, 86, 213, 87, 213, 88, 213, 89, 213, 90, 213, 91, 213, 92, 213, 93, 213, 94, 213, 95, 213, 169, 213, 170, 213, 171, 213, 172, 213, 173, 213, 174, 213, 175, 213, 176, 213, 177, 213, 178, 213, 179, 213, 180, 213, 181, 213, 182, 213, 183, 213, 184, 213, 185, 213, 186, 213, 187, 213, 188, 214, 3, 214, 4, 214, 5, 214, 6, 214, 7, 214, 8, 214, 9, 214, 10, 214, 11, 214, 12, 214, 13, 214, 14, 214, 15, 214, 16, 214, 17, 214, 18, 214, 19, 214, 20, 214, 21, 214, 22, 214, 23, 214, 24, 214, 25, 214, 26, 214, 27, 214, 28, 214, 29, 214, 30, 214, 31, 214, 32, 214, 33, 214, 34, 214, 35, 214, 36, 214, 37, 214, 38, 214, 39, 214, 40, 214, 41, 214, 42, 214, 43, 214, 44, 214, 45, 214, 46, 214, 47, 214, 48, 214, 49, 214, 50, 214, 51, 214, 52, 214, 53, 214, 54, 214, 55, 214, 56, 214, 57, 214, 58, 214, 59, 214, 60, 214, 61, 214, 62, 214, 63, 214, 64, 214, 65, 214, 66, 214, 67, 214, 68, 214, 69, 214, 70, 214, 71, 214, 72, 214, 73, 214, 74, 214, 75, 214, 76, 214, 77, 214, 78, 214, 79, 214, 80, 214, 81, 214, 82, 214, 83, 214, 84, 214, 85, 214, 86, 214, 87, 214, 88, 214, 89, 214, 90, 214, 91, 214, 92, 214, 93, 214, 94, 214, 95, 214, 169, 214, 170, 214, 171, 214, 172, 214, 173, 214, 174, 214, 175, 214, 176, 214, 177, 214, 178, 214, 179, 214, 180, 214, 181, 214, 182, 214, 183, 214, 184, 214, 185, 214, 186, 214, 187, 214, 188, 215, 3, 215, 4, 215, 5, 215, 6, 215, 7, 215, 8, 215, 9, 215, 10, 215, 11, 215, 12, 215, 13, 215, 14, 215, 15, 215, 16, 215, 17, 215, 18, 215, 19, 215, 20, 215, 21, 215, 22, 215, 23, 215, 24, 215, 25, 215, 26, 215, 27, 215, 28, 215, 29, 215, 30, 215, 31, 215, 32, 215, 33, 215, 34, 215, 35, 215, 36, 215, 37, 215, 38, 215, 39, 215, 40, 215, 41, 215, 42, 215, 43, 215, 44, 215, 45, 215, 46, 215, 47, 215, 48, 215, 49, 215, 50, 215, 51, 215, 52, 215, 53, 215, 54, 215, 55, 215, 56, 215, 57, 215, 58, 215, 59, 215, 60, 215, 61, 215, 62, 215, 63, 215, 64, 215, 65, 215, 66, 215, 67, 215, 68, 215, 69, 215, 70, 215, 71, 215, 72, 215, 73, 215, 74, 215, 75, 215, 76, 215, 77, 215, 78, 215, 79, 215, 80, 215, 81, 215, 82, 215, 83, 215, 84, 215, 85, 215, 86, 215, 87, 215, 88, 215, 89, 215, 90, 215, 91, 215, 92, 215, 93, 215, 94, 215, 95, 215, 96, 215, 169, 215, 170, 215, 171, 215, 172, 215, 173, 215, 174, 215, 175, 215, 176, 215, 177, 215, 178, 215, 179, 215, 180, 215, 181, 215, 182, 215, 183, 215, 184, 215, 185, 215, 186, 215, 187, 215, 188, 216, 3, 216, 4, 216, 5, 216, 6, 216, 7, 216, 8, 216, 9, 216, 10, 216, 11, 216, 12, 216, 13, 216, 14, 216, 15, 216, 16, 216, 17, 216, 18, 216, 19, 216, 20, 216, 21, 216, 22, 216, 23, 216, 24, 216, 25, 216, 26, 216, 27, 216, 28, 216, 29, 216, 30, 216, 31, 216, 32, 216, 33, 216, 34, 216, 35, 216, 36, 216, 37, 216, 38, 216, 39, 216, 40, 216, 41, 216, 42, 216, 43, 216, 44, 216, 45, 216, 46, 216, 47, 216, 48, 216, 49, 216, 50, 216, 51, 216, 52, 216, 53, 216, 54, 216, 55, 216, 56, 216, 57, 216, 58, 216, 59, 216, 60, 216, 61, 216, 62, 216, 63, 216, 64, 216, 65, 216, 66, 216, 67, 216, 68, 216, 69, 216, 70, 216, 71, 216, 72, 216, 73, 216, 74, 216, 75, 216, 76, 216, 77, 216, 78, 216, 79, 216, 80, 216, 81, 216, 82, 216, 83, 216, 84, 216, 85, 216, 86, 216, 87, 216, 88, 216, 89, 216, 90, 216, 91, 216, 92, 216, 93, 216, 94, 216, 95, 216, 96, 216, 97, 216, 169, 216, 170, 216, 171, 216, 172, 216, 173, 216, 174, 216, 175, 216, 176, 216, 177, 216, 178, 216, 179, 216, 180, 216, 181, 216, 182, 216, 183, 216, 184, 216, 185, 216, 186, 216, 187, 216, 188, 217, 3, 217, 4, 217, 5, 217, 6, 217, 7, 217, 8, 217, 9, 217, 10, 217, 11, 217, 12, 217, 13, 217, 14, 217, 15, 217, 16, 217, 17, 217, 18, 217, 19, 217, 20, 217, 21, 217, 22, 217, 23, 217, 24, 217, 25, 217, 26, 217, 27, 217, 28, 217, 29, 217, 30, 217, 31, 217, 32, 217, 33, 217, 34, 217, 35, 217, 36, 217, 37, 217, 38, 217, 39, 217, 40, 217, 41, 217, 42, 217, 43, 217, 44, 217, 45, 217, 46, 217, 47, 217, 48, 217, 49, 217, 50, 217, 51, 217, 52, 217, 53, 217, 54, 217, 55, 217, 56, 217, 57, 217, 58, 217, 59, 217, 60, 217, 61, 217, 62, 217, 63, 217, 64, 217, 65, 217, 66, 217, 67, 217, 68, 217, 69, 217, 70, 217, 71, 217, 72, 217, 73, 217, 74, 217, 75, 217, 76, 217, 77, 217, 78, 217, 79, 217, 80, 217, 81, 217, 82, 217, 83, 217, 84, 217, 85, 217, 86, 217, 87, 217, 88, 217, 89, 217, 90, 217, 91, 217, 92, 217, 93, 217, 94, 217, 95, 217, 96, 217, 97, 217, 169, 217, 170, 217, 171, 217, 172, 217, 173, 217, 174, 217, 175, 217, 176, 217, 177, 217, 178, 217, 179, 217, 180, 217, 181, 217, 182, 217, 183, 217, 184, 217, 185, 217, 186, 217, 187, 217, 188, 218, 3, 218, 4, 218, 5, 218, 6, 218, 7, 218, 8, 218, 9, 218, 10, 218, 11, 218, 12, 218, 13, 218, 14, 218, 15, 218, 16, 218, 17, 218, 18, 218, 19, 218, 20, 218, 21, 218, 22, 218, 23, 218, 24, 218, 25, 218, 26, 218, 27, 218, 28, 218, 29, 218, 30, 218, 31, 218, 32, 218, 33, 218, 34, 218, 35, 218, 36, 218, 37, 218, 38, 218, 39, 218, 40, 218, 41, 218, 42, 218, 43, 218, 44, 218, 45, 218, 46, 218, 47, 218, 48, 218, 49, 218, 50, 218, 51, 218, 52, 218, 53, 218, 54, 218, 55, 218, 56, 218, 57, 218, 58, 218, 59, 218, 60, 218, 61, 218, 62, 218, 63, 218, 64, 218, 65, 218, 66, 218, 67, 218, 68, 218, 69, 218, 70, 218, 71, 218, 72, 218, 73, 218, 74, 218, 75, 218, 76, 218, 77, 218, 78, 218, 79, 218, 80, 218, 81, 218, 82, 218, 83, 218, 84, 218, 85, 218, 86, 218, 87, 218, 88, 218, 89, 218, 90, 218, 91, 218, 92, 218, 93, 218, 94, 218, 95, 218, 96, 218, 97, 218, 98, 218, 169, 218, 170, 218, 171, 218, 172, 218, 173, 218, 174, 218, 175, 218, 176, 218, 177, 218, 178, 218, 179, 218, 180, 218, 181, 218, 182, 218, 183, 218, 184, 218, 185, 218, 186, 218, 187, 218, 188, 219, 3, 219, 4, 219, 5, 219, 6, 219, 7, 219, 8, 219, 9, 219, 10, 219, 11, 219, 12, 219, 13, 219, 14, 219, 15, 219, 16, 219, 17, 219, 18, 219, 19, 219, 20, 219, 21, 219, 22, 219, 23, 219, 24, 219, 25, 219, 26, 219, 27, 219, 28, 219, 29, 219, 30, 219, 31, 219, 32, 219, 33, 219, 34, 219, 35, 219, 36, 219, 37, 219, 38, 219, 39, 219, 40, 219, 41, 219, 42, 219, 43, 219, 44, 219, 45, 219, 46, 219, 47, 219, 48, 219, 49, 219, 50, 219, 51, 219, 52, 219, 53, 219, 54, 219, 55, 219, 56, 219, 57, 219, 58, 219, 59, 219, 60, 219, 61, 219, 62, 219, 63, 219, 64, 219, 65, 219, 66, 219, 67, 219, 68, 219, 69, 219, 70, 219, 71, 219, 72, 219, 73, 219, 74, 219, 75, 219, 76, 219, 77, 219, 78, 219, 79, 219, 80, 219, 81, 219, 82, 219, 83, 219, 84, 219, 85, 219, 86, 219, 87, 219, 88, 219, 89, 219, 90, 219, 91, 219, 92, 219, 93, 219, 94, 219, 95, 219, 96, 219, 97, 219, 98, 219, 99, 219, 168, 219, 169, 219, 170, 219, 171, 219, 172, 219, 173, 219, 174, 219, 175, 219, 176, 219, 177, 219, 178, 219, 179, 219, 180, 219, 181, 219, 182, 219, 183, 219, 184, 219, 185, 219, 186, 219, 187, 219, 188, 220, 3, 220, 4, 220, 5, 220, 6, 220, 7, 220, 8, 220, 9, 220, 10, 220, 11, 220, 12, 220, 13, 220, 14, 220, 15, 220, 16, 220, 17, 220, 18, 220, 19, 220, 20, 220, 21, 220, 22, 220, 23, 220, 24, 220, 25, 220, 26, 220, 27, 220, 28, 220, 29, 220, 30, 220, 31, 220, 32, 220, 33, 220, 34, 220, 35, 220, 36, 220, 37, 220, 38, 220, 39, 220, 40, 220, 41, 220, 42, 220, 43, 220, 44, 220, 45, 220, 46, 220, 47, 220, 48, 220, 49, 220, 50, 220, 51, 220, 52, 220, 53, 220, 54, 220, 55, 220, 56, 220, 57, 220, 58, 220, 59, 220, 60, 220, 61, 220, 62, 220, 63, 220, 64, 220, 65, 220, 66, 220, 67, 220, 68, 220, 69, 220, 70, 220, 71, 220, 72, 220, 73, 220, 74, 220, 75, 220, 76, 220, 77, 220, 78, 220, 79, 220, 80, 220, 81, 220, 82, 220, 83, 220, 84, 220, 85, 220, 86, 220, 87, 220, 88, 220, 89, 220, 90, 220, 91, 220, 92, 220, 93, 220, 94, 220, 95, 220, 96, 220, 97, 220, 98, 220, 99, 220, 168, 220, 169, 220, 170, 220, 171, 220, 172, 220, 173, 220, 174, 220, 175, 220, 176, 220, 177, 220, 178, 220, 179, 220, 180, 220, 181, 220, 182, 220, 183, 220, 184, 220, 185, 220, 186, 220, 187, 220, 188, 221, 3, 221, 4, 221, 5, 221, 6, 221, 7, 221, 8, 221, 9, 221, 10, 221, 11, 221, 12, 221, 13, 221, 14, 221, 15, 221, 16, 221, 17, 221, 18, 221, 19, 221, 20, 221, 21, 221, 22, 221, 23, 221, 24, 221, 25, 221, 26, 221, 27, 221, 28, 221, 29, 221, 30, 221, 31, 221, 32, 221, 33, 221, 34, 221, 35, 221, 36, 221, 37, 221, 38, 221, 39, 221, 40, 221, 41, 221, 42, 221, 43, 221, 44, 221, 45, 221, 46, 221, 47, 221, 48, 221, 49, 221, 50, 221, 51, 221, 52, 221, 53, 221, 54, 221, 55, 221, 56, 221, 57, 221, 58, 221, 59, 221, 60, 221, 61, 221, 62, 221, 63, 221, 64, 221, 65, 221, 66, 221, 67, 221, 68, 221, 69, 221, 70, 221, 71, 221, 72, 221, 73, 221, 74, 221, 75, 221, 76, 221, 77, 221, 78, 221, 79, 221, 80, 221, 81, 221, 82, 221, 83, 221, 84, 221, 85, 221, 86, 221, 87, 221, 88, 221, 89, 221, 90, 221, 91, 221, 92, 221, 93, 221, 94, 221, 95, 221, 96, 221, 97, 221, 98, 221, 99, 221, 100, 221, 168, 221, 169, 221, 170, 221, 171, 221, 172, 221, 173, 221, 174, 221, 175, 221, 176, 221, 177, 221, 178, 221, 179, 221, 180, 221, 181, 221, 182, 221, 183, 221, 184, 221, 185, 221, 186, 221, 187, 221, 188, 222, 3, 222, 4, 222, 5, 222, 6, 222, 7, 222, 8, 222, 9, 222, 10, 222, 11, 222, 12, 222, 13, 222, 14, 222, 15, 222, 16, 222, 17, 222, 18, 222, 19, 222, 20, 222, 21, 222, 22, 222, 23, 222, 24, 222, 25, 222, 26, 222, 27, 222, 28, 222, 29, 222, 30, 222, 31, 222, 32, 222, 33, 222, 34, 222, 35, 222, 36, 222, 37, 222, 38, 222, 39, 222, 40, 222, 41, 222, 42, 222, 43, 222, 44, 222, 45, 222, 46, 222, 47, 222, 48, 222, 49, 222, 50, 222, 51, 222, 52, 222, 53, 222, 54, 222, 55, 222, 56, 222, 57, 222, 58, 222, 59, 222, 60, 222, 61, 222, 62, 222, 63, 222, 64, 222, 65, 222, 66, 222, 67, 222, 68, 222, 69, 222, 70, 222, 71, 222, 72, 222, 73, 222, 74, 222, 75, 222, 76, 222, 77, 222, 78, 222, 79, 222, 80, 222, 81, 222, 82, 222, 83, 222, 84, 222, 85, 222, 86, 222, 87, 222, 88, 222, 89, 222, 90, 222, 91, 222, 92, 222, 93, 222, 94, 222, 95, 222, 96, 222, 97, 222, 98, 222, 99, 222, 100, 222, 101, 222, 168, 222, 169, 222, 170, 222, 171, 222, 172, 222, 173, 222, 174, 222, 175, 222, 176, 222, 177, 222, 178, 222, 179, 222, 180, 222, 181, 222, 182, 222, 183, 222, 184, 222, 185, 222, 186, 222, 187, 222, 188, 223, 3, 223, 4, 223, 5, 223, 6, 223, 7, 223, 8, 223, 9, 223, 10, 223, 11, 223, 12, 223, 13, 223, 14, 223, 15, 223, 16, 223, 17, 223, 18, 223, 19, 223, 20, 223, 21, 223, 22, 223, 23, 223, 24, 223, 25, 223, 26, 223, 27, 223, 28, 223, 29, 223, 30, 223, 31, 223, 32, 223, 33, 223, 34, 223, 35, 223, 36, 223, 37, 223, 38, 223, 39, 223, 40, 223, 41, 223, 42, 223, 43, 223, 44, 223, 45, 223, 46, 223, 47, 223, 48, 223, 49, 223, 50, 223, 51, 223, 52, 223, 53, 223, 54, 223, 55, 223, 56, 223, 57, 223, 58, 223, 59, 223, 60, 223, 61, 223, 62, 223, 63, 223, 64, 223, 65, 223, 66, 223, 67, 223, 68, 223, 69, 223, 70, 223, 71, 223, 72, 223, 73, 223, 74, 223, 75, 223, 76, 223, 77, 223, 78, 223, 79, 223, 80, 223, 81, 223, 82, 223, 83, 223, 84, 223, 85, 223, 86, 223, 87, 223, 88, 223, 89, 223, 90, 223, 91, 223, 92, 223, 93, 223, 94, 223, 95, 223, 96, 223, 97, 223, 98, 223, 99, 223, 100, 223, 101, 223, 168, 223, 169, 223, 170, 223, 171, 223, 172, 223, 173, 223, 174, 223, 175, 223, 176, 223, 177, 223, 178, 223, 179, 223, 180, 223, 181, 223, 182, 223, 183, 223, 184, 223, 185, 223, 186, 223, 187, 223, 188, 224, 3, 224, 4, 224, 5, 224, 6, 224, 7, 224, 8, 224, 9, 224, 10, 224, 11, 224, 12, 224, 13, 224, 14, 224, 15, 224, 16, 224, 17, 224, 18, 224, 19, 224, 20, 224, 21, 224, 22, 224, 23, 224, 24, 224, 25, 224, 26, 224, 27, 224, 28, 224, 29, 224, 30, 224, 31, 224, 32, 224, 33, 224, 34, 224, 35, 224, 36, 224, 37, 224, 38, 224, 39, 224, 40, 224, 41, 224, 42, 224, 43, 224, 44, 224, 45, 224, 46, 224, 47, 224, 48, 224, 49, 224, 50, 224, 51, 224, 52, 224, 53, 224, 54, 224, 55, 224, 56, 224, 57, 224, 58, 224, 59, 224, 60, 224, 61, 224, 62, 224, 63, 224, 64, 224, 65, 224, 66, 224, 67, 224, 68, 224, 69, 224, 70, 224, 71, 224, 72, 224, 73, 224, 74, 224, 75, 224, 76, 224, 77, 224, 78, 224, 79, 224, 80, 224, 81, 224, 82, 224, 83, 224, 84, 224, 85, 224, 86, 224, 87, 224, 88, 224, 89, 224, 90, 224, 91, 224, 92, 224, 93, 224, 94, 224, 95, 224, 96, 224, 97, 224, 98, 224, 99, 224, 100, 224, 101, 224, 102, 224, 168, 224, 169, 224, 170, 224, 171, 224, 172, 224, 173, 224, 174, 224, 175, 224, 176, 224, 177, 224, 178, 224, 179, 224, 180, 224, 181, 224, 182, 224, 183, 224, 184, 224, 185, 224, 186, 224, 187, 224, 188, 225, 3, 225, 4, 225, 5, 225, 6, 225, 7, 225, 8, 225, 9, 225, 10, 225, 11, 225, 12, 225, 13, 225, 14, 225, 15, 225, 16, 225, 17, 225, 18, 225, 19, 225, 20, 225, 21, 225, 22, 225, 23, 225, 24, 225, 25, 225, 26, 225, 27, 225, 28, 225, 29, 225, 30, 225, 31, 225, 32, 225, 33, 225, 34, 225, 35, 225, 36, 225, 37, 225, 38, 225, 39, 225, 40, 225, 41, 225, 42, 225, 43, 225, 44, 225, 45, 225, 46, 225, 47, 225, 48, 225, 49, 225, 50, 225, 51, 225, 52, 225, 53, 225, 54, 225, 55, 225, 56, 225, 57, 225, 58, 225, 59, 225, 60, 225, 61, 225, 62, 225, 63, 225, 64, 225, 65, 225, 66, 225, 67, 225, 68, 225, 69, 225, 70, 225, 71, 225, 72, 225, 73, 225, 74, 225, 75, 225, 76, 225, 77, 225, 78, 225, 79, 225, 80, 225, 81, 225, 82, 225, 83, 225, 84, 225, 85, 225, 86, 225, 87, 225, 88, 225, 89, 225, 90, 225, 91, 225, 92, 225, 93, 225, 94, 225, 95, 225, 96, 225, 97, 225, 98, 225, 99, 225, 100, 225, 101, 225, 102, 225, 103, 225, 124, 225, 125, 225, 126, 225, 127, 225, 168, 225, 169, 225, 170, 225, 171, 225, 172, 225, 173, 225, 174, 225, 175, 225, 176, 225, 177, 225, 178, 225, 179, 225, 180, 225, 181, 225, 182, 225, 183, 225, 184, 225, 185, 225, 186, 225, 187, 225, 188, 226, 3, 226, 4, 226, 5, 226, 6, 226, 7, 226, 8, 226, 9, 226, 10, 226, 11, 226, 12, 226, 13, 226, 14, 226, 15, 226, 16, 226, 17, 226, 18, 226, 19, 226, 20, 226, 21, 226, 22, 226, 23, 226, 24, 226, 25, 226, 26, 226, 27, 226, 28, 226, 29, 226, 30, 226, 31, 226, 32, 226, 33, 226, 34, 226, 35, 226, 36, 226, 37, 226, 38, 226, 39, 226, 40, 226, 41, 226, 42, 226, 43, 226, 44, 226, 45, 226, 46, 226, 47, 226, 48, 226, 49, 226, 50, 226, 51, 226, 52, 226, 53, 226, 54, 226, 55, 226, 56, 226, 57, 226, 58, 226, 59, 226, 60, 226, 61, 226, 62, 226, 63, 226, 64, 226, 65, 226, 66, 226, 67, 226, 68, 226, 69, 226, 70, 226, 71, 226, 72, 226, 73, 226, 74, 226, 75, 226, 76, 226, 77, 226, 78, 226, 79, 226, 80, 226, 81, 226, 82, 226, 83, 226, 84, 226, 85, 226, 86, 226, 87, 226, 88, 226, 89, 226, 90, 226, 91, 226, 92, 226, 93, 226, 94, 226, 95, 226, 96, 226, 97, 226, 98, 226, 99, 226, 100, 226, 101, 226, 102, 226, 103, 226, 104, 226, 105, 226, 106, 226, 118, 226, 119, 226, 120, 226, 121, 226, 122, 226, 123, 226, 124, 226, 125, 226, 126, 226, 127, 226, 128, 226, 129, 226, 167, 226, 168, 226, 169, 226, 170, 226, 171, 226, 172, 226, 173, 226, 174, 226, 175, 226, 176, 226, 177, 226, 178, 226, 179, 226, 180, 226, 181, 226, 182, 226, 183, 226, 184, 226, 185, 226, 186, 226, 187, 226, 188, 227, 3, 227, 4, 227, 5, 227, 6, 227, 7, 227, 8, 227, 9, 227, 10, 227, 11, 227, 12, 227, 13, 227, 14, 227, 15, 227, 16, 227, 17, 227, 18, 227, 19, 227, 20, 227, 21, 227, 22, 227, 23, 227, 24, 227, 25, 227, 26, 227, 27, 227, 28, 227, 29, 227, 30, 227, 31, 227, 32, 227, 33, 227, 34, 227, 35, 227, 36, 227, 37, 227, 38, 227, 39, 227, 40, 227, 41, 227, 42, 227, 43, 227, 44, 227, 45, 227, 46, 227, 47, 227, 48, 227, 49, 227, 50, 227, 51, 227, 52, 227, 53, 227, 54, 227, 55, 227, 56, 227, 57, 227, 58, 227, 59, 227, 60, 227, 61, 227, 62, 227, 63, 227, 64, 227, 65, 227, 66, 227, 67, 227, 68, 227, 69, 227, 70, 227, 71, 227, 72, 227, 73, 227, 74, 227, 75, 227, 76, 227, 77, 227, 78, 227, 79, 227, 80, 227, 81, 227, 82, 227, 83, 227, 84, 227, 85, 227, 86, 227, 87, 227, 88, 227, 89, 227, 90, 227, 91, 227, 92, 227, 93, 227, 94, 227, 95, 227, 96, 227, 97, 227, 98, 227, 99, 227, 100, 227, 101, 227, 102, 227, 103, 227, 104, 227, 105, 227, 106, 227, 107, 227, 108, 227, 109, 227, 115, 227, 116, 227, 117, 227, 118, 227, 119, 227, 120, 227, 121, 227, 122, 227, 123, 227, 124, 227, 125, 227, 126, 227, 127, 227, 128, 227, 129, 227, 130, 227, 131, 227, 167, 227, 168, 227, 169, 227, 170, 227, 171, 227, 172, 227, 173, 227, 174, 227, 175, 227, 176, 227, 177, 227, 178, 227, 179, 227, 180, 227, 181, 227, 182, 227, 183, 227, 184, 227, 185, 227, 186, 227, 187, 227, 188, 228, 3, 228, 4, 228, 5, 228, 6, 228, 7, 228, 8, 228, 9, 228, 10, 228, 11, 228, 12, 228, 13, 228, 14, 228, 15, 228, 16, 228, 17, 228, 18, 228, 19, 228, 20, 228, 21, 228, 22, 228, 23, 228, 24, 228, 25, 228, 26, 228, 27, 228, 28, 228, 29, 228, 30, 228, 31, 228, 32, 228, 33, 228, 34, 228, 35, 228, 36, 228, 37, 228, 38, 228, 39, 228, 40, 228, 41, 228, 42, 228, 43, 228, 44, 228, 45, 228, 46, 228, 47, 228, 48, 228, 49, 228, 50, 228, 51, 228, 52, 228, 53, 228, 54, 228, 55, 228, 56, 228, 57, 228, 58, 228, 59, 228, 60, 228, 61, 228, 62, 228, 63, 228, 64, 228, 65, 228, 66, 228, 67, 228, 68, 228, 69, 228, 70, 228, 71, 228, 72, 228, 73, 228, 74, 228, 75, 228, 76, 228, 77, 228, 78, 228, 79, 228, 80, 228, 81, 228, 82, 228, 83, 228, 84, 228, 85, 228, 86, 228, 87, 228, 88, 228, 89, 228, 90, 228, 91, 228, 92, 228, 93, 228, 94, 228, 95, 228, 96, 228, 97, 228, 98, 228, 99, 228, 100, 228, 101, 228, 102, 228, 103, 228, 104, 228, 105, 228, 106, 228, 107, 228, 108, 228, 109, 228, 110, 228, 111, 228, 112, 228, 113, 228, 114, 228, 115, 228, 116, 228, 117, 228, 118, 228, 119, 228, 120, 228, 121, 228, 122, 228, 123, 228, 124, 228, 125, 228, 126, 228, 127, 228, 128, 228, 129, 228, 130, 228, 131, 228, 132, 228, 133, 228, 166, 228, 167, 228, 168, 228, 169, 228, 170, 228, 171, 228, 172, 228, 173, 228, 174, 228, 175, 228, 176, 228, 177, 228, 178, 228, 179, 228, 180, 228, 181, 228, 182, 228, 183, 228, 184, 228, 185, 228, 186, 228, 187, 228, 188, 229, 3, 229, 4, 229, 5, 229, 6, 229, 7, 229, 8, 229, 9, 229, 10, 229, 11, 229, 12, 229, 13, 229, 14, 229, 15, 229, 16, 229, 17, 229, 18, 229, 19, 229, 20, 229, 21, 229, 22, 229, 23, 229, 24, 229, 25, 229, 26, 229, 27, 229, 28, 229, 29, 229, 30, 229, 31, 229, 32, 229, 33, 229, 34, 229, 35, 229, 36, 229, 37, 229, 38, 229, 39, 229, 40, 229, 41, 229, 42, 229, 43, 229, 44, 229, 45, 229, 46, 229, 47, 229, 48, 229, 49, 229, 50, 229, 51, 229, 52, 229, 53, 229, 54, 229, 55, 229, 56, 229, 57, 229, 58, 229, 59, 229, 60, 229, 61, 229, 62, 229, 63, 229, 64, 229, 65, 229, 66, 229, 67, 229, 68, 229, 69, 229, 70, 229, 71, 229, 72, 229, 73, 229, 74, 229, 75, 229, 76, 229, 77, 229, 78, 229, 79, 229, 80, 229, 81, 229, 82, 229, 83, 229, 84, 229, 85, 229, 86, 229, 87, 229, 88, 229, 89, 229, 90, 229, 91, 229, 92, 229, 93, 229, 94, 229, 95, 229, 96, 229, 97, 229, 98, 229, 99, 229, 100, 229, 101, 229, 102, 229, 103, 229, 104, 229, 105, 229, 106, 229, 107, 229, 108, 229, 109, 229, 110, 229, 111, 229, 112, 229, 113, 229, 114, 229, 115, 229, 116, 229, 117, 229, 118, 229, 119, 229, 120, 229, 121, 229, 122, 229, 123, 229, 124, 229, 125, 229, 126, 229, 127, 229, 128, 229, 129, 229, 130, 229, 131, 229, 132, 229, 133, 229, 134, 229, 135, 229, 166, 229, 167, 229, 168, 229, 169, 229, 170, 229, 171, 229, 172, 229, 173, 229, 174, 229, 175, 229, 176, 229, 177, 229, 178, 229, 179, 229, 180, 229, 181, 229, 182, 229, 183, 229, 184, 229, 185, 229, 186, 229, 187, 229, 188, 230, 3, 230, 4, 230, 5, 230, 6, 230, 7, 230, 8, 230, 9, 230, 10, 230, 11, 230, 12, 230, 13, 230, 14, 230, 15, 230, 16, 230, 17, 230, 18, 230, 19, 230, 20, 230, 21, 230, 22, 230, 23, 230, 24, 230, 25, 230, 26, 230, 27, 230, 28, 230, 29, 230, 30, 230, 31, 230, 32, 230, 33, 230, 34, 230, 35, 230, 36, 230, 37, 230, 38, 230, 39, 230, 40, 230, 41, 230, 42, 230, 43, 230, 44, 230, 45, 230, 46, 230, 47, 230, 48, 230, 49, 230, 50, 230, 51, 230, 52, 230, 53, 230, 54, 230, 55, 230, 56, 230, 57, 230, 58, 230, 59, 230, 60, 230, 61, 230, 62, 230, 63, 230, 64, 230, 65, 230, 66, 230, 67, 230, 68, 230, 69, 230, 70, 230, 71, 230, 72, 230, 73, 230, 74, 230, 75, 230, 76, 230, 77, 230, 78, 230, 79, 230, 80, 230, 81, 230, 82, 230, 83, 230, 84, 230, 85, 230, 86, 230, 87, 230, 88, 230, 89, 230, 90, 230, 91, 230, 92, 230, 93, 230, 94, 230, 95, 230, 96, 230, 97, 230, 98, 230, 99, 230, 100, 230, 101, 230, 102, 230, 103, 230, 104, 230, 105, 230, 106, 230, 107, 230, 108, 230, 109, 230, 110, 230, 111, 230, 112, 230, 113, 230, 114, 230, 115, 230, 116, 230, 117, 230, 118, 230, 119, 230, 120, 230, 121, 230, 122, 230, 123, 230, 124, 230, 125, 230, 126, 230, 127, 230, 128, 230, 129, 230, 130, 230, 131, 230, 132, 230, 133, 230, 134, 230, 135, 230, 136, 230, 137, 230, 165, 230, 166, 230, 167, 230, 168, 230, 169, 230, 170, 230, 171, 230, 172, 230, 173, 230, 174, 230, 175, 230, 176, 230, 177, 230, 178, 230, 179, 230, 180, 230, 181, 230, 182, 230, 183, 230, 184, 230, 185, 230, 186, 230, 187, 230, 188, 231, 3, 231, 4, 231, 5, 231, 6, 231, 7, 231, 8, 231, 9, 231, 10, 231, 11, 231, 12, 231, 13, 231, 14, 231, 15, 231, 16, 231, 17, 231, 18, 231, 19, 231, 20, 231, 21, 231, 22, 231, 23, 231, 24, 231, 25, 231, 26, 231, 27, 231, 28, 231, 29, 231, 30, 231, 31, 231, 32, 231, 33, 231, 34, 231, 35, 231, 36, 231, 37, 231, 38, 231, 39, 231, 40, 231, 41, 231, 42, 231, 43, 231, 44, 231, 45, 231, 46, 231, 47, 231, 48, 231, 49, 231, 50, 231, 51, 231, 52, 231, 53, 231, 54, 231, 55, 231, 56, 231, 57, 231, 58, 231, 59, 231, 60, 231, 61, 231, 62, 231, 63, 231, 64, 231, 65, 231, 66, 231, 67, 231, 68, 231, 69, 231, 70, 231, 71, 231, 72, 231, 73, 231, 74, 231, 75, 231, 76, 231, 77, 231, 78, 231, 79, 231, 80, 231, 81, 231, 82, 231, 83, 231, 84, 231, 85, 231, 86, 231, 87, 231, 88, 231, 89, 231, 90, 231, 91, 231, 92, 231, 93, 231, 94, 231, 95, 231, 96, 231, 97, 231, 98, 231, 99, 231, 100, 231, 101, 231, 102, 231, 103, 231, 104, 231, 105, 231, 106, 231, 107, 231, 108, 231, 109, 231, 110, 231, 111, 231, 112, 231, 113, 231, 114, 231, 115, 231, 116, 231, 117, 231, 118, 231, 119, 231, 120, 231, 121, 231, 122, 231, 123, 231, 124, 231, 125, 231, 126, 231, 127, 231, 128, 231, 129, 231, 130, 231, 131, 231, 132, 231, 133, 231, 134, 231, 135, 231, 136, 231, 137, 231, 138, 231, 139, 231, 164, 231, 165, 231, 166, 231, 167, 231, 168, 231, 169, 231, 170, 231, 171, 231, 172, 231, 173, 231, 174, 231, 175, 231, 176, 231, 177, 231, 178, 231, 179, 231, 180, 231, 181, 231, 182, 231, 183, 231, 184, 231, 185, 231, 186, 231, 187, 231, 188, 232, 3, 232, 4, 232, 5, 232, 6, 232, 7, 232, 8, 232, 9, 232, 10, 232, 11, 232, 12, 232, 13, 232, 14, 232, 15, 232, 16, 232, 17, 232, 18, 232, 19, 232, 20, 232, 21, 232, 22, 232, 23, 232, 24, 232, 25, 232, 26, 232, 27, 232, 28, 232, 29, 232, 30, 232, 31, 232, 32, 232, 33, 232, 34, 232, 35, 232, 36, 232, 37, 232, 38, 232, 39, 232, 40, 232, 41, 232, 42, 232, 43, 232, 44, 232, 45, 232, 46, 232, 47, 232, 48, 232, 49, 232, 50, 232, 51, 232, 52, 232, 53, 232, 54, 232, 55, 232, 56, 232, 57, 232, 58, 232, 59, 232, 60, 232, 61, 232, 62, 232, 63, 232, 64, 232, 65, 232, 66, 232, 67, 232, 68, 232, 69, 232, 70, 232, 71, 232, 72, 232, 73, 232, 74, 232, 75, 232, 76, 232, 77, 232, 78, 232, 79, 232, 80, 232, 81, 232, 82, 232, 83, 232, 84, 232, 85, 232, 86, 232, 87, 232, 88, 232, 89, 232, 90, 232, 91, 232, 92, 232, 93, 232, 94, 232, 95, 232, 96, 232, 97, 232, 98, 232, 99, 232, 100, 232, 101, 232, 102, 232, 103, 232, 104, 232, 105, 232, 106, 232, 107, 232, 108, 232, 109, 232, 110, 232, 111, 232, 112, 232, 113, 232, 114, 232, 115, 232, 116, 232, 117, 232, 118, 232, 119, 232, 120, 232, 121, 232, 122, 232, 123, 232, 124, 232, 125, 232, 126, 232, 127, 232, 128, 232, 129, 232, 130, 232, 131, 232, 132, 232, 133, 232, 134, 232, 135, 232, 136, 232, 137, 232, 138, 232, 139, 232, 140, 232, 141, 232, 142, 232, 164, 232, 165, 232, 166, 232, 167, 232, 168, 232, 169, 232, 170, 232, 171, 232, 172, 232, 173, 232, 174, 232, 175, 232, 176, 232, 177, 232, 178, 232, 179, 232, 180, 232, 181, 232, 182, 232, 183, 232, 184, 232, 185, 232, 186, 232, 187, 232, 188, 233, 3, 233, 4, 233, 5, 233, 6, 233, 7, 233, 8, 233, 9, 233, 10, 233, 11, 233, 12, 233, 13, 233, 14, 233, 15, 233, 16, 233, 17, 233, 18, 233, 19, 233, 20, 233, 21, 233, 22, 233, 23, 233, 24, 233, 25, 233, 26, 233, 27, 233, 28, 233, 29, 233, 30, 233, 31, 233, 32, 233, 33, 233, 34, 233, 35, 233, 36, 233, 37, 233, 38, 233, 39, 233, 40, 233, 41, 233, 42, 233, 43, 233, 44, 233, 45, 233, 46, 233, 47, 233, 48, 233, 49, 233, 50, 233, 51, 233, 52, 233, 53, 233, 54, 233, 55, 233, 56, 233, 57, 233, 58, 233, 59, 233, 60, 233, 61, 233, 62, 233, 63, 233, 64, 233, 65, 233, 66, 233, 67, 233, 68, 233, 69, 233, 70, 233, 71, 233, 72, 233, 73, 233, 74, 233, 75, 233, 76, 233, 77, 233, 78, 233, 79, 233, 80, 233, 81, 233, 82, 233, 83, 233, 84, 233, 85, 233, 86, 233, 87, 233, 88, 233, 89, 233, 90, 233, 91, 233, 92, 233, 93, 233, 94, 233, 95, 233, 96, 233, 97, 233, 98, 233, 99, 233, 100, 233, 101, 233, 102, 233, 103, 233, 104, 233, 105, 233, 106, 233, 107, 233, 108, 233, 109, 233, 110, 233, 111, 233, 112, 233, 113, 233, 114, 233, 115, 233, 116, 233, 117, 233, 118, 233, 119, 233, 120, 233, 121, 233, 122, 233, 123, 233, 124, 233, 125, 233, 126, 233, 127, 233, 128, 233, 129, 233, 130, 233, 131, 233, 132, 233, 133, 233, 134, 233, 135, 233, 136, 233, 137, 233, 138, 233, 139, 233, 140, 233, 141, 233, 142, 233, 143, 233, 144, 233, 145, 233, 163, 233, 164, 233, 165, 233, 166, 233, 167, 233, 168, 233, 169, 233, 170, 233, 171, 233, 172, 233, 173, 233, 174, 233, 175, 233, 176, 233, 177, 233, 178, 233, 179, 233, 180, 233, 181, 233, 182, 233, 183, 233, 184, 233, 185, 233, 186, 233, 187, 233, 188, 234, 3, 234, 4, 234, 5, 234, 6, 234, 7, 234, 8, 234, 9, 234, 10, 234, 11, 234, 12, 234, 13, 234, 14, 234, 15, 234, 16, 234, 17, 234, 18, 234, 19, 234, 20, 234, 21, 234, 22, 234, 23, 234, 24, 234, 25, 234, 26, 234, 27, 234, 28, 234, 29, 234, 30, 234, 31, 234, 32, 234, 33, 234, 34, 234, 35, 234, 36, 234, 37, 234, 38, 234, 39, 234, 40, 234, 41, 234, 42, 234, 43, 234, 44, 234, 45, 234, 46, 234, 47, 234, 48, 234, 49, 234, 50, 234, 51, 234, 52, 234, 53, 234, 54, 234, 55, 234, 56, 234, 57, 234, 58, 234, 59, 234, 60, 234, 61, 234, 62, 234, 63, 234, 64, 234, 65, 234, 66, 234, 67, 234, 68, 234, 69, 234, 70, 234, 71, 234, 72, 234, 73, 234, 74, 234, 75, 234, 76, 234, 77, 234, 78, 234, 79, 234, 80, 234, 81, 234, 82, 234, 83, 234, 84, 234, 85, 234, 86, 234, 87, 234, 88, 234, 89, 234, 90, 234, 91, 234, 92, 234, 93, 234, 94, 234, 95, 234, 96, 234, 97, 234, 98, 234, 99, 234, 100, 234, 101, 234, 102, 234, 103, 234, 104, 234, 105, 234, 106, 234, 107, 234, 108, 234, 109, 234, 110, 234, 111, 234, 112, 234, 113, 234, 114, 234, 115, 234, 116, 234, 117, 234, 118, 234, 119, 234, 120, 234, 121, 234, 122, 234, 123, 234, 124, 234, 125, 234, 126, 234, 127, 234, 128, 234, 129, 234, 130, 234, 131, 234, 132, 234, 133, 234, 134, 234, 135, 234, 136, 234, 137, 234, 138, 234, 139, 234, 140, 234, 141, 234, 142, 234, 143, 234, 144, 234, 145, 234, 146, 234, 147, 234, 148, 234, 160, 234, 161, 234, 162, 234, 163, 234, 164, 234, 165, 234, 166, 234, 167, 234, 168, 234, 169, 234, 170, 234, 171, 234, 172, 234, 173, 234, 174, 234, 175, 234, 176, 234, 177, 234, 178, 234, 179, 234, 180, 234, 181, 234, 182, 234, 183, 234, 184, 234, 185, 234, 186, 234, 187, 234, 188, 235, 3, 235, 4, 235, 5, 235, 6, 235, 7, 235, 8, 235, 9, 235, 10, 235, 11, 235, 12, 235, 13, 235, 14, 235, 15, 235, 16, 235, 17, 235, 18, 235, 19, 235, 20, 235, 21, 235, 22, 235, 23, 235, 24, 235, 25, 235, 26, 235, 27, 235, 28, 235, 29, 235, 30, 235, 31, 235, 32, 235, 33, 235, 34, 235, 35, 235, 36, 235, 37, 235, 38, 235, 39, 235, 40, 235, 41, 235, 42, 235, 43, 235, 44, 235, 45, 235, 46, 235, 47, 235, 48, 235, 49, 235, 50, 235, 51, 235, 52, 235, 53, 235, 54, 235, 55, 235, 56, 235, 57, 235, 58, 235, 59, 235, 60, 235, 61, 235, 62, 235, 63, 235, 64, 235, 65, 235, 66, 235, 67, 235, 68, 235, 69, 235, 70, 235, 71, 235, 72, 235, 73, 235, 74, 235, 75, 235, 76, 235, 77, 235, 78, 235, 79, 235, 80, 235, 81, 235, 82, 235, 83, 235, 84, 235, 85, 235, 86, 235, 87, 235, 88, 235, 89, 235, 90, 235, 91, 235, 92, 235, 93, 235, 94, 235, 95, 235, 96, 235, 97, 235, 98, 235, 99, 235, 100, 235, 101, 235, 102, 235, 103, 235, 104, 235, 105, 235, 106, 235, 107, 235, 108, 235, 109, 235, 110, 235, 111, 235, 112, 235, 113, 235, 114, 235, 115, 235, 116, 235, 117, 235, 118, 235, 119, 235, 120, 235, 121, 235, 122, 235, 123, 235, 124, 235, 125, 235, 126, 235, 127, 235, 128, 235, 129, 235, 130, 235, 131, 235, 132, 235, 133, 235, 134, 235, 135, 235, 136, 235, 137, 235, 138, 235, 139, 235, 140, 235, 141, 235, 142, 235, 143, 235, 144, 235, 145, 235, 146, 235, 147, 235, 148, 235, 149, 235, 150, 235, 151, 235, 152, 235, 153, 235, 154, 235, 155, 235, 156, 235, 157, 235, 158, 235, 159, 235, 160, 235, 161, 235, 162, 235, 163, 235, 164, 235, 165, 235, 166, 235, 167, 235, 168, 235, 169, 235, 170, 235, 171, 235, 172, 235, 173, 235, 174, 235, 175, 235, 176, 235, 177, 235, 178, 235, 179, 235, 180, 235, 181, 235, 182, 235, 183, 235, 184, 235, 185, 235, 186, 235, 187, 235, 188, 236, 3, 236, 4, 236, 5, 236, 6, 236, 7, 236, 8, 236, 9, 236, 10, 236, 11, 236, 12, 236, 13, 236, 14, 236, 15, 236, 16, 236, 17, 236, 18, 236, 19, 236, 20, 236, 21, 236, 22, 236, 23, 236, 24, 236, 25, 236, 26, 236, 27, 236, 28, 236, 29, 236, 30, 236, 31, 236, 32, 236, 33, 236, 34, 236, 35, 236, 36, 236, 37, 236, 38, 236, 39, 236, 40, 236, 41, 236, 42, 236, 43, 236, 44, 236, 45, 236, 46, 236, 47, 236, 48, 236, 49, 236, 50, 236, 51, 236, 52, 236, 53, 236, 54, 236, 55, 236, 56, 236, 57, 236, 58, 236, 59, 236, 60, 236, 61, 236, 62, 236, 63, 236, 64, 236, 65, 236, 66, 236, 67, 236, 68, 236, 69, 236, 70, 236, 71, 236, 72, 236, 73, 236, 74, 236, 75, 236, 76, 236, 77, 236, 78, 236, 79, 236, 80, 236, 81, 236, 82, 236, 83, 236, 84, 236, 85, 236, 86, 236, 87, 236, 88, 236, 89, 236, 90, 236, 91, 236, 92, 236, 93, 236, 94, 236, 95, 236, 96, 236, 97, 236, 98, 236, 99, 236, 100, 236, 101, 236, 102, 236, 103, 236, 104, 236, 105, 236, 106, 236, 107, 236, 108, 236, 109, 236, 110, 236, 111, 236, 112, 236, 113, 236, 114, 236, 115, 236, 116, 236, 117, 236, 118, 236, 119, 236, 120, 236, 121, 236, 122, 236, 123, 236, 124, 236, 125, 236, 126, 236, 127, 236, 128, 236, 129, 236, 130, 236, 131, 236, 132, 236, 133, 236, 134, 236, 135, 236, 136, 236, 137, 236, 138, 236, 139, 236, 140, 236, 141, 236, 142, 236, 143, 236, 144, 236, 145, 236, 146, 236, 147, 236, 148, 236, 149, 236, 150, 236, 151, 236, 152, 236, 153, 236, 154, 236, 155, 236, 156, 236, 157, 236, 158, 236, 159, 236, 160, 236, 161, 236, 162, 236, 163, 236, 164, 236, 165, 236, 166, 236, 167, 236, 168, 236, 169, 236, 170, 236, 171, 236, 172, 236, 173, 236, 174, 236, 175, 236, 176, 236, 177, 236, 178, 236, 179, 236, 180, 236, 181, 236, 182, 236, 183, 236, 184, 236, 185, 236, 186, 236, 187, 236, 188, 237, 3, 237, 4, 237, 5, 237, 6, 237, 7, 237, 8, 237, 9, 237, 10, 237, 11, 237, 12, 237, 13, 237, 14, 237, 15, 237, 16, 237, 17, 237, 18, 237, 19, 237, 20, 237, 21, 237, 22, 237, 23, 237, 24, 237, 25, 237, 26, 237, 27, 237, 28, 237, 29, 237, 30, 237, 31, 237, 32, 237, 33, 237, 34, 237, 35, 237, 36, 237, 37, 237, 38, 237, 39, 237, 40, 237, 41, 237, 42, 237, 43, 237, 44, 237, 45, 237, 46, 237, 47, 237, 48, 237, 49, 237, 50, 237, 51, 237, 52, 237, 53, 237, 54, 237, 55, 237, 56, 237, 57, 237, 58, 237, 59, 237, 60, 237, 61, 237, 62, 237, 63, 237, 64, 237, 65, 237, 66, 237, 67, 237, 68, 237, 69, 237, 70, 237, 71, 237, 72, 237, 73, 237, 74, 237, 75, 237, 76, 237, 77, 237, 78, 237, 79, 237, 80, 237, 81, 237, 82, 237, 83, 237, 84, 237, 85, 237, 86, 237, 87, 237, 88, 237, 89, 237, 90, 237, 91, 237, 92, 237, 93, 237, 94, 237, 95, 237, 96, 237, 97, 237, 98, 237, 99, 237, 100, 237, 101, 237, 102, 237, 103, 237, 104, 237, 105, 237, 106, 237, 107, 237, 108, 237, 109, 237, 110, 237, 111, 237, 112, 237, 113, 237, 114, 237, 115, 237, 116, 237, 117, 237, 118, 237, 119, 237, 120, 237, 121, 237, 122, 237, 123, 237, 124, 237, 125, 237, 126, 237, 127, 237, 128, 237, 129, 237, 130, 237, 131, 237, 132, 237, 133, 237, 134, 237, 135, 237, 136, 237, 137, 237, 138, 237, 139, 237, 140, 237, 141, 237, 142, 237, 143, 237, 144, 237, 145, 237, 146, 237, 147, 237, 148, 237, 149, 237, 150, 237, 151, 237, 152, 237, 153, 237, 154, 237, 155, 237, 156, 237, 157, 237, 158, 237, 159, 237, 160, 237, 161, 237, 162, 237, 163, 237, 164, 237, 165, 237, 166, 237, 167, 237, 168, 237, 169, 237, 170, 237, 171, 237, 172, 237, 173, 237, 174, 237, 175, 237, 176, 237, 177, 237, 178, 237, 179, 237, 180, 237, 181, 237, 182, 237, 183, 237, 184, 237, 185, 237, 186, 237, 187, 237, 188, 238, 3, 238, 4, 238, 5, 238, 6, 238, 7, 238, 8, 238, 9, 238, 10, 238, 11, 238, 12, 238, 13, 238, 14, 238, 15, 238, 16, 238, 17, 238, 18, 238, 19, 238, 20, 238, 21, 238, 22, 238, 23, 238, 24, 238, 25, 238, 26, 238, 27, 238, 28, 238, 29, 238, 30, 238, 31, 238, 32, 238, 33, 238, 34, 238, 35, 238, 36, 238, 37, 238, 38, 238, 39, 238, 40, 238, 41, 238, 42, 238, 43, 238, 44, 238, 45, 238, 46, 238, 47, 238, 48, 238, 49, 238, 50, 238, 51, 238, 52, 238, 53, 238, 54, 238, 55, 238, 56, 238, 57, 238, 58, 238, 59, 238, 60, 238, 61, 238, 62, 238, 63, 238, 64, 238, 65, 238, 66, 238, 67, 238, 68, 238, 69, 238, 70, 238, 71, 238, 72, 238, 73, 238, 74, 238, 75, 238, 76, 238, 77, 238, 78, 238, 79, 238, 80, 238, 81, 238, 82, 238, 83, 238, 84, 238, 85, 238, 86, 238, 87, 238, 88, 238, 89, 238, 90, 238, 91, 238, 92, 238, 93, 238, 94, 238, 95, 238, 96, 238, 97, 238, 98, 238, 99, 238, 100, 238, 101, 238, 102, 238, 103, 238, 104, 238, 105, 238, 106, 238, 107, 238, 108, 238, 109, 238, 110, 238, 111, 238, 112, 238, 113, 238, 114, 238, 115, 238, 116, 238, 117, 238, 118, 238, 119, 238, 120, 238, 121, 238, 122, 238, 123, 238, 124, 238, 125, 238, 126, 238, 127, 238, 128, 238, 129, 238, 130, 238, 131, 238, 132, 238, 133, 238, 134, 238, 135, 238, 136, 238, 137, 238, 138, 238, 139, 238, 140, 238, 141, 238, 142, 238, 143, 238, 144, 238, 145, 238, 146, 238, 147, 238, 148, 238, 149, 238, 150, 238, 151, 238, 152, 238, 153, 238, 154, 238, 155, 238, 156, 238, 157, 238, 158, 238, 159, 238, 160, 238, 161, 238, 162, 238, 163, 238, 164, 238, 165, 238, 166, 238, 167, 238, 168, 238, 169, 238, 170, 238, 171, 238, 172, 238, 173, 238, 174, 238, 175, 238, 176, 238, 177, 238, 178, 238, 179, 238, 180, 238, 181, 238, 182, 238, 183, 238, 184, 238, 185, 238, 186, 238, 187, 238, 188, 239, 3, 239, 4, 239, 5, 239, 6, 239, 7, 239, 8, 239, 9, 239, 10, 239, 11, 239, 12, 239, 13, 239, 14, 239, 15, 239, 16, 239, 17, 239, 18, 239, 19, 239, 20, 239, 21, 239, 22, 239, 23, 239, 24, 239, 25, 239, 26, 239, 27, 239, 28, 239, 29, 239, 30, 239, 31, 239, 32, 239, 33, 239, 34, 239, 35, 239, 36, 239, 37, 239, 38, 239, 39, 239, 40, 239, 41, 239, 42, 239, 43, 239, 44, 239, 45, 239, 46, 239, 47, 239, 48, 239, 49, 239, 50, 239, 51, 239, 52, 239, 53, 239, 54, 239, 55, 239, 56, 239, 57, 239, 58, 239, 59, 239, 60, 239, 61, 239, 62, 239, 63, 239, 64, 239, 65, 239, 66, 239, 67, 239, 68, 239, 69, 239, 70, 239, 71, 239, 72, 239, 73, 239, 74, 239, 75, 239, 76, 239, 77, 239, 78, 239, 79, 239, 80, 239, 81, 239, 82, 239, 83, 239, 84, 239, 85, 239, 86, 239, 87, 239, 88, 239, 89, 239, 90, 239, 91, 239, 92, 239, 93, 239, 94, 239, 95, 239, 96, 239, 97, 239, 98, 239, 99, 239, 100, 239, 101, 239, 102, 239, 103, 239, 104, 239, 105, 239, 106, 239, 107, 239, 108, 239, 109, 239, 110, 239, 111, 239, 112, 239, 113, 239, 114, 239, 115, 239, 116, 239, 117, 239, 118, 239, 119, 239, 120, 239, 121, 239, 122, 239, 123, 239, 124, 239, 125, 239, 126, 239, 127, 239, 128, 239, 129, 239, 130, 239, 131, 239, 132, 239, 133, 239, 134, 239, 135, 239, 136, 239, 137, 239, 138, 239, 139, 239, 140, 239, 141, 239, 142, 239, 143, 239, 144, 239, 145, 239, 146, 239, 147, 239, 148, 239, 149, 239, 150, 239, 151, 239, 152, 239, 153, 239, 154, 239, 155, 239, 156, 239, 157, 239, 158, 239, 159, 239, 160, 239, 161, 239, 162, 239, 163, 239, 164, 239, 165, 239, 166, 239, 167, 239, 168, 239, 169, 239, 170, 239, 171, 239, 172, 239, 173, 239, 174, 239, 175, 239, 176, 239, 177, 239, 178, 239, 179, 239, 180, 239, 181, 239, 182, 239, 183, 239, 184, 239, 185, 239, 186, 239, 187, 239, 188, 240, 3, 240, 4, 240, 5, 240, 6, 240, 7, 240, 8, 240, 9, 240, 10, 240, 11, 240, 12, 240, 13, 240, 14, 240, 15, 240, 16, 240, 17, 240, 18, 240, 19, 240, 20, 240, 21, 240, 22, 240, 23, 240, 24, 240, 25, 240, 26, 240, 27, 240, 28, 240, 29, 240, 30, 240, 31, 240, 32, 240, 33, 240, 34, 240, 35, 240, 36, 240, 37, 240, 38, 240, 39, 240, 40, 240, 41, 240, 42, 240, 43, 240, 44, 240, 45, 240, 46, 240, 47, 240, 48, 240, 49, 240, 50, 240, 51, 240, 52, 240, 53, 240, 54, 240, 55, 240, 56, 240, 57, 240, 58, 240, 59, 240, 60, 240, 61, 240, 62, 240, 63, 240, 64, 240, 65, 240, 66, 240, 67, 240, 68, 240, 69, 240, 70, 240, 71, 240, 72, 240, 73, 240, 74, 240, 75, 240, 76, 240, 77, 240, 78, 240, 79, 240, 80, 240, 81, 240, 82, 240, 83, 240, 84, 240, 85, 240, 86, 240, 87, 240, 88, 240, 89, 240, 90, 240, 91, 240, 92, 240, 93, 240, 94, 240, 95, 240, 96, 240, 97, 240, 98, 240, 99, 240, 100, 240, 101, 240, 102, 240, 103, 240, 104, 240, 105, 240, 106, 240, 107, 240, 108, 240, 109, 240, 110, 240, 111, 240, 112, 240, 113, 240, 114, 240, 115, 240, 116, 240, 117, 240, 118, 240, 119, 240, 120, 240, 121, 240, 122, 240, 123, 240, 124, 240, 125, 240, 126, 240, 127, 240, 128, 240, 129, 240, 130, 240, 131, 240, 132, 240, 133, 240, 134, 240, 135, 240, 136, 240, 137, 240, 138, 240, 139, 240, 140, 240, 141, 240, 142, 240, 143, 240, 144, 240, 145, 240, 146, 240, 147, 240, 148, 240, 149, 240, 150, 240, 151, 240, 152, 240, 153, 240, 154, 240, 155, 240, 156, 240, 157, 240, 158, 240, 159, 240, 160, 240, 161, 240, 162, 240, 163, 240, 164, 240, 165, 240, 166, 240, 167, 240, 168, 240, 169, 240, 170, 240, 171, 240, 172, 240, 173, 240, 174, 240, 175, 240, 176, 240, 177, 240, 178, 240, 179, 240, 180, 240, 181, 240, 182, 240, 183, 240, 184, 240, 185, 240, 186, 240, 187, 240, 188, 241, 3, 241, 4, 241, 5, 241, 6, 241, 7, 241, 8, 241, 9, 241, 10, 241, 11, 241, 12, 241, 13, 241, 14, 241, 15, 241, 16, 241, 17, 241, 18, 241, 19, 241, 20, 241, 21, 241, 22, 241, 23, 241, 24, 241, 25, 241, 26, 241, 27, 241, 28, 241, 29, 241, 30, 241, 31, 241, 32, 241, 33, 241, 34, 241, 35, 241, 36, 241, 37, 241, 38, 241, 39, 241, 40, 241, 41, 241, 42, 241, 43, 241, 44, 241, 45, 241, 46, 241, 47, 241, 48, 241, 49, 241, 50, 241, 51, 241, 52, 241, 53, 241, 54, 241, 55, 241, 56, 241, 57, 241, 58, 241, 59, 241, 60, 241, 61, 241, 62, 241, 63, 241, 64, 241, 65, 241, 66, 241, 67, 241, 68, 241, 69, 241, 70, 241, 71, 241, 72, 241, 73, 241, 74, 241, 75, 241, 76, 241, 77, 241, 78, 241, 79, 241, 80, 241, 81, 241, 82, 241, 83, 241, 84, 241, 85, 241, 86, 241, 87, 241, 88, 241, 89, 241, 90, 241, 91, 241, 92, 241, 93, 241, 94, 241, 95, 241, 96, 241, 97, 241, 98, 241, 99, 241, 100, 241, 101, 241, 102, 241, 103, 241, 104, 241, 105, 241, 106, 241, 107, 241, 108, 241, 109, 241, 110, 241, 111, 241, 112, 241, 113, 241, 114, 241, 115, 241, 116, 241, 117, 241, 118, 241, 119, 241, 120, 241, 121, 241, 122, 241, 123, 241, 124, 241, 125, 241, 126, 241, 127, 241, 128, 241, 129, 241, 130, 241, 131, 241, 132, 241, 133, 241, 134, 241, 135, 241, 136, 241, 137, 241, 138, 241, 139, 241, 140, 241, 141, 241, 142, 241, 143, 241, 144, 241, 145, 241, 146, 241, 147, 241, 148, 241, 149, 241, 150, 241, 151, 241, 152, 241, 153, 241, 154, 241, 155, 241, 156, 241, 157, 241, 158, 241, 159, 241, 160, 241, 161, 241, 162, 241, 163, 241, 164, 241, 165, 241, 166, 241, 167, 241, 168, 241, 169, 241, 170, 241, 171, 241, 172, 241, 173, 241, 174, 241, 175, 241, 176, 241, 177, 241, 178, 241, 179, 241, 180, 241, 181, 241, 182, 241, 183, 241, 184, 241, 185, 241, 186, 241, 187, 241, 188, 242, 3, 242, 4, 242, 5, 242, 6, 242, 7, 242, 8, 242, 9, 242, 10, 242, 11, 242, 12, 242, 13, 242, 14, 242, 15, 242, 16, 242, 17, 242, 18, 242, 19, 242, 20, 242, 21, 242, 22, 242, 23, 242, 24, 242, 25, 242, 26, 242, 27, 242, 28, 242, 29, 242, 30, 242, 31, 242, 32, 242, 33, 242, 34, 242, 35, 242, 36, 242, 37, 242, 38, 242, 39, 242, 40, 242, 41, 242, 42, 242, 43, 242, 44, 242, 45, 242, 46, 242, 47, 242, 48, 242, 49, 242, 50, 242, 51, 242, 52, 242, 53, 242, 54, 242, 55, 242, 56, 242, 57, 242, 58, 242, 59, 242, 60, 242, 61, 242, 62, 242, 63, 242, 64, 242, 65, 242, 66, 242, 67, 242, 68, 242, 69, 242, 70, 242, 71, 242, 72, 242, 73, 242, 74, 242, 75, 242, 76, 242, 77, 242, 78, 242, 79, 242, 80, 242, 81, 242, 82, 242, 83, 242, 84, 242, 85, 242, 86, 242, 87, 242, 88, 242, 89, 242, 90, 242, 91, 242, 92, 242, 93, 242, 94, 242, 95, 242, 96, 242, 97, 242, 98, 242, 99, 242, 100, 242, 101, 242, 102, 242, 103, 242, 104, 242, 105, 242, 106, 242, 107, 242, 108, 242, 109, 242, 110, 242, 111, 242, 112, 242, 113, 242, 114, 242, 115, 242, 116, 242, 117, 242, 118, 242, 119, 242, 120, 242, 121, 242, 122, 242, 123, 242, 124, 242, 125, 242, 126, 242, 127, 242, 128, 242, 129, 242, 130, 242, 131, 242, 132, 242, 133, 242, 134, 242, 135, 242, 136, 242, 137, 242, 138, 242, 139, 242, 140, 242, 141, 242, 142, 242, 143, 242, 144, 242, 145, 242, 146, 242, 147, 242, 148, 242, 149, 242, 150, 242, 151, 242, 152, 242, 153, 242, 154, 242, 155, 242, 156, 242, 157, 242, 158, 242, 159, 242, 160, 242, 161, 242, 162, 242, 163, 242, 164, 242, 165, 242, 166, 242, 167, 242, 168, 242, 169, 242, 170, 242, 171, 242, 172, 242, 173, 242, 174, 242, 175, 242, 176, 242, 177, 242, 178, 242, 179, 242, 180, 242, 181, 242, 182, 242, 183, 242, 184, 242, 185, 242, 186, 242, 187, 242, 188, 243, 3, 243, 4, 243, 5, 243, 6, 243, 7, 243, 8, 243, 9, 243, 10, 243, 11, 243, 12, 243, 13, 243, 14, 243, 15, 243, 16, 243, 17, 243, 18, 243, 19, 243, 20, 243, 21, 243, 22, 243, 23, 243, 24, 243, 25, 243, 26, 243, 27, 243, 28, 243, 29, 243, 30, 243, 31, 243, 32, 243, 33, 243, 34, 243, 35, 243, 36, 243, 37, 243, 38, 243, 39, 243, 40, 243, 41, 243, 42, 243, 43, 243, 44, 243, 45, 243, 46, 243, 47, 243, 48, 243, 49, 243, 50, 243, 51, 243, 52, 243, 53, 243, 54, 243, 55, 243, 56, 243, 57, 243, 58, 243, 59, 243, 60, 243, 61, 243, 62, 243, 63, 243, 64, 243, 65, 243, 66, 243, 67, 243, 68, 243, 69, 243, 70, 243, 71, 243, 72, 243, 73, 243, 74, 243, 75, 243, 76, 243, 77, 243, 78, 243, 79, 243, 80, 243, 81, 243, 82, 243, 83, 243, 84, 243, 85, 243, 86, 243, 87, 243, 88, 243, 89, 243, 90, 243, 91, 243, 92, 243, 93, 243, 94, 243, 95, 243, 96, 243, 97, 243, 98, 243, 99, 243, 100, 243, 101, 243, 102, 243, 103, 243, 104, 243, 105, 243, 106, 243, 107, 243, 108, 243, 109, 243, 110, 243, 111, 243, 112, 243, 113, 243, 114, 243, 115, 243, 116, 243, 117, 243, 118, 243, 119, 243, 120, 243, 121, 243, 122, 243, 123, 243, 124, 243, 125, 243, 126, 243, 127, 243, 128, 243, 129, 243, 130, 243, 131, 243, 132, 243, 133, 243, 134, 243, 135, 243, 136, 243, 137, 243, 138, 243, 139, 243, 140, 243, 141, 243, 142, 243, 143, 243, 144, 243, 145, 243, 146, 243, 147, 243, 148, 243, 149, 243, 150, 243, 151, 243, 152, 243, 153, 243, 154, 243, 155, 243, 156, 243, 157, 243, 158, 243, 159, 243, 160, 243, 161, 243, 162, 243, 163, 243, 164, 243, 165, 243, 166, 243, 167, 243, 168, 243, 169, 243, 170, 243, 171, 243, 172, 243, 173, 243, 174, 243, 175, 243, 176, 243, 177, 243, 178, 243, 179, 243, 180, 243, 181, 243, 182, 243, 183, 243, 184, 243, 185, 243, 186, 243, 187, 243, 188, 244, 3, 244, 4, 244, 5, 244, 6, 244, 7, 244, 8, 244, 9, 244, 10, 244, 11, 244, 12, 244, 13, 244, 14, 244, 15, 244, 16, 244, 17, 244, 18, 244, 19, 244, 20, 244, 21, 244, 22, 244, 23, 244, 24, 244, 25, 244, 26, 244, 27, 244, 28, 244, 29, 244, 30, 244, 31, 244, 32, 244, 33, 244, 34, 244, 35, 244, 36, 244, 37, 244, 38, 244, 39, 244, 40, 244, 41, 244, 42, 244, 43, 244, 44, 244, 45, 244, 46, 244, 47, 244, 48, 244, 49, 244, 50, 244, 51, 244, 52, 244, 53, 244, 54, 244, 55, 244, 56, 244, 57, 244, 58, 244, 59, 244, 60, 244, 61, 244, 62, 244, 63, 244, 64, 244, 65, 244, 66, 244, 67, 244, 68, 244, 69, 244, 70, 244, 71, 244, 72, 244, 73, 244, 74, 244, 75, 244, 76, 244, 77, 244, 78, 244, 79, 244, 80, 244, 81, 244, 82, 244, 83, 244, 84, 244, 85, 244, 86, 244, 87, 244, 88, 244, 89, 244, 90, 244, 91, 244, 92, 244, 93, 244, 94, 244, 95, 244, 96, 244, 97, 244, 98, 244, 99, 244, 100, 244, 101, 244, 102, 244, 103, 244, 104, 244, 105, 244, 106, 244, 107, 244, 108, 244, 109, 244, 110, 244, 111, 244, 112, 244, 113, 244, 114, 244, 115, 244, 116, 244, 117, 244, 118, 244, 119, 244, 120, 244, 121, 244, 122, 244, 123, 244, 124, 244, 125, 244, 126, 244, 127, 244, 128, 244, 129, 244, 130, 244, 131, 244, 132, 244, 133, 244, 134, 244, 135, 244, 136, 244, 137, 244, 138, 244, 139, 244, 140, 244, 141, 244, 142, 244, 143, 244, 144, 244, 145, 244, 146, 244, 147, 244, 148, 244, 149, 244, 150, 244, 151, 244, 152, 244, 153, 244, 154, 244, 155, 244, 156, 244, 157, 244, 158, 244, 159, 244, 160, 244, 161, 244, 162, 244, 163, 244, 164, 244, 165, 244, 166, 244, 167, 244, 168, 244, 169, 244, 170, 244, 171, 244, 172, 244, 173, 244, 174, 244, 175, 244, 176, 244, 177, 244, 178, 244, 179, 244, 180, 244, 181, 244, 182, 244, 183, 244, 184, 244, 185, 244, 186, 244, 187, 244, 188, 245, 3, 245, 4, 245, 5, 245, 6, 245, 7, 245, 8, 245, 9, 245, 10, 245, 11, 245, 12, 245, 13, 245, 14, 245, 15, 245, 16, 245, 17, 245, 18, 245, 19, 245, 20, 245, 21, 245, 22, 245, 23, 245, 24, 245, 25, 245, 26, 245, 27, 245, 28, 245, 29, 245, 30, 245, 31, 245, 32, 245, 33, 245, 34, 245, 35, 245, 36, 245, 37, 245, 38, 245, 39, 245, 40, 245, 41, 245, 42, 245, 43, 245, 44, 245, 45, 245, 46, 245, 47, 245, 48, 245, 49, 245, 50, 245, 51, 245, 52, 245, 53, 245, 54, 245, 55, 245, 56, 245, 57, 245, 58, 245, 59, 245, 60, 245, 61, 245, 62, 245, 63, 245, 64, 245, 65, 245, 66, 245, 67, 245, 68, 245, 69, 245, 70, 245, 71, 245, 72, 245, 73, 245, 74, 245, 75, 245, 76, 245, 77, 245, 78, 245, 79, 245, 80, 245, 81, 245, 82, 245, 83, 245, 84, 245, 85, 245, 86, 245, 87, 245, 88, 245, 89, 245, 90, 245, 91, 245, 92, 245, 93, 245, 94, 245, 95, 245, 96, 245, 97, 245, 98, 245, 99, 245, 100, 245, 101, 245, 102, 245, 103, 245, 104, 245, 105, 245, 106, 245, 107, 245, 108, 245, 109, 245, 110, 245, 111, 245, 112, 245, 113, 245, 114, 245, 115, 245, 116, 245, 117, 245, 118, 245, 119, 245, 120, 245, 121, 245, 122, 245, 123, 245, 124, 245, 125, 245, 126, 245, 127, 245, 128, 245, 129, 245, 130, 245, 131, 245, 132, 245, 133, 245, 134, 245, 135, 245, 136, 245, 137, 245, 138, 245, 139, 245, 140, 245, 141, 245, 142, 245, 143, 245, 144, 245, 145, 245, 146, 245, 147, 245, 148, 245, 149, 245, 150, 245, 151, 245, 152, 245, 153, 245, 154, 245, 155, 245, 156, 245, 157, 245, 158, 245, 159, 245, 160, 245, 161, 245, 162, 245, 163, 245, 164, 245, 165, 245, 166, 245, 167, 245, 168, 245, 169, 245, 170, 245, 171, 245, 172, 245, 173, 245, 174, 245, 175, 245, 176, 245, 177, 245, 178, 245, 179, 245, 180, 245, 181, 245, 182, 245, 183, 245, 184, 245, 185, 245, 186, 245, 187, 245, 188, 246, 3, 246, 4, 246, 5, 246, 6, 246, 7, 246, 8, 246, 9, 246, 10, 246, 11, 246, 12, 246, 13, 246, 14, 246, 15, 246, 16, 246, 17, 246, 18, 246, 19, 246, 20, 246, 21, 246, 22, 246, 23, 246, 24, 246, 25, 246, 26, 246, 27, 246, 28, 246, 29, 246, 30, 246, 31, 246, 32, 246, 33, 246, 34, 246, 35, 246, 36, 246, 37, 246, 38, 246, 39, 246, 40, 246, 41, 246, 42, 246, 43, 246, 44, 246, 45, 246, 46, 246, 47, 246, 48, 246, 49, 246, 50, 246, 51, 246, 52, 246, 53, 246, 54, 246, 55, 246, 56, 246, 57, 246, 58, 246, 59, 246, 60, 246, 61, 246, 62, 246, 63, 246, 64, 246, 65, 246, 66, 246, 67, 246, 68, 246, 69, 246, 70, 246, 71, 246, 72, 246, 73, 246, 74, 246, 75, 246, 76, 246, 77, 246, 78, 246, 79, 246, 80, 246, 81, 246, 82, 246, 83, 246, 84, 246, 85, 246, 86, 246, 87, 246, 88, 246, 89, 246, 90, 246, 91, 246, 92, 246, 93, 246, 94, 246, 95, 246, 96, 246, 97, 246, 98, 246, 99, 246, 100, 246, 101, 246, 102, 246, 103, 246, 104, 246, 105, 246, 106, 246, 107, 246, 108, 246, 109, 246, 110, 246, 111, 246, 112, 246, 113, 246, 114, 246, 115, 246, 116, 246, 117, 246, 118, 246, 119, 246, 120, 246, 121, 246, 122, 246, 123, 246, 124, 246, 125, 246, 126, 246, 127, 246, 128, 246, 129, 246, 130, 246, 131, 246, 132, 246, 133, 246, 134, 246, 135, 246, 136, 246, 137, 246, 138, 246, 139, 246, 140, 246, 141, 246, 142, 246, 143, 246, 144, 246, 145, 246, 146, 246, 147, 246, 148, 246, 149, 246, 150, 246, 151, 246, 152, 246, 153, 246, 154, 246, 155, 246, 156, 246, 157, 246, 158, 246, 159, 246, 160, 246, 161, 246, 162, 246, 163, 246, 164, 246, 165, 246, 166, 246, 167, 246, 168, 246, 169, 246, 170, 246, 171, 246, 172, 246, 173, 246, 174, 246, 175, 246, 176, 246, 177, 246, 178, 246, 179, 246, 180, 246, 181, 246, 182, 246, 183, 246, 184, 246, 185, 246, 186, 246, 187, 246, 188, 247, 3, 247, 4, 247, 5, 247, 6, 247, 7, 247, 8, 247, 9, 247, 10, 247, 11, 247, 12, 247, 13, 247, 14, 247, 15, 247, 16, 247, 17, 247, 18, 247, 19, 247, 20, 247, 21, 247, 22, 247, 23, 247, 24, 247, 25, 247, 26, 247, 27, 247, 28, 247, 29, 247, 30, 247, 31, 247, 32, 247, 33, 247, 34, 247, 35, 247, 36, 247, 37, 247, 38, 247, 39, 247, 40, 247, 41, 247, 42, 247, 43, 247, 44, 247, 45, 247, 46, 247, 47, 247, 48, 247, 49, 247, 50, 247, 51, 247, 52, 247, 53, 247, 54, 247, 55, 247, 56, 247, 57, 247, 58, 247, 59, 247, 60, 247, 61, 247, 62, 247, 63, 247, 64, 247, 65, 247, 66, 247, 67, 247, 68, 247, 69, 247, 70, 247, 71, 247, 72, 247, 73, 247, 74, 247, 75, 247, 76, 247, 77, 247, 78, 247, 79, 247, 80, 247, 81, 247, 82, 247, 83, 247, 84, 247, 85, 247, 86, 247, 87, 247, 88, 247, 89, 247, 90, 247, 91, 247, 92, 247, 93, 247, 94, 247, 95, 247, 96, 247, 97, 247, 98, 247, 99, 247, 100, 247, 101, 247, 102, 247, 103, 247, 104, 247, 105, 247, 106, 247, 107, 247, 108, 247, 109, 247, 110, 247, 111, 247, 112, 247, 113, 247, 114, 247, 115, 247, 116, 247, 117, 247, 118, 247, 119, 247, 120, 247, 121, 247, 122, 247, 123, 247, 124, 247, 125, 247, 126, 247, 127, 247, 128, 247, 129, 247, 130, 247, 131, 247, 132, 247, 133, 247, 134, 247, 135, 247, 136, 247, 137, 247, 138, 247, 139, 247, 140, 247, 141, 247, 142, 247, 143, 247, 144, 247, 145, 247, 146, 247, 147, 247, 148, 247, 149, 247, 150, 247, 151, 247, 152, 247, 153, 247, 154, 247, 155, 247, 156, 247, 157, 247, 158, 247, 159, 247, 160, 247, 161, 247, 162, 247, 163, 247, 164, 247, 165, 247, 166, 247, 167, 247, 168, 247, 169, 247, 170, 247, 171, 247, 172, 247, 173, 247, 174, 247, 175, 247, 176, 247, 177, 247, 178, 247, 179, 247, 180, 247, 181, 247, 182, 247, 183, 247, 184, 247, 185, 247, 186, 247, 187, 247, 188, 248, 3, 248, 4, 248, 5, 248, 6, 248, 7, 248, 8, 248, 9, 248, 10, 248, 11, 248, 12, 248, 13, 248, 14, 248, 15, 248, 16, 248, 17, 248, 18, 248, 19, 248, 20, 248, 21, 248, 22, 248, 23, 248, 24, 248, 25, 248, 26, 248, 27, 248, 28, 248, 29, 248, 30, 248, 31, 248, 32, 248, 33, 248, 34, 248, 35, 248, 36, 248, 37, 248, 38, 248, 39, 248, 40, 248, 41, 248, 42, 248, 43, 248, 44, 248, 45, 248, 46, 248, 47, 248, 48, 248, 49, 248, 50, 248, 51, 248, 52, 248, 53, 248, 54, 248, 55, 248, 56, 248, 57, 248, 58, 248, 59, 248, 60, 248, 61, 248, 62, 248, 63, 248, 64, 248, 65, 248, 66, 248, 67, 248, 68, 248, 69, 248, 70, 248, 71, 248, 72, 248, 73, 248, 74, 248, 75, 248, 76, 248, 77, 248, 78, 248, 79, 248, 80, 248, 81, 248, 82, 248, 83, 248, 84, 248, 85, 248, 86, 248, 87, 248, 88, 248, 89, 248, 90, 248, 91, 248, 92, 248, 93, 248, 94, 248, 95, 248, 96, 248, 97, 248, 98, 248, 99, 248, 100, 248, 101, 248, 102, 248, 103, 248, 104, 248, 105, 248, 106, 248, 107, 248, 108, 248, 109, 248, 110, 248, 111, 248, 112, 248, 113, 248, 114, 248, 115, 248, 116, 248, 117, 248, 118, 248, 119, 248, 120, 248, 121, 248, 122, 248, 123, 248, 124, 248, 125, 248, 126, 248, 127, 248, 128, 248, 129, 248, 130, 248, 131, 248, 132, 248, 133, 248, 134, 248, 135, 248, 136, 248, 137, 248, 138, 248, 139, 248, 140, 248, 141, 248, 142, 248, 143, 248, 144, 248, 145, 248, 146, 248, 147, 248, 148, 248, 149, 248, 150, 248, 151, 248, 152, 248, 153, 248, 154, 248, 155, 248, 156, 248, 157, 248, 158, 248, 159, 248, 160, 248, 161, 248, 162, 248, 163, 248, 164, 248, 165, 248, 166, 248, 167, 248, 168, 248, 169, 248, 170, 248, 171, 248, 172, 248, 173, 248, 174, 248, 175, 248, 176, 248, 177, 248, 178, 248, 179, 248, 180, 248, 181, 248, 182, 248, 183, 248, 184, 248, 185, 248, 186, 248, 187, 248, 188, 249, 3, 249, 4, 249, 5, 249, 6, 249, 7, 249, 8, 249, 9, 249, 10, 249, 11, 249, 12, 249, 13, 249, 14, 249, 15, 249, 16, 249, 17, 249, 18, 249, 19, 249, 20, 249, 21, 249, 22, 249, 23, 249, 24, 249, 25, 249, 26, 249, 27, 249, 28, 249, 29, 249, 30, 249, 31, 249, 32, 249, 33, 249, 34, 249, 35, 249, 36, 249, 37, 249, 38, 249, 39, 249, 40, 249, 41, 249, 42, 249, 43, 249, 44, 249, 45, 249, 46, 249, 47, 249, 48, 249, 49, 249, 50, 249, 51, 249, 52, 249, 53, 249, 54, 249, 55, 249, 56, 249, 57, 249, 58, 249, 59, 249, 60, 249, 61, 249, 62, 249, 63, 249, 64, 249, 65, 249, 66, 249, 67, 249, 68, 249, 69, 249, 70, 249, 71, 249, 72, 249, 73, 249, 74, 249, 75, 249, 76, 249, 77, 249, 78, 249, 79, 249, 80, 249, 81, 249, 82, 249, 83, 249, 84, 249, 85, 249, 86, 249, 87, 249, 88, 249, 89, 249, 90, 249, 91, 249, 92, 249, 93, 249, 94, 249, 95, 249, 96, 249, 97, 249, 98, 249, 99, 249, 100, 249, 101, 249, 102, 249, 103, 249, 104, 249, 105, 249, 106, 249, 107, 249, 108, 249, 109, 249, 110, 249, 111, 249, 112, 249, 113, 249, 114, 249, 115, 249, 116, 249, 117, 249, 118, 249, 119, 249, 120, 249, 121, 249, 122, 249, 123, 249, 124, 249, 125, 249, 126, 249, 127, 249, 128, 249, 129, 249, 130, 249, 131, 249, 132, 249, 133, 249, 134, 249, 135, 249, 136, 249, 137, 249, 138, 249, 139, 249, 140, 249, 141, 249, 142, 249, 143, 249, 144, 249, 145, 249, 146, 249, 147, 249, 148, 249, 149, 249, 150, 249, 151, 249, 152, 249, 153, 249, 154, 249, 155, 249, 156, 249, 157, 249, 158, 249, 159, 249, 160, 249, 161, 249, 162, 249, 163, 249, 164, 249, 165, 249, 166, 249, 167, 249, 168, 249, 169, 249, 170, 249, 171, 249, 172, 249, 173, 249, 174, 249, 175, 249, 176, 249, 177, 249, 178, 249, 179, 249, 180, 249, 181, 249, 182, 249, 183, 249, 184, 249, 185, 249, 186, 249, 187, 249, 188, 250, 3, 250, 4, 250, 5, 250, 6, 250, 7, 250, 8, 250, 9, 250, 10, 250, 11, 250, 12, 250, 13, 250, 14, 250, 15, 250, 16, 250, 17, 250, 18, 250, 19, 250, 20, 250, 21, 250, 22, 250, 23, 250, 24, 250, 25, 250, 26, 250, 27, 250, 28, 250, 29, 250, 30, 250, 31, 250, 32, 250, 33, 250, 34, 250, 35, 250, 36, 250, 37, 250, 38, 250, 39, 250, 40, 250, 41, 250, 42, 250, 43, 250, 44, 250, 45, 250, 46, 250, 47, 250, 48, 250, 49, 250, 50, 250, 51, 250, 52, 250, 53, 250, 54, 250, 55, 250, 56, 250, 57, 250, 58, 250, 59, 250, 60, 250, 61, 250, 62, 250, 63, 250, 64, 250, 65, 250, 66, 250, 67, 250, 68, 250, 69, 250, 70, 250, 71, 250, 72, 250, 73, 250, 74, 250, 75, 250, 76, 250, 77, 250, 78, 250, 79, 250, 80, 250, 81, 250, 82, 250, 83, 250, 84, 250, 85, 250, 86, 250, 87, 250, 88, 250, 89, 250, 90, 250, 91, 250, 92, 250, 93, 250, 94, 250, 95, 250, 96, 250, 97, 250, 98, 250, 99, 250, 100, 250, 101, 250, 102, 250, 103, 250, 104, 250, 105, 250, 106, 250, 107, 250, 108, 250, 109, 250, 110, 250, 111, 250, 112, 250, 113, 250, 114, 250, 115, 250, 116, 250, 117, 250, 118, 250, 119, 250, 120, 250, 121, 250, 122, 250, 123, 250, 124, 250, 125, 250, 126, 250, 127, 250, 128, 250, 129, 250, 130, 250, 131, 250, 132, 250, 133, 250, 134, 250, 135, 250, 136, 250, 137, 250, 138, 250, 139, 250, 140, 250, 141, 250, 142, 250, 143, 250, 144, 250, 145, 250, 146, 250, 147, 250, 148, 250, 149, 250, 150, 250, 151, 250, 152, 250, 153, 250, 154, 250, 155, 250, 156, 250, 157, 250, 158, 250, 159, 250, 160, 250, 161, 250, 162, 250, 163, 250, 164, 250, 165, 250, 166, 250, 167, 250, 168, 250, 169, 250, 170, 250, 171, 250, 172, 250, 173, 250, 174, 250, 175, 250, 176, 250, 177, 250, 178, 250, 179, 250, 180, 250, 181, 250, 182, 250, 183, 250, 184, 250, 185, 250, 186, 250, 187, 250, 188, 251, 3, 251, 4, 251, 5, 251, 6, 251, 7, 251, 8, 251, 9, 251, 10, 251, 11, 251, 12, 251, 13, 251, 14, 251, 15, 251, 16, 251, 17, 251, 18, 251, 19, 251, 20, 251, 21, 251, 22, 251, 23, 251, 24, 251, 25, 251, 26, 251, 27, 251, 28, 251, 29, 251, 30, 251, 31, 251, 32, 251, 33, 251, 34, 251, 35, 251, 36, 251, 37, 251, 38, 251, 39, 251, 40, 251, 41, 251, 42, 251, 43, 251, 44, 251, 45, 251, 46, 251, 47, 251, 48, 251, 49, 251, 50, 251, 51, 251, 52, 251, 53, 251, 54, 251, 55, 251, 56, 251, 57, 251, 58, 251, 59, 251, 60, 251, 61, 251, 62, 251, 63, 251, 64, 251, 65, 251, 66, 251, 67, 251, 68, 251, 69, 251, 70, 251, 71, 251, 72, 251, 73, 251, 74, 251, 75, 251, 76, 251, 77, 251, 78, 251, 79, 251, 80, 251, 81, 251, 82, 251, 83, 251, 84, 251, 85, 251, 86, 251, 87, 251, 88, 251, 89, 251, 90, 251, 91, 251, 92, 251, 93, 251, 94, 251, 95, 251, 96, 251, 97, 251, 98, 251, 99, 251, 100, 251, 101, 251, 102, 251, 103, 251, 104, 251, 105, 251, 106, 251, 107, 251, 108, 251, 109, 251, 110, 251, 111, 251, 112, 251, 113, 251, 114, 251, 115, 251, 116, 251, 117, 251, 118, 251, 119, 251, 120, 251, 121, 251, 122, 251, 123, 251, 124, 251, 125, 251, 126, 251, 127, 251, 128, 251, 129, 251, 130, 251, 131, 251, 132, 251, 133, 251, 134, 251, 135, 251, 136, 251, 137, 251, 138, 251, 139, 251, 140, 251, 141, 251, 142, 251, 143, 251, 144, 251, 145, 251, 146, 251, 147, 251, 148, 251, 149, 251, 150, 251, 151, 251, 152, 251, 153, 251, 154, 251, 155, 251, 156, 251, 157, 251, 158, 251, 159, 251, 160, 251, 161, 251, 162, 251, 163, 251, 164, 251, 165, 251, 166, 251, 167, 251, 168, 251, 169, 251, 170, 251, 171, 251, 172, 251, 173, 251, 174, 251, 175, 251, 176, 251, 177, 251, 178, 251, 179, 251, 180, 251, 181, 251, 182, 251, 183, 251, 184, 251, 185, 251, 186, 251, 187, 251, 188, 252, 3, 252, 4, 252, 5, 252, 6, 252, 7, 252, 8, 252, 9, 252, 10, 252, 11, 252, 12, 252, 13, 252, 14, 252, 15, 252, 16, 252, 17, 252, 18, 252, 19, 252, 20, 252, 21, 252, 22, 252, 23, 252, 24, 252, 25, 252, 26, 252, 27, 252, 28, 252, 29, 252, 30, 252, 31, 252, 32, 252, 33, 252, 34, 252, 35, 252, 36, 252, 37, 252, 38, 252, 39, 252, 40, 252, 41, 252, 42, 252, 43, 252, 44, 252, 45, 252, 46, 252, 47, 252, 48, 252, 49, 252, 50, 252, 51, 252, 52, 252, 53, 252, 54, 252, 55, 252, 56, 252, 57, 252, 58, 252, 59, 252, 60, 252, 61, 252, 62, 252, 63, 252, 64, 252, 65, 252, 66, 252, 67, 252, 68, 252, 69, 252, 70, 252, 71, 252, 72, 252, 73, 252, 74, 252, 75, 252, 76, 252, 77, 252, 78, 252, 79, 252, 80, 252, 81, 252, 82, 252, 83, 252, 84, 252, 85, 252, 86, 252, 87, 252, 88, 252, 89, 252, 90, 252, 91, 252, 92, 252, 93, 252, 94, 252, 95, 252, 96, 252, 97, 252, 98, 252, 99, 252, 100, 252, 101, 252, 102, 252, 103, 252, 104, 252, 105, 252, 106, 252, 107, 252, 108, 252, 109, 252, 110, 252, 111, 252, 112, 252, 113, 252, 114, 252, 115, 252, 116, 252, 117, 252, 118, 252, 119, 252, 120, 252, 121, 252, 122, 252, 123, 252, 124, 252, 125, 252, 126, 252, 127, 252, 128, 252, 129, 252, 130, 252, 131, 252, 132, 252, 133, 252, 134, 252, 135, 252, 136, 252, 137, 252, 138, 252, 139, 252, 140, 252, 141, 252, 142, 252, 143, 252, 144, 252, 145, 252, 146, 252, 147, 252, 148, 252, 149, 252, 150, 252, 151, 252, 152, 252, 153, 252, 154, 252, 155, 252, 156, 252, 157, 252, 158, 252, 159, 252, 160, 252, 161, 252, 162, 252, 163, 252, 164, 252, 165, 252, 166, 252, 167, 252, 168, 252, 169, 252, 170, 252, 171, 252, 172, 252, 173, 252, 174, 252, 175, 252, 176, 252, 177, 252, 178, 252, 179, 252, 180, 252, 181, 252, 182, 252, 183, 252, 184, 252, 185, 252, 186, 252, 187, 252, 188 )
+emission_colors = PoolColorArray( )
+gravity = Vector2( 0, 0 )
+anim_speed = 1.0
+
+[node name="LevelPath" type="Path2D" parent="."]
+curve = SubResource( 1 )
+
+[node name="PlayerPosition" type="PathFollow2D" parent="LevelPath"]
+unique_name_in_owner = true
+position = Vector2( 61, 140 )
+rotate = false
+
+[node name="PlayerSprite" type="Sprite" parent="LevelPath/PlayerPosition"]
+unique_name_in_owner = true
+material = SubResource( 15 )
+position = Vector2( 0, -2 )
+texture = ExtResource( 3 )
+
+[node name="Sparkles" type="CPUParticles2D" parent="LevelPath/PlayerPosition/PlayerSprite"]
+unique_name_in_owner = true
+visible = false
+light_mask = 0
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 21 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 27 )
+color = Color( 0.996078, 1, 0.760784, 1 )
+script = ExtResource( 20 )
+
+[node name="hills" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 61, 140 )
+rotation = 1.04814
+
+[node name="canopy" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 89.5314, 148.93 )
+rotation = -0.105869
+offset = 32.0
+
+[node name="mountain" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 111.481, 142.765 )
+rotation = -1.37064
+offset = 55.0
+
+[node name="boss1" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 118.615, 133.912 )
+rotation = 0.140896
+offset = 69.0
+
+[node name="cave" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 126.41, 129.495 )
+rotation = -2.19952
+offset = 80.0
+
+[node name="InCave" type="PathFollow2D" parent="LevelPath"]
+unique_name_in_owner = true
+position = Vector2( 124.058, 126.26 )
+rotation = -1.85459
+offset = 84.0
+
+[node name="OutCave" type="PathFollow2D" parent="LevelPath"]
+unique_name_in_owner = true
+position = Vector2( 139.8, 95.8421 )
+rotation = 0.144373
+offset = 130.0
+
+[node name="abyss" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 154.261, 99.6526 )
+rotation = -1.39342
+offset = 145.0
+
+[node name="graveyard" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 167.42, 78.1565 )
+rotation = 0.453406
+offset = 176.0
+
+[node name="boss2" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 183.719, 89.5131 )
+rotation = 1.31674
+offset = 196.0
+
+[node name="station" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 180.067, 105.7 )
+rotation = 0.382192
+offset = 217.0
+
+[node name="rust" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 179.452, 131.298 )
+rotation = 2.56727
+offset = 258.0
+
+[node name="lab" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 203.036, 129.879 )
+rotation = -1.21855
+offset = 293.0
+
+[node name="boss3" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 210.977, 118.729 )
+rotation = 0.787923
+offset = 308.0
+
+[node name="beta_cave" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 123.406, 129.056 )
+rotation = -2.90295
+offset = 432.0
+
+[node name="beta_hills" type="PathFollow2D" parent="LevelPath"]
+position = Vector2( 64.0566, 132.854 )
+rotation = -2.19526
+offset = 505.0
+
+[node name="WorldTitle" type="Label" parent="."]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_left = -26.0
+margin_top = 164.0
+margin_right = 282.0
+margin_bottom = 187.0
+theme = ExtResource( 4 )
+text = "This is it sg.
+change the future, we believe in you"
+align = 1
+valign = 1
+
+[node name="CurrentLevel" type="HBoxContainer" parent="."]
+anchor_right = 1.0
+margin_bottom = 16.0
+theme = ExtResource( 4 )
+alignment = 1
+
+[node name="BackArrow" type="TextureRect" parent="CurrentLevel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+margin_left = 58.0
+margin_top = 4.0
+margin_right = 64.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 5 )
+flip_h = true
+
+[node name="LevelTitle" type="Label" parent="CurrentLevel"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_left = 68.0
+margin_top = 3.0
+margin_right = 159.0
+margin_bottom = 13.0
+theme = ExtResource( 4 )
+text = "Verdant Hills"
+align = 1
+valign = 1
+
+[node name="ForwardArrow" type="TextureRect" parent="CurrentLevel"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 3 )
+margin_left = 164.0
+margin_top = 4.0
+margin_right = 170.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 5 )
+
+[node name="BossBlock" type="TextureRect" parent="CurrentLevel"]
+unique_name_in_owner = true
+visible = false
+margin_left = 169.0
+margin_top = 4.0
+margin_right = 176.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 8 )
+
+[node name="ShardsBlock" type="HBoxContainer" parent="CurrentLevel"]
+unique_name_in_owner = true
+margin_left = 163.0
+margin_right = 198.0
+margin_bottom = 16.0
+custom_constants/separation = 2
+
+[node name="ForwardArrow" type="TextureRect" parent="CurrentLevel/ShardsBlock"]
+modulate = Color( 0.690196, 0.690196, 0.690196, 1 )
+margin_top = 4.0
+margin_right = 6.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 5 )
+
+[node name="Icon" type="TextureRect" parent="CurrentLevel/ShardsBlock"]
+material = SubResource( 10 )
+margin_left = 8.0
+margin_top = 2.0
+margin_right = 19.0
+margin_bottom = 13.0
+size_flags_vertical = 4
+texture = ExtResource( 10 )
+
+[node name="ShardsNeeded" type="Label" parent="CurrentLevel/ShardsBlock"]
+unique_name_in_owner = true
+modulate = Color( 0.933333, 0.247059, 0.247059, 1 )
+margin_left = 21.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 13.0
+custom_fonts/font = ExtResource( 12 )
+text = "15"
+
+[node name="LevelStats" type="Panel" parent="."]
+visible = false
+margin_left = 40.0
+margin_top = 45.0
+margin_right = 216.0
+margin_bottom = 147.0
+grow_horizontal = 2
+grow_vertical = 2
+rect_min_size = Vector2( 176, 102 )
+rect_pivot_offset = Vector2( 88, 51 )
+theme = ExtResource( 4 )
+
+[node name="HighScoreLabel" type="Label" parent="LevelStats"]
+material = ExtResource( 6 )
+margin_left = 16.0
+margin_top = 16.0
+margin_right = 160.0
+margin_bottom = 26.0
+theme = ExtResource( 4 )
+text = "High SCORE:"
+align = 1
+
+[node name="PressStart" type="Label" parent="LevelStats"]
+material = ExtResource( 6 )
+margin_left = 16.0
+margin_top = -13.0
+margin_right = 160.0
+margin_bottom = -3.0
+theme = ExtResource( 4 )
+text = "press start to play!"
+align = 1
+
+[node name="Any" type="Label" parent="LevelStats"]
+material = ExtResource( 6 )
+margin_left = 39.0
+margin_top = 27.0
+margin_right = 67.0
+margin_bottom = 37.0
+theme = ExtResource( 4 )
+text = "any%"
+align = 1
+
+[node name="ScoreAny" type="Label" parent="LevelStats/Any"]
+unique_name_in_owner = true
+use_parent_material = true
+margin_top = 13.0
+margin_right = 28.0
+margin_bottom = 23.0
+text = "0000"
+
+[node name="TimeAny" type="Label" parent="LevelStats/Any"]
+unique_name_in_owner = true
+use_parent_material = true
+margin_left = -11.0
+margin_top = 26.0
+margin_right = 38.0
+margin_bottom = 36.0
+text = "0:00.00"
+
+[node name="100" type="Label" parent="LevelStats"]
+material = ExtResource( 6 )
+margin_left = 102.0
+margin_top = 27.0
+margin_right = 130.0
+margin_bottom = 37.0
+theme = ExtResource( 4 )
+text = "100%"
+align = 1
+
+[node name="Score100" type="Label" parent="LevelStats/100"]
+unique_name_in_owner = true
+use_parent_material = true
+margin_top = 13.0
+margin_right = 28.0
+margin_bottom = 23.0
+text = "0000"
+
+[node name="Time100" type="Label" parent="LevelStats/100"]
+unique_name_in_owner = true
+use_parent_material = true
+margin_left = -11.0
+margin_top = 26.0
+margin_right = 38.0
+margin_bottom = 36.0
+text = "0:00.00"
+
+[node name="ShardTitle" type="Label" parent="LevelStats"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_left = 3.0
+margin_top = 89.0
+margin_right = 173.0
+margin_bottom = 99.0
+theme = ExtResource( 4 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+align = 1
+
+[node name="EmptyShards" type="Node2D" parent="LevelStats"]
+position = Vector2( -40, -35 )
+
+[node name="EmptyShard1" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 76, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard2" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 91, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard3" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 106, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard4" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 121, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard5" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 136, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard6" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 151, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard7" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 166, 118 )
+texture = ExtResource( 10 )
+
+[node name="EmptyShard8" type="Sprite" parent="LevelStats/EmptyShards"]
+modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 181, 118 )
+texture = ExtResource( 10 )
+
+[node name="FilledShards" type="Node2D" parent="LevelStats"]
+unique_name_in_owner = true
+
+[node name="Shard1" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 31, 80 )
+
+[node name="Shard2" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 46, 80 )
+
+[node name="Shard3" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 61, 80 )
+
+[node name="Shard4" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 76, 80 )
+
+[node name="Shard5" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 91, 80 )
+
+[node name="Shard6" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 106, 80 )
+
+[node name="Shard7" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 121, 80 )
+
+[node name="Shard8" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
+visible = false
+position = Vector2( 136, 80 )
+
+[node name="ShardArrow" type="Sprite" parent="LevelStats"]
+unique_name_in_owner = true
+position = Vector2( 31, 71 )
+texture = ExtResource( 14 )
+offset = Vector2( 5, 0 )
+
+[node name="BossCenter" type="Control" parent="."]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_scale = Vector2( 1e-05, 0.04 )
+rect_pivot_offset = Vector2( 128, 96 )
+
+[node name="PressStartBoss" type="Label" parent="BossCenter"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_top = 56.0
+margin_right = 256.0
+margin_bottom = 66.0
+theme = ExtResource( 4 )
+text = "press start to fight!"
+align = 1
+
+[node name="BossTimeBox" type="Panel" parent="BossCenter"]
+margin_left = 48.0
+margin_top = 72.0
+margin_right = 200.0
+margin_bottom = 122.0
+grow_horizontal = 2
+grow_vertical = 2
+rect_min_size = Vector2( 120, 50 )
+rect_pivot_offset = Vector2( 88, 51 )
+theme = ExtResource( 4 )
+
+[node name="VBoxContainer" type="VBoxContainer" parent="BossCenter/BossTimeBox"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 8.0
+margin_top = 8.0
+margin_right = -8.0
+margin_bottom = -8.0
+alignment = 1
+
+[node name="BossFlavorText" type="Label" parent="BossCenter/BossTimeBox/VBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_top = 5.0
+margin_right = 136.0
+margin_bottom = 15.0
+theme = ExtResource( 4 )
+text = "speediest smashing"
+align = 1
+
+[node name="BossTime" type="Label" parent="BossCenter/BossTimeBox/VBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_top = 19.0
+margin_right = 136.0
+margin_bottom = 29.0
+text = "0:00.00"
+align = 1
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 6 )
+anims/hide_boss = SubResource( 16 )
+anims/hide_exit = SubResource( 11 )
+anims/hide_menu = SubResource( 13 )
+anims/hide_stats = SubResource( 8 )
+anims/show_boss = SubResource( 17 )
+anims/show_exit = SubResource( 12 )
+anims/show_menu = SubResource( 14 )
+anims/show_stats = SubResource( 7 )
+
+[node name="AuxPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 18 )
+anims/hide_boss = SubResource( 19 )
+anims/hide_exit = SubResource( 20 )
+anims/hide_menu = SubResource( 21 )
+anims/hide_stats = SubResource( 22 )
+anims/show_boss = SubResource( 23 )
+anims/show_exit = SubResource( 24 )
+anims/show_menu = SubResource( 25 )
+anims/show_stats = SubResource( 26 )
+
+[node name="ShardCount" type="Label" parent="."]
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = -238.0
+margin_top = -189.0
+margin_right = -224.0
+margin_bottom = -179.0
+theme = ExtResource( 4 )
+custom_fonts/font = ExtResource( 12 )
+text = "72"
+
+[node name="MenuIndicator" type="HBoxContainer" parent="."]
+margin_left = 3.0
+margin_top = 23.0
+margin_right = 47.0
+margin_bottom = 33.0
+custom_constants/separation = 2
+script = ExtResource( 23 )
+action = "ui_cancel"
+
+[node name="Label" type="Label" parent="MenuIndicator"]
+margin_right = 35.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 12 )
+text = "Menu:"
+
+[node name="KeyboardButton" type="Label" parent="MenuIndicator"]
+margin_left = 37.0
+margin_right = 44.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 12 )
+text = "X"
+
+[node name="GamepadButton" type="TextureRect" parent="MenuIndicator"]
+visible = false
+margin_left = 46.0
+margin_right = 58.0
+margin_bottom = 10.0
+size_flags_vertical = 4
+texture = SubResource( 37 )
+
+[node name="Shard" parent="." instance=ExtResource( 11 )]
+position = Vector2( 4, 5 )
+
+[node name="MenuPopup" type="CenterContainer" parent="."]
+unique_name_in_owner = true
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_pivot_offset = Vector2( 128, 96 )
+theme = ExtResource( 4 )
+
+[node name="PanelContainer" type="PanelContainer" parent="MenuPopup"]
+margin_left = 64.0
+margin_top = 93.0
+margin_right = 192.0
+margin_bottom = 99.0
+rect_min_size = Vector2( 128, 0 )
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MenuPopup/PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 125.0
+margin_bottom = 55.0
+
+[node name="Resume" type="HBoxContainer" parent="MenuPopup/PanelContainer/VBoxContainer"]
+margin_right = 122.0
+margin_bottom = 10.0
+custom_constants/separation = 0
+alignment = 1
+
+[node name="ResumeButton" type="TextureButton" parent="MenuPopup/PanelContainer/VBoxContainer/Resume"]
+unique_name_in_owner = true
+margin_left = 32.0
+margin_right = 40.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+button_mask = 0
+texture_focused = ExtResource( 5 )
+expand = true
+stretch_mode = 3
+
+[node name="Label" type="Label" parent="MenuPopup/PanelContainer/VBoxContainer/Resume"]
+margin_left = 40.0
+margin_right = 82.0
+margin_bottom = 10.0
+text = "resume"
+
+[node name="Spacer" type="Control" parent="MenuPopup/PanelContainer/VBoxContainer/Resume"]
+margin_left = 82.0
+margin_right = 90.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+
+[node name="Palettes" type="HBoxContainer" parent="MenuPopup/PanelContainer/VBoxContainer"]
+margin_top = 14.0
+margin_right = 122.0
+margin_bottom = 24.0
+custom_constants/separation = 0
+alignment = 1
+
+[node name="PalettesButton" type="TextureButton" parent="MenuPopup/PanelContainer/VBoxContainer/Palettes"]
+margin_left = 25.0
+margin_right = 33.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+button_mask = 0
+texture_focused = ExtResource( 5 )
+expand = true
+stretch_mode = 3
+
+[node name="Label" type="Label" parent="MenuPopup/PanelContainer/VBoxContainer/Palettes"]
+margin_left = 33.0
+margin_right = 89.0
+margin_bottom = 10.0
+text = "palettes"
+
+[node name="Spacer" type="Control" parent="MenuPopup/PanelContainer/VBoxContainer/Palettes"]
+margin_left = 89.0
+margin_right = 97.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+
+[node name="OptionsButton" type="HBoxContainer" parent="MenuPopup/PanelContainer/VBoxContainer"]
+margin_top = 28.0
+margin_right = 122.0
+margin_bottom = 38.0
+custom_constants/separation = 0
+alignment = 1
+
+[node name="OptionsButton" type="TextureButton" parent="MenuPopup/PanelContainer/VBoxContainer/OptionsButton"]
+unique_name_in_owner = true
+margin_left = 28.0
+margin_right = 36.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+button_mask = 0
+texture_focused = ExtResource( 5 )
+expand = true
+stretch_mode = 3
+
+[node name="Label" type="Label" parent="MenuPopup/PanelContainer/VBoxContainer/OptionsButton"]
+margin_left = 36.0
+margin_right = 85.0
+margin_bottom = 10.0
+text = "OPTIONS"
+
+[node name="Spacer" type="Control" parent="MenuPopup/PanelContainer/VBoxContainer/OptionsButton"]
+margin_left = 85.0
+margin_right = 93.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+
+[node name="Menu" type="HBoxContainer" parent="MenuPopup/PanelContainer/VBoxContainer"]
+margin_top = 42.0
+margin_right = 122.0
+margin_bottom = 52.0
+rect_pivot_offset = Vector2( -140, -37 )
+custom_constants/separation = 0
+alignment = 1
+
+[node name="MenuButton" type="TextureButton" parent="MenuPopup/PanelContainer/VBoxContainer/Menu"]
+margin_left = 21.0
+margin_right = 29.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+button_mask = 0
+texture_focused = ExtResource( 5 )
+expand = true
+stretch_mode = 3
+
+[node name="Label" type="Label" parent="MenuPopup/PanelContainer/VBoxContainer/Menu"]
+margin_left = 29.0
+margin_right = 92.0
+margin_bottom = 10.0
+text = "main menu"
+
+[node name="Spacer" type="Control" parent="MenuPopup/PanelContainer/VBoxContainer/Menu"]
+margin_left = 92.0
+margin_right = 100.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 8, 8 )
+
+[node name="ExitPopup" type="CenterContainer" parent="."]
+unique_name_in_owner = true
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_scale = Vector2( 1e-05, 0.011 )
+rect_pivot_offset = Vector2( 128, 96 )
+theme = ExtResource( 4 )
+
+[node name="PanelContainer" type="PanelContainer" parent="ExitPopup"]
+margin_left = 125.0
+margin_top = 93.0
+margin_right = 131.0
+margin_bottom = 99.0
+
+[node name="VBoxContainer" type="VBoxContainer" parent="ExitPopup/PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 108.0
+margin_bottom = 27.0
+
+[node name="Label" type="Label" parent="ExitPopup/PanelContainer/VBoxContainer"]
+margin_right = 105.0
+margin_bottom = 10.0
+text = "Return to menu?"
+align = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="ExitPopup/PanelContainer/VBoxContainer"]
+margin_top = 14.0
+margin_right = 105.0
+margin_bottom = 24.0
+custom_constants/separation = 8
+alignment = 1
+
+[node name="StayHere" type="Button" parent="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+margin_right = 48.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath(".")
+focus_neighbour_bottom = NodePath(".")
+size_flags_horizontal = 3
+text = "NO"
+
+[node name="ExitMenu" type="Button" parent="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer"]
+margin_left = 56.0
+margin_right = 105.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath(".")
+focus_neighbour_bottom = NodePath(".")
+size_flags_horizontal = 3
+text = "YES"
+
+[node name="OptionsScreen" parent="." instance=ExtResource( 18 )]
+visible = false
+
+[node name="MenuSounds" parent="." instance=ExtResource( 19 )]
+unique_name_in_owner = true
+
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton" to="." method="_on_ResumeButton_button_down"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton" to="AnimationPlayer" method="play" binds= [ "hide_menu" ]]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Palettes/PalettesButton" to="." method="_on_PalettesButton_button_down"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Palettes/PalettesButton" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="MenuPopup/PanelContainer/VBoxContainer/Palettes/PalettesButton" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/OptionsButton/OptionsButton" to="." method="_on_OptionsButton_button_down"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/OptionsButton/OptionsButton" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="MenuPopup/PanelContainer/VBoxContainer/OptionsButton/OptionsButton" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton" to="AnimationPlayer" method="play" binds= [ "show_exit" ]]
+[connection signal="button_down" from="MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere" to="MenuSounds" method="play_select_sound"]
+[connection signal="pressed" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere" to="." method="_on_StayHere_pressed"]
+[connection signal="button_down" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/ExitMenu" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/ExitMenu" to="MenuSounds" method="play_select_sound"]
+[connection signal="pressed" from="ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/ExitMenu" to="." method="_on_ExitMenu_pressed"]
+[connection signal="exit" from="OptionsScreen" to="." method="_on_OptionsScreen_exit"]
diff --git a/menus/main_menu.gd b/menus/main_menu.gd
new file mode 100644
index 0000000..d62e9bb
--- /dev/null
+++ b/menus/main_menu.gd
@@ -0,0 +1,71 @@
+class_name MainMenu
+extends Node
+
+onready var continue_button = $Panel/Continue
+
+func _ready():
+ Game.marathon_mode = false
+ Fade.fade_in(Options.transition_speed_secs)
+ #Grey out continue if no save files
+ SpeedrunTimer.visible = false
+ SpeedrunTimer.timer_running = false
+ yield(get_tree(),"idle_frame")
+ if Save.current_file and not Save.current_file.debug:
+ $Panel/Continue.grab_focus()
+ else:
+ $Panel/Body/GreyedContinue.visible = true
+ continue_button.visible = false
+ $Panel/FileSelect.grab_focus()
+ if Game.last_mm_button != null:
+ get_node(Game.last_mm_button).grab_focus()
+ else:
+ $Panel/FileSelect.grab_focus()
+
+func _on_Continue_button_down():
+ Game.last_mm_button = "Panel/Continue"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/level_select_scholar.tscn").instance()
+
+
+func _on_FileSelect_button_down():
+ Game.last_mm_button = @"Panel/FileSelect"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/file_select.tscn").instance()
+
+
+func _on_Exit_button_down():
+ Game.last_mm_button = @"Panel/FileSelect"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ get_tree().quit()
+
+
+func _on_SoundTest_button_down():
+ Game.last_mm_button = @"Panel/SoundTest"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/sound_test.tscn").instance()
+
+
+
+func _on_HighScores_button_down() -> void:
+ Game.last_mm_button = @"Panel/HighScores"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/scoreboards_scholar.tscn").instance()
+
+
+func _on_Options_button_down() -> void:
+ Game.last_mm_button = @"Panel/Options"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/options_menu.tscn").instance()
+
+
+func _on_MarathonMode_button_down() -> void:
+ Game.last_mm_button = @"Panel/MarathonMode"
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/marathon_start.tscn").instance()
diff --git a/menus/main_menu.tscn b/menus/main_menu.tscn
new file mode 100644
index 0000000..a12ec4f
--- /dev/null
+++ b/menus/main_menu.tscn
@@ -0,0 +1,266 @@
+[gd_scene load_steps=15 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/hud/sg_menu.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=4]
+[ext_resource path="res://menus/main_menu.gd" type="Script" id=5]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=6]
+[ext_resource path="res://graphics/hud/sg_menu_blink.png" type="Texture" id=7]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=9]
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 6 )
+shader_param/color_1 = Color( 1, 0.835294, 0.619608, 1 )
+shader_param/color_2 = Color( 1, 0.478431, 0.219608, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 12, 0 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform( 1, -2, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 6 )
+shader_param/color_1 = Color( 0.62, 0.797333, 1, 1 )
+shader_param/color_2 = Color( 0.22, 0.428, 1, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 24, 0 )
+shader_param/cycle_alternation = Vector2( 0, 0 )
+shader_param/uv_transform = Transform( 1, 1, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 2 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 1 )
+shader_param/offset = Vector2( 0, 1 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 2 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="Animation" id=5]
+resource_name = "blink"
+length = 5.0
+loop = true
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("SG/Eyes:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 4.3, 4.55 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("SG/Eyes:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 4.3, 4.35, 4.4, 4.45, 4.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 1, 0 ]
+}
+
+[node name="MainMenu" type="Node"]
+script = ExtResource( 5 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 2 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 136.0
+
+[node name="Background2" type="ColorRect" parent="."]
+material = SubResource( 3 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_bottom = -56.0
+
+[node name="SG" type="TextureRect" parent="."]
+margin_left = 176.0
+margin_top = 40.0
+margin_right = 242.0
+margin_bottom = 187.0
+texture = ExtResource( 3 )
+
+[node name="Eyes" type="Sprite" parent="SG"]
+visible = false
+position = Vector2( 33, 38 )
+texture = ExtResource( 7 )
+hframes = 3
+
+[node name="Panel" type="Panel" parent="."]
+material = SubResource( 6 )
+margin_left = 16.0
+margin_top = 32.0
+margin_right = 136.0
+margin_bottom = 120.0
+theme = ExtResource( 1 )
+
+[node name="Body" type="Label" parent="Panel"]
+material = SubResource( 6 )
+margin_left = 16.0
+margin_top = 8.0
+margin_right = 112.0
+margin_bottom = 80.0
+text = "file select
+marathon mode
+options
+high scores
+sound test
+exit"
+
+[node name="GreyedContinue" type="Label" parent="Panel/Body"]
+visible = false
+material = SubResource( 6 )
+margin_top = 9001.0
+margin_right = 56.0
+margin_bottom = 9011.0
+custom_colors/font_color = Color( 0.690196, 0.690196, 0.690196, 1 )
+text = "Continue"
+
+[node name="Continue" type="TextureButton" parent="Panel"]
+visible = false
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 9.0
+margin_right = 16.0
+margin_bottom = 17.0
+focus_neighbour_top = NodePath("../Exit")
+focus_neighbour_bottom = NodePath("../FileSelect")
+texture_focused = ExtResource( 4 )
+
+[node name="FileSelect" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 9.0
+margin_right = 16.0
+margin_bottom = 17.0
+focus_neighbour_top = NodePath("../Exit")
+focus_neighbour_bottom = NodePath("../MarathonMode")
+texture_focused = ExtResource( 4 )
+
+[node name="MarathonMode" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 22.0
+margin_right = 16.0
+margin_bottom = 30.0
+focus_neighbour_top = NodePath("../FileSelect")
+focus_neighbour_bottom = NodePath("../Options")
+texture_focused = ExtResource( 4 )
+
+[node name="Augmentations" type="TextureButton" parent="Panel"]
+visible = false
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 48.0
+margin_right = 16.0
+margin_bottom = 56.0
+focus_neighbour_top = NodePath("../MarathonMode")
+focus_neighbour_bottom = NodePath("../Options")
+texture_focused = ExtResource( 4 )
+
+[node name="Options" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 35.0
+margin_right = 16.0
+margin_bottom = 43.0
+focus_neighbour_top = NodePath("../MarathonMode")
+focus_neighbour_bottom = NodePath("../HighScores")
+texture_focused = ExtResource( 4 )
+
+[node name="HighScores" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 48.0
+margin_right = 16.0
+margin_bottom = 56.0
+focus_neighbour_top = NodePath("../Options")
+focus_neighbour_bottom = NodePath("../SoundTest")
+texture_focused = ExtResource( 4 )
+
+[node name="SoundTest" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 61.0
+margin_right = 16.0
+margin_bottom = 69.0
+focus_neighbour_top = NodePath("../HighScores")
+focus_neighbour_bottom = NodePath("../Exit")
+texture_focused = ExtResource( 4 )
+
+[node name="Exit" type="TextureButton" parent="Panel"]
+material = SubResource( 4 )
+margin_left = 8.0
+margin_top = 74.0
+margin_right = 16.0
+margin_bottom = 82.0
+focus_neighbour_top = NodePath("../SoundTest")
+focus_neighbour_bottom = NodePath("../FileSelect")
+texture_focused = ExtResource( 4 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "blink"
+anims/blink = SubResource( 5 )
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 8 )
+margin_left = 8.0
+margin_top = 140.0
+margin_right = 183.0
+margin_bottom = 189.0
+theme = ExtResource( 1 )
+text = "REvolution -
+The forceful overthrow of
+a social order in favor
+of a new future"
+
+[node name="Label2" type="Label" parent="."]
+material = ExtResource( 8 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 218.0
+margin_bottom = 57.0
+theme = ExtResource( 1 )
+text = "Welcome to the future... 2083!"
+align = 1
+
+[node name="MenuSounds" parent="." instance=ExtResource( 9 )]
+
+[connection signal="button_down" from="Panel/Continue" to="." method="_on_Continue_button_down"]
+[connection signal="button_down" from="Panel/Continue" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/Continue" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/FileSelect" to="." method="_on_FileSelect_button_down"]
+[connection signal="button_down" from="Panel/FileSelect" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/FileSelect" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/MarathonMode" to="." method="_on_MarathonMode_button_down"]
+[connection signal="button_down" from="Panel/MarathonMode" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/MarathonMode" to="MenuSounds" method="play_select_sound"]
+[connection signal="focus_entered" from="Panel/Augmentations" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/Options" to="." method="_on_Options_button_down"]
+[connection signal="button_down" from="Panel/Options" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/Options" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/HighScores" to="." method="_on_HighScores_button_down"]
+[connection signal="button_down" from="Panel/HighScores" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/HighScores" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/SoundTest" to="." method="_on_SoundTest_button_down"]
+[connection signal="button_down" from="Panel/SoundTest" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/SoundTest" to="MenuSounds" method="play_select_sound"]
+[connection signal="button_down" from="Panel/Exit" to="." method="_on_Exit_button_down"]
+[connection signal="button_down" from="Panel/Exit" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Panel/Exit" to="MenuSounds" method="play_select_sound"]
diff --git a/menus/marathon_results.gd b/menus/marathon_results.gd
new file mode 100644
index 0000000..272d492
--- /dev/null
+++ b/menus/marathon_results.gd
@@ -0,0 +1,19 @@
+extends Control
+
+
+onready var score: Label = $"%Score"
+onready var shards: Label = $"%Shards"
+
+
+func _ready() -> void:
+ Audio.play_music(load("res://audio/music/rumble_revolution_demo.ogg"))
+ score.text = score.text % Game.marathon_score
+ shards.text = shards.text % Game.marathon_shards
+ $"%Deaths".text = $"%Deaths".text % Game.marathon_deaths
+ Fade.fade_in()
+
+
+func _input(event: InputEvent) -> void:
+ if Input.is_action_just_pressed("ui_accept"):
+ Fade.fade_out(Options.transition_speed_secs)
+ Game.change_map(load("res://menus/marathon_start.tscn"))
diff --git a/menus/marathon_results.tscn b/menus/marathon_results.tscn
new file mode 100644
index 0000000..b3be597
--- /dev/null
+++ b/menus/marathon_results.tscn
@@ -0,0 +1,99 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://menus/marathon_results.gd" type="Script" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 1, 0.709804, 0.380392, 1 )
+shader_param/color_2 = Color( 0.345098, 0.945098, 0.905882, 1 )
+shader_param/checker_size = Vector2( 24, 24 )
+shader_param/pan_speed = Vector2( 8, 12 )
+shader_param/cycle_speed = Vector2( 4, 4 )
+shader_param/cycle_alternation = Vector2( 4, 4 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 )
+
+[node name="MarathonResults" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+script = ExtResource( 3 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Victory" type="Label" parent="."]
+material = ExtResource( 4 )
+margin_top = 24.0
+margin_right = 256.0
+margin_bottom = 47.0
+text = "Game is over, when will another
+day's adventure begin?"
+align = 1
+
+[node name="Victory2" type="Label" parent="."]
+material = ExtResource( 4 )
+margin_top = 144.0
+margin_right = 256.0
+margin_bottom = 180.0
+text = "No matter what happens you
+will always remain a triumphant
+hero, too."
+align = 1
+
+[node name="PanelContainer" type="PanelContainer" parent="."]
+margin_left = 68.0
+margin_top = 64.0
+margin_right = 188.0
+margin_bottom = 134.0
+
+[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 117.0
+margin_bottom = 67.0
+
+[node name="Label" type="Label" parent="PanelContainer/VBoxContainer"]
+material = ExtResource( 4 )
+margin_right = 114.0
+margin_bottom = 10.0
+text = "Good Job!"
+align = 1
+valign = 1
+
+[node name="Score" type="Label" parent="PanelContainer/VBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 4 )
+margin_top = 16.0
+margin_right = 114.0
+margin_bottom = 26.0
+size_flags_vertical = 6
+text = "Score: %05d"
+align = 1
+valign = 1
+
+[node name="Shards" type="Label" parent="PanelContainer/VBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 4 )
+margin_top = 34.0
+margin_right = 114.0
+margin_bottom = 44.0
+size_flags_vertical = 6
+text = "got %d shards!"
+align = 1
+valign = 1
+
+[node name="Deaths" type="Label" parent="PanelContainer/VBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 4 )
+margin_top = 52.0
+margin_right = 114.0
+margin_bottom = 62.0
+size_flags_vertical = 6
+text = "Died %d times."
+align = 1
+valign = 1
diff --git a/menus/marathon_select_lives.gd b/menus/marathon_select_lives.gd
new file mode 100644
index 0000000..0ae291d
--- /dev/null
+++ b/menus/marathon_select_lives.gd
@@ -0,0 +1,89 @@
+extends Button
+
+
+const INFINITY_SIGIL := "▬↨"
+
+
+var delay := 1.0
+var cooldown := 0.0
+
+
+onready var back_arrow: TextureRect = $"../BackArrow"
+onready var next_arrow: TextureRect = $"../NextArrow"
+
+
+func _ready() -> void:
+ _update_display()
+
+
+func _process(delta: float) -> void:
+ if not has_focus():
+ return
+ if Input.is_action_pressed("ui_left"):
+ if cooldown <= 0.0:
+ cooldown = delay
+ delay *= 0.5
+ if Game.use_lives:
+ Game.marathon_lives -= 1
+ if Game.marathon_lives < 0:
+ Game.use_lives = false
+ cooldown = INF
+ else:
+ Game.use_lives = true
+ Game.marathon_lives = 999
+ cooldown -= delta
+ _update_display()
+ elif Input.is_action_pressed("ui_right"):
+ if cooldown <= 0.0:
+ cooldown = delay
+ delay *= 0.5
+ if Game.use_lives:
+ Game.marathon_lives += 1
+ if Game.marathon_lives > 999:
+ Game.use_lives = false
+ cooldown = INF
+ else:
+ Game.use_lives = true
+ Game.marathon_lives = 0
+ cooldown -= delta
+ _update_display()
+ else:
+ cooldown = 0.0
+ delay = 1.0
+
+
+func _update_display() -> void:
+ if Game.use_lives:
+ text = "%03d" % Game.marathon_lives
+ else:
+ text = INFINITY_SIGIL
+
+
+#func _gui_input(event: InputEvent) -> void:
+# if event.is_action_pressed("ui_left"):
+# if Game.use_lives:
+# Game.marathon_lives -= 1
+# if Game.marathon_lives < 0:
+# Game.use_lives = false
+# else:
+# Game.use_lives = true
+# Game.marathon_lives = 999
+# if event.is_action_pressed("ui_right"):
+# if Game.use_lives:
+# Game.marathon_lives += 1
+# if Game.marathon_lives > 999:
+# Game.use_lives = false
+# else:
+# Game.use_lives = true
+# Game.marathon_lives = 0
+# _update_display()
+
+
+func _on_focus_entered() -> void:
+ back_arrow.visible = true
+ next_arrow.visible = true
+
+
+func _on_focus_exited() -> void:
+ back_arrow.visible = false
+ next_arrow.visible = false
diff --git a/menus/marathon_start.gd b/menus/marathon_start.gd
new file mode 100644
index 0000000..38e86ad
--- /dev/null
+++ b/menus/marathon_start.gd
@@ -0,0 +1,48 @@
+extends Control
+
+
+const DISABLED_COLOR := Color(0xb0b0b0ff)
+
+
+onready var difficulty_buttons := [
+ $"%BeginnerButton",
+ $"%AdvancedButton",
+ $"%AdvancedButton",
+ $"%ProfessionalButton",
+]
+
+
+func _ready() -> void:
+ Fade.fade_in(0.4)
+ yield(get_tree(), "idle_frame")
+ difficulty_buttons[Game.difficulty].grab_focus()
+
+
+func _input(event: InputEvent) -> void:
+ if Input.is_action_just_pressed("ui_accept") or Input.is_action_just_pressed("pause"):
+ Game.marathon_mode = true
+ Game.lives = Game.marathon_lives
+ Game.marathon_score = 0
+ Game.marathon_shards = 0
+ Game.marathon_deaths = 0
+ Game.current_level = LevelData.marathon_start
+ Game.change_map(LevelData.levels[Game.current_level].scene)
+ elif Input.is_action_just_pressed("ui_cancel"):
+ Game.marathon_mode = false
+ Game.current_level = 0
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(load("res://menus/main_menu.tscn").instance())
+
+
+func _set_difficulty(difficulty: int) -> void:
+ var use_lives := Game.use_lives
+ Game.difficulty = difficulty
+ Game.use_lives = use_lives
+ for b in difficulty_buttons:
+ b.get_parent().modulate = DISABLED_COLOR
+ difficulty_buttons[difficulty].get_parent().modulate = Color.white
+
+
+func _on_DifficultySelect_focus_entered() -> void:
+ difficulty_buttons[Game.difficulty].grab_focus()
diff --git a/menus/marathon_start.tscn b/menus/marathon_start.tscn
new file mode 100644
index 0000000..60eeda7
--- /dev/null
+++ b/menus/marathon_start.tscn
@@ -0,0 +1,253 @@
+[gd_scene load_steps=13 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://menus/marathon_start.gd" type="Script" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=5]
+[ext_resource path="res://graphics/hud/file_select_arrow.png" type="Texture" id=6]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=7]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=8]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=9]
+[ext_resource path="res://menus/marathon_select_lives.gd" type="Script" id=10]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.815686, 0.917647, 0.462745, 1 )
+shader_param/color_2 = Color( 0.152941, 0.772549, 0.356863, 1 )
+shader_param/checker_size = Vector2( 24, 24 )
+shader_param/pan_speed = Vector2( 8, 12 )
+shader_param/cycle_speed = Vector2( 4, 4 )
+shader_param/cycle_alternation = Vector2( 4, 4 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 8 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 8 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[node name="MarathonStart" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+script = ExtResource( 3 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="PressStart" type="Label" parent="."]
+material = ExtResource( 5 )
+anchor_right = 1.0
+margin_top = 160.0
+margin_bottom = 182.0
+theme = ExtResource( 2 )
+text = "Press start to begin"
+align = 1
+valign = 1
+
+[node name="FlavorText" type="Label" parent="."]
+material = ExtResource( 5 )
+anchor_right = 1.0
+margin_top = 8.0
+margin_bottom = 31.0
+theme = ExtResource( 2 )
+text = "Begin your adventure...
+in revolution 2083 world"
+align = 1
+valign = 1
+
+[node name="DifficultySelect" type="PanelContainer" parent="."]
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -112.0
+margin_top = -48.0
+margin_right = 112.0
+focus_mode = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="DifficultySelect"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 221.0
+margin_bottom = 45.0
+
+[node name="DiffcultySelect" type="Label" parent="DifficultySelect/VBoxContainer"]
+material = ExtResource( 5 )
+margin_right = 218.0
+margin_bottom = 14.0
+rect_min_size = Vector2( 0, 14 )
+text = "difficulty select:"
+align = 1
+valign = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="DifficultySelect/VBoxContainer"]
+margin_top = 18.0
+margin_right = 218.0
+margin_bottom = 42.0
+custom_constants/separation = 8
+alignment = 1
+
+[node name="Beginner" type="VBoxContainer" parent="DifficultySelect/VBoxContainer/HBoxContainer"]
+margin_left = 3.0
+margin_right = 59.0
+margin_bottom = 24.0
+custom_constants/separation = 2
+
+[node name="Label" type="Label" parent="DifficultySelect/VBoxContainer/HBoxContainer/Beginner"]
+margin_right = 56.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 7 )
+text = "Beginner"
+
+[node name="BeginnerButton" type="TextureButton" parent="DifficultySelect/VBoxContainer/HBoxContainer/Beginner"]
+unique_name_in_owner = true
+material = ExtResource( 5 )
+margin_left = 28.0
+margin_top = 12.0
+margin_right = 28.0
+margin_bottom = 24.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_right = NodePath("../../Advanced/AdvancedButton")
+size_flags_horizontal = 4
+texture_focused = ExtResource( 6 )
+expand = true
+stretch_mode = 3
+
+[node name="Advanced" type="VBoxContainer" parent="DifficultySelect/VBoxContainer/HBoxContainer"]
+margin_left = 67.0
+margin_right = 123.0
+margin_bottom = 24.0
+custom_constants/separation = 2
+
+[node name="Label" type="Label" parent="DifficultySelect/VBoxContainer/HBoxContainer/Advanced"]
+margin_right = 56.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 7 )
+text = "Advanced"
+
+[node name="AdvancedButton" type="TextureButton" parent="DifficultySelect/VBoxContainer/HBoxContainer/Advanced"]
+unique_name_in_owner = true
+material = ExtResource( 5 )
+margin_left = 28.0
+margin_top = 12.0
+margin_right = 28.0
+margin_bottom = 24.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_left = NodePath("../../Beginner/BeginnerButton")
+focus_neighbour_right = NodePath("../../Professional/ProfessionalButton")
+size_flags_horizontal = 4
+texture_focused = ExtResource( 6 )
+expand = true
+stretch_mode = 3
+
+[node name="Professional" type="VBoxContainer" parent="DifficultySelect/VBoxContainer/HBoxContainer"]
+margin_left = 131.0
+margin_right = 215.0
+margin_bottom = 24.0
+custom_constants/separation = 2
+
+[node name="Label" type="Label" parent="DifficultySelect/VBoxContainer/HBoxContainer/Professional"]
+margin_right = 84.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 7 )
+text = "Professional"
+
+[node name="ProfessionalButton" type="TextureButton" parent="DifficultySelect/VBoxContainer/HBoxContainer/Professional"]
+unique_name_in_owner = true
+material = ExtResource( 5 )
+margin_left = 42.0
+margin_top = 12.0
+margin_right = 42.0
+margin_bottom = 24.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_left = NodePath("../../Advanced/AdvancedButton")
+size_flags_horizontal = 4
+texture_focused = ExtResource( 6 )
+expand = true
+stretch_mode = 3
+
+[node name="LivesSelect" type="PanelContainer" parent="."]
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -66.0
+margin_top = 7.0
+margin_right = 66.0
+margin_bottom = 39.0
+
+[node name="VBoxContainer" type="VBoxContainer" parent="LivesSelect"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 129.0
+margin_bottom = 29.0
+custom_constants/separation = 0
+
+[node name="Label" type="Label" parent="LivesSelect/VBoxContainer"]
+material = ExtResource( 5 )
+margin_right = 126.0
+margin_bottom = 14.0
+rect_min_size = Vector2( 0, 14 )
+text = "number of lives:"
+align = 1
+valign = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="LivesSelect/VBoxContainer"]
+margin_top = 14.0
+margin_right = 126.0
+margin_bottom = 26.0
+rect_min_size = Vector2( 0, 12 )
+size_flags_horizontal = 3
+alignment = 1
+
+[node name="BackArrow" type="TextureRect" parent="LivesSelect/VBoxContainer/HBoxContainer"]
+visible = false
+material = SubResource( 2 )
+margin_left = 51.0
+margin_top = 2.0
+margin_right = 57.0
+margin_bottom = 10.0
+size_flags_vertical = 4
+texture = ExtResource( 9 )
+flip_h = true
+
+[node name="SelectLives" type="Button" parent="LivesSelect/VBoxContainer/HBoxContainer"]
+margin_left = 56.0
+margin_right = 70.0
+margin_bottom = 12.0
+focus_neighbour_left = NodePath(".")
+focus_neighbour_top = NodePath("../../../../DifficultySelect")
+focus_neighbour_right = NodePath(".")
+theme = ExtResource( 2 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 7 )
+text = "▬↨"
+script = ExtResource( 10 )
+
+[node name="NextArrow" type="TextureRect" parent="LivesSelect/VBoxContainer/HBoxContainer"]
+visible = false
+material = SubResource( 3 )
+margin_left = 69.0
+margin_top = 2.0
+margin_right = 75.0
+margin_bottom = 10.0
+size_flags_vertical = 4
+texture = ExtResource( 9 )
+
+[connection signal="focus_entered" from="DifficultySelect" to="." method="_on_DifficultySelect_focus_entered"]
+[connection signal="focus_entered" from="DifficultySelect/VBoxContainer/HBoxContainer/Beginner/BeginnerButton" to="." method="_set_difficulty" binds= [ 0 ]]
+[connection signal="focus_entered" from="DifficultySelect/VBoxContainer/HBoxContainer/Advanced/AdvancedButton" to="." method="_set_difficulty" binds= [ 2 ]]
+[connection signal="focus_entered" from="DifficultySelect/VBoxContainer/HBoxContainer/Professional/ProfessionalButton" to="." method="_set_difficulty" binds= [ 3 ]]
+[connection signal="focus_entered" from="LivesSelect/VBoxContainer/HBoxContainer/SelectLives" to="LivesSelect/VBoxContainer/HBoxContainer/SelectLives" method="_on_focus_entered"]
+[connection signal="focus_exited" from="LivesSelect/VBoxContainer/HBoxContainer/SelectLives" to="LivesSelect/VBoxContainer/HBoxContainer/SelectLives" method="_on_focus_exited"]
diff --git a/menus/music_select.gd b/menus/music_select.gd
new file mode 100644
index 0000000..d181cf3
--- /dev/null
+++ b/menus/music_select.gd
@@ -0,0 +1,21 @@
+extends TextureButton
+
+export (Array, String) var titles
+export (Array, AudioStream) var songs
+var current_selection = 0
+onready var body = $MusicLabel/Label
+
+func _ready():
+ call_deferred("grab_focus")
+
+func _gui_input(event):
+ if Input.is_action_just_pressed("ui_left"):
+ current_selection -= 1
+ if Input.is_action_just_pressed("ui_right"):
+ current_selection += 1
+ if Input.is_action_just_pressed("ui_accept"):
+ Audio.play_sound(songs[current_selection],Audio.ac_music)
+ current_selection = posmod(current_selection,songs.size())
+ body.text = titles[current_selection]
+
+
diff --git a/menus/newgrounds_login.gd b/menus/newgrounds_login.gd
new file mode 100644
index 0000000..3ded771
--- /dev/null
+++ b/menus/newgrounds_login.gd
@@ -0,0 +1,43 @@
+extends Control
+
+onready var tab_container: TabContainer = $"%TabContainer"
+
+func _ready() -> void:
+ visible = false
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ visible = true
+ yield(get_tree(), "idle_frame")
+ grab_focus()
+ Fade.fade_in(Options.transition_speed_secs)
+ if not Ngio.keys_loaded:
+ tab_container.current_tab = 2
+ return
+ if Ngio.session.user == null and not Ngio.session.passport_url.empty():
+ var passport_url = Ngio.session.passport_url
+ # try to open in browser
+ OS.shell_open(passport_url)
+ # try to copy to clipboard
+ OS.clipboard = passport_url
+ if OS.has_clipboard():
+ $"%Clipboard".modulate.a = 1.0
+ _await_result()
+ elif Ngio.session.user != null:
+ tab_container.current_tab = 1
+ else:
+ tab_container.current_tab = 2
+
+func _gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_cancel"):
+ if tab_container.current_tab == 0:
+ Ngio.request_execute("App.endSession")
+ queue_free()
+ elif event.is_action_pressed("ui_accept") and tab_container.current_tab != 0:
+ queue_free()
+
+func _await_result() -> void:
+ var success = yield(Ngio.passport_check(), "completed")
+ if success:
+ tab_container.current_tab = 1
+ else:
+ tab_container.current_tab = 2
diff --git a/menus/newgrounds_login.tscn b/menus/newgrounds_login.tscn
new file mode 100644
index 0000000..b6e5a1e
--- /dev/null
+++ b/menus/newgrounds_login.tscn
@@ -0,0 +1,95 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://menus/newgrounds_login.gd" type="Script" id=2]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=4]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 1, 0.709804, 0.054902, 1 )
+shader_param/color_2 = Color( 1, 0.945098, 0.478431, 1 )
+shader_param/checker_size = Vector2( 24, 12 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 8, -8 )
+shader_param/cycle_alternation = Vector2( 0, 1 )
+shader_param/uv_transform = Transform2D( 1, 1, 1, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 5 )
+shader_param/speed = Vector2( 8, 4 )
+shader_param/ammount = Vector2( 12, 24 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[node name="NewgroundsLogin" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_mode = 2
+script = ExtResource( 2 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 3 )
+
+[node name="TabContainer" type="TabContainer" parent="CenterContainer"]
+unique_name_in_owner = true
+margin_left = 23.0
+margin_top = 43.0
+margin_right = 233.0
+margin_bottom = 148.0
+tabs_visible = false
+
+[node name="Loading" type="VBoxContainer" parent="CenterContainer/TabContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_pivot_offset = Vector2( -174, -77 )
+
+[node name="Label" type="Label" parent="CenterContainer/TabContainer/Loading"]
+margin_right = 210.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 4 )
+text = "Log into newgrounds in browser"
+align = 1
+
+[node name="LoadingGraphic" type="Label" parent="CenterContainer/TabContainer/Loading"]
+material = SubResource( 2 )
+margin_top = 14.0
+margin_right = 210.0
+margin_bottom = 78.0
+rect_min_size = Vector2( 0, 64 )
+text = "§"
+align = 1
+valign = 1
+
+[node name="Clipboard" type="Label" parent="CenterContainer/TabContainer/Loading"]
+unique_name_in_owner = true
+modulate = Color( 1, 1, 1, 0 )
+margin_top = 82.0
+margin_right = 210.0
+margin_bottom = 105.0
+custom_fonts/font = ExtResource( 4 )
+text = "If browser didn't open,
+url copied to clipboard"
+align = 1
+
+[node name="Success" type="Label" parent="CenterContainer/TabContainer"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+custom_fonts/font = ExtResource( 4 )
+text = "Success!"
+
+[node name="Failure" type="Label" parent="CenterContainer/TabContainer"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+custom_fonts/font = ExtResource( 4 )
+text = "Failure :("
diff --git a/menus/options_menu.gd b/menus/options_menu.gd
new file mode 100644
index 0000000..e340998
--- /dev/null
+++ b/menus/options_menu.gd
@@ -0,0 +1,14 @@
+extends Control
+
+
+func _ready() -> void:
+ Fade.fade_in(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ $OptionsScreen.focus()
+
+
+
+func _on_OptionsScreen_exit() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/main_menu.tscn").instance()
diff --git a/menus/options_menu.tscn b/menus/options_menu.tscn
new file mode 100644
index 0000000..e23196f
--- /dev/null
+++ b/menus/options_menu.tscn
@@ -0,0 +1,29 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://objects/hud/options_screen_scholar.tscn" type="PackedScene" id=1]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=2]
+[ext_resource path="res://menus/options_menu.gd" type="Script" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/color_1 = Color( 1, 0.709804, 0.984314, 1 )
+shader_param/color_2 = Color( 1, 0.423529, 0.4, 1 )
+shader_param/checker_size = Vector2( 12, 12 )
+shader_param/pan_speed = Vector2( 0, 16 )
+shader_param/cycle_speed = Vector2( 4, -4 )
+shader_param/cycle_alternation = Vector2( 2, 0 )
+shader_param/uv_transform = Transform2D( 1, 1, 0, 1, 0, 0 )
+
+[node name="OptionsMenu" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+script = ExtResource( 3 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="OptionsScreen" parent="." instance=ExtResource( 1 )]
+
+[connection signal="exit" from="OptionsScreen" to="." method="_on_OptionsScreen_exit"]
diff --git a/menus/palette_select.gd b/menus/palette_select.gd
new file mode 100644
index 0000000..7772326
--- /dev/null
+++ b/menus/palette_select.gd
@@ -0,0 +1,54 @@
+extends Control
+
+
+export (Array, String) var titles: Array
+export (Array, Texture) var palettes: Array
+export var previous_screen: PackedScene
+onready var menu_sounds = $MenuSounds
+
+var current_palette: int = 0
+
+
+onready var sg: AnimatedSprite = $SG
+
+
+func _ready() -> void:
+ menu_sounds.can_play = true
+ assert(titles.size() == palettes.size(), "titles and palettes arrays are not same size")
+
+ if Save.current_file.is_super_player():
+ palettes.append(preload("res://graphics/player/palettes/super_player.tex"))
+ titles.append("Super Player")
+
+ for i in palettes.size():
+ var id = palettes[i].resource_path.get_file().get_basename()
+ if id == Save.current_file.palette:
+ current_palette = i
+ break
+
+ sg.material.set_shader_param("palette", palettes[current_palette])
+ $"%PaletteTitle".text = titles[current_palette]
+
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_cancel"):
+ SceneManager.current_scene = previous_screen.instance()
+ menu_sounds.play_select_sound()
+ return
+ elif event.is_action_pressed("ui_left"):
+ current_palette -= 1
+ menu_sounds.play_select_sound()
+ elif event.is_action_pressed("ui_right"):
+ current_palette += 1
+ menu_sounds.play_select_sound()
+
+ current_palette = posmod(current_palette, palettes.size())
+ sg.material.set_shader_param("palette", palettes[current_palette])
+ $"%PaletteTitle".text = titles[current_palette]
+ Game.current_palette = palettes[current_palette].resource_path.get_file().get_basename()
+ if Game.current_palette == "super_player":
+ $"%Sparkles".visible = true
+ else:
+ $"%Sparkles".visible = false
+ Save.current_file.palette = Game.current_palette
+ Save.current_file.save_to_file()
diff --git a/menus/palette_select.tscn b/menus/palette_select.tscn
new file mode 100644
index 0000000..b6ffa39
--- /dev/null
+++ b/menus/palette_select.tscn
@@ -0,0 +1,245 @@
+[gd_scene load_steps=53 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://menus/palette_select.gd" type="Script" id=3]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=4]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=5]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=6]
+[ext_resource path="res://graphics/player/palettes/gravitational_redshift.tex" type="Texture" id=7]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=8]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=9]
+[ext_resource path="res://graphics/player/sg.png" type="Texture" id=10]
+[ext_resource path="res://graphics/player/palettes/strawberry.tex" type="Texture" id=11]
+[ext_resource path="res://graphics/player/palettes/lasertag.tex" type="Texture" id=12]
+[ext_resource path="res://graphics/player/palettes/trans_pride.tex" type="Texture" id=13]
+[ext_resource path="res://graphics/player/palettes/supersonic.tex" type="Texture" id=14]
+[ext_resource path="res://menus/level_select_scholar.tscn" type="PackedScene" id=15]
+[ext_resource path="res://graphics/player/palettes/superman.tex" type="Texture" id=16]
+[ext_resource path="res://graphics/player/palettes/msx.tex" type="Texture" id=17]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=18]
+[ext_resource path="res://graphics/player/palettes/elaine.tex" type="Texture" id=19]
+[ext_resource path="res://graphics/player/palettes/mibibli.tex" type="Texture" id=20]
+[ext_resource path="res://graphics/player/palettes/crocodibli.tex" type="Texture" id=21]
+[ext_resource path="res://graphics/player/palettes/ice_mountain.tex" type="Texture" id=22]
+[ext_resource path="res://graphics/player/palettes/wavebird.tex" type="Texture" id=23]
+[ext_resource path="res://graphics/player/palettes/sms.tex" type="Texture" id=24]
+[ext_resource path="res://graphics/player/palettes/telstar.tex" type="Texture" id=25]
+[ext_resource path="res://graphics/player/palettes/protector.tex" type="Texture" id=26]
+[ext_resource path="res://graphics/player/palettes/cyber_city.tex" type="Texture" id=27]
+[ext_resource path="res://graphics/player/palettes/cave_dweller.tex" type="Texture" id=28]
+[ext_resource path="res://graphics/player/palettes/doggy.tex" type="Texture" id=29]
+[ext_resource path="res://graphics/player/palettes/gayboy.tex" type="Texture" id=30]
+[ext_resource path="res://graphics/player/palettes/bnw.tex" type="Texture" id=31]
+[ext_resource path="res://graphics/player/palettes/marza.tex" type="Texture" id=32]
+[ext_resource path="res://graphics/player/palettes/unknown_friend.tex" type="Texture" id=33]
+[ext_resource path="res://graphics/player/palettes/seegee.tex" type="Texture" id=34]
+[ext_resource path="res://graphics/player/palettes/nightrunner.tex" type="Texture" id=35]
+[ext_resource path="res://graphics/player/palettes/typhoon.tex" type="Texture" id=36]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=37]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=38]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=39]
+[ext_resource path="res://graphics/player/palettes/lucas.tex" type="Texture" id=40]
+[ext_resource path="res://graphics/player/palettes/blanc.tex" type="Texture" id=41]
+[ext_resource path="res://graphics/player/palettes/noir.tex" type="Texture" id=42]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.717647, 0.717647, 0.717647, 1 )
+shader_param/color_2 = Color( 0.360784, 0.360784, 0.360784, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 8, 8 )
+shader_param/cycle_alternation = Vector2( 0, 1 )
+shader_param/uv_transform = Transform2D( 0.5, -0.5, 0.5, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 4 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 18 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 10 )
+region = Rect2( 0, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 10 )
+region = Rect2( 32, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 10 )
+region = Rect2( 64, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=8]
+atlas = ExtResource( 10 )
+region = Rect2( 96, 32, 32, 32 )
+
+[sub_resource type="SpriteFrames" id=9]
+animations = [ {
+"frames": [ SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[sub_resource type="Curve" id=10]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 8 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 8 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[node name="PaletteSelect" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+script = ExtResource( 3 )
+titles = [ "Default", "Lasertag", "Strawberry", "Ms. X", "Trans Pride", "SuperSonic", "Unknown Friend", "Marza", "Nightrunner", "Seegee", "Elaine", "May Gaman", "Albert", "Lucas", "Superman", "Redshift", "Cave Dweller", "wavebird", "ice mountain", "cyber city", "sms", "protector", "telstar", "Doggy!", "gayboy", "bnw", "Blanc", "Noir", "Typhoon" ]
+palettes = [ ExtResource( 18 ), ExtResource( 12 ), ExtResource( 11 ), ExtResource( 17 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 33 ), ExtResource( 32 ), ExtResource( 35 ), ExtResource( 34 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ), ExtResource( 40 ), ExtResource( 16 ), ExtResource( 7 ), ExtResource( 28 ), ExtResource( 23 ), ExtResource( 22 ), ExtResource( 27 ), ExtResource( 24 ), ExtResource( 26 ), ExtResource( 25 ), ExtResource( 29 ), ExtResource( 30 ), ExtResource( 31 ), ExtResource( 41 ), ExtResource( 42 ), ExtResource( 36 ) ]
+previous_screen = ExtResource( 15 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="ChooseYourColors" type="Label" parent="."]
+anchor_right = 1.0
+margin_bottom = 16.0
+custom_fonts/font = ExtResource( 5 )
+text = "Choose your palette"
+align = 1
+valign = 1
+
+[node name="FlavorTextParagraph" type="Label" parent="."]
+anchor_right = 1.0
+margin_top = 24.0
+margin_bottom = 40.0
+custom_fonts/font = ExtResource( 5 )
+text = "Heroes from other timelines may
+aid in your journey, many are
+waiting to help save the future."
+align = 1
+valign = 1
+
+[node name="InfiniteSGs" type="Label" parent="."]
+anchor_right = 1.0
+margin_left = 16.0
+margin_top = 128.0
+margin_right = -168.0
+margin_bottom = 164.0
+custom_fonts/font = ExtResource( 5 )
+text = "There are
+infinite
+sgs"
+align = 1
+valign = 1
+
+[node name="InfiniteSGs2" type="Label" parent="."]
+anchor_right = 1.0
+margin_left = 176.0
+margin_top = 128.0
+margin_right = -16.0
+margin_bottom = 164.0
+custom_fonts/font = ExtResource( 5 )
+text = "but also
+infinite
+famis"
+align = 1
+valign = 1
+
+[node name="SG" type="AnimatedSprite" parent="."]
+material = SubResource( 2 )
+position = Vector2( 128, 128 )
+scale = Vector2( 3, 3 )
+frames = SubResource( 9 )
+frame = 1
+playing = true
+
+[node name="Sparkles" type="CPUParticles2D" parent="SG"]
+unique_name_in_owner = true
+light_mask = 0
+position = Vector2( 0, 6.33333 )
+amount = 2
+lifetime = 2.0
+texture = ExtResource( 39 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 10 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 10 )
+color = Color( 1, 0.972549, 0.52549, 1 )
+script = ExtResource( 38 )
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 8.0
+margin_bottom = -24.0
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
+margin_left = 60.0
+margin_top = 63.0
+margin_right = 195.0
+margin_bottom = 96.0
+rect_min_size = Vector2( 135, 33 )
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 132.0
+margin_bottom = 30.0
+theme = ExtResource( 2 )
+alignment = 1
+
+[node name="BackArrow" type="TextureRect" parent="CenterContainer/PanelContainer/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 3 )
+margin_left = 30.0
+margin_top = 9.0
+margin_right = 36.0
+margin_bottom = 17.0
+size_flags_vertical = 4
+texture = ExtResource( 9 )
+flip_h = true
+
+[node name="PaletteTitle" type="Label" parent="CenterContainer/PanelContainer/HBoxContainer"]
+unique_name_in_owner = true
+material = ExtResource( 6 )
+margin_left = 40.0
+margin_top = 8.0
+margin_right = 89.0
+margin_bottom = 18.0
+theme = ExtResource( 2 )
+text = "Default"
+align = 1
+valign = 1
+
+[node name="ForwardArrow" type="TextureRect" parent="CenterContainer/PanelContainer/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 4 )
+margin_left = 93.0
+margin_top = 9.0
+margin_right = 99.0
+margin_bottom = 17.0
+size_flags_vertical = 4
+texture = ExtResource( 9 )
+
+[node name="MenuSounds" parent="." instance=ExtResource( 37 )]
diff --git a/menus/results.gd b/menus/results.gd
new file mode 100644
index 0000000..c52e4ec
--- /dev/null
+++ b/menus/results.gd
@@ -0,0 +1,117 @@
+extends Node
+
+const Text3D = preload("res://objects/hud/3d_text.tscn")
+const LevelSelect := preload("res://menus/level_select_scholar.tscn")
+
+onready var shards: Node2D = $ShardsAndBonuses/Shards
+onready var score = $Score
+onready var time = $Time
+onready var animation_player = $AnimationPlayer
+#Score bonuses
+onready var collection_bonus_score = $ShardsAndBonuses/Bonuses/CollectionBonus/CollectionBonusScore
+onready var time_bonus_score = $ShardsAndBonuses/Bonuses/TimeBonus/TimeBonusScore
+onready var life_bonus_score = $ShardsAndBonuses/Bonuses/LifeBonus/LifeBonusScore
+onready var arrow_bonus_score = $ShardsAndBonuses/Bonuses/ArrowBonus/ArrowBonusScore
+onready var perfect_bonus_score = $ShardsAndBonuses/Bonuses/PerfectBonus/PerfectBonusScore
+
+var text_3d = null
+
+
+func _notification(what: int) -> void:
+ match what:
+ NOTIFICATION_WM_FOCUS_OUT:
+ $AnimationPlayer.playback_active = false
+ NOTIFICATION_WM_FOCUS_IN:
+ $AnimationPlayer.playback_active = true
+
+
+func _ready() -> void:
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $"%ArrowBonus".material.set_shader_param("palette", palette)
+ # easy indicator
+ if Game.difficulty == Game.Difficulty.SWEET:
+ $EasyIndicator.visible = true
+ else:
+ $EasyIndicator.visible = false
+ #preload final score
+ text_3d = Text3D.instance()
+ text_3d.anim = "final score"
+ yield(get_tree(), "idle_frame")
+ self.add_child(text_3d)
+ text_3d.animation_player.set_speed_scale(0)
+ Fade.fade_in(Options.transition_speed_secs)
+ # fill in shard names
+ var level: LevelEntry = LevelData.levels[Game.current_level]
+ for i in 5:
+ var shard = shards.get_child(i)
+ shard.get_node("Title").text = level.shard_titles[i]
+ score.text = str("SCORE:") + "%05d" % Game.score
+ time.text = str("TIME: ") + Game.format_time(Game.time)
+ #Determine score bonuses
+ collection_bonus_score.text = str("+") + str(Game.collection_bonus)
+ time_bonus_score.text = str("+") + str(Game.time_bonus)
+ life_bonus_score.text = str("+") + str(Game.life_bonus)
+ arrow_bonus_score.text = str("+") + str(Game.arrows_bonus)
+ perfect_bonus_score.text = str("+") + str(Game.perfect_bonus)
+
+func _physics_process(delta: float) -> void:
+ if Input.is_action_just_released("ui_accept"):
+ animation_player.set_speed_scale(4)
+
+
+func show_final_score():
+ animation_player.set_speed_scale(2)
+ text_3d.animation_player.set_speed_scale(1)
+
+
+func _on_AnimationPlayer_animation_finished(anim_name):
+ match anim_name:
+ "results":
+ if Game.marathon_mode:
+ Game.current_level += 1
+ if Game.current_level > LevelData.marathon_end:
+ yield(get_tree().create_timer(6.0), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(load("res://menus/marathon_results.tscn").instance())
+ else:
+ Game.change_map(LevelData.levels[Game.current_level].scene)
+ elif Game.final_score > Game.old_high_score:
+ animation_player.play("high_score")
+ else:
+ yield(get_tree().create_timer(6.0), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(LevelSelect.instance())
+ "high_score":
+ if not Debug.is_cheating and not ScoreBoard.server_host.empty():
+ animation_player.play("submit_score_popup")
+ else:
+ yield(get_tree().create_timer(5.0), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(LevelSelect.instance())
+
+
+func _on_YesSubmit_button_down() -> void:
+ $"%YesSubmit".release_focus()
+ animation_player.play("submit")
+
+ var save_id = LevelData.levels[Game.current_level].save_id
+ var entry = ScoreBoard.ScoreEntry.new(Game.final_score, int(Game.time * 1000.0), Game.difficulty)
+ var submitted = yield(ScoreBoard.submit_score(save_id, entry), "completed")
+ if ScoreBoard.errored or not submitted:
+ animation_player.play("try_again")
+ else:
+ animation_player.play("success")
+
+
+func _on_NoSubmit_button_down() -> void:
+ $"%NoSubmit".release_focus()
+ _next_screen()
+
+
+func _next_screen() -> void:
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(LevelSelect.instance())
diff --git a/menus/results.tscn b/menus/results.tscn
new file mode 100644
index 0000000..6187708
--- /dev/null
+++ b/menus/results.tscn
@@ -0,0 +1,1232 @@
+[gd_scene load_steps=36 format=2]
+
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/hud/results.png" type="Texture" id=4]
+[ext_resource path="res://graphics/hud/perfect_bonus.png" type="Texture" id=5]
+[ext_resource path="res://graphics/player/arrow.png" type="Texture" id=6]
+[ext_resource path="res://ui/arrow_figure_8.tres" type="Material" id=7]
+[ext_resource path="res://graphics/hud/final_score.png" type="Texture" id=8]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=9]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=10]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=11]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=12]
+[ext_resource path="res://menus/results.gd" type="Script" id=13]
+[ext_resource path="res://menus/results_icon.tscn" type="PackedScene" id=14]
+[ext_resource path="res://graphics/hud/high_score.png" type="Texture" id=15]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=16]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=17]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=18]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=19]
+[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=20]
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 2 )
+shader_param/color_1 = Color( 1, 0.513726, 0, 1 )
+shader_param/color_2 = Color( 0.701961, 0.305882, 0.901961, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 12, 0 )
+shader_param/cycle_speed = Vector2( 12, 0 )
+shader_param/cycle_alternation = Vector2( 2, 0 )
+shader_param/uv_transform = Transform2D( 1, 1, 0, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 11 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 12 )
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 3 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Curve" id=11]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=17]
+interpolation_mode = 2
+offsets = PoolRealArray( 0, 0.734694, 1 )
+colors = PoolColorArray( 0.576471, 0.980392, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 )
+
+[sub_resource type="ShaderMaterial" id=14]
+resource_local_to_scene = true
+shader = ExtResource( 1 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 24, 12 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=13]
+shader = ExtResource( 1 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 1 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 9, 8 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="Animation" id=10]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShardsAndBonuses:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShardsAndBonuses/Bonuses/CollectionBonus/CollectionBonusScore:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ShardsAndBonuses/Bonuses/TimeBonus/TimeBonusScore:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ShardsAndBonuses/Bonuses/LifeBonus/LifeBonusScore:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("ShardsAndBonuses/Bonuses/ArrowBonus/ArrowBonusScore:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("ShardsAndBonuses/Bonuses/PerfectBonus/PerfectBonusScore:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("ShardsAndBonuses/FinalScore:visible")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("ShardsAndBonuses/HighScore:visible")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("ShardsAndBonuses/FinalScore:scale")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("ShardsAndBonuses/HighScore:scale")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("CenterContainer/SubmitScore:visible")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("CenterContainer/SubmitScore:rect_scale")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("CenterContainer/LoadingGraphic:visible")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("CenterContainer/LoadingGraphic:rect_scale")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 24, 12 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("CenterContainer/SubmitScore:modulate")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("CenterContainer/SubmitScore/Label:text")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "submit score?" ]
+}
+
+[sub_resource type="Animation" id=19]
+resource_name = "high_score"
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShardsAndBonuses:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -512, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShardsAndBonuses/FinalScore:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ShardsAndBonuses/HighScore:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ShardsAndBonuses/FinalScore:scale")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("ShardsAndBonuses/HighScore:scale")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.3, 0.6 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "results"
+length = 18.0
+step = 1.0
+tracks/0/type = "method"
+tracks/0/path = NodePath("ShardsAndBonuses/Shards/ResultsIcon")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 1 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/1/type = "method"
+tracks/1/path = NodePath("ShardsAndBonuses/Shards/ResultsIcon2")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 2 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath("ShardsAndBonuses/Shards/ResultsIcon3")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 3 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("ShardsAndBonuses/Shards/ResultsIcon4")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 4 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/4/type = "method"
+tracks/4/path = NodePath("ShardsAndBonuses/Shards/ResultsIcon5")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("ShardsAndBonuses:position")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 7, 8, 15, 16 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( -256, 0 ), Vector2( -256, 0 ), Vector2( -512, 0 ) ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("ShardsAndBonuses/Bonuses/CollectionBonus/CollectionBonusScore:visible")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( -2, 9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("ShardsAndBonuses/Bonuses/TimeBonus/TimeBonusScore:visible")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( -2, 10 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("ShardsAndBonuses/Bonuses/LifeBonus/LifeBonusScore:visible")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( -2, 11 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("ShardsAndBonuses/Bonuses/ArrowBonus/ArrowBonusScore:visible")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( -2, 12 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("ShardsAndBonuses/Bonuses/PerfectBonus/PerfectBonusScore:visible")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( -2, 13 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/11/type = "method"
+tracks/11/path = NodePath("ShardsAndBonuses/Bonuses/CollectionBonus")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 9 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/12/type = "method"
+tracks/12/path = NodePath("ShardsAndBonuses/Bonuses/TimeBonus")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 10 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/13/type = "method"
+tracks/13/path = NodePath("ShardsAndBonuses/Bonuses/LifeBonus")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 11 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "collect"
+} ]
+}
+tracks/14/type = "method"
+tracks/14/path = NodePath(".")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 17 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "show_final_score"
+} ]
+}
+
+[sub_resource type="Animation" id=15]
+resource_name = "submit"
+length = 0.3
+tracks/0/type = "value"
+tracks/0/path = NodePath("CenterContainer/SubmitScore:rect_scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CenterContainer/SubmitScore:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 24, 12 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("CenterContainer/LoadingGraphic:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=12]
+resource_name = "submit_score_popup"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShardsAndBonuses:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -512, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CenterContainer/SubmitScore:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("CenterContainer/SubmitScore:rect_scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("CenterContainer/SubmitScore:modulate")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("CenterContainer/LoadingGraphic:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("CenterContainer/SubmitScore/Label:text")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "submit score?" ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "success"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 24, 12 ), Vector2( 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CenterContainer/CollectedParticles:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.3 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("CenterContainer/LoadingGraphic:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("CenterContainer/SubmitScore:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/4/type = "method"
+tracks/4/path = NodePath(".")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 1.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "_next_screen"
+} ]
+}
+
+[sub_resource type="Animation" id=16]
+resource_name = "try_again"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("CenterContainer/SubmitScore:rect_scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CenterContainer/SubmitScore:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 24, 12 ), Vector2( 24, 12 ), Vector2( 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("CenterContainer/LoadingGraphic:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("CenterContainer/SubmitScore/Label:text")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "failed. try again?" ]
+}
+tracks/5/type = "method"
+tracks/5/path = NodePath("CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "grab_focus"
+} ]
+}
+
+[node name="Results" type="Node"]
+script = ExtResource( 13 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 5 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ShardsAndBonuses" type="Node2D" parent="."]
+
+[node name="Shards" type="Node2D" parent="ShardsAndBonuses"]
+
+[node name="ResultsIcon" parent="ShardsAndBonuses/Shards" instance=ExtResource( 14 )]
+position = Vector2( 24, 32 )
+
+[node name="Title" type="Label" parent="ShardsAndBonuses/Shards/ResultsIcon"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -5.0
+margin_right = 176.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+
+[node name="ResultsIcon2" parent="ShardsAndBonuses/Shards" instance=ExtResource( 14 )]
+position = Vector2( 24, 64 )
+number = 1
+
+[node name="Title" type="Label" parent="ShardsAndBonuses/Shards/ResultsIcon2"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -5.0
+margin_right = 176.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+
+[node name="ResultsIcon3" parent="ShardsAndBonuses/Shards" instance=ExtResource( 14 )]
+position = Vector2( 24, 96 )
+number = 2
+
+[node name="Title" type="Label" parent="ShardsAndBonuses/Shards/ResultsIcon3"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -5.0
+margin_right = 176.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+
+[node name="ResultsIcon4" parent="ShardsAndBonuses/Shards" instance=ExtResource( 14 )]
+position = Vector2( 24, 128 )
+number = 3
+
+[node name="Title" type="Label" parent="ShardsAndBonuses/Shards/ResultsIcon4"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -5.0
+margin_right = 176.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+
+[node name="ResultsIcon5" parent="ShardsAndBonuses/Shards" instance=ExtResource( 14 )]
+position = Vector2( 24, 160 )
+number = 4
+
+[node name="Title" type="Label" parent="ShardsAndBonuses/Shards/ResultsIcon5"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -5.0
+margin_right = 176.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "AAAAAAAAAAAAAAAAAAAAAAAA"
+
+[node name="Bonuses" type="Node2D" parent="ShardsAndBonuses"]
+position = Vector2( 256, 8 )
+
+[node name="CollectionBonus" parent="ShardsAndBonuses/Bonuses" instance=ExtResource( 14 )]
+position = Vector2( 24, 24 )
+number = 5
+
+[node name="CollectionBonusText" type="Label" parent="ShardsAndBonuses/Bonuses/CollectionBonus"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -6.0
+margin_right = 176.0
+margin_bottom = 8.0
+theme = ExtResource( 10 )
+text = "Collection Bonus"
+
+[node name="CollectionBonusScore" type="Label" parent="ShardsAndBonuses/Bonuses/CollectionBonus"]
+visible = false
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 176.0
+margin_bottom = 22.0
+theme = ExtResource( 10 )
+text = "+500"
+
+[node name="TimeBonus" parent="ShardsAndBonuses/Bonuses" instance=ExtResource( 14 )]
+position = Vector2( 24, 56 )
+number = 6
+
+[node name="TimeBonusText" type="Label" parent="ShardsAndBonuses/Bonuses/TimeBonus"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -6.0
+margin_right = 176.0
+margin_bottom = 8.0
+theme = ExtResource( 10 )
+text = "Time Bonus"
+
+[node name="TimeBonusScore" type="Label" parent="ShardsAndBonuses/Bonuses/TimeBonus"]
+visible = false
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 176.0
+margin_bottom = 22.0
+theme = ExtResource( 10 )
+text = "+500"
+
+[node name="LifeBonus" parent="ShardsAndBonuses/Bonuses" instance=ExtResource( 14 )]
+position = Vector2( 24, 88 )
+number = 7
+
+[node name="LifeBonusText" type="Label" parent="ShardsAndBonuses/Bonuses/LifeBonus"]
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = -6.0
+margin_right = 176.0
+margin_bottom = 8.0
+theme = ExtResource( 10 )
+text = "Life Bonus"
+
+[node name="LifeBonusScore" type="Label" parent="ShardsAndBonuses/Bonuses/LifeBonus"]
+visible = false
+material = ExtResource( 9 )
+margin_left = 8.0
+margin_top = 8.0
+margin_right = 176.0
+margin_bottom = 22.0
+theme = ExtResource( 10 )
+text = "+500"
+
+[node name="ArrowBonus" type="Sprite" parent="ShardsAndBonuses/Bonuses"]
+unique_name_in_owner = true
+material = SubResource( 7 )
+position = Vector2( 24, 120 )
+rotation = -1.5708
+texture = ExtResource( 6 )
+
+[node name="ArrowBonusText" type="Label" parent="ShardsAndBonuses/Bonuses/ArrowBonus"]
+material = ExtResource( 9 )
+margin_left = 4.0
+margin_top = 7.0
+margin_right = 172.0
+margin_bottom = 21.0
+rect_rotation = 90.0
+theme = ExtResource( 10 )
+text = "Arrow Bonus"
+
+[node name="ArrowBonusScore" type="Label" parent="ShardsAndBonuses/Bonuses/ArrowBonus"]
+visible = false
+material = ExtResource( 9 )
+margin_left = -10.0
+margin_top = 7.0
+margin_right = 158.0
+margin_bottom = 21.0
+rect_rotation = 90.0
+theme = ExtResource( 10 )
+text = "+500"
+
+[node name="PerfectBonus" type="Sprite" parent="ShardsAndBonuses/Bonuses"]
+material = SubResource( 8 )
+position = Vector2( 24, 152 )
+texture = ExtResource( 5 )
+
+[node name="PerfectBonusText" type="Label" parent="ShardsAndBonuses/Bonuses/PerfectBonus"]
+material = ExtResource( 9 )
+margin_left = 7.0
+margin_top = -5.0
+margin_right = 175.0
+margin_bottom = 9.0
+theme = ExtResource( 10 )
+text = "Perfect Bonus"
+
+[node name="PerfectBonusScore" type="Label" parent="ShardsAndBonuses/Bonuses/PerfectBonus"]
+visible = false
+material = ExtResource( 9 )
+margin_left = 7.0
+margin_top = 9.0
+margin_right = 175.0
+margin_bottom = 23.0
+theme = ExtResource( 10 )
+text = "+500"
+
+[node name="FinalScore" type="Sprite" parent="ShardsAndBonuses"]
+material = ExtResource( 7 )
+position = Vector2( 640, 40 )
+texture = ExtResource( 8 )
+
+[node name="HighScore" type="Sprite" parent="ShardsAndBonuses"]
+visible = false
+material = ExtResource( 7 )
+position = Vector2( 640, 40 )
+texture = ExtResource( 15 )
+
+[node name="Sparkles" type="CPUParticles2D" parent="ShardsAndBonuses/HighScore"]
+light_mask = 0
+amount = 4
+lifetime = 2.0
+texture = ExtResource( 16 )
+emission_shape = 2
+emission_rect_extents = Vector2( 48, 8 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 11 )
+color = Color( 0.72549, 0.956863, 1, 1 )
+script = ExtResource( 17 )
+
+[node name="Score" type="Label" parent="."]
+material = ExtResource( 9 )
+margin_top = 8.0
+margin_right = 256.0
+margin_bottom = 22.0
+theme = ExtResource( 10 )
+text = "Score: 0000000"
+align = 1
+
+[node name="EasyIndicator" type="TextureRect" parent="."]
+margin_left = 61.0
+margin_top = 7.0
+margin_right = 73.0
+margin_bottom = 19.0
+texture = ExtResource( 20 )
+
+[node name="Time" type="Label" parent="."]
+material = ExtResource( 9 )
+margin_top = 178.0
+margin_right = 256.0
+margin_bottom = 192.0
+theme = ExtResource( 10 )
+text = "Time: "
+align = 1
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 77.0
+theme = ExtResource( 10 )
+
+[node name="CollectedParticles" type="CPUParticles2D" parent="CenterContainer"]
+pause_mode = 2
+position = Vector2( 127, 56 )
+emitting = false
+amount = 64
+one_shot = true
+explosiveness = 1.0
+local_coords = false
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 150 )
+initial_velocity = 250.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_random = 1.0
+color_ramp = SubResource( 17 )
+
+[node name="LoadingGraphic" type="Label" parent="CenterContainer"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 14 )
+margin_left = 124.0
+margin_top = 52.0
+margin_right = 131.0
+margin_bottom = 62.0
+text = "§"
+align = 1
+valign = 1
+
+[node name="SubmitScore" type="VBoxContainer" parent="CenterContainer"]
+unique_name_in_owner = true
+visible = false
+margin_left = 82.0
+margin_top = 39.0
+margin_right = 173.0
+margin_bottom = 75.0
+rect_pivot_offset = Vector2( 45.5, 18 )
+theme = ExtResource( 10 )
+
+[node name="Label" type="Label" parent="CenterContainer/SubmitScore"]
+margin_right = 91.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 19 )
+text = "submit score?"
+
+[node name="YesNoPrompt" type="PanelContainer" parent="CenterContainer/SubmitScore"]
+margin_left = 1.0
+margin_top = 14.0
+margin_right = 90.0
+margin_bottom = 36.0
+size_flags_horizontal = 4
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/SubmitScore/YesNoPrompt"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 86.0
+margin_bottom = 19.0
+rect_min_size = Vector2( 0, 16 )
+rect_pivot_offset = Vector2( -174, -69 )
+custom_constants/separation = 0
+alignment = 1
+
+[node name="YesSubmit" type="TextureButton" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 13 )
+margin_top = 4.0
+margin_right = 12.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_right = NodePath("../NoSubmit")
+size_flags_vertical = 4
+texture_focused = ExtResource( 18 )
+expand = true
+stretch_mode = 3
+
+[node name="YesLabel" type="Label" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 12.0
+margin_top = 3.0
+margin_right = 33.0
+margin_bottom = 13.0
+text = "Yes"
+
+[node name="Spacer" type="Control" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 33.0
+margin_right = 45.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="NoSubmit" type="TextureButton" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 13 )
+margin_left = 45.0
+margin_top = 4.0
+margin_right = 57.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_left = NodePath("../YesSubmit")
+size_flags_vertical = 4
+texture_focused = ExtResource( 18 )
+expand = true
+stretch_mode = 3
+
+[node name="NoLabel" type="Label" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 57.0
+margin_top = 3.0
+margin_right = 71.0
+margin_bottom = 13.0
+text = "No"
+
+[node name="Spacer2" type="Control" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 71.0
+margin_right = 83.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="Results" type="Sprite" parent="."]
+material = SubResource( 6 )
+position = Vector2( 232, 80 )
+texture = ExtResource( 4 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "results"
+playback_speed = 2.0
+anims/RESET = SubResource( 10 )
+anims/high_score = SubResource( 19 )
+anims/results = SubResource( 4 )
+anims/submit = SubResource( 15 )
+anims/submit_score_popup = SubResource( 12 )
+anims/success = SubResource( 18 )
+anims/try_again = SubResource( 16 )
+
+[connection signal="button_down" from="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit" to="." method="_on_YesSubmit_button_down"]
+[connection signal="button_down" from="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/NoSubmit" to="." method="_on_NoSubmit_button_down"]
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
diff --git a/menus/results_icon.gd b/menus/results_icon.gd
new file mode 100644
index 0000000..1169655
--- /dev/null
+++ b/menus/results_icon.gd
@@ -0,0 +1,13 @@
+extends Node2D
+
+onready var anims = $AnimationPlayer
+export var number = 0
+
+
+func collect() -> void:
+ if Game.shards_collected[number] == true:
+ anims.play("collect")
+ Audio.play_sound(Audio.a_shard_results,Audio.ac_collectible)
+ else:
+ anims.play("fail")
+ Audio.play_sound(Audio.a_fail_shard,Audio.ac_collectible)
diff --git a/menus/results_icon.tscn b/menus/results_icon.tscn
new file mode 100644
index 0000000..f73a102
--- /dev/null
+++ b/menus/results_icon.tscn
@@ -0,0 +1,186 @@
+[gd_scene load_steps=12 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=2]
+[ext_resource path="res://menus/results_icon.gd" type="Script" id=3]
+[ext_resource path="res://graphics/hud/missed_shard.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Animation" id=6]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Filled:scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CollectedParticles:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("FailX:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("FailX:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "collect"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Filled:scale")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 1, 1 ), Vector2( 1.25, 1.25 ), Vector2( 1, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CollectedParticles:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=9]
+resource_name = "fail"
+tracks/0/type = "value"
+tracks/0/path = NodePath("FailX:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 360.0 ]
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("FailX:scale:x")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 1e-05, -0.25, 0, 0.25, 0, 1, 0, -0.504449, 0.25, 0 ),
+"times": PoolRealArray( 0, 0.5 )
+}
+tracks/2/type = "bezier"
+tracks/2/path = NodePath("FailX:scale:y")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"points": PoolRealArray( 1e-05, -0.25, 0, 0.25, 0, 1, 0, -0.504449, 0.25, 0 ),
+"times": PoolRealArray( 0, 0.5 )
+}
+
+[sub_resource type="Gradient" id=7]
+interpolation_mode = 2
+offsets = PoolRealArray( 0, 0.734694, 1 )
+colors = PoolColorArray( 0.576471, 0.980392, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 )
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[node name="ResultsIcon" type="Node2D"]
+self_modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 4 )
+script = ExtResource( 3 )
+
+[node name="Empty" type="Sprite" parent="."]
+self_modulate = Color( 0, 0, 0, 1 )
+material = SubResource( 5 )
+position = Vector2( 1, 1 )
+texture = ExtResource( 2 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 6 )
+anims/collect = SubResource( 3 )
+anims/fail = SubResource( 9 )
+
+[node name="CollectedParticles" type="CPUParticles2D" parent="."]
+pause_mode = 2
+emitting = false
+amount = 64
+one_shot = true
+explosiveness = 1.0
+local_coords = false
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 150 )
+initial_velocity = 250.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_random = 1.0
+color_ramp = SubResource( 7 )
+
+[node name="Filled" type="Sprite" parent="."]
+material = SubResource( 8 )
+scale = Vector2( 1e-05, 1e-05 )
+texture = ExtResource( 2 )
+offset = Vector2( 1, 1 )
+
+[node name="FailX" type="Sprite" parent="."]
+position = Vector2( 1, 1 )
+scale = Vector2( 1e-05, 1e-05 )
+texture = ExtResource( 4 )
diff --git a/menus/rev83_intro.gd b/menus/rev83_intro.gd
new file mode 100644
index 0000000..52003ae
--- /dev/null
+++ b/menus/rev83_intro.gd
@@ -0,0 +1,13 @@
+extends Node2D
+
+onready var label = $TextBlock/Label
+
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
+ label.text = label.text % str(Save.current_file.name)
+
+func _input(event):
+ if Input.is_action_just_pressed("ui_accept"):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = load("res://menus/intro_story.tscn").instance()
diff --git a/menus/rev83_intro.tscn b/menus/rev83_intro.tscn
new file mode 100644
index 0000000..da7a629
--- /dev/null
+++ b/menus/rev83_intro.tscn
@@ -0,0 +1,132 @@
+[gd_scene load_steps=9 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=3]
+[ext_resource path="res://audio/sounds/talking.ogg" type="AudioStream" id=4]
+[ext_resource path="res://menus/rev83_intro.gd" type="Script" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.3542, 0.4235, 0.77, 1 )
+shader_param/color_2 = Color( 0.0912, 0.76, 0.403307, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 8, 10 )
+shader_param/cycle_speed = Vector2( 0, 2 )
+shader_param/cycle_alternation = Vector2( -5, 18 )
+shader_param/uv_transform = Transform2D( 1, 0, -1, 1, 0, 0 )
+
+[sub_resource type="Animation" id=3]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextBlock:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 144, 104 ) ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "type"
+length = 5.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextBlock/Label:percent_visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 5 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 1.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextBlock:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 256, 192 ), Vector2( 144, 104 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextBlock:scale")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 1, 1 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("TextBlock:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 360.0 ]
+}
+
+[node name="Rev83Intro" type="Node2D"]
+script = ExtResource( 5 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="TextBlock" type="Node2D" parent="."]
+position = Vector2( 144, 104 )
+rotation = 6.28319
+
+[node name="Label" type="Label" parent="TextBlock"]
+material = ExtResource( 3 )
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -136.5
+margin_top = -96.0
+margin_right = 136.5
+margin_bottom = 96.0
+theme = ExtResource( 2 )
+text = "Hello %s,
+
+I am computer code given \"life\",
+you can call me Revolution 2083.
+Do you want to play a game with me?
+This game may at times seem
+one-sided in my favor,
+but it's actually in your favor...
+I'm the only one that can
+truly lose, you can keep trying and
+dying until you win, but I can't.
+
+The game is only over
+when you give up."
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "type"
+anims/RESET = SubResource( 3 )
+anims/type = SubResource( 2 )
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 4 )
+volume_db = -10.0
+autoplay = true
diff --git a/menus/score_entry.gd b/menus/score_entry.gd
new file mode 100644
index 0000000..89927e3
--- /dev/null
+++ b/menus/score_entry.gd
@@ -0,0 +1,47 @@
+tool
+extends HBoxContainer
+
+const DIFFICULTY_ICONS = [
+ preload("res://graphics/hud/scores/sweet.png"),
+ preload("res://graphics/hud/scores/salty.png"),
+ preload("res://graphics/hud/scores/spicy.png"),
+ preload("res://graphics/hud/scores/pungent.png"),
+]
+
+export var place: int = 0 setget _set_place
+export var player: String = "Username" setget _set_player
+export var score: int = 0 setget _set_score
+export var time: float = 0.0 setget _set_time
+export(int, "Sweet", "Salty", "Spicy", "Pungent") var difficulty: int = 0 setget _set_difficulty
+
+func _ready() -> void:
+ _set_place(place)
+ _set_player(player)
+ _set_score(score)
+ _set_time(time)
+ _set_difficulty(difficulty)
+
+func _set_place(value: int) -> void:
+ place = value
+ if is_inside_tree():
+ $Place.text = "%d" % place
+
+func _set_player(value: String) -> void:
+ player = value.substr(0, 10)
+ if is_inside_tree():
+ $Player.text = player
+
+func _set_score(value: int) -> void:
+ score = value
+ if is_inside_tree():
+ $Score.text = "%05d" % score
+
+func _set_time(value: float) -> void:
+ time = value
+ if is_inside_tree():
+ $Time.text = Game.format_time(time)
+
+func _set_difficulty(value: int) -> void:
+ difficulty = value
+ if is_inside_tree():
+ $Difficulty.texture = DIFFICULTY_ICONS[difficulty]
diff --git a/menus/score_entry.tscn b/menus/score_entry.tscn
new file mode 100644
index 0000000..26aaa66
--- /dev/null
+++ b/menus/score_entry.tscn
@@ -0,0 +1,60 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://menus/score_entry.gd" type="Script" id=2]
+[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=3]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=4]
+
+[node name="ScoreEntry" type="HBoxContainer"]
+margin_right = 228.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 0, 12 )
+theme = ExtResource( 1 )
+custom_constants/separation = 8
+script = ExtResource( 2 )
+player = "coolplayer"
+
+[node name="Place" type="Label" parent="."]
+margin_top = 1.0
+margin_right = 16.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 16, 0 )
+custom_fonts/font = ExtResource( 4 )
+text = "0"
+align = 1
+
+[node name="Player" type="Label" parent="."]
+margin_left = 24.0
+margin_top = 1.0
+margin_right = 94.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 70, 0 )
+custom_fonts/font = ExtResource( 4 )
+text = "coolplayer"
+align = 1
+
+[node name="Score" type="Label" parent="."]
+margin_left = 102.0
+margin_top = 1.0
+margin_right = 137.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 35, 0 )
+custom_fonts/font = ExtResource( 4 )
+text = "00000"
+align = 2
+
+[node name="Time" type="Label" parent="."]
+margin_left = 145.0
+margin_top = 1.0
+margin_right = 201.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 56, 0 )
+custom_fonts/font = ExtResource( 4 )
+text = "--:--.--"
+align = 2
+
+[node name="Difficulty" type="TextureRect" parent="."]
+margin_left = 209.0
+margin_right = 221.0
+margin_bottom = 12.0
+texture = ExtResource( 3 )
diff --git a/menus/scoreboards.gd b/menus/scoreboards.gd
new file mode 100644
index 0000000..ead6d13
--- /dev/null
+++ b/menus/scoreboards.gd
@@ -0,0 +1,205 @@
+extends Node
+
+
+enum Completion {ANY, FULL}
+enum ScoreType {SCORE, TIME}
+
+
+const COMPLETION_NAMES = ["Any%", "100%"]
+const SCORE_TYPE_NAMES = ["Scores", "Times"]
+
+
+var selected_level: int = 0
+var selected_difficulty: int = Game.Difficulty.SPICY
+var selected_completion: int = Completion.ANY
+var selected_type: int = ScoreType.SCORE
+
+var _scoreboard_id: int = -1
+var _scoreboard_tag: String = "spicy-any%"
+var _page: int = 0
+
+
+onready var level_title: Button = $"%LevelTitle"
+onready var back_arrow: TextureRect = $"%BackArrow"
+onready var next_arrow: TextureRect = $"%NextArrow"
+onready var difficulty: Button = $"%Difficulty"
+onready var completion: Button = $"%Completion"
+onready var type: Button = $"%Type"
+onready var scores: VBoxContainer = $"%Scores"
+onready var scoreboard_tabs: TabContainer = $"%ScoreboardTabs"
+onready var prev_board: TextureRect = $"%PrevBoard"
+onready var next_board: TextureRect = $"%NextBoard"
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ Fade.fade_in(Options.transition_speed_secs)
+ yield(get_tree(), "idle_frame")
+ level_title.text = LevelData.levels[selected_level].title
+ level_title.grab_focus()
+ match selected_type:
+ ScoreType.SCORE:
+ _scoreboard_id = LevelData.levels[selected_level].scores_id
+ ScoreType.TIME:
+ _scoreboard_id = LevelData.levels[selected_level].times_id
+ if Time.get_ticks_msec() > 5000:
+ reload_scores()
+
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_cancel"):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = preload("res://menus/main_menu.tscn").instance()
+
+
+# reload scores from newgrounds
+func reload_scores() -> void:
+ _set_tag()
+ scoreboard_tabs.current_tab = 1
+ # attempt the thing
+ if _scoreboard_id >= 0 and Ngio.keys_loaded:
+ var response = yield(Ngio.request_execute("ScoreBoard.getScores", {
+ id = _scoreboard_id,
+ limit = scores.get_child_count(),
+ skip = _page * 8,
+ period = "A",
+ tag = _scoreboard_tag,
+ }), "completed")
+ if Ngio.has_result(response) and response.result.data.success:
+ var retrieved_scores = response.result.data.scores
+ for i in scores.get_child_count():
+ var score_entry = scores.get_child(i)
+ score_entry.place = _page * 8 + i + 1
+ if i < retrieved_scores.size():
+ var score = retrieved_scores[i]
+ score_entry.user = score.user.name
+ if score_entry.user.length() > 16:
+ score_entry.user = score_entry.substr(0, 16) + "..."
+ match selected_type:
+ ScoreType.SCORE:
+ score_entry.score = "%05d" % score.value
+ ScoreType.TIME:
+ score_entry.score = Game.format_time(float(score.value) / 1000.0)
+ else:
+ score_entry.user = "--------"
+ match selected_type:
+ ScoreType.SCORE:
+ score_entry.score = "-----"
+ ScoreType.TIME:
+ score_entry.score = "--:--.--"
+ scoreboard_tabs.current_tab = 0
+ return
+ scoreboard_tabs.current_tab = 2
+
+# set tag from selected difficulty and completion
+func _set_tag() -> void:
+ match selected_difficulty:
+ Game.Difficulty.SWEET:
+ _scoreboard_tag = "sweet"
+ Game.Difficulty.SALTY:
+ _scoreboard_tag = "salty"
+ Game.Difficulty.SPICY:
+ _scoreboard_tag = "spicy"
+ Game.Difficulty.PUNGENT:
+ _scoreboard_tag = "pungent"
+ if selected_type == ScoreType.TIME:
+ match selected_completion:
+ Completion.ANY:
+ _scoreboard_tag += "-any%"
+ Completion.FULL:
+ _scoreboard_tag += "-100%"
+
+# show arrows when level is focused
+func _on_LevelTitle_focus_entered() -> void:
+ back_arrow.visible = true
+ next_arrow.visible = true
+
+# hide arrows when level not focused
+func _on_LevelTitle_focus_exited() -> void:
+ back_arrow.visible = false
+ next_arrow.visible = false
+
+# detect left and right presses when level is focused
+func _on_LevelTitle_gui_input(event: InputEvent) -> void:
+ if scoreboard_tabs.current_tab == 1: # do nothing if already loading
+ return
+ if event.is_action_pressed("ui_left"):
+ selected_level = posmod(selected_level - 1, LevelData.levels.size())
+ while LevelData.levels[selected_level].boss:
+ selected_level = posmod(selected_level - 1, LevelData.levels.size())
+ level_title.text = LevelData.levels[selected_level].title
+ match selected_type:
+ ScoreType.SCORE:
+ _scoreboard_id = LevelData.levels[selected_level].scores_id
+ ScoreType.TIME:
+ _scoreboard_id = LevelData.levels[selected_level].times_id
+ _page = 0
+ reload_scores()
+ elif event.is_action_pressed("ui_right"):
+ selected_level = posmod(selected_level + 1, LevelData.levels.size())
+ while LevelData.levels[selected_level].boss:
+ selected_level = posmod(selected_level + 1, LevelData.levels.size())
+ level_title.text = LevelData.levels[selected_level].title
+ match selected_type:
+ ScoreType.SCORE:
+ _scoreboard_id = LevelData.levels[selected_level].scores_id
+ ScoreType.TIME:
+ _scoreboard_id = LevelData.levels[selected_level].times_id
+ _page = 0
+ reload_scores()
+
+# difficulty selector
+func _on_Difficulty_pressed() -> void:
+ if scoreboard_tabs.current_tab == 1: # do nothing if already loading
+ return
+ selected_difficulty = posmod(selected_difficulty + 1, 4)
+ difficulty.text = Game.DIFFICULTY_NAMES[selected_difficulty]
+ _page = 0
+ reload_scores()
+
+# completion amount selector
+func _on_Completion_pressed() -> void:
+ if scoreboard_tabs.current_tab == 1: # do nothing if already loading
+ return
+ selected_completion = posmod(selected_completion + 1, 2)
+ completion.text = COMPLETION_NAMES[selected_completion]
+ _page = 0
+ reload_scores()
+
+# score type selector
+func _on_Type_pressed() -> void:
+ if scoreboard_tabs.current_tab == 1: # do nothing if already loading
+ return
+ selected_type = posmod(selected_type + 1, 2)
+ match selected_type:
+ ScoreType.SCORE:
+ _scoreboard_id = LevelData.levels[selected_level].scores_id
+ completion.visible = false
+ ScoreType.TIME:
+ _scoreboard_id = LevelData.levels[selected_level].times_id
+ completion.visible = true
+ type.text = SCORE_TYPE_NAMES[selected_type]
+ _page = 0
+ reload_scores()
+
+
+func _on_Scoreboard_focus_entered() -> void:
+ prev_board.visible = true
+ next_board.visible = true
+
+
+func _on_Scoreboard_focus_exited() -> void:
+ prev_board.visible = false
+ next_board.visible = false
+
+
+func _on_Scoreboard_gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_left"):
+ _page -= 1
+ if _page <= 0:
+ _page = 0
+ reload_scores()
+ elif event.is_action_pressed("ui_right"):
+ _page += 1
+ reload_scores()
diff --git a/menus/scoreboards.tscn b/menus/scoreboards.tscn
new file mode 100644
index 0000000..2993ef3
--- /dev/null
+++ b/menus/scoreboards.tscn
@@ -0,0 +1,335 @@
+[gd_scene load_steps=12 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://menus/scoreboards.gd" type="Script" id=2]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=4]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=5]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=6]
+[ext_resource path="res://menus/score_entry.tscn" type="PackedScene" id=7]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=8]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.615686, 0.670588, 0.984314, 1 )
+shader_param/color_2 = Color( 1, 0.709804, 0.984314, 1 )
+shader_param/checker_size = Vector2( 24, 12 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 8, -8 )
+shader_param/cycle_alternation = Vector2( 0, 1 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 8, 4 )
+shader_param/ammount = Vector2( 12, 24 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[node name="Scoreboards" type="Node"]
+script = ExtResource( 2 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="BoardsScreen" type="VBoxContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 5 )
+custom_constants/separation = 0
+
+[node name="SelectLevel" type="HBoxContainer" parent="BoardsScreen"]
+margin_right = 256.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 0, 16 )
+alignment = 1
+
+[node name="BackArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+margin_left = 72.0
+margin_top = 4.0
+margin_right = 78.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+flip_h = true
+
+[node name="LevelTitle" type="Button" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+margin_left = 82.0
+margin_top = 3.0
+margin_right = 173.0
+margin_bottom = 13.0
+focus_neighbour_bottom = NodePath("../../SelectScoreType/Type")
+size_flags_vertical = 4
+theme = ExtResource( 5 )
+custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 8 )
+text = "Verdant Hills"
+
+[node name="NextArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+material = SubResource( 3 )
+margin_left = 177.0
+margin_top = 4.0
+margin_right = 183.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+
+[node name="SelectScoreType" type="HBoxContainer" parent="BoardsScreen"]
+margin_top = 16.0
+margin_right = 256.0
+margin_bottom = 32.0
+rect_min_size = Vector2( 0, 16 )
+alignment = 1
+
+[node name="Difficulty" type="Button" parent="BoardsScreen/SelectScoreType"]
+unique_name_in_owner = true
+margin_left = 52.0
+margin_top = 3.0
+margin_right = 100.0
+margin_bottom = 13.0
+rect_min_size = Vector2( 48, 0 )
+focus_neighbour_right = NodePath("../Type")
+focus_neighbour_bottom = NodePath("../../Scoreboard")
+size_flags_vertical = 4
+theme = ExtResource( 5 )
+custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 8 )
+text = "Spicy"
+
+[node name="Type" type="Button" parent="BoardsScreen/SelectScoreType"]
+unique_name_in_owner = true
+margin_left = 104.0
+margin_top = 3.0
+margin_right = 152.0
+margin_bottom = 13.0
+rect_min_size = Vector2( 48, 0 )
+focus_neighbour_left = NodePath("../Difficulty")
+focus_neighbour_right = NodePath("../SpaceReserve/Completion")
+focus_neighbour_bottom = NodePath("../../Scoreboard")
+size_flags_vertical = 4
+theme = ExtResource( 5 )
+custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 8 )
+text = "Scores"
+
+[node name="SpaceReserve" type="Control" parent="BoardsScreen/SelectScoreType"]
+margin_left = 156.0
+margin_top = 8.0
+margin_right = 204.0
+margin_bottom = 8.0
+rect_min_size = Vector2( 48, 0 )
+size_flags_vertical = 4
+
+[node name="Completion" type="Button" parent="BoardsScreen/SelectScoreType/SpaceReserve"]
+unique_name_in_owner = true
+visible = false
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+margin_left = -24.0
+margin_top = -5.0
+margin_right = 24.0
+margin_bottom = 5.0
+rect_min_size = Vector2( 48, 0 )
+focus_neighbour_left = NodePath("../../Type")
+focus_neighbour_bottom = NodePath("../../../Scoreboard")
+theme = ExtResource( 5 )
+custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 8 )
+text = "Any%"
+icon_align = 1
+
+[node name="Scoreboard" type="HBoxContainer" parent="BoardsScreen"]
+margin_top = 32.0
+margin_right = 256.0
+margin_bottom = 192.0
+focus_neighbour_top = NodePath("../SelectScoreType/Type")
+focus_mode = 2
+size_flags_vertical = 3
+alignment = 1
+
+[node name="PrevBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+margin_left = 6.0
+margin_top = 76.0
+margin_right = 12.0
+margin_bottom = 84.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+flip_h = true
+
+[node name="PanelContainer" type="PanelContainer" parent="BoardsScreen/Scoreboard"]
+margin_left = 16.0
+margin_right = 240.0
+margin_bottom = 144.0
+rect_min_size = Vector2( 224, 144 )
+size_flags_horizontal = 4
+size_flags_vertical = 0
+
+[node name="MarginContainer" type="MarginContainer" parent="BoardsScreen/Scoreboard/PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 221.0
+margin_bottom = 141.0
+custom_constants/margin_right = 4
+custom_constants/margin_top = 4
+custom_constants/margin_left = 4
+custom_constants/margin_bottom = 4
+
+[node name="VBoxContainer" type="VBoxContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer"]
+margin_left = 4.0
+margin_top = 4.0
+margin_right = 214.0
+margin_bottom = 134.0
+
+[node name="Header" type="HBoxContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer"]
+margin_right = 210.0
+margin_bottom = 10.0
+custom_constants/separation = 8
+
+[node name="Place" type="Label" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/Header"]
+margin_right = 21.0
+margin_bottom = 10.0
+text = " # "
+
+[node name="User" type="Label" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/Header"]
+margin_left = 29.0
+margin_right = 167.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "User"
+
+[node name="Score" type="Label" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/Header"]
+margin_left = 175.0
+margin_right = 210.0
+margin_bottom = 10.0
+text = "score"
+align = 2
+
+[node name="HSeparator" type="HSeparator" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer"]
+margin_top = 14.0
+margin_right = 210.0
+margin_bottom = 18.0
+
+[node name="ScoreboardTabs" type="TabContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+margin_top = 22.0
+margin_right = 210.0
+margin_bottom = 130.0
+size_flags_vertical = 3
+tabs_visible = false
+
+[node name="Scores" type="VBoxContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs"]
+unique_name_in_owner = true
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="ScoreEntry1" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+place = 1
+
+[node name="ScoreEntry2" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 14.0
+margin_bottom = 24.0
+place = 2
+
+[node name="ScoreEntry3" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 28.0
+margin_bottom = 38.0
+place = 3
+
+[node name="ScoreEntry4" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 42.0
+margin_bottom = 52.0
+place = 4
+
+[node name="ScoreEntry5" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 56.0
+margin_bottom = 66.0
+place = 5
+
+[node name="ScoreEntry6" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 70.0
+margin_bottom = 80.0
+place = 6
+
+[node name="ScoreEntry7" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 84.0
+margin_bottom = 94.0
+place = 7
+
+[node name="ScoreEntry8" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 98.0
+margin_bottom = 108.0
+place = 8
+
+[node name="LoadingIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+size_flags_vertical = 3
+
+[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/LoadingIndicator"]
+material = SubResource( 4 )
+margin_left = 101.0
+margin_top = 49.0
+margin_right = 108.0
+margin_bottom = 59.0
+text = "§"
+
+[node name="FailedIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/PanelContainer/MarginContainer/VBoxContainer/ScoreboardTabs/FailedIndicator"]
+margin_left = 56.0
+margin_top = 49.0
+margin_right = 154.0
+margin_bottom = 59.0
+text = "Failed to load"
+
+[node name="NextBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"]
+unique_name_in_owner = true
+material = SubResource( 3 )
+margin_left = 244.0
+margin_top = 76.0
+margin_right = 250.0
+margin_bottom = 84.0
+size_flags_horizontal = 0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+
+[connection signal="focus_entered" from="BoardsScreen/SelectLevel/LevelTitle" to="." method="_on_LevelTitle_focus_entered"]
+[connection signal="focus_exited" from="BoardsScreen/SelectLevel/LevelTitle" to="." method="_on_LevelTitle_focus_exited"]
+[connection signal="gui_input" from="BoardsScreen/SelectLevel/LevelTitle" to="." method="_on_LevelTitle_gui_input"]
+[connection signal="pressed" from="BoardsScreen/SelectScoreType/Difficulty" to="." method="_on_Difficulty_pressed"]
+[connection signal="pressed" from="BoardsScreen/SelectScoreType/Type" to="." method="_on_Type_pressed"]
+[connection signal="pressed" from="BoardsScreen/SelectScoreType/SpaceReserve/Completion" to="." method="_on_Completion_pressed"]
+[connection signal="focus_entered" from="BoardsScreen/Scoreboard" to="." method="_on_Scoreboard_focus_entered"]
+[connection signal="focus_exited" from="BoardsScreen/Scoreboard" to="." method="_on_Scoreboard_focus_exited"]
+[connection signal="gui_input" from="BoardsScreen/Scoreboard" to="." method="_on_Scoreboard_gui_input"]
diff --git a/menus/scoreboards_scholar.gd b/menus/scoreboards_scholar.gd
new file mode 100644
index 0000000..9377f82
--- /dev/null
+++ b/menus/scoreboards_scholar.gd
@@ -0,0 +1,113 @@
+extends Node
+
+
+const PAGE_SIZE: int = 8
+
+
+var loaded_scores: Dictionary = {}
+var selected_level: int = 0
+var _page: int = 0
+
+
+onready var scores: VBoxContainer = $"%Scores"
+onready var level_title: Button = $"%LevelTitle"
+
+
+func _ready() -> void:
+ yield(_refresh_scores(), "completed")
+ Fade.fade_in(Options.transition_speed_secs)
+
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_right"):
+ selected_level = posmod(selected_level + 1, LevelData.levels.size())
+ while not LevelData.levels[selected_level].has_scoreboard:
+ selected_level = posmod(selected_level + 1, LevelData.levels.size())
+ _refresh_scores()
+ elif event.is_action_pressed("ui_left"):
+ selected_level = posmod(selected_level - 1, LevelData.levels.size())
+ while not LevelData.levels[selected_level].has_scoreboard:
+ selected_level = posmod(selected_level - 1, LevelData.levels.size())
+ _refresh_scores()
+ elif event.is_action_pressed("ui_down"):
+ _page += 1
+ _refresh_scores()
+ elif event.is_action_pressed("ui_up"):
+ _page = int(max(_page - 1, 0))
+ _refresh_scores()
+ elif event.is_action_pressed("ui_cancel"):
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = preload("res://menus/main_menu.tscn").instance()
+
+
+func _refresh_scores() -> void:
+ level_title.text = LevelData.levels[selected_level].title
+
+ var level = LevelData.levels[selected_level].save_id
+ if not level in loaded_scores:
+ yield(_load_scores(level), "completed")
+
+ if ScoreBoard.errored:
+ push_error("Scoreboard could not be loaded.")
+
+ var entries = loaded_scores.get(level, {})
+
+ while _page * PAGE_SIZE > entries.size():
+ _page -= 1
+
+ var offset = _page * PAGE_SIZE
+
+ $"%PrevScores".visible = _page > 0
+ $"%NextScores".visible = entries.size() - offset > PAGE_SIZE
+
+ for i in 8:
+ var entry_node = scores.get_node("ScoreEntry%d" % i)
+ if i >= entries.size() - offset:
+ entry_node.visible = false
+ else:
+ var player = entries.keys()[offset + i]
+ var entry = entries[player]
+ entry_node.visible = true
+ entry_node.place = offset + i + 1
+ entry_node.player = player
+ entry_node.score = entry.score
+ entry_node.time = float(entry.time) * 0.001 # convert from ms
+ entry_node.difficulty = entry.difficulty
+
+
+func _load_scores(level: String) -> void:
+ loaded_scores[level] = {}
+
+ if ScoreBoard.server_host.empty():
+ yield(get_tree(), "idle_frame")
+ return
+
+ var result: Dictionary = yield(ScoreBoard.get_scores(level), "completed")
+ if ScoreBoard.errored:
+ #TODO: failure indication
+ return
+
+ var players = result.keys().duplicate()
+ _sorting_dict = result
+ players.sort_custom(self, "_sort_scores")
+
+ for p in players:
+ loaded_scores[level][p] = result[p]
+
+
+var _sorting_dict: Dictionary = {}
+func _sort_scores(a, b) -> bool:
+ var score_a = _sorting_dict[a]
+ var score_b = _sorting_dict[b]
+
+ if score_b.score < score_a.score:
+ return true
+ elif score_b.score == score_a.score:
+ if score_b.difficulty < score_a.difficulty:
+ return true
+ elif score_b.difficulty == score_a.difficulty:
+ if score_b.time > score_a.time:
+ return true
+
+ return false
diff --git a/menus/scoreboards_scholar.tscn b/menus/scoreboards_scholar.tscn
new file mode 100644
index 0000000..ca8f960
--- /dev/null
+++ b/menus/scoreboards_scholar.tscn
@@ -0,0 +1,320 @@
+[gd_scene load_steps=16 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://menus/scoreboards_scholar.gd" type="Script" id=2]
+[ext_resource path="res://graphics/hud/arrow_down.png" type="Texture" id=3]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=4]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=5]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=6]
+[ext_resource path="res://menus/score_entry.tscn" type="PackedScene" id=7]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=8]
+[ext_resource path="res://graphics/hud/arrow_up.png" type="Texture" id=9]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.615686, 0.670588, 0.984314, 1 )
+shader_param/color_2 = Color( 1, 0.709804, 0.984314, 1 )
+shader_param/checker_size = Vector2( 24, 12 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 8, -8 )
+shader_param/cycle_alternation = Vector2( 0, 1 )
+shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 2 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 0, 4 )
+shader_param/ammount = Vector2( 0, 2 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 4 )
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 8, 4 )
+shader_param/ammount = Vector2( 12, 24 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[node name="Scoreboards" type="Node"]
+script = ExtResource( 2 )
+
+[node name="Background" type="ColorRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="BoardsScreen" type="VBoxContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 5 )
+custom_constants/separation = 0
+
+[node name="SelectLevel" type="HBoxContainer" parent="BoardsScreen"]
+margin_right = 256.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 0, 16 )
+alignment = 1
+
+[node name="BackArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+material = SubResource( 2 )
+margin_left = 72.0
+margin_top = 4.0
+margin_right = 78.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+flip_h = true
+
+[node name="LevelTitle" type="Button" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+margin_left = 82.0
+margin_top = 3.0
+margin_right = 173.0
+margin_bottom = 13.0
+size_flags_vertical = 4
+theme = ExtResource( 5 )
+custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 8 )
+text = "Verdant Hills"
+
+[node name="NextArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"]
+unique_name_in_owner = true
+material = SubResource( 3 )
+margin_left = 177.0
+margin_top = 4.0
+margin_right = 183.0
+margin_bottom = 12.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+
+[node name="Scoreboard" type="HBoxContainer" parent="BoardsScreen"]
+margin_top = 16.0
+margin_right = 256.0
+margin_bottom = 192.0
+focus_mode = 2
+size_flags_vertical = 3
+alignment = 1
+
+[node name="PrevBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 2 )
+margin_top = 84.0
+margin_right = 6.0
+margin_bottom = 92.0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
+flip_h = true
+
+[node name="MarginContainer" type="MarginContainer" parent="BoardsScreen/Scoreboard"]
+margin_left = 10.0
+margin_right = 246.0
+margin_bottom = 176.0
+custom_constants/margin_right = 4
+custom_constants/margin_top = 4
+custom_constants/margin_left = 4
+custom_constants/margin_bottom = 4
+
+[node name="VBoxContainer" type="VBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer"]
+margin_left = 4.0
+margin_top = 4.0
+margin_right = 232.0
+margin_bottom = 172.0
+
+[node name="Header" type="HBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"]
+margin_right = 228.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 228, 10 )
+custom_constants/separation = 8
+
+[node name="Place" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"]
+margin_right = 16.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 16, 0 )
+custom_fonts/font = ExtResource( 8 )
+text = "#"
+align = 1
+
+[node name="Player" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"]
+margin_left = 24.0
+margin_right = 94.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 70, 0 )
+custom_fonts/font = ExtResource( 8 )
+text = "Player"
+align = 1
+clip_text = true
+
+[node name="Score" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"]
+margin_left = 102.0
+margin_right = 137.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 35, 0 )
+custom_fonts/font = ExtResource( 8 )
+text = "score"
+align = 2
+
+[node name="Time" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"]
+margin_left = 145.0
+margin_right = 201.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 56, 0 )
+custom_fonts/font = ExtResource( 8 )
+text = "time"
+align = 1
+
+[node name="Control" type="Control" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"]
+margin_left = 209.0
+margin_right = 221.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="HSeparator" type="HSeparator" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"]
+margin_top = 14.0
+margin_right = 228.0
+margin_bottom = 15.0
+custom_constants/separation = 1
+
+[node name="ScoreboardTabs" type="Control" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+margin_top = 19.0
+margin_right = 228.0
+margin_bottom = 168.0
+size_flags_vertical = 3
+
+[node name="Scores" type="VBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"]
+unique_name_in_owner = true
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="PrevScores" type="TextureRect" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 5 )
+margin_left = 110.0
+margin_right = 118.0
+margin_bottom = 8.0
+rect_pivot_offset = Vector2( 3, 4 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+texture = ExtResource( 9 )
+
+[node name="ScoreEntry0" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+place = 1
+
+[node name="ScoreEntry1" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 16.0
+margin_bottom = 28.0
+place = 2
+
+[node name="ScoreEntry2" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 32.0
+margin_bottom = 44.0
+place = 3
+
+[node name="ScoreEntry3" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 48.0
+margin_bottom = 60.0
+place = 4
+
+[node name="ScoreEntry4" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 64.0
+margin_bottom = 76.0
+place = 5
+
+[node name="ScoreEntry5" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 80.0
+margin_bottom = 92.0
+place = 6
+
+[node name="ScoreEntry6" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 96.0
+margin_bottom = 108.0
+place = 7
+
+[node name="ScoreEntry7" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )]
+margin_top = 112.0
+margin_bottom = 124.0
+place = 8
+
+[node name="NextScores" type="TextureRect" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 6 )
+margin_left = 110.0
+margin_top = 128.0
+margin_right = 118.0
+margin_bottom = 136.0
+rect_pivot_offset = Vector2( 3, 4 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+texture = ExtResource( 3 )
+
+[node name="LoadingIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+size_flags_vertical = 3
+
+[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/LoadingIndicator"]
+material = SubResource( 4 )
+margin_left = 110.0
+margin_top = 69.0
+margin_right = 117.0
+margin_bottom = 79.0
+text = "§"
+
+[node name="FailedIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/FailedIndicator"]
+margin_left = 65.0
+margin_top = 69.0
+margin_right = 163.0
+margin_bottom = 79.0
+text = "Failed to load"
+
+[node name="PanelContainer" type="PanelContainer" parent="BoardsScreen/Scoreboard"]
+visible = false
+margin_left = 250.0
+margin_right = 474.0
+margin_bottom = 144.0
+rect_min_size = Vector2( 224, 144 )
+size_flags_horizontal = 4
+size_flags_vertical = 0
+
+[node name="NextBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 3 )
+margin_left = 250.0
+margin_top = 84.0
+margin_right = 256.0
+margin_bottom = 92.0
+size_flags_horizontal = 0
+size_flags_vertical = 4
+texture = ExtResource( 6 )
diff --git a/menus/shard_results.tscn b/menus/shard_results.tscn
new file mode 100644
index 0000000..9fda7d7
--- /dev/null
+++ b/menus/shard_results.tscn
@@ -0,0 +1,102 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Animation" id=3]
+resource_name = "Collect"
+step = 0.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.15, 0.3, 0.375, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 1, 1 ), Vector2( 1.3, 1.3 ), Vector2( 1, 1 ), Vector2( 1, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CollectedParticle:emitting")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "Miss"
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Gradient" id=2]
+interpolation_mode = 2
+offsets = PoolRealArray( 0, 0.734694, 1 )
+colors = PoolColorArray( 0.576471, 0.980392, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 )
+
+[node name="Shard" type="Node2D"]
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 1 )
+position = Vector2( 1, 1 )
+scale = Vector2( 1e-05, 1e-05 )
+texture = ExtResource( 3 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "Miss"
+anims/Collect = SubResource( 3 )
+anims/Miss = SubResource( 4 )
+
+[node name="CollectedParticle" type="CPUParticles2D" parent="."]
+pause_mode = 2
+emitting = false
+amount = 64
+one_shot = true
+explosiveness = 1.0
+local_coords = false
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 150 )
+initial_velocity = 250.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_random = 1.0
+color_ramp = SubResource( 2 )
diff --git a/menus/sockbug.gd b/menus/sockbug.gd
new file mode 100644
index 0000000..727cf7e
--- /dev/null
+++ b/menus/sockbug.gd
@@ -0,0 +1,15 @@
+extends AnimatedSprite
+
+export var speed = Vector2(100,0)
+
+# Called when the node enters the scene tree for the first time.
+func _physics_process(delta):
+ position += speed * delta
+ if position.x > 300:
+ position.x = 0
+ if position.x < 0:
+ position.x = 300
+ if position.y > 252:
+ position.y = 0
+ if position.y < 0:
+ position.y = 252
diff --git a/menus/sound_select.gd b/menus/sound_select.gd
new file mode 100644
index 0000000..41b79d5
--- /dev/null
+++ b/menus/sound_select.gd
@@ -0,0 +1,45 @@
+tool
+extends TextureButton
+
+export (Array, String) var titles
+export (Array, AudioStream) var sounds
+export (Array, Dictionary) var categories setget set_categories
+var current_selection = 0
+onready var body = $SoundLabel/Label
+onready var category = $SoundLabel/Category
+
+func _ready():
+ if Engine.editor_hint and categories.empty():
+ categories = [SoundCategory.new()]
+
+func _gui_input(event):
+ if Input.is_action_just_pressed("ui_left"):
+ current_selection -= 1
+ elif Input.is_action_just_pressed("ui_right"):
+ current_selection += 1
+ elif Input.is_action_just_pressed("ui_accept"):
+ Audio.play_sound(sounds[current_selection],Audio.ac_collectible)
+ elif Input.is_action_just_pressed("ui_cancel"):
+ Audio.ac_music.stop()
+ current_selection = posmod(current_selection,sounds.size())
+ body.text = titles[current_selection]
+# for c in categories:
+# if current_selection >= c.index:
+# category.text = c.name
+# category.add_color_override("font_color", c.color)
+
+
+class SoundCategory extends Resource:
+ export var starting_index: int = 0
+ export var title: String = ""
+ export var color: Color = Color.white
+
+func set_categories(value: Array) -> void:
+ categories = value
+ for i in categories.size():
+ if !categories[i]:
+ categories[i] = {
+ index = 0,
+ name = "",
+ color = Color.white,
+ }
diff --git a/menus/sound_test.gd b/menus/sound_test.gd
new file mode 100644
index 0000000..99a3e05
--- /dev/null
+++ b/menus/sound_test.gd
@@ -0,0 +1,4 @@
+extends Control
+
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
diff --git a/menus/sound_test.tscn b/menus/sound_test.tscn
new file mode 100644
index 0000000..740a33d
--- /dev/null
+++ b/menus/sound_test.tscn
@@ -0,0 +1,335 @@
+[gd_scene load_steps=135 format=2]
+
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/hud/listen_to_the_future.png" type="Texture" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=5]
+[ext_resource path="res://audio/sounds/key.ogg" type="AudioStream" id=6]
+[ext_resource path="res://audio/sounds/select.ogg" type="AudioStream" id=7]
+[ext_resource path="res://audio/sounds/land.ogg" type="AudioStream" id=8]
+[ext_resource path="res://audio/sounds/arrow_collect.ogg" type="AudioStream" id=9]
+[ext_resource path="res://audio/sounds/confirm.ogg" type="AudioStream" id=10]
+[ext_resource path="res://graphics/hud/sound_test_title.png" type="Texture" id=11]
+[ext_resource path="res://graphics/player/sg_headphones.png" type="Texture" id=12]
+[ext_resource path="res://menus/music_select.gd" type="Script" id=13]
+[ext_resource path="res://audio/music/rumble_loop.ogg" type="AudioStream" id=14]
+[ext_resource path="res://audio/music/pause.ogg" type="AudioStream" id=15]
+[ext_resource path="res://menus/sound_select.gd" type="Script" id=16]
+[ext_resource path="res://audio/music/burnt_out.ogg" type="AudioStream" id=17]
+[ext_resource path="res://audio/music/dusk_park.ogg" type="AudioStream" id=18]
+[ext_resource path="res://audio/music/klystron_vip.ogg" type="AudioStream" id=19]
+[ext_resource path="res://audio/music/cryokiller.ogg" type="AudioStream" id=20]
+[ext_resource path="res://audio/music/spine_v2.ogg" type="AudioStream" id=21]
+[ext_resource path="res://audio/music/klystron.ogg" type="AudioStream" id=22]
+[ext_resource path="res://audio/music/precision_parasite.ogg" type="AudioStream" id=23]
+[ext_resource path="res://audio/sounds/bubble.ogg" type="AudioStream" id=24]
+[ext_resource path="res://audio/sounds/jump.ogg" type="AudioStream" id=25]
+[ext_resource path="res://menus/sound_test.gd" type="Script" id=26]
+[ext_resource path="res://graphics/hud/sound_test_arrow.png" type="Texture" id=27]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=28]
+[ext_resource path="res://audio/sounds/button.ogg" type="AudioStream" id=29]
+[ext_resource path="res://audio/sounds/die.ogg" type="AudioStream" id=30]
+[ext_resource path="res://audio/sounds/scrump_die.ogg" type="AudioStream" id=31]
+[ext_resource path="res://audio/sounds/shoot_arrow.ogg" type="AudioStream" id=32]
+[ext_resource path="res://audio/sounds/die_skeleton.ogg" type="AudioStream" id=33]
+[ext_resource path="res://audio/sounds/double_jump.ogg" type="AudioStream" id=34]
+[ext_resource path="res://audio/sounds/gover.ogg" type="AudioStream" id=35]
+[ext_resource path="res://audio/sounds/explosion.ogg" type="AudioStream" id=36]
+[ext_resource path="res://audio/sounds/scrump_hurt.ogg" type="AudioStream" id=37]
+[ext_resource path="res://audio/sounds/shell.ogg" type="AudioStream" id=38]
+[ext_resource path="res://audio/sounds/bullet_barrage.ogg" type="AudioStream" id=39]
+[ext_resource path="res://audio/sounds/gun_cock.ogg" type="AudioStream" id=40]
+[ext_resource path="res://audio/sounds/a_bmilc.ogg" type="AudioStream" id=41]
+[ext_resource path="res://audio/sounds/a_climb.ogg" type="AudioStream" id=42]
+[ext_resource path="res://audio/sounds/star.ogg" type="AudioStream" id=43]
+[ext_resource path="res://audio/music/moon_trail.ogg" type="AudioStream" id=44]
+[ext_resource path="res://menus/main_menu.tscn" type="PackedScene" id=45]
+[ext_resource path="res://menus/back_button.tscn" type="PackedScene" id=46]
+[ext_resource path="res://audio/sounds/mech_hurt_2.ogg" type="AudioStream" id=47]
+[ext_resource path="res://audio/sounds/explosion_small.ogg" type="AudioStream" id=48]
+[ext_resource path="res://audio/sounds/mech_hurt_3.ogg" type="AudioStream" id=49]
+[ext_resource path="res://audio/sounds/mech_hurt_1.ogg" type="AudioStream" id=50]
+[ext_resource path="res://audio/sounds/scrump_shot.ogg" type="AudioStream" id=51]
+[ext_resource path="res://audio/sounds/rainbow_laser.ogg" type="AudioStream" id=52]
+[ext_resource path="res://audio/sounds/fami_transform.ogg" type="AudioStream" id=53]
+[ext_resource path="res://audio/sounds/copsquash.ogg" type="AudioStream" id=54]
+[ext_resource path="res://audio/sounds/ominous.ogg" type="AudioStream" id=55]
+[ext_resource path="res://audio/sounds/cop_splat.ogg" type="AudioStream" id=56]
+[ext_resource path="res://audio/sounds/shard_expel.ogg" type="AudioStream" id=57]
+[ext_resource path="res://audio/sounds/absorb_shard.ogg" type="AudioStream" id=58]
+[ext_resource path="res://audio/sounds/famira.ogg" type="AudioStream" id=59]
+[ext_resource path="res://audio/sounds/great_job_haze.ogg" type="AudioStream" id=60]
+[ext_resource path="res://audio/sounds/fail_shard.ogg" type="AudioStream" id=61]
+[ext_resource path="res://audio/sounds/good_job_haze.ogg" type="AudioStream" id=62]
+[ext_resource path="res://audio/sounds/msx_die.ogg" type="AudioStream" id=63]
+[ext_resource path="res://audio/sounds/famira_die.ogg" type="AudioStream" id=64]
+[ext_resource path="res://audio/sounds/final_score.ogg" type="AudioStream" id=65]
+[ext_resource path="res://audio/sounds/shard_results.ogg" type="AudioStream" id=66]
+[ext_resource path="res://audio/sounds/msx_here_take_this.wav" type="AudioStream" id=67]
+[ext_resource path="res://audio/sounds/msx_help_me_get_outta_here.ogg" type="AudioStream" id=68]
+[ext_resource path="res://audio/sounds/msx_come_here.ogg" type="AudioStream" id=69]
+[ext_resource path="res://audio/sounds/msx_fuck.ogg" type="AudioStream" id=70]
+[ext_resource path="res://audio/sounds/msx_shit.ogg" type="AudioStream" id=71]
+[ext_resource path="res://audio/sounds/fami_fire.ogg" type="AudioStream" id=72]
+[ext_resource path="res://audio/sounds/fami_voice.ogg" type="AudioStream" id=73]
+[ext_resource path="res://audio/sounds/revolution2083_haze.ogg" type="AudioStream" id=74]
+[ext_resource path="res://audio/sounds/se_g2.ogg" type="AudioStream" id=75]
+[ext_resource path="res://audio/sounds/victory_haze.ogg" type="AudioStream" id=76]
+[ext_resource path="res://audio/sounds/2600_charge.ogg" type="AudioStream" id=77]
+[ext_resource path="res://audio/sounds/sword.ogg" type="AudioStream" id=78]
+[ext_resource path="res://audio/sounds/spaghetti.ogg" type="AudioStream" id=79]
+[ext_resource path="res://audio/sounds/mkey.ogg" type="AudioStream" id=80]
+[ext_resource path="res://audio/sounds/fami_grumble.ogg" type="AudioStream" id=81]
+[ext_resource path="res://audio/sounds/vulcan.ogg" type="AudioStream" id=82]
+[ext_resource path="res://audio/sounds/laser_ready.ogg" type="AudioStream" id=83]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=84]
+[ext_resource path="res://audio/sounds/collapse_block_fall.ogg" type="AudioStream" id=85]
+[ext_resource path="res://audio/sounds/mech_walk_1.ogg" type="AudioStream" id=86]
+[ext_resource path="res://audio/sounds/a_egg_collect.ogg" type="AudioStream" id=87]
+[ext_resource path="res://audio/sounds/mech_creak.ogg" type="AudioStream" id=88]
+[ext_resource path="res://audio/sounds/mech_unduck.ogg" type="AudioStream" id=89]
+[ext_resource path="res://audio/sounds/mech_duck.ogg" type="AudioStream" id=90]
+[ext_resource path="res://audio/sounds/resolve.ogg" type="AudioStream" id=91]
+[ext_resource path="res://audio/sounds/talking.ogg" type="AudioStream" id=92]
+[ext_resource path="res://audio/sounds/mech_walk.ogg" type="AudioStream" id=93]
+[ext_resource path="res://audio/sounds/mech_walk_2.ogg" type="AudioStream" id=94]
+[ext_resource path="res://audio/sounds/critical_heat.ogg" type="AudioStream" id=95]
+[ext_resource path="res://audio/sounds/good_job_ivy.ogg" type="AudioStream" id=96]
+[ext_resource path="res://audio/sounds/good_job_dog.ogg" type="AudioStream" id=97]
+[ext_resource path="res://audio/music/mitten.ogg" type="AudioStream" id=98]
+[ext_resource path="res://audio/sounds/great_job_dog.ogg" type="AudioStream" id=99]
+[ext_resource path="res://audio/sounds/great_job_ivy.ogg" type="AudioStream" id=100]
+[ext_resource path="res://audio/sounds/msx_goddammit.ogg" type="AudioStream" id=102]
+[ext_resource path="res://audio/sounds/msx_fucking_cop.ogg" type="AudioStream" id=103]
+[ext_resource path="res://audio/sounds/msx_motherfucker.ogg" type="AudioStream" id=104]
+[ext_resource path="res://audio/sounds/revolution2083.ogg" type="AudioStream" id=105]
+[ext_resource path="res://audio/music/sleet.ogg" type="AudioStream" id=106]
+[ext_resource path="res://audio/sounds/revolution2083_dog.ogg" type="AudioStream" id=107]
+[ext_resource path="res://audio/sounds/revolution2083_ivy.ogg" type="AudioStream" id=108]
+[ext_resource path="res://audio/music/vitreous_squares.ogg" type="AudioStream" id=109]
+[ext_resource path="res://audio/sounds/victory_ivy.ogg" type="AudioStream" id=110]
+[ext_resource path="res://audio/sounds/good_job.ogg" type="AudioStream" id=111]
+[ext_resource path="res://audio/sounds/victory_dog.ogg" type="AudioStream" id=112]
+[ext_resource path="res://audio/sounds/teleport.ogg" type="AudioStream" id=113]
+[ext_resource path="res://audio/sounds/shard_float.ogg" type="AudioStream" id=114]
+[ext_resource path="res://audio/sounds/intro_voiceover.ogg" type="AudioStream" id=115]
+[ext_resource path="res://audio/sounds/cop_shoot.ogg" type="AudioStream" id=116]
+[ext_resource path="res://audio/sounds/splash.ogg" type="AudioStream" id=117]
+[ext_resource path="res://audio/sounds/zap_wip.ogg" type="AudioStream" id=118]
+[ext_resource path="res://audio/music/intro.ogg" type="AudioStream" id=119]
+[ext_resource path="res://audio/music/BBBBBBBB.ogg" type="AudioStream" id=120]
+[ext_resource path="res://audio/music/the_dirt_under_the_meadow.ogg" type="AudioStream" id=121]
+[ext_resource path="res://audio/music/empty_motel.ogg" type="AudioStream" id=122]
+[ext_resource path="res://audio/music/rumble_revolution.ogg" type="AudioStream" id=123]
+[ext_resource path="res://audio/music/rumble_revolution_intro.ogg" type="AudioStream" id=124]
+[ext_resource path="res://audio/music/rev83-wondering-now-short.ogg" type="AudioStream" id=125]
+[ext_resource path="res://audio/music/74(game_over).ogg" type="AudioStream" id=126]
+[ext_resource path="res://audio/sounds/victory_nobonus.ogg" type="AudioStream" id=127]
+[ext_resource path="res://audio/sounds/shard_get.ogg" type="AudioStream" id=128]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color_1 = Color( 0.501961, 1, 0.929412, 1 )
+shader_param/color_2 = Color( 0, 0.713726, 0.631373, 1 )
+shader_param/checker_size = Vector2( 32, 32 )
+shader_param/pan_speed = Vector2( 12, 0 )
+shader_param/cycle_speed = Vector2( 9, 0 )
+shader_param/cycle_alternation = Vector2( 2, 1 )
+shader_param/uv_transform = Transform2D( 0, 3, 3, 1, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=12]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 12 )
+region = Rect2( 0, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 12 )
+region = Rect2( 20, 0, 20, 20 )
+
+[sub_resource type="SpriteFrames" id=15]
+animations = [ {
+"frames": [ SubResource( 13 ), SubResource( 14 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=18]
+shader = ExtResource( 28 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=19]
+shader = ExtResource( 28 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[node name="SoundTest" type="Control"]
+script = ExtResource( 26 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+material = SubResource( 1 )
+margin_right = 256.0
+margin_bottom = 192.0
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 83, 19 )
+texture = ExtResource( 11 )
+
+[node name="AnimatedSprite2" type="AnimatedSprite" parent="."]
+material = SubResource( 12 )
+position = Vector2( 72, 152 )
+scale = Vector2( 2, 2 )
+frames = SubResource( 15 )
+playing = true
+
+[node name="AnimatedSprite3" type="AnimatedSprite" parent="."]
+material = SubResource( 12 )
+position = Vector2( 112, 152 )
+scale = Vector2( 2, 2 )
+frames = SubResource( 15 )
+playing = true
+
+[node name="AnimatedSprite4" type="AnimatedSprite" parent="."]
+material = SubResource( 12 )
+position = Vector2( 152, 152 )
+scale = Vector2( 2, 2 )
+frames = SubResource( 15 )
+playing = true
+
+[node name="AnimatedSprite5" type="AnimatedSprite" parent="."]
+material = SubResource( 12 )
+position = Vector2( 192, 152 )
+scale = Vector2( 2, 2 )
+frames = SubResource( 15 )
+playing = true
+
+[node name="Music" type="TextureButton" parent="."]
+material = SubResource( 18 )
+margin_left = 38.0
+margin_top = 64.0
+margin_right = 46.0
+margin_bottom = 73.0
+texture_focused = ExtResource( 27 )
+script = ExtResource( 13 )
+titles = [ "Mute", "Vitreous Squares", "Intro", "Rumble", "Dusk Park", "Burnt Out", "Klystron", "Sleet", "Moon Trail 2023", "Precision Parasite", "klystron vip", "Spine_v2", "Cryokiller", "Mitten", "Dirt Under The Meadow", "Rumble Revolution pt1", "Rumble Revolution", "Empty Motel", "You're Wondering Now", "74 (Game Over)", "Pause", "BBBBBBBB" ]
+songs = [ null, ExtResource( 109 ), ExtResource( 119 ), ExtResource( 14 ), ExtResource( 18 ), ExtResource( 17 ), ExtResource( 22 ), ExtResource( 106 ), ExtResource( 44 ), ExtResource( 23 ), ExtResource( 19 ), ExtResource( 21 ), ExtResource( 20 ), ExtResource( 98 ), ExtResource( 121 ), ExtResource( 124 ), ExtResource( 123 ), ExtResource( 122 ), ExtResource( 125 ), ExtResource( 126 ), ExtResource( 15 ), ExtResource( 120 ) ]
+
+[node name="MusicLabel" type="Label" parent="Music"]
+material = ExtResource( 4 )
+margin_left = 10.0
+margin_top = -19.0
+margin_right = 82.0
+margin_bottom = 11.0
+theme = ExtResource( 5 )
+text = "Music"
+
+[node name="Panel" type="Panel" parent="Music/MusicLabel"]
+margin_top = 11.0
+margin_right = 160.0
+margin_bottom = 35.0
+rect_pivot_offset = Vector2( -136, -16 )
+theme = ExtResource( 5 )
+
+[node name="Label" type="Label" parent="Music/MusicLabel"]
+material = ExtResource( 4 )
+margin_left = 8.0
+margin_top = 14.0
+margin_right = 152.0
+margin_bottom = 32.0
+text = "Mute"
+align = 1
+valign = 1
+
+[node name="Sound" type="TextureButton" parent="."]
+material = SubResource( 19 )
+margin_left = 38.0
+margin_top = 112.0
+margin_right = 45.0
+margin_bottom = 121.0
+focus_neighbour_top = NodePath("../Music")
+texture_focused = ExtResource( 27 )
+script = ExtResource( 16 )
+titles = [ "Select", "Confirm", "Jump", "Double Jump", "Land", "Climb", "Bmilc", "Shoot", "Die", "Sploosh", "Bzaap", "Teleport", "Gover", "Key Get", "Arrow Get", "Star Get", "Skeleton Die", "Scrump Shoot", "Scrump Hurt", "Scrump Die", "Bubble Get", "Big Explosion", "Collapse", "Glass Break", "Bullet Barrage", "Laser Charge", "Rainbow Laser", "Mech Hurt 1", "Mech Hurt 2", "Mech Hurt 3", "Small Explosion", "Bullet Casing", "Button Click", "Ominous", "GunCock", "Shards Expelled", "Shards Absorbed", "Shard Float", "Fami Transform", "Scope Squish", "Scope Splat", "Famira Roar", "2083 Shoot", "Laser Ready", "Famira Breath", "Critical Heat", "Famira Die", "Collected Shard", "Missed Shard", "Final Score", "Revolution 2083", "Shard Get", "Good Job!", "Great Job!", "Victory", "Wonderful!", "Come Here", "Help Me", "Agh!", "Fuck!", "Shit...", "Take This", "Fami's Grand Plan", "Debug M", "Spaghetti", "Sword", "Egg Collect", "Talking", "Fami Grumble", "Segz", "Mech Creak", "Mech Step 1", "Mech Step 2", "Mech Walking", "Mech Duck", "Mech Unduck", "Resolve", "Robolution 2083", "Scarletution 2083", "Dogolution 2083", "Classic Good Job", "Good Job - Scarlett", "Good Job - Dog", "Great Job - Scarlett", "Great Job - Dog", "Classic Wonderful", "Wonderful - Scarlett", "Wonderful - Dog", "Fucking Cop...", "Goddammit...", "Motherfucker...", "Intro Voiceover" ]
+sounds = [ ExtResource( 7 ), ExtResource( 10 ), ExtResource( 25 ), ExtResource( 34 ), ExtResource( 8 ), ExtResource( 42 ), ExtResource( 41 ), ExtResource( 32 ), ExtResource( 30 ), ExtResource( 117 ), ExtResource( 118 ), ExtResource( 113 ), ExtResource( 35 ), ExtResource( 6 ), ExtResource( 9 ), ExtResource( 43 ), ExtResource( 33 ), ExtResource( 51 ), ExtResource( 37 ), ExtResource( 31 ), ExtResource( 24 ), ExtResource( 36 ), ExtResource( 85 ), ExtResource( 116 ), ExtResource( 39 ), ExtResource( 77 ), ExtResource( 52 ), ExtResource( 50 ), ExtResource( 47 ), ExtResource( 49 ), ExtResource( 48 ), ExtResource( 38 ), ExtResource( 29 ), ExtResource( 55 ), ExtResource( 40 ), ExtResource( 57 ), ExtResource( 58 ), ExtResource( 114 ), ExtResource( 53 ), ExtResource( 54 ), ExtResource( 56 ), ExtResource( 59 ), ExtResource( 82 ), ExtResource( 83 ), ExtResource( 72 ), ExtResource( 95 ), ExtResource( 64 ), ExtResource( 66 ), ExtResource( 61 ), ExtResource( 65 ), ExtResource( 74 ), ExtResource( 128 ), ExtResource( 62 ), ExtResource( 60 ), ExtResource( 127 ), ExtResource( 76 ), ExtResource( 69 ), ExtResource( 68 ), ExtResource( 63 ), ExtResource( 70 ), ExtResource( 71 ), ExtResource( 67 ), ExtResource( 73 ), ExtResource( 80 ), ExtResource( 79 ), ExtResource( 78 ), ExtResource( 87 ), ExtResource( 92 ), ExtResource( 81 ), ExtResource( 75 ), ExtResource( 88 ), ExtResource( 86 ), ExtResource( 94 ), ExtResource( 93 ), ExtResource( 90 ), ExtResource( 89 ), ExtResource( 91 ), ExtResource( 105 ), ExtResource( 108 ), ExtResource( 107 ), ExtResource( 111 ), ExtResource( 96 ), ExtResource( 97 ), ExtResource( 100 ), ExtResource( 99 ), ExtResource( 110 ), ExtResource( 127 ), ExtResource( 112 ), ExtResource( 103 ), ExtResource( 102 ), ExtResource( 104 ), ExtResource( 115 ) ]
+categories = [ {
+"color": Color( 0.690196, 0.690196, 0.690196, 1 ),
+"index": 0,
+"name": "Menu"
+}, {
+"color": Color( 1, 0.423529, 0.4, 1 ),
+"index": 2,
+"name": "player"
+}, {
+"color": Color( 1, 0.631373, 0.4, 1 ),
+"index": 13,
+"name": "collectibles"
+} ]
+
+[node name="SoundLabel" type="Label" parent="Sound"]
+material = ExtResource( 4 )
+margin_left = 10.0
+margin_top = -19.0
+margin_right = 82.0
+margin_bottom = 11.0
+theme = ExtResource( 5 )
+text = "Sound"
+
+[node name="Panel2" type="Panel" parent="Sound/SoundLabel"]
+margin_top = 11.0
+margin_right = 160.0
+margin_bottom = 35.0
+rect_pivot_offset = Vector2( -136, -16 )
+theme = ExtResource( 5 )
+
+[node name="Label" type="Label" parent="Sound/SoundLabel"]
+material = ExtResource( 4 )
+margin_left = 8.0
+margin_top = 11.0
+margin_right = 152.0
+margin_bottom = 35.0
+text = "Select"
+align = 1
+valign = 1
+
+[node name="Category" type="Label" parent="Sound/SoundLabel"]
+visible = false
+margin_left = 42.0
+margin_right = 160.0
+margin_bottom = 10.0
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 84 )
+text = "menu"
+align = 2
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 4 )
+margin_top = 180.0
+margin_right = 256.0
+margin_bottom = 194.0
+theme = ExtResource( 5 )
+text = "X - Play Z - Stop"
+align = 1
+
+[node name="Button" parent="." instance=ExtResource( 46 )]
+margin_left = 8.0
+margin_top = 144.0
+margin_right = 60.0
+margin_bottom = 177.0
+next_scene = ExtResource( 45 )
+
+[node name="ListenToTheFuture" type="Sprite" parent="."]
+position = Vector2( 248, 96 )
+texture = ExtResource( 3 )
diff --git a/menus/splash_screen.gd b/menus/splash_screen.gd
new file mode 100644
index 0000000..16dc3b3
--- /dev/null
+++ b/menus/splash_screen.gd
@@ -0,0 +1,38 @@
+extends Control
+
+export var next_screen: PackedScene
+
+var skipping: bool = false
+
+onready var team_sg: TextureRect = $TeamSG
+onready var godot: TextureRect = $Godot
+
+func _ready() -> void:
+ yield(get_tree().create_timer(0.5), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ team_sg.visible = true
+ Fade.fade_in(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ yield(get_tree().create_timer(1.0), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ yield(get_tree().create_timer(0.5), "timeout")
+ godot.visible = true
+ Fade.fade_in(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ yield(get_tree().create_timer(1.0), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ _next_screen()
+
+func _input(event: InputEvent) -> void:
+ if Input.is_action_just_pressed("ui_accept"):
+ skipping = true
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ _next_screen()
+ free()
+
+func _next_screen() -> void:
+ SceneManager.current_scene = next_screen.instance()
diff --git a/menus/splash_screen.tscn b/menus/splash_screen.tscn
new file mode 100644
index 0000000..1f632ec
--- /dev/null
+++ b/menus/splash_screen.tscn
@@ -0,0 +1,29 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://graphics/hud/team_sg_splash.png" type="Texture" id=1]
+[ext_resource path="res://menus/splash_screen.gd" type="Script" id=2]
+[ext_resource path="res://graphics/hud/godot_splash.png" type="Texture" id=3]
+[ext_resource path="res://menus/title_screen.tscn" type="PackedScene" id=4]
+
+[node name="SplashScreen" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+script = ExtResource( 2 )
+next_screen = ExtResource( 4 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="TeamSG" type="TextureRect" parent="."]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 1 )
+
+[node name="Godot" type="TextureRect" parent="."]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 3 )
diff --git a/menus/submit_score.gd b/menus/submit_score.gd
new file mode 100644
index 0000000..5a9464d
--- /dev/null
+++ b/menus/submit_score.gd
@@ -0,0 +1,98 @@
+extends Node
+
+
+const NewgroundsLogin := preload("res://menus/newgrounds_login.tscn")
+const LevelSelect := preload("res://menus/level_select_scholar.tscn")
+
+
+var _scoreboard_id: int = -1
+var _scoreboard_tag: String = ""
+var _score_value: int = -1
+
+
+onready var tab_container: TabContainer = $"%TabContainer"
+
+
+func _ready() -> void:
+ yield(get_tree(), "idle_frame")
+ $"%YesScore".grab_focus()
+ Fade.fade_in(Options.transition_speed_secs)
+
+
+func _on_YesScore_pressed() -> void:
+ _scoreboard_id = LevelData.levels[Game.current_level].scores_id
+ _score_value = Game.final_score
+ _set_tag(false)
+ tab_container.current_tab = 2
+ if yield(_submit(), "completed"):
+ tab_container.current_tab = 3
+ else:
+ tab_container.current_tab = 4
+ yield(get_tree().create_timer(1.0), "timeout")
+ tab_container.current_tab = 1
+ $"%YesTime".grab_focus()
+
+
+func _on_NoScore_pressed() -> void:
+ tab_container.current_tab = 1
+ $"%YesTime".grab_focus()
+
+
+func _on_YesTime_pressed() -> void:
+ _scoreboard_id = LevelData.levels[Game.current_level].times_id
+ _score_value = int(Game.time * 1000.0)
+ _set_tag(true)
+ tab_container.current_tab = 2
+ if yield(_submit(), "completed"):
+ tab_container.current_tab = 3
+ else:
+ tab_container.current_tab = 4
+ yield(get_tree().create_timer(1.0), "timeout")
+ _next_screen()
+
+
+func _on_NoTime_pressed() -> void:
+ _next_screen()
+
+
+func _next_screen() -> void:
+ Game.clear_collectibles()
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.change_scene(LevelSelect.instance())
+
+
+func _set_tag(include_completion: bool = false) -> void:
+ match Game.difficulty:
+ Game.Difficulty.SWEET:
+ _scoreboard_tag = "sweet"
+ Game.Difficulty.SALTY:
+ _scoreboard_tag = "salty"
+ Game.Difficulty.SPICY:
+ _scoreboard_tag = "spicy"
+ Game.Difficulty.PUNGENT:
+ _scoreboard_tag = "pungent"
+ if include_completion:
+ if Game.keys >= 50 and Game.shards >= 5:
+ _scoreboard_tag += "-100%"
+ else:
+ _scoreboard_tag += "-any%"
+
+
+# returns true if the score was successfully submitted
+func _submit() -> bool:
+ if Ngio.session.user == null:
+ var login_screen = NewgroundsLogin.instance()
+ add_child(login_screen)
+ yield(login_screen, "tree_exited")
+ if Ngio.session.user == null:
+ return false
+ var response = yield(Ngio.request_execute("ScoreBoard.postScore", {
+ id = _scoreboard_id,
+ tag = _scoreboard_tag,
+ value = _score_value,
+ }), "completed")
+ if Ngio.has_result(response):
+ if response.result.data.success:
+ return true
+ return false
diff --git a/menus/submit_score.tscn b/menus/submit_score.tscn
new file mode 100644
index 0000000..7c8ca2e
--- /dev/null
+++ b/menus/submit_score.tscn
@@ -0,0 +1,229 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://menus/submit_score.gd" type="Script" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=4]
+[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 8, 4 )
+shader_param/ammount = Vector2( 12, 24 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[node name="SubmitScore" type="Node"]
+script = ExtResource( 1 )
+
+[node name="ColorRect" type="ColorRect" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+
+[node name="TabContainer" type="TabContainer" parent="CenterContainer"]
+unique_name_in_owner = true
+margin_left = 82.0
+margin_top = 78.0
+margin_right = 173.0
+margin_bottom = 114.0
+tabs_visible = false
+
+[node name="SubmitScore" type="VBoxContainer" parent="CenterContainer/TabContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Label" type="Label" parent="CenterContainer/TabContainer/SubmitScore"]
+margin_right = 91.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 5 )
+text = "submit score?"
+
+[node name="YesNoPrompt" type="PanelContainer" parent="CenterContainer/TabContainer/SubmitScore"]
+margin_left = 1.0
+margin_top = 14.0
+margin_right = 90.0
+margin_bottom = 36.0
+size_flags_horizontal = 4
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 86.0
+margin_bottom = 19.0
+rect_min_size = Vector2( 0, 16 )
+rect_pivot_offset = Vector2( -174, -69 )
+custom_constants/separation = 0
+alignment = 1
+
+[node name="YesScore" type="TextureButton" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 1 )
+margin_top = 4.0
+margin_right = 12.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_right = NodePath("../NoScore")
+size_flags_vertical = 4
+texture_focused = ExtResource( 4 )
+expand = true
+stretch_mode = 3
+
+[node name="YesLabel" type="Label" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 12.0
+margin_top = 3.0
+margin_right = 33.0
+margin_bottom = 13.0
+text = "Yes"
+
+[node name="Spacer" type="Control" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 33.0
+margin_right = 45.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="NoScore" type="TextureButton" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+material = SubResource( 1 )
+margin_left = 45.0
+margin_top = 4.0
+margin_right = 57.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_left = NodePath("../YesScore")
+size_flags_vertical = 4
+texture_focused = ExtResource( 4 )
+expand = true
+stretch_mode = 3
+
+[node name="NoLabel" type="Label" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 57.0
+margin_top = 3.0
+margin_right = 71.0
+margin_bottom = 13.0
+text = "No"
+
+[node name="Spacer2" type="Control" parent="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer"]
+margin_left = 71.0
+margin_right = 83.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="SubmitTime" type="VBoxContainer" parent="CenterContainer/TabContainer"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Label" type="Label" parent="CenterContainer/TabContainer/SubmitTime"]
+margin_right = 89.0
+margin_bottom = 10.0
+custom_fonts/font = ExtResource( 5 )
+text = "submit time?"
+
+[node name="YesNoPrompt" type="PanelContainer" parent="CenterContainer/TabContainer/SubmitTime"]
+margin_top = 14.0
+margin_right = 89.0
+margin_bottom = 36.0
+size_flags_horizontal = 4
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 86.0
+margin_bottom = 19.0
+rect_min_size = Vector2( 0, 16 )
+rect_pivot_offset = Vector2( -174, -69 )
+custom_constants/separation = 0
+alignment = 1
+
+[node name="YesTime" type="TextureButton" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+unique_name_in_owner = true
+material = SubResource( 1 )
+margin_top = 4.0
+margin_right = 12.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_right = NodePath("../NoTime")
+size_flags_vertical = 4
+texture_focused = ExtResource( 4 )
+expand = true
+stretch_mode = 3
+
+[node name="YesLabel" type="Label" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+margin_left = 12.0
+margin_top = 3.0
+margin_right = 33.0
+margin_bottom = 13.0
+text = "Yes"
+
+[node name="Spacer" type="Control" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+margin_left = 33.0
+margin_right = 45.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="NoTime" type="TextureButton" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+material = SubResource( 1 )
+margin_left = 45.0
+margin_top = 4.0
+margin_right = 57.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 12, 8 )
+focus_neighbour_left = NodePath("../YesTime")
+size_flags_vertical = 4
+texture_focused = ExtResource( 4 )
+expand = true
+stretch_mode = 3
+
+[node name="NoLabel" type="Label" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+margin_left = 57.0
+margin_top = 3.0
+margin_right = 71.0
+margin_bottom = 13.0
+text = "No"
+
+[node name="Spacer2" type="Control" parent="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer"]
+margin_left = 71.0
+margin_right = 83.0
+margin_bottom = 16.0
+rect_min_size = Vector2( 12, 0 )
+
+[node name="LoadingGraphic" type="Label" parent="CenterContainer/TabContainer"]
+visible = false
+material = SubResource( 2 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+rect_min_size = Vector2( 0, 64 )
+text = "§"
+align = 1
+valign = 1
+
+[node name="Success" type="Label" parent="CenterContainer/TabContainer"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+custom_fonts/font = ExtResource( 5 )
+text = "success!"
+
+[node name="Failure" type="Label" parent="CenterContainer/TabContainer"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+custom_fonts/font = ExtResource( 5 )
+text = "failture :("
+
+[connection signal="pressed" from="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesScore" to="." method="_on_YesScore_pressed"]
+[connection signal="pressed" from="CenterContainer/TabContainer/SubmitScore/YesNoPrompt/HBoxContainer/NoScore" to="." method="_on_NoScore_pressed"]
+[connection signal="pressed" from="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer/YesTime" to="." method="_on_YesTime_pressed"]
+[connection signal="pressed" from="CenterContainer/TabContainer/SubmitTime/YesNoPrompt/HBoxContainer/NoTime" to="." method="_on_NoTime_pressed"]
diff --git a/menus/title_screen.gd b/menus/title_screen.gd
new file mode 100644
index 0000000..b78588e
--- /dev/null
+++ b/menus/title_screen.gd
@@ -0,0 +1,42 @@
+extends Node
+
+const robo_voice = preload("res://audio/sounds/revolution2083.ogg")
+const penny_voice = preload("res://audio/sounds/revolution2083_penny.ogg")
+const haze_voice = preload("res://audio/sounds/revolution2083_haze.ogg")
+const ivy_voice = preload("res://audio/sounds/revolution2083_ivy.ogg")
+const dog_voice = preload("res://audio/sounds/revolution2083_dog.ogg")
+onready var audio = $AudioStreamPlayer
+export var next_menu: PackedScene
+var has_started = false
+onready var revolution_2083_robot = preload("res://audio/sounds/revolution2083.ogg")
+onready var revolution_2083_penny = preload("res://audio/sounds/revolution2083_penny.ogg")
+onready var revolution_2083_haze = preload("res://audio/sounds/revolution2083_haze.ogg")
+onready var revolution_2083_ivy = preload("res://audio/sounds/revolution2083_ivy.ogg")
+
+func _input(event):
+ if Input.is_action_just_pressed("start") && !has_started:
+ Audio.play_sound(Audio.a_star,Audio.ac_collectible)
+ var r = 40
+ if r > 0 && r < 31: audio.stream = penny_voice
+ if r >= 30 && r < 61: audio.stream = haze_voice
+ if r >= 60 && r < 91: audio.stream = ivy_voice
+ if r >= 90: audio.stream = dog_voice
+ if r == 0: audio.stream = robo_voice
+ audio.play()
+ $AnimationPlayer.play("activate")
+ has_started = true
+
+func _ready():
+ Fade.fade_in(Options.transition_speed_secs)
+ var time = OS.get_time()
+ if time.hour >= 18 or time.hour < 6:
+ $Night.visible = true
+ else:
+ $Day.visible = true
+ Audio.play_music(load("res://audio/music/vitreous_squares.ogg"))
+
+
+func _on_AudioStreamPlayer_finished():
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+ SceneManager.current_scene = next_menu.instance()
diff --git a/menus/title_screen.tscn b/menus/title_screen.tscn
new file mode 100644
index 0000000..57d919d
--- /dev/null
+++ b/menus/title_screen.tscn
@@ -0,0 +1,194 @@
+[gd_scene load_steps=19 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
+[ext_resource path="res://menus/title_screen.gd" type="Script" id=5]
+[ext_resource path="res://menus/main_menu.tscn" type="PackedScene" id=6]
+[ext_resource path="res://graphics/hud/logo.png" type="Texture" id=7]
+[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=8]
+[ext_resource path="res://graphics/backgrounds/sun_and_clouds.png" type="Texture" id=9]
+[ext_resource path="res://graphics/particles/smoke.png" type="Texture" id=10]
+[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=11]
+[ext_resource path="res://graphics/backgrounds/moon.png" type="Texture" id=12]
+[ext_resource path="res://graphics/hud/title_credits.png" type="Texture" id=13]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 8 )
+shader_param/color_1 = Color( 0.121569, 0.454902, 1, 1 )
+shader_param/color_2 = Color( 0.113725, 0.321569, 0.466667, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 6, 3 )
+shader_param/cycle_alternation = Vector2( 6, 3 )
+shader_param/uv_transform = Transform2D( 0, 1, 1, 0, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 8 )
+shader_param/color_1 = Color( 0.662745, 0.647059, 0.819608, 1 )
+shader_param/color_2 = Color( 0.12549, 0.133333, 0.227451, 1 )
+shader_param/checker_size = Vector2( 16, 16 )
+shader_param/pan_speed = Vector2( 0, 0 )
+shader_param/cycle_speed = Vector2( 6, 3 )
+shader_param/cycle_alternation = Vector2( 6, 3 )
+shader_param/uv_transform = Transform2D( 0, 1, 1, 0, 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 11 )
+shader_param/animate_noise = true
+shader_param/noise_intensity = 1.0
+shader_param/fps = 60.0
+
+[sub_resource type="Curve" id=4]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.130639, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.348684, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Animation" id=9]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Logo:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=10]
+resource_name = "activate"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Logo:scale")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.5, 0.8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ), Vector2( 1.25, 1.25 ), Vector2( 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=6]
+resource_name = "blink"
+length = 0.6
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Label:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[node name="TitleScreen" type="Node"]
+script = ExtResource( 5 )
+next_menu = ExtResource( 6 )
+
+[node name="Day" type="Node2D" parent="."]
+
+[node name="ColorRect" type="ColorRect" parent="Day"]
+material = SubResource( 7 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="Sprite" type="Sprite" parent="Day"]
+position = Vector2( 128, 96 )
+texture = ExtResource( 9 )
+
+[node name="Night" type="Node2D" parent="."]
+visible = false
+
+[node name="ColorRect2" type="ColorRect" parent="Night"]
+material = SubResource( 3 )
+margin_right = 256.0
+margin_bottom = 192.0
+
+[node name="ColorRect" type="ColorRect" parent="Night"]
+material = SubResource( 5 )
+margin_right = 256.0
+margin_bottom = 192.0
+color = Color( 1, 1, 1, 0.392157 )
+
+[node name="Sprite" type="Sprite" parent="Night"]
+position = Vector2( 296, 96 )
+texture = ExtResource( 12 )
+
+[node name="SmokeParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 40, 192 )
+amount = 512
+lifetime = 10.0
+preprocess = 10.0
+speed_scale = 2.0
+texture = ExtResource( 10 )
+direction = Vector2( 0, -1 )
+gravity = Vector2( 0, -5 )
+initial_velocity = 15.0
+initial_velocity_random = 1.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 3.0
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 4 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="Logo" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+texture = ExtResource( 7 )
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 4 )
+margin_top = 136.0
+margin_right = 256.0
+margin_bottom = 159.0
+theme = ExtResource( 3 )
+text = "Press start!"
+align = 1
+
+[node name="TitleCredits" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+texture = ExtResource( 13 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "blink"
+anims/RESET = SubResource( 9 )
+anims/activate = SubResource( 10 )
+anims/blink = SubResource( 6 )
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+volume_db = -7.866
+
+[connection signal="finished" from="AudioStreamPlayer" to="." method="_on_AudioStreamPlayer_finished"]
diff --git a/objects/Camera2D.tscn b/objects/Camera2D.tscn
index 593286a..560267f 100644
--- a/objects/Camera2D.tscn
+++ b/objects/Camera2D.tscn
@@ -1,9 +1,19 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=4 format=2]
[ext_resource path="res://objects/camera.gd" type="Script" id=1]
+[ext_resource path="res://objects/hud/off_level_indicator.tscn" type="PackedScene" id=2]
+[ext_resource path="res://objects/hud/msx_off_level_indicator.tscn" type="PackedScene" id=3]
[node name="Camera2D" type="Camera2D"]
offset = Vector2( 128, 96 )
current = true
smoothing_speed = 8.0
script = ExtResource( 1 )
+
+[node name="OffLevelIndicator" parent="." instance=ExtResource( 2 )]
+visible = false
+position = Vector2( 0, 12 )
+
+[node name="MsxOffLevelIndicator" parent="." instance=ExtResource( 3 )]
+visible = false
+position = Vector2( 16, 32 )
diff --git a/objects/camera.gd b/objects/camera.gd
index 6d72e06..73704bf 100644
--- a/objects/camera.gd
+++ b/objects/camera.gd
@@ -1,25 +1,61 @@
extends Camera2D
-onready var player = get_parent().get_node("Player")
-onready var last_sector = Game.get_sector(player.position)
+onready var player = get_tree().get_nodes_in_group("player").front()
+onready var last_sector = Game.get_sector(player.global_position + Vector2(0.0, -5.0))
+onready var off_level_indicator = $OffLevelIndicator
+onready var msx_off_level_indicator = $MsxOffLevelIndicator
#Scroll direction
export var scroll_h = true
export var scroll_v = false
export var respawn_h = true
+var msx = null
+var msx_exists = false
func _ready():
set_as_toplevel(true)
Game.current_sector = last_sector
+ yield(get_tree(), "idle_frame")
+ if get_tree().get_nodes_in_group("msx").size() > 0:
+ msx = get_tree().get_nodes_in_group("msx").pop_front()
+ msx_exists = true
func _process(delta):
- var current_sector = Game.get_sector(player.position)
- if scroll_h && current_sector.x != last_sector.x:
- position.x = current_sector.x * Game.resolution.x
- if respawn_h:
- var offset = Vector2(8.0 * sign(current_sector.x - last_sector.x), 0.0)
- Game.respawn_point = player.global_position
- last_sector.x = current_sector.x
- if scroll_v && current_sector.y != last_sector.y:
- position.y = current_sector.y * Game.resolution.y
- last_sector.y = current_sector.y
- Game.current_sector = last_sector
+ # use pop_front() instead of [0] so that will not crash without player
+ if not is_instance_valid(player):
+ player = get_tree().get_nodes_in_group("player").pop_front()
+ else:
+ var current_sector = Game.get_sector(player.global_position + Vector2(0.0, -5.0))
+ if scroll_h && current_sector.x != last_sector.x:
+ position.x = current_sector.x * Game.RESOLUTION.x
+ if respawn_h:
+ # TODO: decide whether to use offset with horizontal respawn
+# var offset = Vector2(8.0 * sign(current_sector.x - last_sector.x), 0.0)
+ Game.respawn_point = player.global_position
+ last_sector.x = current_sector.x
+ if scroll_v && current_sector.y != last_sector.y:
+ position.y = current_sector.y * Game.RESOLUTION.y
+ last_sector.y = current_sector.y
+ Game.current_sector = last_sector
+ #Off level indicator
+ if player.global_position.y - global_position.y <= 16.0:
+ off_level_indicator.visible = true
+ off_level_indicator.global_position.x = player.global_position.x
+ else:
+ off_level_indicator.visible = false
+ #Ms.X off level indicator
+ if msx_exists:
+ if is_instance_valid(msx) and msx.get_parent().is_free:
+ msx_off_level_indicator.visible = true
+ var msx_sector = Game.get_sector(msx.global_position)
+ if msx_sector == current_sector:
+ msx_off_level_indicator.anims.play("onscreen")
+ if msx_sector < current_sector:
+ msx_off_level_indicator.position.y = msx.global_position.y
+ msx_off_level_indicator.position.x = 16
+ msx_off_level_indicator.anims.play("left")
+ if msx_sector > current_sector:
+ msx_off_level_indicator.position.y = msx.global_position.y
+ msx_off_level_indicator.position.x = 240
+ msx_off_level_indicator.anims.play("right")
+ else:
+ msx_off_level_indicator.visible = false
diff --git a/objects/collectibles/arrow.gd b/objects/collectibles/arrow.gd
index 4a94a12..edca381 100644
--- a/objects/collectibles/arrow.gd
+++ b/objects/collectibles/arrow.gd
@@ -1,11 +1,18 @@
extends Node2D
+
export var value = 1
-func _on_Area2D_area_entered(area):
+
+func _ready() -> void:
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $Sprite.material.set_shader_param("palette", palette)
+
+
+func _on_Area2D_body_entered(body: Node) -> void:
#Collect
- if area.is_in_group("player"):
+ if body.is_in_group("player"):
Game.arrows += value
Game.score += 25
- Game.play_sound(Game.a_arrow,Game.ac_collectible)
+ Audio.play_sound(Audio.a_arrow,Audio.ac_collectible)
queue_free()
diff --git a/objects/collectibles/arrow.tscn b/objects/collectibles/arrow.tscn
index 86eb655..d55c601 100644
--- a/objects/collectibles/arrow.tscn
+++ b/objects/collectibles/arrow.tscn
@@ -1,13 +1,15 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=7 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
[ext_resource path="res://objects/collectibles/arrow.gd" type="Script" id=2]
[ext_resource path="res://graphics/player/arrow.png" type="Texture" id=3]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=4]
[sub_resource type="ShaderMaterial" id=7]
shader = ExtResource( 1 )
shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = true
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 4 )
[sub_resource type="RectangleShape2D" id=6]
extents = Vector2( 4, 4 )
@@ -23,9 +25,11 @@ texture = ExtResource( 3 )
[node name="Area2D" type="Area2D" parent="."]
visible = false
+collision_layer = 0
+collision_mask = 128
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
position = Vector2( 4, 4 )
shape = SubResource( 6 )
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
+[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
diff --git a/objects/collectibles/gold.gd b/objects/collectibles/gold.gd
deleted file mode 100644
index e1a1c8b..0000000
--- a/objects/collectibles/gold.gd
+++ /dev/null
@@ -1,15 +0,0 @@
-extends Node2D
-
-export var value = 1
-
-func _ready():
- #Sync all coinframes
- $AnimatedSprite.play()
-
-func _on_Area2D_area_entered(area):
- #Collect
- if area.is_in_group("player"):
- Game.golds += value
- Game.score += 5
- Game.play_sound(Game.a_gold,Game.ac_collectible)
- queue_free()
diff --git a/objects/collectibles/gold.tscn b/objects/collectibles/gold.tscn
deleted file mode 100644
index eafd580..0000000
--- a/objects/collectibles/gold.tscn
+++ /dev/null
@@ -1,54 +0,0 @@
-[gd_scene load_steps=11 format=2]
-
-[ext_resource path="res://objects/collectibles/gold.gd" type="Script" id=1]
-[ext_resource path="res://scripts/recolor_border.shader" type="Shader" id=2]
-[ext_resource path="res://graphics/collectibles/coin.png" type="Texture" id=3]
-[ext_resource path="res://graphics/collectibles/pal_penny.png" type="Texture" id=4]
-
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 2 )
-shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = false
-shader_param/palette = ExtResource( 4 )
-
-[sub_resource type="AtlasTexture" id=2]
-atlas = ExtResource( 3 )
-region = Rect2( 0, 0, 8, 8 )
-
-[sub_resource type="AtlasTexture" id=3]
-atlas = ExtResource( 3 )
-region = Rect2( 8, 0, 8, 8 )
-
-[sub_resource type="AtlasTexture" id=4]
-atlas = ExtResource( 3 )
-region = Rect2( 16, 0, 8, 8 )
-
-[sub_resource type="SpriteFrames" id=5]
-animations = [ {
-"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 3 ) ],
-"loop": true,
-"name": "default",
-"speed": 7.0
-} ]
-
-[sub_resource type="RectangleShape2D" id=6]
-extents = Vector2( 4, 4 )
-
-[node name="Gold" type="Node2D" groups=["gold"]]
-script = ExtResource( 1 )
-
-[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
-material = SubResource( 1 )
-frames = SubResource( 5 )
-frame = 2
-playing = true
-centered = false
-
-[node name="Area2D" type="Area2D" parent="."]
-visible = false
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
-position = Vector2( 4, 4 )
-shape = SubResource( 6 )
-
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
diff --git a/objects/collectibles/key.gd b/objects/collectibles/key.gd
new file mode 100644
index 0000000..e4ad5e1
--- /dev/null
+++ b/objects/collectibles/key.gd
@@ -0,0 +1,32 @@
+extends Node2D
+
+const SEMITONE := 1.05946
+const TIMEOUT := 1000
+const MAX_PITCH := 2.0
+
+const STATIC = {
+ pitch = -1.0,
+ timeout = -1,
+}
+
+
+func _ready():
+ #Sync all coinframes
+ $AnimatedSprite.play()
+
+
+func _on_Area2D_body_entered(body: Node) -> void:
+ #Collect
+ if body.is_in_group("player"):
+ Game.keys += 1
+ Game.score += 5
+ # pitch increase
+ if Time.get_ticks_msec() < STATIC.timeout:
+ STATIC.pitch = min(STATIC.pitch + 1.0, MAX_PITCH)
+ else:
+ STATIC.pitch = -1.0
+ STATIC.timeout = Time.get_ticks_msec() + TIMEOUT
+ Audio.play_sound(Audio.a_key,Audio.ac_collectible, pow(SEMITONE, STATIC.pitch))
+ if Game._get_shards() >= 5 && Game.keys == 50:
+ Audio.great_job()
+ queue_free()
diff --git a/objects/collectibles/key.tscn b/objects/collectibles/key.tscn
new file mode 100644
index 0000000..41cc04b
--- /dev/null
+++ b/objects/collectibles/key.tscn
@@ -0,0 +1,109 @@
+[gd_scene load_steps=20 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/collectibles/key.png" type="Texture" id=2]
+[ext_resource path="res://graphics/collectibles/30385.png" type="Texture" id=3]
+[ext_resource path="res://objects/collectibles/key.gd" type="Script" id=4]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=5]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=6]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 10, 10 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 3 )
+region = Rect2( 10, 0, 10, 10 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 3 )
+region = Rect2( 20, 0, 10, 10 )
+
+[sub_resource type="AtlasTexture" id=8]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 8, 9 )
+
+[sub_resource type="AtlasTexture" id=9]
+atlas = ExtResource( 2 )
+region = Rect2( 8, 0, 8, 9 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 2 )
+region = Rect2( 16, 0, 8, 9 )
+
+[sub_resource type="AtlasTexture" id=11]
+atlas = ExtResource( 2 )
+region = Rect2( 24, 0, 8, 9 )
+
+[sub_resource type="AtlasTexture" id=12]
+atlas = ExtResource( 2 )
+region = Rect2( 32, 0, 8, 9 )
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 2 )
+region = Rect2( 40, 0, 8, 9 )
+
+[sub_resource type="SpriteFrames" id=5]
+animations = [ {
+"frames": [ SubResource( 14 ), SubResource( 15 ), SubResource( 16 ) ],
+"loop": true,
+"name": "30385",
+"speed": 5.0
+}, {
+"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 11 ), SubResource( 13 ), SubResource( 9 ) ],
+"loop": true,
+"name": "key",
+"speed": 7.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 4, 4 )
+
+[sub_resource type="Curve" id=17]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[node name="Key" type="Node2D" groups=["gold"]]
+pause_mode = 2
+script = ExtResource( 4 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+material = SubResource( 7 )
+position = Vector2( 0, -1 )
+frames = SubResource( 5 )
+animation = "key"
+playing = true
+centered = false
+
+[node name="Area2D" type="Area2D" parent="."]
+visible = false
+collision_layer = 0
+collision_mask = 128
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2( 4, 4 )
+shape = SubResource( 6 )
+
+[node name="Sparkles" type="CPUParticles2D" parent="."]
+light_mask = 0
+position = Vector2( 4.5, 4 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 5 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 17 )
+color = Color( 0.996078, 1, 0.760784, 1 )
+script = ExtResource( 6 )
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
diff --git a/objects/collectibles/shard.gd b/objects/collectibles/shard.gd
index 542b439..cdf963d 100644
--- a/objects/collectibles/shard.gd
+++ b/objects/collectibles/shard.gd
@@ -1,18 +1,22 @@
extends Node2D
-export var value = 1
+signal collected(shard_number)
+
export var number = 0 #Used for saving which specific shards collected
func _ready():
+ var hud = get_tree().get_nodes_in_group("hud").pop_back()
+ if hud != null:
+ connect("collected",hud,"shard_popup")
$AnimationPlayer.play("glow")
-func _on_Area2D_area_entered(area):
+func _on_Area2D_body_entered(body):
#Collect
- if area.is_in_group("player"):
- Game.ac_music.stream_paused = true
- Game.play_sound(Game.a_shard,Game.ac_collectible)
- Game.ac_collectible.connect("finished", Game.ac_music, "set_stream_paused", [false])
+ if body.is_in_group("player"):
+ emit_signal("collected",number)
+ Audio.play_shard_sound()
Game.score += 500
- Game.shards += value
Game.shards_collected[number] = true
+ if Game._get_shards() >= 5 && Game.keys == 50:
+ Audio.great_job()
queue_free()
diff --git a/objects/collectibles/shard.tscn b/objects/collectibles/shard.tscn
index 4324ea3..6550926 100644
--- a/objects/collectibles/shard.tscn
+++ b/objects/collectibles/shard.tscn
@@ -1,8 +1,10 @@
-[gd_scene load_steps=7 format=2]
+[gd_scene load_steps=11 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=2]
[ext_resource path="res://objects/collectibles/shard.gd" type="Script" id=3]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=4]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=5]
[sub_resource type="ShaderMaterial" id=7]
shader = ExtResource( 1 )
@@ -10,7 +12,22 @@ shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = false
[sub_resource type="RectangleShape2D" id=6]
-extents = Vector2( 5.5, 5.5 )
+extents = Vector2( 3.5, 3.5 )
+
+[sub_resource type="Animation" id=18]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
[sub_resource type="Animation" id=8]
resource_name = "glow"
@@ -26,25 +43,50 @@ tracks/0/keys = {
"times": PoolRealArray( 0, 0.4, 0.8 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
-"values": [ Color( 0.329412, 0.360784, 0.847059, 1 ), Color( 1, 1, 1, 1 ), Color( 0.329412, 0.360784, 0.847059, 1 ) ]
+"values": [ Color( 0.766, 0.73, 1, 1 ), Color( 1.1, 1.1, 1.1, 1 ), Color( 0.766, 0.73, 1, 1 ) ]
}
+[sub_resource type="Curve" id=17]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
[node name="Shard" type="Node2D"]
+pause_mode = 2
script = ExtResource( 3 )
[node name="Sprite" type="Sprite" parent="."]
-modulate = Color( 0.861621, 0.868095, 0.96844, 1 )
+light_mask = 0
material = SubResource( 7 )
position = Vector2( 5, 3 )
texture = ExtResource( 2 )
[node name="Area2D" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 128
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+visible = false
position = Vector2( 4.5, 2.5 )
shape = SubResource( 6 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 18 )
anims/glow = SubResource( 8 )
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
+[node name="Sparkles" type="CPUParticles2D" parent="."]
+light_mask = 0
+position = Vector2( 4.5, 2.5 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 4 )
+emission_shape = 2
+emission_rect_extents = Vector2( 5, 5 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 17 )
+color = Color( 0.72549, 0.956863, 1, 1 )
+script = ExtResource( 5 )
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
diff --git a/objects/collectibles/star.gd b/objects/collectibles/star.gd
index c562c13..322d6fe 100644
--- a/objects/collectibles/star.gd
+++ b/objects/collectibles/star.gd
@@ -1,35 +1,44 @@
+tool
extends Node2D
-export(int, "Red", "Yellow","Green","Blue","Magenta") var color
+enum StarColor {RED, YELLOW, GREEN, BLUE, MAGENTA}
+
+const COLORS = [
+ preload("res://graphics/collectibles/pal_star_red.png"),
+ preload("res://graphics/collectibles/pal_star_yellow.png"),
+ preload("res://graphics/collectibles/pal_star_green.png"),
+ preload("res://graphics/collectibles/pal_star_blue.png"),
+ preload("res://graphics/collectibles/pal_star_magenta.png")
+]
+
+export(StarColor) var color setget _set_color
export var value = 1
+export (Array, Color) var particle_colors := []
onready var sprite = $AnimatedSprite
func _ready():
#Sync all coinframes
sprite.play()
#Change color
- match color:
- 0:
- sprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_red.png"))
- 1:
- sprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_yellow.png"))
- 2:
- sprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_green.png"))
- 3:
- sprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_blue.png"))
- 4:
- sprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_magenta.png"))
-
-func _on_Area2D_area_entered(area):
+ _set_color(color)
+
+func _set_color(new_color):
+ color = new_color
+ if is_inside_tree():
+ sprite.material.set_shader_param("palette", COLORS[color])
+ $Sparkles.color = particle_colors[color]
+
+func _on_Area2D_body_entered(body):
#Collect
- if area.is_in_group("player"):
- Game.play_sound(Game.a_star,Game.ac_collectible)
+ if body.is_in_group("player"):
+ Audio.play_sound(Audio.a_star,Audio.ac_collectible)
Game.score += 100
- Game.stars[color] = true
+ Game.stars_collected[color] = true
#5 Star reward
- if Game.stars[0] && Game.stars[1] && Game.stars[2] && Game.stars[3] && Game.stars[4]:
- Game.play_sound(Game.a_shard,Game.ac_collectible)
- Game.shards += 1
+ if Game.stars == 5:
+ Audio.play_shard_sound()
Game.shards_collected[4] = true
+ if Game._get_shards() >= 5 && Game.keys == 50:
+ Audio.great_job()
Game.score += 500
queue_free()
diff --git a/objects/collectibles/star.tscn b/objects/collectibles/star.tscn
index 50925dc..625ed61 100644
--- a/objects/collectibles/star.tscn
+++ b/objects/collectibles/star.tscn
@@ -1,9 +1,11 @@
-[gd_scene load_steps=14 format=2]
+[gd_scene load_steps=17 format=2]
[ext_resource path="res://graphics/collectibles/pal_star_red.png" type="Texture" id=1]
-[ext_resource path="res://scripts/recolor_border.shader" type="Shader" id=2]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=2]
[ext_resource path="res://objects/collectibles/star.gd" type="Script" id=3]
[ext_resource path="res://graphics/collectibles/star.png" type="Texture" id=4]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=5]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=6]
[sub_resource type="ShaderMaterial" id=10]
resource_local_to_scene = true
@@ -47,22 +49,47 @@ animations = [ {
[sub_resource type="RectangleShape2D" id=9]
extents = Vector2( 4, 4 )
+[sub_resource type="Curve" id=17]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
[node name="Star" type="Node2D"]
+pause_mode = 2
script = ExtResource( 3 )
+particle_colors = [ Color( 1, 0.741176, 0.709804, 1 ), Color( 1, 0.968627, 0.709804, 1 ), Color( 0.709804, 1, 0.74902, 1 ), Color( 0.709804, 0.752941, 1, 1 ), Color( 1, 0.709804, 0.984314, 1 ) ]
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+light_mask = 0
material = SubResource( 10 )
position = Vector2( -1, -3 )
frames = SubResource( 8 )
-frame = 2
+frame = 1
playing = true
centered = false
[node name="Area2D" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 128
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
visible = false
position = Vector2( 4, 4 )
shape = SubResource( 9 )
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
+[node name="Sparkles" type="CPUParticles2D" parent="."]
+light_mask = 0
+position = Vector2( 4.5, 4 )
+amount = 1
+lifetime = 2.0
+texture = ExtResource( 5 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 17 )
+color = Color( 1, 0.741176, 0.709804, 1 )
+script = ExtResource( 6 )
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
diff --git a/objects/debug.tscn b/objects/debug.tscn
deleted file mode 100644
index 485a4b2..0000000
--- a/objects/debug.tscn
+++ /dev/null
@@ -1,36 +0,0 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://scripts/debug.gd" type="Script" id=1]
-
-[sub_resource type="InputEventAction" id=4]
-action = "toggle_console"
-
-[sub_resource type="ShortCut" id=3]
-shortcut = SubResource( 4 )
-
-[node name="Debug" type="CanvasLayer"]
-layer = 128
-script = ExtResource( 1 )
-
-[node name="Console" type="Label" parent="."]
-anchor_right = 1.0
-size_flags_vertical = 2
-
-[node name="Panel" type="Panel" parent="Console"]
-show_behind_parent = true
-anchor_right = 1.0
-anchor_bottom = 1.0
-
-[node name="VisibleToggle" type="CheckBox" parent="."]
-visible = false
-anchor_left = 1.0
-anchor_right = 1.0
-margin_left = -22.0
-margin_top = 173.0
-margin_right = 57.0
-margin_bottom = 197.0
-pressed = true
-shortcut = SubResource( 3 )
-text = "Console"
-
-[connection signal="toggled" from="VisibleToggle" to="." method="_on_visible_toggled"]
diff --git a/objects/delayed_instance.gd b/objects/delayed_instance.gd
new file mode 100644
index 0000000..74570a9
--- /dev/null
+++ b/objects/delayed_instance.gd
@@ -0,0 +1,23 @@
+extends Node
+
+export var delay = 0.0
+export var autostart = false
+
+var children = []
+
+func _enter_tree():
+ for child in get_children():
+ children.append(child)
+ remove_child(child)
+
+func _ready():
+ if autostart:
+ start()
+
+func start():
+ get_tree().create_timer(delay, false).connect("timeout", self, "_instance_children")
+
+func _instance_children():
+ var parent = get_parent()
+ for child in children:
+ parent.add_child(child)
diff --git a/objects/delayed_instance.tscn b/objects/delayed_instance.tscn
new file mode 100644
index 0000000..25be013
--- /dev/null
+++ b/objects/delayed_instance.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://objects/delayed_instance.gd" type="Script" id=1]
+
+[node name="DelayedInstance" type="Node"]
+script = ExtResource( 1 )
diff --git a/objects/enemy/2083_bullet.gd b/objects/enemy/2083_bullet.gd
new file mode 100644
index 0000000..c5ecdc0
--- /dev/null
+++ b/objects/enemy/2083_bullet.gd
@@ -0,0 +1,22 @@
+extends Area2D
+
+const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.tscn")
+
+export var direction: Vector2 = Vector2.LEFT
+export var speed: float = 50.0
+export var damage: float = 0.0
+onready var sprite = $AnimatedSprite
+var lifetime = 0
+
+func _physics_process(delta: float) -> void:
+ position += direction * speed * delta
+ lifetime += 1
+ if lifetime < 10:
+ var r = rand_range(0,5)
+ sprite.position.y += sin(Game.time * 20)
+
+func _exit_tree() -> void:
+ var explosion = SmallExplosion.instance()
+ explosion.quiet = true
+ explosion.position = position
+ get_parent().add_child(explosion)
diff --git a/objects/enemy/2083_bullet.tscn b/objects/enemy/2083_bullet.tscn
new file mode 100644
index 0000000..29c3750
--- /dev/null
+++ b/objects/enemy/2083_bullet.tscn
@@ -0,0 +1,41 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/enemy/stg_bullet.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/2083_bullet.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 3, 3 )
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 6, 6 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 6, 0, 6, 6 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 1 )
+region = Rect2( 12, 0, 6, 6 )
+
+[sub_resource type="SpriteFrames" id=4]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ) ],
+"loop": true,
+"name": "default",
+"speed": 15.0
+} ]
+
+[node name="2083Bullet" type="Area2D" groups=["hurt_famira"]]
+collision_layer = 128
+collision_mask = 128
+monitoring = false
+script = ExtResource( 2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 5 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+frames = SubResource( 4 )
+frame = 2
+playing = true
diff --git a/objects/enemy/2600_bullet.gd b/objects/enemy/2600_bullet.gd
new file mode 100644
index 0000000..f282180
--- /dev/null
+++ b/objects/enemy/2600_bullet.gd
@@ -0,0 +1,7 @@
+extends "res://objects/enemy/enemy.gd"
+
+export var direction: Vector2 = Vector2.LEFT
+export var speed: float = 50
+
+func _physics_process(delta):
+ position += direction * speed * delta
diff --git a/objects/enemy/2600_bullet.tscn b/objects/enemy/2600_bullet.tscn
new file mode 100644
index 0000000..de18a9c
--- /dev/null
+++ b/objects/enemy/2600_bullet.tscn
@@ -0,0 +1,42 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/enemy/stg_bullet.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/2600_bullet.gd" type="Script" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 6, 6 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 6, 0, 6, 6 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 1 )
+region = Rect2( 12, 0, 6, 6 )
+
+[sub_resource type="SpriteFrames" id=4]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ) ],
+"loop": true,
+"name": "default",
+"speed": 15.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 3, 3 )
+
+[node name="2600Bullet" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+frames = SubResource( 4 )
+frame = 2
+playing = true
+
+[node name="Hitbox" type="Area2D" parent="." groups=["arrow"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 5 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/antlion.gd b/objects/enemy/antlion.gd
new file mode 100644
index 0000000..29f51cd
--- /dev/null
+++ b/objects/enemy/antlion.gd
@@ -0,0 +1,11 @@
+extends "res://objects/enemy/enemy.gd"
+
+onready var raycast = $Rotation/RayCast2D
+onready var anims = $AnimationPlayer
+
+func _on_Sight_area_entered(area):
+ if area.is_in_group("player_hitbox"):
+ anims.play("lunge")
+
+func _on_AnimationPlayer_animation_finished(anim_name):
+ if anim_name == "lunge": anims.play("spin")
diff --git a/objects/enemy/antlion.tscn b/objects/enemy/antlion.tscn
new file mode 100644
index 0000000..ee7095d
--- /dev/null
+++ b/objects/enemy/antlion.tscn
@@ -0,0 +1,163 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://graphics/enemy/antlion.png" type="Texture" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://objects/enemy/antlion.gd" type="Script" id=3]
+[ext_resource path="res://graphics/enemy/antlion_body.png" type="Texture" id=4]
+
+[sub_resource type="Animation" id=7]
+resource_name = "lunge"
+length = 1.1
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hitbox:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.3, 0.7, 1.1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, -72 ), Vector2( 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Head:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Vector2( 0, 0 ), Vector2( 0, -9 ), Vector2( 0, -18 ), Vector2( 0, -27 ), Vector2( 0, -36 ), Vector2( 0, -45 ), Vector2( 0, -54 ), Vector2( 0, -63 ), Vector2( 0, -72 ), Vector2( 0, -63 ), Vector2( 0, -54 ), Vector2( 0, -45 ), Vector2( 0, -36 ), Vector2( 0, -27 ), Vector2( 0, -18 ), Vector2( 0, -9 ), Vector2( 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Head/Body:region_rect")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Rect2( 0, 0, 10, 0 ), Rect2( 0, 0, 10, 9 ), Rect2( 0, 0, 10, 18 ), Rect2( 0, 0, 10, 27 ), Rect2( 0, 0, 10, 36 ), Rect2( 0, 0, 10, 45 ), Rect2( 0, 0, 10, 54 ), Rect2( 0, 0, 10, 63 ), Rect2( 0, 0, 10, 72 ), Rect2( 0, 0, 10, 63 ), Rect2( 0, 0, 10, 54 ), Rect2( 0, 0, 10, 45 ), Rect2( 0, 0, 10, 36 ), Rect2( 0, 0, 10, 27 ), Rect2( 0, 0, 10, 18 ), Rect2( 0, 0, 10, 9 ), Rect2( 0, 0, 10, 0 ) ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "spin"
+length = 0.8
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Head:region_rect")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Head:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0.0, -45.0, 0.0, -45.0, 0.0, -45.0, 0.0, -45.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Head:offset")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Vector2( 0, -4 ), Vector2( 3, -4 ), Vector2( 0, -4 ), Vector2( 3, -4 ), Vector2( 0, -4 ), Vector2( 3, -4 ), Vector2( 0, -4 ), Vector2( 3, -4 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Head/Body:region_rect")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Rect2( 0, 0, 10, 0 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath(".:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0.0, 45.0, 90.0, 135.0, 180.0, 225.0, 270.0, 315.0 ]
+}
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 4, 8 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 4, 32 )
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[node name="Antlion" type="Node2D"]
+script = ExtResource( 3 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "spin"
+anims/lunge = SubResource( 7 )
+anims/spin = SubResource( 5 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0, -4 )
+shape = SubResource( 6 )
+
+[node name="Sight" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Sight"]
+position = Vector2( 0, -36 )
+shape = SubResource( 8 )
+
+[node name="Head" type="Sprite" parent="."]
+material = SubResource( 1 )
+scale = Vector2( 1, 1 )
+texture = ExtResource( 1 )
+offset = Vector2( 0, -4 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 20, 20 )
+
+[node name="Body" type="Sprite" parent="Head"]
+visible = false
+position = Vector2( -5, 4 )
+texture = ExtResource( 4 )
+centered = false
+region_enabled = true
+region_rect = Rect2( 0, 0, 10, 0 )
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="area_entered" from="Sight" to="." method="_on_Sight_area_entered"]
diff --git a/objects/enemy/artificial_soul.gd b/objects/enemy/artificial_soul.gd
new file mode 100644
index 0000000..e6c2fe2
--- /dev/null
+++ b/objects/enemy/artificial_soul.gd
@@ -0,0 +1,38 @@
+tool
+extends "res://objects/enemy/enemy.gd"
+
+## radius in tiles the ghost orbits around
+export var radius: float = 0.0
+## initital rotation offset in 8th circles
+export var initial_angle: float = 0.0
+## speed the ghost revolves in 8th cycles / second
+export var speed: float = 0.0
+
+onready var pivot: Node2D = $Pivot
+onready var remote_transform: RemoteTransform2D = $Pivot/RemoteTransform
+
+func _ready() -> void:
+ pivot.rotation = initial_angle * 0.785398 # TAU / 8.0
+ remote_transform.position.x = radius * 8.0
+ if Engine.editor_hint:
+ return
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
+
+func _physics_process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+ # update radius
+ remote_transform.position.x = radius * 8.0
+ # process rotation
+ pivot.rotation += speed * delta * 0.785398 # TAU / 8.0
+
+func _process(delta: float) -> void:
+ if Engine.editor_hint and Engine.get_frames_drawn() % 10 == 0:
+ get_node("Pivot").rotation = initial_angle * 0.785398 # TAU / 8.0
+ get_node("Pivot/RemoteTransform").position.x = radius * 8.0
+ update()
+
+func _draw() -> void:
+ if Engine.editor_hint:
+ draw_arc(Vector2(4.0, 4.0), radius * 8.0, 0.0, TAU, 17, Color(0.0, 1.0, 1.0, 0.1), 1.5)
diff --git a/objects/enemy/artificial_soul.tscn b/objects/enemy/artificial_soul.tscn
new file mode 100644
index 0000000..b7592c4
--- /dev/null
+++ b/objects/enemy/artificial_soul.tscn
@@ -0,0 +1,73 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://graphics/enemy/tin_eye.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/artificial_soul.gd" type="Script" id=2]
+[ext_resource path="res://graphics/enemy/artificial_soul.png" type="Texture" id=3]
+
+[sub_resource type="Animation" id=2]
+resource_name = "eye hue"
+loop = true
+step = 0.125
+tracks/0/type = "value"
+tracks/0/path = NodePath("Eye:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.560784, 1, 0.560784, 1 ), Color( 1, 0.560784, 0.568627, 1 ), Color( 0.560784, 1, 0.560784, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath(".:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 360.0, -90.0, -180.0, -270.0, -360.0, -90.0, -180.0, -270.0, -360.0 ]
+}
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 2, 2 )
+
+[node name="ArtificialSoul" type="Node2D" groups=["enemy"]]
+script = ExtResource( 2 )
+radius = 4.0
+speed = 2.0
+
+[node name="Hitbox" type="Area2D" parent="."]
+position = Vector2( 36, 4 )
+
+[node name="Sprite" type="Sprite" parent="Hitbox"]
+unique_name_in_owner = true
+rotation = 6.28319
+texture = ExtResource( 3 )
+
+[node name="Eye" type="Sprite" parent="Hitbox/Sprite"]
+modulate = Color( 0.560784, 1, 0.560784, 1 )
+position = Vector2( 1, 0 )
+texture = ExtResource( 1 )
+
+[node name="EyeAnim" type="AnimationPlayer" parent="Hitbox/Sprite"]
+autoplay = "eye hue"
+"anims/eye hue" = SubResource( 2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 1 )
+
+[node name="Pivot" type="Node2D" parent="."]
+position = Vector2( 4, 4 )
+
+[node name="RemoteTransform" type="RemoteTransform2D" parent="Pivot"]
+position = Vector2( 32, 0 )
+remote_path = NodePath("../../Hitbox")
+update_rotation = false
+update_scale = false
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/bat.tscn b/objects/enemy/bat.tscn
index 2a7bdec..6361873 100644
--- a/objects/enemy/bat.tscn
+++ b/objects/enemy/bat.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=9 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
[ext_resource path="res://graphics/enemy/bat.png" type="Texture" id=2]
[ext_resource path="res://objects/enemy/enemy_move_sidesideupdown.gd" type="Script" id=3]
@@ -33,7 +33,6 @@ script = ExtResource( 3 )
score_for_killing = 25
speed = 40
move_direction = 1
-flip_sprite = false
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
material = SubResource( 1 )
diff --git a/objects/enemy/boss/2600.gd b/objects/enemy/boss/2600.gd
new file mode 100644
index 0000000..58c2483
--- /dev/null
+++ b/objects/enemy/boss/2600.gd
@@ -0,0 +1,86 @@
+extends "res://objects/enemy/enemy.gd"
+
+signal entered_phase(phase)
+
+const Bullet = preload("res://objects/enemy/2600_bullet.tscn")
+const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.tscn")
+const IntelliHead = preload("res://objects/enemy/boss/intelli_head.tscn")
+
+export var shot_speed: float = 50
+export var fire_rate: float = 1
+export var can_shoot: bool = false
+export var explosion_rect: Rect2
+export var make_explosions: bool = true
+
+var hp: int = 3
+
+onready var bullet_positions = $"%BulletPositions"
+onready var shoot_timer = $ShootTimer
+onready var anims = $AnimationPlayer
+onready var head_sprite = $"%Head"
+
+
+func _on_ShootTimer_timeout():
+ if can_shoot: shoot()
+
+func shoot():
+ Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_boss)
+ for pos in bullet_positions.get_children():
+ var bullet = Bullet.instance()
+ bullet.global_position = pos.global_position
+ bullet.direction = Vector2.LEFT.rotated(pos.rotation)
+ bullet.speed = shot_speed
+ get_parent().add_child(bullet)
+ shoot_timer.wait_time = fire_rate
+
+func _play_laser_sound(play: bool):
+ if play:
+ Audio.play_sound(Audio.a_rainbow_laser,Audio.ac_boss)
+ else:
+ Audio.ac_boss.playing = false
+
+func _play_charge_sound(play: bool):
+ if play:
+ Audio.play_sound(Audio.a_2600_charge,Audio.ac_boss)
+ else:
+ Audio.ac_boss.playing = false
+
+
+func _spawn_explosions() -> void:
+ var head = IntelliHead.instance()
+ head.global_position = $"%IntelliHeadPos".global_position
+ get_parent().add_child(head)
+ while make_explosions:
+ yield(get_tree().create_timer(randf() * 0.5, false), "timeout")
+ var explosion = SmallExplosion.instance()
+ explosion.position = Vector2(
+ rand_range(explosion_rect.position.x, explosion_rect.end.x),
+ rand_range(explosion_rect.position.y, explosion_rect.end.y)
+ )
+ add_child(explosion)
+
+func die():
+ hp -= 1
+ if hp > 0:
+ anims.play("Beam")
+ match hp:
+ 2:
+ Game.instance_node(preload("res://objects/enemy/boss/collapse_blocks.tscn"),0,0,get_parent())
+ emit_signal("entered_phase", 2)
+ head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_cracked.png")
+ 1:
+ shot_speed = 70
+ $"%GlassShape".queue_free()
+ $"%GlassBreakParticles".emitting = true
+ emit_signal("entered_phase", 3)
+ head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_broken.png")
+ 0:
+ anims.play("die")
+ Audio.play_sound(Audio.a_die, Audio.ac_die)
+ yield(anims, "animation_finished")
+ emit_signal("entered_phase", 4)
+
+
+func _on_animation_finished(anim_name: String) -> void:
+ if anim_name == "Beam":
+ anims.play("stomping")
diff --git a/objects/enemy/boss/2600.tscn b/objects/enemy/boss/2600.tscn
new file mode 100644
index 0000000..eaf3db8
--- /dev/null
+++ b/objects/enemy/boss/2600.tscn
@@ -0,0 +1,1127 @@
+[gd_scene load_steps=37 format=2]
+
+[ext_resource path="res://objects/enemy/boss/2600.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/tailpipes.png" type="Texture" id=2]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam.png" type="Texture" id=4]
+[ext_resource path="res://graphics/npc/intelli_idle.png" type="Texture" id=5]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/head_intact.png" type="Texture" id=6]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_large.png" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_medium.png" type="Texture" id=8]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/leg.png" type="Texture" id=9]
+[ext_resource path="res://scripts/sprite_ext.gd" type="Script" id=10]
+[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=11]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/foot.png" type="Texture" id=12]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam_gradient.png" type="Texture" id=13]
+[ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=14]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=15]
+[ext_resource path="res://graphics/particles/smoke.png" type="Texture" id=16]
+[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=17]
+[ext_resource path="res://graphics/fade_patterns/stg_explosion.png" type="Texture" id=18]
+[ext_resource path="res://graphics/particles/glass_shard.png" type="Texture" id=19]
+
+[sub_resource type="ShaderMaterial" id=11]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 16, 32 )
+shader_param/ammount = Vector2( 0.6, 0.6 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="Curve" id=12]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.130639, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.348684, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 14 )
+shader_param/cycle_speed = 1.0
+shader_param/gradient = ExtResource( 13 )
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 128, 8 )
+
+[sub_resource type="Curve" id=13]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.803571, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Curve" id=21]
+_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.937702, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -25.1918, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 11 )
+shader_param/pixel_scale = 1.0
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 20.5, 15.5 )
+
+[sub_resource type="RectangleShape2D" id=19]
+extents = Vector2( 5.5, 5.5 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 23, 13 )
+
+[sub_resource type="ShaderMaterial" id=20]
+resource_local_to_scene = true
+shader = ExtResource( 17 )
+shader_param/color = Color( 1, 1, 1, 1 )
+shader_param/smooth_mode = true
+shader_param/reverse = true
+shader_param/opacity = 0.0
+
+[sub_resource type="Animation" id=17]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:material:shader_param/reverse")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ExplosionRect:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "explode"
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:modulate")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.833333 ), Color( 1, 1, 1, 0.666667 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.333333 ), Color( 1, 1, 1, 0.166667 ), Color( 1, 1, 1, 0 ) ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "Beam"
+length = 4.0
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:can_shoot")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 3.7 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/1/type = "method"
+tracks/1/path = NodePath(".")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 1.6, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"values": [ {
+"args": [ true ],
+"method": "_play_charge_sound"
+}, {
+"args": [ true ],
+"method": "_play_laser_sound"
+}, {
+"args": [ false ],
+"method": "_play_laser_sound"
+} ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/Beam:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 1.5, 1.6, 3.3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1e-05 ), Vector2( 1, 1e-05 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/Head/InternalBeam:scale")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 1.3, 1.5, 3.3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 1.6, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/Head:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 1.3, 1.6, 3.3, 3.4, 3.7 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 15.0, 15.0, -15.0, -15.0, 0.0 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/Head/BeamChargeParticles:emitting")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 1.1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -25.1199 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 51.0254 ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -26.8344 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -25.1199 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 51.0254 ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -26.8344 ]
+}
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:can_shoot")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle/Head/Beam:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1e-05 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/InternalBeam:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 1 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/Head:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/Head/Beam:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/Head/BeamChargeParticles:emitting")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle:position")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 66, 78 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle/Head/Intelli:visible")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath(".:make_explosions")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Axle:visible")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Hitbox:monitoring")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Hitbox:monitorable")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=15]
+resource_name = "die"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle:position")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ) ]
+}
+tracks/1/type = "method"
+tracks/1/path = NodePath(".")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "_spawn_explosions"
+} ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/Intelli:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:can_shoot")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/4/type = "animation"
+tracks/4/path = NodePath("BigExplosion/ExplosionAnimation")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"clips": PoolStringArray( "explode" ),
+"times": PoolRealArray( 2 )
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath(".:make_explosions")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle:visible")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 2.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hitbox:monitoring")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 2.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hitbox:monitorable")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 2.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[sub_resource type="Animation" id=14]
+resource_name = "stomping"
+length = 5.0
+loop = true
+tracks/0/type = "bezier"
+tracks/0/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"points": PoolRealArray( -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/2/type = "bezier"
+tracks/2/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"points": PoolRealArray( -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/3/type = "bezier"
+tracks/3/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"points": PoolRealArray( -25.1199, -0.25, 0, 0.25, 0, -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/4/type = "bezier"
+tracks/4/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"points": PoolRealArray( 51.0254, -0.25, 0, 0.25, 0, 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/5/type = "bezier"
+tracks/5/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"points": PoolRealArray( -26.8344, -0.25, 0, 0.25, 0, -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[node name="2600" type="Node2D"]
+script = ExtResource( 1 )
+can_shoot = true
+explosion_rect = Rect2( 8, 16, 84, 64 )
+
+[node name="Axle" type="Node2D" parent="."]
+position = Vector2( 66, 78 )
+
+[node name="JointBack" type="Sprite" parent="Axle"]
+modulate = Color( 0.75, 0.75, 0.75, 1 )
+position = Vector2( -10, -4 )
+z_index = -1
+texture = ExtResource( 7 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="LegBack" type="Sprite" parent="Axle/JointBack"]
+show_behind_parent = true
+rotation = -0.468349
+texture = ExtResource( 9 )
+offset = Vector2( 0, 18 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="KneeBack" type="Node2D" parent="Axle/JointBack/LegBack"]
+position = Vector2( 0, 36 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="ShinBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"]
+rotation = 0.890561
+texture = ExtResource( 9 )
+offset = Vector2( 0, 24 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 48 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="FootBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack/ShinBack"]
+position = Vector2( 0.00983047, 47.8521 )
+rotation = -0.438425
+texture = ExtResource( 12 )
+offset = Vector2( -11.6527, 2.61113 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_bone_": true
+}
+rotation_lock = 0.0
+
+[node name="Endpoint" type="Position2D" parent="Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack"]
+position = Vector2( -17, 0 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack"]
+position = Vector2( -8.99999, 5 )
+remote_path = NodePath("../../../../../../../Hitbox/FootShapeBack")
+
+[node name="KneeBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"]
+texture = ExtResource( 8 )
+hframes = 8
+script = ExtResource( 10 )
+fps = 4.0
+rotation_lock = 0.0
+
+[node name="Head" type="Sprite" parent="Axle"]
+unique_name_in_owner = true
+position = Vector2( 0, -4 )
+texture = ExtResource( 6 )
+offset = Vector2( -13, -25 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="End" type="Position2D" parent="Axle/Head"]
+position = Vector2( -20, -28 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/Head"]
+position = Vector2( -18, -10 )
+remote_path = NodePath("../../../Hitbox/HeadShape")
+
+[node name="CannonBG" type="ColorRect" parent="Axle/Head"]
+show_behind_parent = true
+margin_left = -64.0
+margin_top = -18.0
+margin_right = -32.0
+margin_bottom = -2.0
+color = Color( 0.266667, 0.266667, 0.305882, 1 )
+
+[node name="Tailpipes" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 11 )
+position = Vector2( 21, -36 )
+texture = ExtResource( 2 )
+
+[node name="SmokeParticles" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 10, -10 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="SmokeParticles2" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 8, 0 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="SmokeParticles3" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 5, -9 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="Intelli" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+position = Vector2( -37, -32 )
+texture = ExtResource( 5 )
+flip_h = true
+
+[node name="IntelliHeadPos" type="Position2D" parent="Axle/Head/Intelli"]
+unique_name_in_owner = true
+position = Vector2( 0, -4 )
+
+[node name="Beam" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -58, -10 )
+scale = Vector2( 1, 1e-05 )
+texture = ExtResource( 4 )
+offset = Vector2( -128, 0 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 256, 16 )
+
+[node name="Hitbox" type="Area2D" parent="Axle/Head/Beam" groups=["blocks arrow", "enemy_hitbox"]]
+
+[node name="BeamShape" type="CollisionShape2D" parent="Axle/Head/Beam/Hitbox"]
+position = Vector2( -128, 0 )
+shape = SubResource( 6 )
+disabled = true
+
+[node name="InternalBeam" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -33, -10 )
+scale = Vector2( 1e-05, 1 )
+texture = ExtResource( 4 )
+offset = Vector2( -12, 0 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 24, 16 )
+
+[node name="BeamChargeParticles" type="CPUParticles2D" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -62, -10 )
+scale = Vector2( 1, 0.987022 )
+emitting = false
+amount = 12
+lifetime = 1.5
+speed_scale = 3.0
+texture = ExtResource( 15 )
+emission_shape = 3
+emission_points = PoolVector2Array( -32, 0, -28, -12, -28, 12, -24, -16, -24, 16, -30, -8, -30, 8, -32, -4, -32, 4 )
+emission_colors = PoolColorArray( )
+gravity = Vector2( 0, 0 )
+radial_accel = -32.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 0.5
+scale_amount_curve = SubResource( 13 )
+
+[node name="GlassBreakParticles" type="CPUParticles2D" parent="Axle/Head"]
+unique_name_in_owner = true
+position = Vector2( -35, -39 )
+emitting = false
+amount = 24
+lifetime = 3.0
+one_shot = true
+explosiveness = 0.95
+randomness = 0.5
+lifetime_randomness = 0.5
+texture = ExtResource( 19 )
+emission_shape = 2
+emission_rect_extents = Vector2( 16, 12 )
+direction = Vector2( 0, -1 )
+spread = 90.0
+gravity = Vector2( 0, 80 )
+initial_velocity = 80.0
+initial_velocity_random = 0.25
+angular_velocity = 720.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.25
+scale_amount_random = 0.5
+scale_amount_curve = SubResource( 21 )
+
+[node name="JointFront" type="Sprite" parent="Axle"]
+position = Vector2( 11, -4 )
+texture = ExtResource( 7 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="LegFront" type="Sprite" parent="Axle/JointFront"]
+show_behind_parent = true
+rotation = -0.468349
+texture = ExtResource( 9 )
+offset = Vector2( 0, 18 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="ShinFront" type="Sprite" parent="Axle/JointFront/LegFront"]
+material = SubResource( 8 )
+position = Vector2( 3.8147e-06, 36 )
+rotation = 0.890561
+texture = ExtResource( 9 )
+offset = Vector2( 0, 24 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 48 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="FootFront" type="Sprite" parent="Axle/JointFront/LegFront/ShinFront"]
+position = Vector2( 0.00983047, 47.8521 )
+rotation = -0.438425
+texture = ExtResource( 12 )
+offset = Vector2( -11.6527, 2.61113 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_bone_": true
+}
+rotation_lock = 0.0
+
+[node name="Endpoint" type="Position2D" parent="Axle/JointFront/LegFront/ShinFront/FootFront"]
+position = Vector2( -17, 0 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/JointFront/LegFront/ShinFront/FootFront"]
+position = Vector2( -8.99999, 5 )
+remote_path = NodePath("../../../../../../Hitbox/FootShapeFront")
+
+[node name="KneeFront" type="Sprite" parent="Axle/JointFront/LegFront"]
+position = Vector2( 3.8147e-06, 36 )
+texture = ExtResource( 8 )
+hframes = 8
+script = ExtResource( 10 )
+fps = 4.0
+rotation_lock = 0.0
+
+[node name="BulletPositions" type="Node2D" parent="."]
+unique_name_in_owner = true
+position = Vector2( -153, -24 )
+
+[node name="Position1" type="Position2D" parent="BulletPositions"]
+position = Vector2( 152, 80 )
+
+[node name="Position2" type="Position2D" parent="BulletPositions"]
+position = Vector2( 152, 88 )
+rotation = -0.436332
+
+[node name="Position3" type="Position2D" parent="BulletPositions"]
+position = Vector2( 152, 96 )
+rotation = -0.872665
+
+[node name="ShootTimer" type="Timer" parent="."]
+unique_name_in_owner = true
+autostart = true
+
+[node name="WeakSpot" type="Area2D" parent="." groups=["boss_weakspot", "enemy_hitbox"]]
+position = Vector2( 1, 0 )
+
+[node name="GlassShape" type="CollisionShape2D" parent="WeakSpot"]
+unique_name_in_owner = true
+position = Vector2( 26.5, 32.5 )
+shape = SubResource( 1 )
+
+[node name="IntelliShape" type="CollisionShape2D" parent="WeakSpot"]
+position = Vector2( 27.5, 37.5 )
+shape = SubResource( 19 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["blocks_arrow", "enemy_hitbox"]]
+position = Vector2( 1, 0 )
+
+[node name="HeadShape" type="CollisionPolygon2D" parent="Hitbox"]
+position = Vector2( 47, 64 )
+polygon = PoolVector2Array( -1, -48, 25, -48, 37, -36, 47, 8, 39, 17, -42, 17, -47, 6, -47, -6, -42, -17, -1, -17 )
+
+[node name="FootShapeFront" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 63.7333, 154.923 )
+rotation = -0.0162131
+scale = Vector2( 1, 1 )
+shape = SubResource( 3 )
+
+[node name="FootShapeBack" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 42.7333, 154.923 )
+rotation = -0.0162131
+scale = Vector2( 1, 1 )
+shape = SubResource( 3 )
+disabled = true
+
+[node name="BigExplosion" type="CanvasLayer" parent="."]
+layer = 101
+
+[node name="ExplosionRect" type="TextureRect" parent="BigExplosion"]
+material = SubResource( 20 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 18 )
+
+[node name="ExplosionAnimation" type="AnimationPlayer" parent="BigExplosion"]
+anims/RESET = SubResource( 17 )
+anims/explode = SubResource( 18 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "stomping"
+playback_default_blend_time = 0.5
+anims/Beam = SubResource( 4 )
+anims/RESET = SubResource( 5 )
+anims/die = SubResource( 15 )
+anims/stomping = SubResource( 14 )
+
+[connection signal="area_entered" from="Axle/Head/Beam/Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"]
+[connection signal="area_entered" from="WeakSpot" to="." method="_on_WeakSpot_area_entered"]
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"]
diff --git a/objects/enemy/boss/2600_die.tscn b/objects/enemy/boss/2600_die.tscn
new file mode 100644
index 0000000..ebb7cb5
--- /dev/null
+++ b/objects/enemy/boss/2600_die.tscn
@@ -0,0 +1,181 @@
+[gd_scene load_steps=11 format=2]
+
+[ext_resource path="res://scripts/launch_rigid.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/head_broken.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_large.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/leg.png" type="Texture" id=6]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/foot.png" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/tailpipes.png" type="Texture" id=8]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_medium.png" type="Texture" id=10]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 5.98485, 17.9739 )
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 5.78793, 21.068 )
+
+[sub_resource type="CircleShape2D" id=3]
+radius = 12.0
+
+[node name="2600Die" type="Node2D"]
+
+[node name="LegR" type="RigidBody2D" parent="."]
+position = Vector2( 61, 85 )
+rotation = -0.436332
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="LegR"]
+texture = ExtResource( 6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="LegR"]
+position = Vector2( 0.221909, 0.014267 )
+shape = SubResource( 1 )
+
+[node name="LargeBoltR" type="RigidBody2D" parent="."]
+position = Vector2( 56, 74 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="LargeBoltR"]
+position = Vector2( -0.400002, 0.400002 )
+texture = ExtResource( 3 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="LargeBoltR"]
+position = Vector2( -77.4, -73.6 )
+polygon = PoolVector2Array( 86, 60, 68, 60, 61, 73, 68, 88, 86, 88, 93, 75 )
+
+[node name="Leg2R" type="RigidBody2D" parent="."]
+position = Vector2( 61, 128 )
+rotation = 0.418879
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="Leg2R"]
+texture = ExtResource( 6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 42 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Leg2R"]
+position = Vector2( 0, 0.0500336 )
+shape = SubResource( 2 )
+
+[node name="SmallBoltR" type="RigidBody2D" parent="."]
+position = Vector2( 71, 107 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="SmallBoltR"]
+texture = ExtResource( 10 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 24, 24 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="SmallBoltR"]
+shape = SubResource( 3 )
+
+[node name="Head" type="RigidBody2D" parent="."]
+position = Vector2( 46, 46 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Tailpipe" type="Sprite" parent="Head"]
+position = Vector2( 41, -8 )
+texture = ExtResource( 8 )
+
+[node name="Head" type="Sprite" parent="Head"]
+position = Vector2( 7, 3 )
+texture = ExtResource( 2 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Head"]
+polygon = PoolVector2Array( 2, -29, -17, -29, -26, -25, -32, -19, -34, -16, -35, -14, -37, -10, -38, -7, -39, -2, -39, 1, -40, 2, -42, 4, -43, 8, -44, 12, -44, 24, -43, 29, -41, 33, -40, 35, 40, 35, 49, 26, 49, 22, 48, 18, 46, 10, 44, 2, 43, -2, 41, -10, 40, -14, 39, -18, 27, -30, 2, -30 )
+
+[node name="LegL" type="RigidBody2D" parent="."]
+position = Vector2( 82, 85 )
+rotation = -0.436332
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="LegL"]
+texture = ExtResource( 6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="LegL"]
+position = Vector2( 0.221909, 0.014267 )
+shape = SubResource( 1 )
+
+[node name="LargeBoltL" type="RigidBody2D" parent="."]
+position = Vector2( 77, 74 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="LargeBoltL"]
+position = Vector2( -0.400002, 0.400002 )
+texture = ExtResource( 3 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="LargeBoltL"]
+position = Vector2( -77.4, -73.6 )
+polygon = PoolVector2Array( 86, 60, 68, 60, 61, 73, 68, 88, 86, 88, 93, 75 )
+
+[node name="Leg2L" type="RigidBody2D" parent="."]
+position = Vector2( 81, 130 )
+rotation = 0.418879
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="Leg2L"]
+texture = ExtResource( 6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 42 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Leg2L"]
+position = Vector2( 0, 0.0500336 )
+shape = SubResource( 2 )
+
+[node name="SmallBoltL" type="RigidBody2D" parent="."]
+position = Vector2( 92, 107 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="SmallBoltL"]
+texture = ExtResource( 10 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 24, 24 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="SmallBoltL"]
+shape = SubResource( 3 )
+
+[node name="FootR" type="RigidBody2D" parent="."]
+position = Vector2( 39, 152 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="FootR"]
+texture = ExtResource( 7 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="FootR"]
+polygon = PoolVector2Array( -2, -10, -20, 0, -20, 16, 26, 16, 26, -10, 21, -10, 18, -7, 16, -8, 14, -9, 8, -9, 5, -7, 3, -10 )
+
+[node name="FootL" type="RigidBody2D" parent="."]
+position = Vector2( 60, 152 )
+script = ExtResource( 1 )
+impulse_min = 0
+impulse_max = 0
+
+[node name="Sprite" type="Sprite" parent="FootL"]
+texture = ExtResource( 7 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="FootL"]
+polygon = PoolVector2Array( -2, -10, -20, 0, -20, 16, 26, 16, 26, -10, 21, -10, 18, -7, 16, -8, 14, -9, 8, -9, 5, -7, 3, -10 )
diff --git a/objects/enemy/boss/2600_explosion.tscn b/objects/enemy/boss/2600_explosion.tscn
new file mode 100644
index 0000000..1ab0b80
--- /dev/null
+++ b/objects/enemy/boss/2600_explosion.tscn
@@ -0,0 +1,92 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/fade_patterns/stg_explosion.png" type="Texture" id=2]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/color = Color( 1, 1, 1, 1 )
+shader_param/smooth_mode = true
+shader_param/reverse = true
+shader_param/opacity = 0.0
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:material:shader_param/reverse")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ExplosionRect:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "explode"
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:modulate")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.833333 ), Color( 1, 1, 1, 0.666667 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.333333 ), Color( 1, 1, 1, 0.166667 ), Color( 1, 1, 1, 0 ) ]
+}
+
+[node name="2600Explosion" type="CanvasLayer"]
+layer = 101
+
+[node name="ExplosionRect" type="TextureRect" parent="."]
+material = SubResource( 1 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 2 )
+
+[node name="ExplosionAnimation" type="AnimationPlayer" parent="."]
+autoplay = "explode"
+anims/RESET = SubResource( 2 )
+anims/explode = SubResource( 3 )
diff --git a/objects/enemy/boss/2600_small_explosion.gd b/objects/enemy/boss/2600_small_explosion.gd
new file mode 100644
index 0000000..ba072e2
--- /dev/null
+++ b/objects/enemy/boss/2600_small_explosion.gd
@@ -0,0 +1,16 @@
+extends Node2D
+
+var quiet = false
+
+func _ready() -> void:
+ if quiet:
+ Audio.play_sound(Audio.a_explosion,Audio.ac_small_explosion)
+ else:
+ Audio.play_sound(Audio.a_explosion,Audio.ac_die)
+ var sprite: AnimatedSprite = get_child(randi() % get_child_count())
+ sprite.visible = true
+ sprite.play()
+
+
+func _on_animation_finished() -> void:
+ queue_free()
diff --git a/objects/enemy/boss/2600_small_explosion.tscn b/objects/enemy/boss/2600_small_explosion.tscn
new file mode 100644
index 0000000..5e3af58
--- /dev/null
+++ b/objects/enemy/boss/2600_small_explosion.tscn
@@ -0,0 +1,86 @@
+[gd_scene load_steps=18 format=2]
+
+[ext_resource path="res://objects/enemy/boss/2600_small_explosion.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/explosion_small.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/explosion.png" type="Texture" id=3]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 2 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 2 )
+region = Rect2( 32, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 2 )
+region = Rect2( 48, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 2 )
+region = Rect2( 64, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 2 )
+region = Rect2( 80, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=14]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
+"loop": false,
+"name": "explode",
+"speed": 20.0
+} ]
+
+[sub_resource type="AtlasTexture" id=8]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=9]
+atlas = ExtResource( 3 )
+region = Rect2( 64, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 3 )
+region = Rect2( 128, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=11]
+atlas = ExtResource( 3 )
+region = Rect2( 192, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=12]
+atlas = ExtResource( 3 )
+region = Rect2( 256, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 3 )
+region = Rect2( 320, 0, 64, 64 )
+
+[sub_resource type="SpriteFrames" id=15]
+animations = [ {
+"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ) ],
+"loop": false,
+"name": "explode",
+"speed": 10.0
+} ]
+
+[node name="2600Explosion" type="Node2D"]
+z_index = 50
+script = ExtResource( 1 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+visible = false
+frames = SubResource( 14 )
+animation = "explode"
+
+[node name="AnimatedSprite2" type="AnimatedSprite" parent="."]
+visible = false
+frames = SubResource( 15 )
+animation = "explode"
+
+[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_animation_finished"]
+[connection signal="animation_finished" from="AnimatedSprite2" to="." method="_on_animation_finished"]
diff --git a/objects/enemy/boss/collapse_blocks.tscn b/objects/enemy/boss/collapse_blocks.tscn
new file mode 100644
index 0000000..78edf94
--- /dev/null
+++ b/objects/enemy/boss/collapse_blocks.tscn
@@ -0,0 +1,46 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/environment/collapse_block/collapse_block.tscn" type="PackedScene" id=1]
+[ext_resource path="res://audio/sounds/collapse_block_fall.ogg" type="AudioStream" id=2]
+
+[sub_resource type="PhysicsMaterial" id=2]
+bounce = 0.07
+
+[node name="CollapseBlocks" type="Node2D"]
+
+[node name="CollapseBlock" parent="." instance=ExtResource( 1 )]
+position = Vector2( 16, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock2" parent="." instance=ExtResource( 1 )]
+position = Vector2( 24, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock3" parent="." instance=ExtResource( 1 )]
+position = Vector2( 32, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock4" parent="." instance=ExtResource( 1 )]
+position = Vector2( 72, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock5" parent="." instance=ExtResource( 1 )]
+position = Vector2( 64, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock9" parent="." instance=ExtResource( 1 )]
+position = Vector2( 56, 72 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock7" parent="." instance=ExtResource( 1 )]
+position = Vector2( 64, 104 )
+physics_material_override = SubResource( 2 )
+
+[node name="CollapseBlock8" parent="." instance=ExtResource( 1 )]
+position = Vector2( 72, 104 )
+physics_material_override = SubResource( 2 )
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 2 )
+volume_db = -8.0
+autoplay = true
diff --git a/objects/enemy/boss/fami_transform.material b/objects/enemy/boss/fami_transform.material
new file mode 100644
index 0000000..89da501
Binary files /dev/null and b/objects/enemy/boss/fami_transform.material differ
diff --git a/objects/enemy/boss/famira.gd b/objects/enemy/boss/famira.gd
new file mode 100644
index 0000000..7e00812
--- /dev/null
+++ b/objects/enemy/boss/famira.gd
@@ -0,0 +1,153 @@
+extends Node2D
+
+
+signal died()
+signal health_changed(amount)
+
+
+const DeathParticles = preload("res://objects/enemy/death_particles_famira.tscn")
+
+
+export var push_speed: float = 30.0
+export var chase_speed: float = 65.0
+export var breath_dps: float = 14.25
+export var breath_knockback: float = 16.0
+export var punch_damage: float = 5.25
+export var punch_knockback: float = 40.0
+export var hurting: bool = false
+export var hp: float = 100.0
+export var sg2083_beam_dps: float = 10.0
+export var sg2083_path: NodePath
+export var defense: float = 0.45
+export var credits: bool = false
+
+
+onready var animation_player: AnimationPlayer = $"%AnimationPlayer"
+onready var state_chart: StateChart = $StateChart
+onready var in_range_cast: RayCast2D = $InRangeCast
+onready var out_range_cast: RayCast2D = $OutRangeCast
+onready var shoot_range_cast: RayCast2D = $ShootRangeCast
+onready var grumble = $Grumble
+
+func _ready():
+ if credits: animation_player.play("roar")
+
+func _physics_process(delta: float) -> void:
+ if !credits:
+ var sg2083 := get_node(sg2083_path)
+ if sg2083 and sg2083.state == 0:
+ state_chart.set_guard_property("player_dead", true)
+ state_chart.send_event("player_dead")
+ else:
+ state_chart.set_guard_property("player_dead", false)
+ if not out_range_cast.is_colliding():
+ state_chart.send_event("out_of_range")
+ elif in_range_cast.is_colliding():
+ state_chart.send_event("in_range")
+ if fmod(Game.time, 15.0) == 0.0:
+ Audio.play_sound(Audio.a_grumble,Audio.ac_boss)
+
+
+func start_push() -> void:
+ state_chart.send_event("start_push")
+
+
+func stop_push() -> void:
+ state_chart.send_event("stop_push")
+
+
+func hurt(amount: float) -> void:
+ if hp <= 0.0:
+ return
+ hp -= amount * defense
+ hp = max(hp, 0.0)
+ emit_signal("health_changed", hp)
+ if hp <= 0.0:
+ state_chart.send_event("die")
+ emit_signal("died")
+
+
+func _attack() -> void:
+ var sg2083 := get_node(sg2083_path)
+ if sg2083.has_method("hurt"):
+ var r = RandomNumberGenerator.new()
+ r.randomize()
+ var snd = r.randi_range(0,2)
+ match snd:
+ 0:
+ Audio.play_sound(Audio.a_mech_hurt_1,Audio.ac_die)
+ 1:
+ Audio.play_sound(Audio.a_mech_hurt_2,Audio.ac_die)
+ 2:
+ Audio.play_sound(Audio.a_mech_hurt_3,Audio.ac_die)
+ sg2083.hurt(punch_damage)
+ sg2083.knock_back(punch_knockback)
+
+
+func _on_Roar_state_entered() -> void:
+
+ animation_player.play("roar", 0.25)
+
+
+func _roar() -> void:
+ if credits == false:
+ Audio.play_sound(Audio.a_famira, Audio.ac_boss)
+
+
+func _on_Chasing_state_entered() -> void:
+ animation_player.play("chasing", 0.25)
+
+
+func _on_Punching_state_entered() -> void:
+ animation_player.play("punching", 0.25)
+
+
+func _on_PunchCooldown_state_entered() -> void:
+ animation_player.play("RESET", 0.5)
+
+
+func _on_Shooting_state_entered() -> void:
+ animation_player.play("shooting")
+
+
+func _on_PushedBack_state_entered() -> void:
+ animation_player.play("pushed", 0.25)
+
+
+func _on_Dying_state_entered() -> void:
+ Game.save_boss()
+ animation_player.play("die", 0.25)
+ Audio.play_sound(Audio.a_famira_die, Audio.ac_boss)
+ var tween = $Tween
+ tween.interpolate_property(Audio.ac_music, "volume_db",
+ Audio.ac_music.volume_db, -99, 16,
+ Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
+ tween.start()
+
+
+
+func _on_Chasing_state_physics_processing(delta) -> void:
+ position.x -= chase_speed * delta
+
+
+func _on_PushedBack_state_physics_processing(delta) -> void:
+ hurt(sg2083_beam_dps * delta)
+ position.x += push_speed * delta
+
+
+func _on_Shooting_state_physics_processing(delta) -> void:
+ if hurting and shoot_range_cast.is_colliding():
+ var sg2083 := get_node(sg2083_path)
+ if sg2083.has_method("hurt"):
+ var distance := shoot_range_cast.to_local(shoot_range_cast.get_collision_point()).x
+ var weight := inverse_lerp(shoot_range_cast.cast_to.x, 0.0, distance)
+ if !Audio.ac_climb.is_playing() && sg2083.state != sg2083.State.DUCK:
+ Audio.play_sound(Audio.a_critical_heat,Audio.ac_climb)
+ sg2083.hurt(breath_dps * weight * delta, true)
+ sg2083.knock_back(breath_knockback * weight * delta, true)
+
+
+func _on_Hitbox_area_entered(area: Area2D) -> void:
+ if area.is_in_group("hurt_famira"):
+ hurt(area.damage)
+ area.queue_free()
diff --git a/objects/enemy/boss/famira.tscn b/objects/enemy/boss/famira.tscn
new file mode 100644
index 0000000..2a97a65
--- /dev/null
+++ b/objects/enemy/boss/famira.tscn
@@ -0,0 +1,4833 @@
+[gd_scene load_steps=65 format=2]
+
+[ext_resource path="res://objects/enemy/boss/famira.gd" type="Script" id=1]
+[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=2]
+[ext_resource path="res://addons/godot_state_charts/state_chart.gd" type="Script" id=3]
+[ext_resource path="res://addons/godot_state_charts/compound_state.gd" type="Script" id=4]
+[ext_resource path="res://addons/godot_state_charts/atomic_state.gd" type="Script" id=5]
+[ext_resource path="res://addons/godot_state_charts/transition.gd" type="Script" id=6]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/eye.png" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/headlower.png" type="Texture" id=8]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/headupper.png" type="Texture" id=9]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/brain2.png" type="Texture" id=10]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle4.png" type="Texture" id=11]
+[ext_resource path="res://scripts/ball_snake.gd" type="Script" id=12]
+[ext_resource path="res://graphics/enemy/antlion_body.png" type="Texture" id=13]
+[ext_resource path="res://graphics/enemy/tentacle.png" type="Texture" id=14]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=15]
+[ext_resource path="res://graphics/enemy/antlion_body_border.png" type="Texture" id=16]
+[ext_resource path="res://objects/enemy/boss/fami_transform.material" type="Material" id=17]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=18]
+[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=19]
+[ext_resource path="res://graphics/enemy/boss/famira_dissolve.png" type="Texture" id=20]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/leg.png" type="Texture" id=21]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/body.png" type="Texture" id=22]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/head_back.png" type="Texture" id=23]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/head_lower.png" type="Texture" id=24]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/head_upper.png" type="Texture" id=25]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/mouth_tendril.png" type="Texture" id=26]
+[ext_resource path="res://audio/sounds/fami_fire.ogg" type="AudioStream" id=27]
+[ext_resource path="res://graphics/enemy/boss/famira_fire.png" type="Texture" id=28]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/leg_lower.png" type="Texture" id=29]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/hand.png" type="Texture" id=30]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/arm_segment.png" type="Texture" id=31]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/foot.png" type="Texture" id=32]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/arm_segment_border.png" type="Texture" id=33]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/head_upper_glow_mask.png" type="Texture" id=34]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/body_glow_mask.png" type="Texture" id=35]
+[ext_resource path="res://graphics/enemy/boss/fami_parts/head_back_glow_mask.png" type="Texture" id=36]
+[ext_resource path="res://shaders/elecricity_no_blood.tres" type="Shader" id=37]
+
+[sub_resource type="RectangleShape2D" id=11]
+extents = Vector2( 28, 64 )
+
+[sub_resource type="ShaderMaterial" id=18]
+shader = ExtResource( 18 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Curve" id=19]
+_data = [ Vector2( 0, 0 ), 0.0, 12.4999, 0, 0, Vector2( 0.21317, 1 ), 2.06228, 0.0, 0, 0, Vector2( 0.722098, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -7.91544, 0.0, 0, 0 ]
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:initial_velocity")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 230.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/Body/Neck/BreathParticles:lifetime")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2.0 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("..:hurting")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip:scale")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Hip:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath(".:material:shader_param/background_color")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath(".:material:shader_param/arc_color")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath(".:scale")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("../DissolveMask:position")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -63, -322 ) ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("../ShardParticles:position")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -165 ) ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("../ShardParticles:emitting")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("../DissolveParticles:position")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -8 ) ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("../DissolveParticles:emitting")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath("../DissolveParticles:emission_rect_extents")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 24, 0 ) ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "chasing"
+length = 0.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -26.9991, 26.9994 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -35.9992, -7.99675 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 2
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -0.657538, 20.1267, -0.657538, -31.2638 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 2
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -0.657538, -17.623, -0.657538, 23.7159 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -119.87, -80.0395 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=12]
+resource_name = "die"
+length = 11.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -41.0008, -18.9997 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 37.9987, -18.9981 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -109.576 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 28.215 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.5991, -9.59989 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -23.1788 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 38.5195 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 2
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("../DissolveMask:position")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -28, -300 ), Vector2( 58, -84 ) ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath(".:material:shader_param/arc_color")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 2, 8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 1 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath(".:material:shader_param/background_color")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 2, 8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 1 ) ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("../ShardParticles:position")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, -197 ), Vector2( 4, 19 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("../ShardParticles:emitting")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0.2, 7 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("../DissolveParticles:position")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, -197 ), Vector2( 4, 19 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("../DissolveParticles:emitting")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0, 7.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("../DissolveParticles:emission_rect_extents")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0, 1.8, 2.2, 2.8, 3.2, 3.4, 4, 5.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 24, 0 ), Vector2( 24, 0 ), Vector2( 48, 0 ), Vector2( 48, 0 ), Vector2( 16, 0 ), Vector2( 64, 0 ), Vector2( 24, 0 ), Vector2( 16, 0 ) ]
+}
+
+[sub_resource type="Animation" id=17]
+resource_name = "grow"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:initial_velocity")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 230.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/Body/Neck/BreathParticles:lifetime")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2.0 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("..:hurting")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath(".:material:shader_param/background_color")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 2, 3 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath(".:material:shader_param/arc_color")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0, 2, 3 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath(".:scale")
+tracks/18/interp = 2
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1e-05 ), Vector2( 1, 1 ) ]
+}
+tracks/19/type = "method"
+tracks/19/path = NodePath("../StateChart")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 2.9 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "transformed" ],
+"method": "send_event"
+} ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "punching"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.3, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -12.999, -17.0009 ), Vector2( -65.0015, -0.996742 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.5, 0.7, 0.8, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -31.9996, 22.0018 ), Vector2( -14.9986, -8.9978 ), Vector2( -72.9994, 19.0063 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.2, 0.3, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -102.737, -102.737, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.5, 0.7, 0.8, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -119.87, -119.87, -73.1186, -96.9535, -119.87 ]
+}
+tracks/11/type = "method"
+tracks/11/path = NodePath("..")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0.3, 0.8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"values": [ {
+"args": [ ],
+"method": "_attack"
+}, {
+"args": [ ],
+"method": "_attack"
+} ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0.6 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=6]
+resource_name = "pushed"
+length = 0.2
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -11.0004, -12 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -16.001, -9.99852 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -104.392 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -37.6956 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 32.9738 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -21.0393, -8.75184 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -49.0541 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -49.6616 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 2
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 12, 53 ), Vector2( 4, 53 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0.2 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("..:hurting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "roar"
+length = 1.5
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -41.0008, -18.9997 ), Vector2( -41.0008, -18.9997 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( 37.9987, -18.9981 ), Vector2( 37.9987, -18.9981 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -137.823, -109.576, -109.576, -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 28.215, 28.215, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.8929, -8.09683 ), Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -23.1788, -23.1788, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -122.256, 38.5195, 38.5195, -122.256 ]
+}
+tracks/11/type = "method"
+tracks/11/path = NodePath("../StateChart")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 1.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "roar_done" ],
+"method": "send_event"
+} ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0.6 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/14/type = "method"
+tracks/14/path = NodePath("..")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "_roar"
+} ]
+}
+
+[sub_resource type="Animation" id=7]
+resource_name = "shooting"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 89.3425, 112.803, 112.803, 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -51.8512, 24.5478 ), Vector2( -51.8512, 24.5478 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -11.3985, 19.1772 ), Vector2( -11.3985, 19.1772 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -137.823, -139.456, -139.456, -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 22.2965, 22.2965, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 2
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 45.9167, 45.9167, 45.9167, 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -0.657538 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 2
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ), Vector2( -25.8929, -8.09683 ), Vector2( -25.8929, -8.09683 ), Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -109.655, -109.655, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -119.87, -131.542, -131.542, -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/13/type = "method"
+tracks/13/path = NodePath("../StateChart")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 3 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "shoot_done" ],
+"method": "send_event"
+} ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("..:hurting")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 0.6, 2.8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/pixel_scale = 1.0
+
+[sub_resource type="Curve" id=8]
+_data = [ Vector2( 0, 0.5 ), 0.0, 0.890696, 0, 0, Vector2( 0.814474, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -13.2988, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=9]
+offsets = PoolRealArray( 0, 0.163743, 0.432749, 0.596491, 0.853801, 1 )
+colors = PoolColorArray( 0.859375, 1, 0.974457, 1, 0.425781, 0.650085, 1, 1, 0.858946, 0.258824, 0.909804, 1, 0.925781, 0, 0.520752, 1, 0, 0, 0, 1, 0, 0, 0, 1 )
+
+[sub_resource type="Animation" id=20]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 22.2642 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 34.9602 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:initial_velocity")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 230.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/Body/Neck/BreathParticles:lifetime")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2.0 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("..:hurting")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip:scale")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Hip:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath(".:material:shader_param/background_color")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath(".:material:shader_param/arc_color")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath(".:scale")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("../DissolveMask:position")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -63, -322 ) ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("../ShardParticles:position")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -165 ) ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("../ShardParticles:emitting")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("../DissolveParticles:position")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -8 ) ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("../DissolveParticles:emitting")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath("../DissolveParticles:emission_rect_extents")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 24, 0 ) ]
+}
+tracks/27/type = "value"
+tracks/27/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/27/interp = 1
+tracks/27/loop_wrap = true
+tracks/27/imported = false
+tracks/27/enabled = true
+tracks/27/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -35.4461 ]
+}
+tracks/28/type = "value"
+tracks/28/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/28/interp = 1
+tracks/28/loop_wrap = true
+tracks/28/imported = false
+tracks/28/enabled = true
+tracks/28/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -40.649 ]
+}
+tracks/29/type = "value"
+tracks/29/path = NodePath("Hip/LegBack/LegBackLower/FootBack/Sprite:rotation_degrees")
+tracks/29/interp = 1
+tracks/29/loop_wrap = true
+tracks/29/imported = false
+tracks/29/enabled = true
+tracks/29/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 1.7669 ]
+}
+tracks/30/type = "value"
+tracks/30/path = NodePath("Hip/LegFront/LegFrontLower/FootBack/Sprite:rotation_degrees")
+tracks/30/interp = 1
+tracks/30/loop_wrap = true
+tracks/30/imported = false
+tracks/30/enabled = true
+tracks/30/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 7.19214 ]
+}
+tracks/31/type = "value"
+tracks/31/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/31/interp = 1
+tracks/31/loop_wrap = true
+tracks/31/imported = false
+tracks/31/enabled = true
+tracks/31/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 4.12537 ]
+}
+tracks/32/type = "value"
+tracks/32/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/32/interp = 1
+tracks/32/loop_wrap = true
+tracks/32/imported = false
+tracks/32/enabled = true
+tracks/32/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 6.06945 ]
+}
+tracks/33/type = "value"
+tracks/33/path = NodePath("Hip/Body/Neck/NeckSprite/NeckGlow:modulate")
+tracks/33/interp = 1
+tracks/33/loop_wrap = true
+tracks/33/imported = false
+tracks/33/enabled = true
+tracks/33/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ) ]
+}
+tracks/34/type = "value"
+tracks/34/path = NodePath("Hip/Body/BodySprite/BodyGlow:modulate")
+tracks/34/interp = 1
+tracks/34/loop_wrap = true
+tracks/34/imported = false
+tracks/34/enabled = true
+tracks/34/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ) ]
+}
+tracks/35/type = "value"
+tracks/35/path = NodePath("Hip/Body/Neck/Headupper/HeadUpperSprite/HeadGlow:modulate")
+tracks/35/interp = 1
+tracks/35/loop_wrap = true
+tracks/35/imported = false
+tracks/35/enabled = true
+tracks/35/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ) ]
+}
+
+[sub_resource type="Animation" id=21]
+resource_name = "chasing"
+length = 0.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -26.9991, 26.9994 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -35.9992, -7.99675 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 2
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 32.3015, 44.3723, 41.3636, 17.8021 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 2
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 44.6147, 26.0416, 5.78129, 37.7545 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -119.87, -80.0395 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 8, 44 ), Vector2( 8, 38 ), Vector2( 8, 44 ), Vector2( 8, 38 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -63.8771, -45.6187, -53.8034, -71.6519 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -61.1199, -75.5622, -49.6529, -36.7481 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 21.9642, 21.9642, 1.92975, 11.947 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 17.7387, 17.7387, 45.0376, 31.3882 ]
+}
+
+[sub_resource type="Animation" id=22]
+resource_name = "die"
+length = 8.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -41.0008, -18.9997 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 37.9987, -18.9981 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -109.576 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 28.215 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 32.3323 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.3821 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.5991, -9.59989 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -23.1788 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 38.5195 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 2
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ), Vector2( -4, 45 ), Vector2( 4, 45 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("../DissolveMask:position")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -28, -300 ), Vector2( 58, -84 ) ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath(".:material:shader_param/arc_color")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 2, 8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 1 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath(".:material:shader_param/background_color")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 2, 8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 1 ) ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("../ShardParticles:position")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, -197 ), Vector2( 4, 19 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("../ShardParticles:emitting")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0.2, 7 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("../DissolveParticles:position")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0, 8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, -197 ), Vector2( 4, 19 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("../DissolveParticles:emitting")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0, 7.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("../DissolveParticles:emission_rect_extents")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0, 1.8, 2.2, 2.8, 3.2, 3.4, 4, 5.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 24, 0 ), Vector2( 24, 0 ), Vector2( 48, 0 ), Vector2( 48, 0 ), Vector2( 16, 0 ), Vector2( 64, 0 ), Vector2( 24, 0 ), Vector2( 16, 0 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -63.39 ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -63.3081 ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 10.1577 ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 23.868 ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("Hip/Body/BodySprite/BodyGlow:visible")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath("Hip/Body/Neck/NeckSprite/NeckGlow:visible")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/27/type = "value"
+tracks/27/path = NodePath("Hip/Body/Neck/Headupper/HeadUpperSprite/HeadGlow:visible")
+tracks/27/interp = 1
+tracks/27/loop_wrap = true
+tracks/27/imported = false
+tracks/27/enabled = true
+tracks/27/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=23]
+resource_name = "grow"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 22.2642 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 34.9602 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:initial_velocity")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 230.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/Body/Neck/BreathParticles:lifetime")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2.0 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("..:hurting")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath(".:material:shader_param/background_color")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 2, 3 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 0 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath(".:material:shader_param/arc_color")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0, 2, 3 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 0 ) ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath(".:scale")
+tracks/18/interp = 2
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1e-05 ), Vector2( 1, 1 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -35.4461 ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -40.649 ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 6.06945 ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Hip:rotation_degrees")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 4.12537 ]
+}
+
+[sub_resource type="Animation" id=24]
+resource_name = "punching"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2, 0.3, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -12.999, -17.0009 ), Vector2( -65.0015, -0.996742 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.5, 0.7, 0.8, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -31.9996, 22.0018 ), Vector2( -14.9986, -8.9978 ), Vector2( -72.9994, 19.0063 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621, 47.7735, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 22.2642 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 34.9602 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.2, 0.3, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -102.737, -102.737, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.5, 0.7, 0.8, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -119.87, -119.87, -73.1186, -96.9535, -119.87 ]
+}
+tracks/11/type = "method"
+tracks/11/path = NodePath("..")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0.3, 0.8 ),
+"transitions": PoolRealArray( 1, 1 ),
+"values": [ {
+"args": [ ],
+"method": "_attack"
+}, {
+"args": [ ],
+"method": "_attack"
+} ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0.6 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -35.4461 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -40.649 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 5.718 ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 3.9058 ]
+}
+
+[sub_resource type="Animation" id=25]
+resource_name = "pushed"
+length = 0.2
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -11.0004, -12 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -16.001, -9.99852 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -104.392 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 44.8764 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 55.9632 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -21.0393, -8.75184 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -49.0541 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -49.6616 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 2
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 12, 53 ), Vector2( 4, 53 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0.2 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("..:hurting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -86.6408 ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -85.4956 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 28.1131 ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 32.6704 ]
+}
+
+[sub_resource type="Animation" id=26]
+resource_name = "roar"
+length = 1.5
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -41.0008, -18.9997 ), Vector2( -41.0008, -18.9997 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( 37.9987, -18.9981 ), Vector2( 37.9987, -18.9981 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -137.823, -109.576, -109.576, -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 28.215, 28.215, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 22.2642 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 34.9602 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.5991, -9.59989 ), Vector2( -26.129, -5.68796 ), Vector2( -25.8929, -8.09683 ), Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -23.1788, -23.1788, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.1, 1.1, 1.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -122.256, 38.5195, 38.5195, -122.256 ]
+}
+tracks/11/type = "method"
+tracks/11/path = NodePath("../StateChart")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 1.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "roar_done" ],
+"method": "send_event"
+} ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0.6 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/14/type = "method"
+tracks/14/path = NodePath("..")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0.1 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "_roar"
+} ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -35.4461 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -40.649 ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 5.96071 ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 3.82105 ]
+}
+
+[sub_resource type="Animation" id=27]
+resource_name = "shooting"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hip/Body:rotation_degrees")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 89.3425, 112.803, 112.803, 89.3425 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -34, 6 ), Vector2( -51.8512, 24.5478 ), Vector2( -51.8512, 24.5478 ), Vector2( -34, 6 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -31.9996, 22.0018 ), Vector2( -11.3985, 19.1772 ), Vector2( -11.3985, 19.1772 ), Vector2( -31.9996, 22.0018 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -137.823, -139.456, -139.456, -137.823 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 55.2621, 22.2965, 22.2965, 55.2621 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
+tracks/5/interp = 2
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 45.9167, 45.9167, 45.9167, 45.9167 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 22.2642 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 34.9602 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Hip/Body/Neck:position")
+tracks/8/interp = 2
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -25.8929, -8.09683 ), Vector2( -31.8378, -8.41777 ), Vector2( -31.8378, -8.41777 ), Vector2( -25.8929, -8.09683 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
+tracks/9/interp = 2
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -102.737, -109.655, -109.655, -102.737 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
+tracks/10/interp = 2
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -119.87, -131.542, -131.542, -119.87 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Hip:position")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 39 ) ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 0.4, 2.7 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/13/type = "method"
+tracks/13/path = NodePath("../StateChart")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 3 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "shoot_done" ],
+"method": "send_event"
+} ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("..:hurting")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 0.6, 2.8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Hip/LegFront/LegFrontLower:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -35.4461 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Hip/LegBack/LegBackLower:rotation_degrees")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -40.649 ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("../Fire:playing")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0, 0.3, 2.8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Hip/LegBack/LegBackLower/FootBack:rotation_degrees")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 3.82105 ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Hip/LegFront/LegFrontLower/FootBack:rotation_degrees")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 5.96071 ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("Hip/Body/Neck/NeckSprite/NeckGlow:modulate")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0, 0.4, 2.8, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Hip/Body/BodySprite/BodyGlow:modulate")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0, 0.4, 2.8, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Hip/Body/Neck/Headupper/HeadUpperSprite/HeadGlow:modulate")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0, 0.4, 2.8, 3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+
+[sub_resource type="ShaderMaterial" id=28]
+resource_local_to_scene = true
+shader = ExtResource( 37 )
+shader_param/arc_speed = 1.5
+shader_param/arc_fps = 60.0
+shader_param/arc_scale = 8.0
+shader_param/arc_threshold = 0.2
+shader_param/arc_color = Color( 0.345098, 0.74902, 0.878431, 1 )
+shader_param/gamma = 1.0
+shader_param/flash_rate = 3.0
+shader_param/flash_intensity = 0.0
+shader_param/background_color = Color( 0.396078, 1, 1, 1 )
+
+[sub_resource type="CapsuleShape2D" id=13]
+radius = 24.0
+height = 16.0
+
+[sub_resource type="CapsuleShape2D" id=14]
+radius = 17.2705
+height = 33.3754
+
+[sub_resource type="CapsuleShape2D" id=15]
+radius = 16.0
+height = 55.8645
+
+[sub_resource type="CapsuleShape2D" id=16]
+radius = 16.0
+height = 55.8645
+
+[node name="Famira" type="Node2D"]
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_horizontal_guides_": [ -211.0 ],
+"_edit_vertical_guides_": [ ]
+}
+
+[node name="Collision" type="KinematicBody2D" parent="."]
+collision_layer = 4
+collision_mask = 128
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Collision"]
+position = Vector2( 12, -64 )
+shape = SubResource( 11 )
+
+[node name="ShardParticles" type="CPUParticles2D" parent="."]
+material = SubResource( 18 )
+position = Vector2( 4, -165 )
+emitting = false
+amount = 48
+lifetime = 4.0
+local_coords = false
+texture = ExtResource( 19 )
+emission_shape = 2
+emission_rect_extents = Vector2( 16, 0 )
+direction = Vector2( 0, -2 )
+spread = 60.0
+gravity = Vector2( 0, 24 )
+initial_velocity = 250.0
+initial_velocity_random = 0.35
+linear_accel = -30.19
+
+[node name="DissolveParticles" type="CPUParticles2D" parent="."]
+material = ExtResource( 17 )
+position = Vector2( 4, -8 )
+z_index = -20
+emitting = false
+amount = 16
+local_coords = false
+texture = ExtResource( 15 )
+emission_shape = 2
+emission_rect_extents = Vector2( 24, 0 )
+direction = Vector2( 0, -1 )
+gravity = Vector2( 0, 0 )
+initial_velocity = 1.0
+linear_accel = 48.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_curve = SubResource( 19 )
+color = Color( 0.968627, 0.839216, 0.152941, 1 )
+
+[node name="DissolveMask" type="Light2D" parent="."]
+position = Vector2( -63, -322 )
+texture = ExtResource( 20 )
+mode = 3
+range_item_cull_mask = 32
+
+[node name="ChickenMan" type="Node2D" parent="."]
+visible = false
+light_mask = 33
+material = ExtResource( 17 )
+position = Vector2( 0, -96 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="ChickenMan"]
+anims/RESET = SubResource( 2 )
+anims/chasing = SubResource( 4 )
+anims/die = SubResource( 12 )
+anims/grow = SubResource( 17 )
+anims/punching = SubResource( 5 )
+anims/pushed = SubResource( 6 )
+anims/roar = SubResource( 3 )
+anims/shooting = SubResource( 7 )
+
+[node name="Hip" type="Node2D" parent="ChickenMan"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 8, 39 )
+
+[node name="LegBack" type="Sprite" parent="ChickenMan/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -9.49483, 5.9499 )
+rotation = -0.0114762
+scale = Vector2( 2.33905, 2.82204 )
+texture = ExtResource( 11 )
+offset = Vector2( -7.02542, -13.2616 )
+
+[node name="Body" type="Sprite" parent="ChickenMan/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -1, 1 )
+rotation = 1.55932
+scale = Vector2( 2.33213, 2.33905 )
+texture = ExtResource( 9 )
+offset = Vector2( -14.8861, -10.6454 )
+flip_v = true
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body"]
+light_mask = 33
+position = Vector2( -10.255, -0.546865 )
+rotation = -1.57079
+remote_path = NodePath("../../../../Hitbox/Body")
+update_scale = false
+
+[node name="BackArm" type="Node2D" parent="ChickenMan/Hip/Body"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -15.0905, 7.09585 )
+rotation = -1.55929
+scale = Vector2( 0.427524, 0.428792 )
+z_index = -2
+script = ExtResource( 12 )
+texture = ExtResource( 13 )
+segments = 4
+target = NodePath("HandBack")
+
+[node name="HandBack" type="Sprite" parent="ChickenMan/Hip/Body/BackArm"]
+light_mask = 33
+material = SubResource( 1 )
+use_parent_material = true
+position = Vector2( -34, 6 )
+rotation = -1.7931
+texture = ExtResource( 14 )
+offset = Vector2( 0, -6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 16, 12 )
+
+[node name="BackArmBorder" type="Node2D" parent="ChickenMan/Hip/Body/BackArm"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+script = ExtResource( 12 )
+texture = ExtResource( 16 )
+segments = 4
+target = NodePath("../HandBack")
+
+[node name="FrontArm" type="Node2D" parent="ChickenMan/Hip/Body"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -15.3626, -6.5891 )
+rotation = -1.55929
+scale = Vector2( 0.427524, 0.428792 )
+z_index = 2
+script = ExtResource( 12 )
+texture = ExtResource( 13 )
+segments = 4
+target = NodePath("HandFront")
+
+[node name="HandFront" type="Sprite" parent="ChickenMan/Hip/Body/FrontArm"]
+light_mask = 33
+material = SubResource( 1 )
+use_parent_material = true
+position = Vector2( -31.9996, 22.0018 )
+rotation = -2.09213
+texture = ExtResource( 14 )
+offset = Vector2( 0, -6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 16, 12 )
+
+[node name="FrontArmBorder" type="Node2D" parent="ChickenMan/Hip/Body/FrontArm"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+script = ExtResource( 12 )
+texture = ExtResource( 16 )
+segments = 4
+target = NodePath("../HandFront")
+
+[node name="Neck" type="Sprite" parent="ChickenMan/Hip/Body"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+position = Vector2( -25.8929, -8.09683 )
+rotation = -2.40547
+scale = Vector2( 1.3366, 1.4288 )
+z_index = 1
+texture = ExtResource( 10 )
+offset = Vector2( -12.5338, -3.19571 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck"]
+light_mask = 33
+position = Vector2( 7.47667, -8.4856 )
+rotation = -2.96856
+remote_path = NodePath("../../../../../Hitbox/Brain")
+update_scale = false
+
+[node name="BreathParticles" type="CPUParticles2D" parent="ChickenMan/Hip/Body/Neck"]
+light_mask = 33
+position = Vector2( 2.97876, -8.17331 )
+rotation = 0.437951
+scale = Vector2( 0.724233, 0.497597 )
+z_index = -1
+emitting = false
+amount = 80
+lifetime = 2.0
+lifetime_randomness = 0.5
+local_coords = false
+draw_order = 1
+texture = ExtResource( 15 )
+emission_shape = 2
+emission_rect_extents = Vector2( 0, 0 )
+direction = Vector2( -1, 0 )
+spread = 5.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 230.0
+initial_velocity_random = 0.25
+angular_velocity = 360.0
+angular_velocity_random = 1.0
+tangential_accel = 100.0
+tangential_accel_random = 1.0
+damping = 350.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 4.0
+scale_amount_random = 0.5
+scale_amount_curve = SubResource( 8 )
+color_ramp = SubResource( 9 )
+
+[node name="Headlower" type="Sprite" parent="ChickenMan/Hip/Body/Neck"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 6.09458, -5.24508 )
+rotation = 0.964506
+scale = Vector2( 0.72205, 0.726798 )
+z_index = 1
+texture = ExtResource( 8 )
+offset = Vector2( -23.6288, 1.97347 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck/Headlower"]
+light_mask = 33
+position = Vector2( -15.6932, 6.83872 )
+rotation = -4.70641
+remote_path = NodePath("../../../../../../Hitbox/LowerJaw")
+update_scale = false
+
+[node name="Headupper" type="Sprite" parent="ChickenMan/Hip/Body/Neck"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 6.70938, -6.04151 )
+rotation = 0.801398
+scale = Vector2( 0.72205, 0.49751 )
+z_index = 1
+texture = ExtResource( 9 )
+offset = Vector2( -21.4816, 1.20875 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck/Headupper"]
+light_mask = 33
+position = Vector2( -15.711, -8.80663 )
+rotation = -1.57994
+remote_path = NodePath("../../../../../../Hitbox/UpperJaw")
+update_scale = false
+
+[node name="Eye" type="Sprite" parent="ChickenMan/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -22.5774, -9.61752 )
+texture = ExtResource( 7 )
+offset = Vector2( 20.9715, 12.1291 )
+
+[node name="LegFront" type="Sprite" parent="ChickenMan/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 12.9916, 6.2433 )
+rotation = -0.0114762
+scale = Vector2( 2.33905, 2.82204 )
+texture = ExtResource( 11 )
+offset = Vector2( -6.66188, -13.4386 )
+
+[node name="Graphics" type="Node2D" parent="."]
+light_mask = 33
+material = ExtResource( 17 )
+position = Vector2( 0, -96 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="Graphics"]
+unique_name_in_owner = true
+anims/RESET = SubResource( 20 )
+anims/chasing = SubResource( 21 )
+anims/die = SubResource( 22 )
+anims/grow = SubResource( 23 )
+anims/punching = SubResource( 24 )
+anims/pushed = SubResource( 25 )
+anims/roar = SubResource( 26 )
+anims/shooting = SubResource( 27 )
+
+[node name="Hip" type="Node2D" parent="Graphics"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 8, 39 )
+
+[node name="LegBack" type="Node2D" parent="Graphics/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -15, -9 )
+rotation = 0.610171
+
+[node name="LegSprite" type="Sprite" parent="Graphics/Hip/LegBack"]
+light_mask = 33
+use_parent_material = true
+texture = ExtResource( 21 )
+
+[node name="LegBackLower" type="Node2D" parent="Graphics/Hip/LegBack"]
+use_parent_material = true
+position = Vector2( 0.540121, 33.0107 )
+rotation = -0.709459
+
+[node name="LegBackSprite" type="Sprite" parent="Graphics/Hip/LegBack/LegBackLower"]
+light_mask = 33
+use_parent_material = true
+z_index = -1
+texture = ExtResource( 29 )
+
+[node name="FootBack" type="Node2D" parent="Graphics/Hip/LegBack/LegBackLower"]
+use_parent_material = true
+position = Vector2( 1.51298, 29.934 )
+rotation = 0.0720013
+
+[node name="Sprite" type="Sprite" parent="Graphics/Hip/LegBack/LegBackLower/FootBack"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 0.00275612, -0.0820584 )
+rotation = 0.0308382
+texture = ExtResource( 32 )
+offset = Vector2( -7.25486, 7.03402 )
+
+[node name="Body" type="Node2D" parent="Graphics/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -1, 1 )
+rotation = 1.55932
+scale = Vector2( 2.33213, 2.33905 )
+
+[node name="BodySprite" type="Sprite" parent="Graphics/Hip/Body"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -15.5869, -11.0406 )
+scale = Vector2( 0.427524, 0.428792 )
+texture = ExtResource( 22 )
+offset = Vector2( 32, 0 )
+
+[node name="BodyGlow" type="Sprite" parent="Graphics/Hip/Body/BodySprite"]
+visible = false
+modulate = Color( 1, 1, 1, 0 )
+material = SubResource( 28 )
+texture = ExtResource( 35 )
+offset = Vector2( 32, 0 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Graphics/Hip/Body"]
+light_mask = 33
+position = Vector2( -10.255, -0.546865 )
+rotation = -1.57079
+remote_path = NodePath("../../../../Hitbox/Body")
+update_scale = false
+
+[node name="BackArm" type="Node2D" parent="Graphics/Hip/Body"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -20.2307, 6.609 )
+rotation = -1.55929
+scale = Vector2( 0.427524, 0.428792 )
+z_index = -2
+script = ExtResource( 12 )
+texture = ExtResource( 31 )
+segments = 6
+target = NodePath("HandBack")
+
+[node name="HandBack" type="Sprite" parent="Graphics/Hip/Body/BackArm"]
+light_mask = 33
+material = SubResource( 1 )
+use_parent_material = true
+position = Vector2( -34, 6 )
+rotation = -1.7931
+texture = ExtResource( 30 )
+offset = Vector2( 0, -6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 16, 16 )
+
+[node name="BackArmBorder" type="Node2D" parent="Graphics/Hip/Body/BackArm"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+script = ExtResource( 12 )
+texture = ExtResource( 33 )
+segments = 6
+target = NodePath("../HandBack")
+
+[node name="FrontArm" type="Node2D" parent="Graphics/Hip/Body"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -20.4922, -7.93076 )
+rotation = -1.55929
+scale = Vector2( 0.427524, 0.428792 )
+z_index = 2
+script = ExtResource( 12 )
+texture = ExtResource( 31 )
+segments = 6
+target = NodePath("HandFront")
+
+[node name="HandFront" type="Sprite" parent="Graphics/Hip/Body/FrontArm"]
+light_mask = 33
+material = SubResource( 1 )
+use_parent_material = true
+position = Vector2( -31.9996, 22.0018 )
+rotation = -2.09213
+texture = ExtResource( 30 )
+offset = Vector2( 0, -6 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 16, 16 )
+
+[node name="FrontArmBorder" type="Node2D" parent="Graphics/Hip/Body/FrontArm"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+script = ExtResource( 12 )
+texture = ExtResource( 33 )
+segments = 6
+target = NodePath("../HandFront")
+
+[node name="Neck" type="Node2D" parent="Graphics/Hip/Body"]
+show_behind_parent = true
+light_mask = 33
+use_parent_material = true
+position = Vector2( -25.8929, -8.09683 )
+rotation = -2.40547
+scale = Vector2( 1.3366, 1.4288 )
+z_index = 1
+
+[node name="NeckSprite" type="Sprite" parent="Graphics/Hip/Body/Neck"]
+light_mask = 33
+use_parent_material = true
+rotation = 0.898541
+scale = Vector2( 0.308458, 0.311881 )
+z_index = -2
+texture = ExtResource( 23 )
+
+[node name="NeckGlow" type="Sprite" parent="Graphics/Hip/Body/Neck/NeckSprite"]
+visible = false
+modulate = Color( 1, 1, 1, 0 )
+material = SubResource( 28 )
+texture = ExtResource( 36 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Graphics/Hip/Body/Neck"]
+light_mask = 33
+position = Vector2( 7.47667, -8.4856 )
+rotation = -2.96856
+remote_path = NodePath("../../../../../Hitbox/Brain")
+update_scale = false
+
+[node name="BreathParticles" type="CPUParticles2D" parent="Graphics/Hip/Body/Neck"]
+light_mask = 33
+position = Vector2( 2.97876, -8.17331 )
+rotation = 0.437951
+scale = Vector2( 0.724233, 0.497597 )
+z_index = -1
+emitting = false
+amount = 80
+lifetime = 2.0
+lifetime_randomness = 0.5
+local_coords = false
+draw_order = 1
+texture = ExtResource( 28 )
+emission_shape = 2
+emission_rect_extents = Vector2( 0, 0 )
+direction = Vector2( -1, 0 )
+spread = 5.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 230.0
+initial_velocity_random = 0.25
+angular_velocity = 360.0
+angular_velocity_random = 1.0
+tangential_accel = 100.0
+tangential_accel_random = 1.0
+damping = 350.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 4.0
+scale_amount_random = 0.5
+scale_amount_curve = SubResource( 8 )
+color_ramp = SubResource( 9 )
+
+[node name="Headlower" type="Node2D" parent="Graphics/Hip/Body/Neck"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 6.09458, -5.24508 )
+rotation = 0.964506
+scale = Vector2( 0.72205, 0.726798 )
+z_index = 1
+
+[node name="HeadLowerSprite" type="Sprite" parent="Graphics/Hip/Body/Neck/Headlower"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -24.4207, 1.14932 )
+scale = Vector2( 0.427134, 0.429136 )
+texture = ExtResource( 24 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Graphics/Hip/Body/Neck/Headlower"]
+light_mask = 33
+position = Vector2( -15.6932, 6.83872 )
+rotation = 1.57678
+remote_path = NodePath("../../../../../../Hitbox/LowerJaw")
+update_scale = false
+
+[node name="TendrilEnd1" type="Node2D" parent="Graphics/Hip/Body/Neck/Headlower"]
+position = Vector2( -30.5343, 9.51069 )
+
+[node name="TendrilEnd2" type="Node2D" parent="Graphics/Hip/Body/Neck/Headlower"]
+position = Vector2( -25.9981, 10.4675 )
+
+[node name="TendrilEnd3" type="Node2D" parent="Graphics/Hip/Body/Neck/Headlower"]
+position = Vector2( -22.5259, 9.9095 )
+
+[node name="TendrilEnd4" type="Node2D" parent="Graphics/Hip/Body/Neck/Headlower"]
+position = Vector2( -17.1706, 10.3132 )
+
+[node name="Headupper" type="Node2D" parent="Graphics/Hip/Body/Neck"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 6.70938, -6.04151 )
+rotation = 0.801398
+scale = Vector2( 0.72205, 0.49751 )
+z_index = 1
+
+[node name="HeadUpperSprite" type="Sprite" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -21.2833, 1.46694 )
+scale = Vector2( 0.427229, 0.625891 )
+texture = ExtResource( 25 )
+centered = false
+offset = Vector2( -45, -72 )
+
+[node name="HeadGlow" type="Sprite" parent="Graphics/Hip/Body/Neck/Headupper/HeadUpperSprite"]
+visible = false
+modulate = Color( 1, 1, 1, 0 )
+material = SubResource( 28 )
+texture = ExtResource( 34 )
+centered = false
+offset = Vector2( -45, -72 )
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+position = Vector2( -15.711, -8.80663 )
+rotation = -1.57994
+remote_path = NodePath("../../../../../../Hitbox/UpperJaw")
+update_scale = false
+
+[node name="MouthTendril1" type="Node2D" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -31.9772, -4.35265 )
+scale = Vector2( 0.214, 0.626 )
+z_index = -4
+script = ExtResource( 12 )
+texture = ExtResource( 26 )
+segments = 10
+target = NodePath("../../Headlower/TendrilEnd1")
+
+[node name="MouthTendril2" type="Node2D" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -28.5394, -4.15707 )
+scale = Vector2( 0.214, 0.626 )
+z_index = -4
+script = ExtResource( 12 )
+texture = ExtResource( 26 )
+segments = 10
+target = NodePath("../../Headlower/TendrilEnd2")
+
+[node name="MouthTendril3" type="Node2D" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -24.8826, -4.80403 )
+scale = Vector2( 0.214, 0.626 )
+z_index = -4
+script = ExtResource( 12 )
+texture = ExtResource( 26 )
+segments = 10
+target = NodePath("../../Headlower/TendrilEnd3")
+
+[node name="MouthTendril4" type="Node2D" parent="Graphics/Hip/Body/Neck/Headupper"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( -20.0951, -4.9203 )
+scale = Vector2( 0.214, 0.626 )
+z_index = -4
+script = ExtResource( 12 )
+texture = ExtResource( 26 )
+segments = 10
+target = NodePath("../../Headlower/TendrilEnd4")
+
+[node name="LegFront" type="Node2D" parent="Graphics/Hip"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 12, -8 )
+rotation = 0.388584
+z_index = 1
+
+[node name="LegSprite" type="Sprite" parent="Graphics/Hip/LegFront"]
+light_mask = 33
+use_parent_material = true
+texture = ExtResource( 21 )
+
+[node name="LegFrontLower" type="Node2D" parent="Graphics/Hip/LegFront"]
+use_parent_material = true
+position = Vector2( -0.355755, 30.998 )
+rotation = -0.618651
+
+[node name="Sprite" type="Sprite" parent="Graphics/Hip/LegFront/LegFrontLower"]
+light_mask = 33
+use_parent_material = true
+z_index = -1
+texture = ExtResource( 29 )
+
+[node name="FootBack" type="Node2D" parent="Graphics/Hip/LegFront/LegFrontLower"]
+use_parent_material = true
+position = Vector2( 1.51297, 29.934 )
+rotation = 0.105932
+
+[node name="Sprite" type="Sprite" parent="Graphics/Hip/LegFront/LegFrontLower/FootBack"]
+light_mask = 33
+use_parent_material = true
+position = Vector2( 0.110806, 0.250104 )
+rotation = 0.125527
+texture = ExtResource( 32 )
+offset = Vector2( -7.36291, 6.70186 )
+
+[node name="Hitbox" type="Area2D" parent="."]
+position = Vector2( 8, -56 )
+collision_layer = 128
+collision_mask = 128
+monitorable = false
+
+[node name="Body" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0.00459766, -23.9291 )
+rotation = -0.0114701
+shape = SubResource( 13 )
+
+[node name="Brain" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 11.5069, -96.7914 )
+rotation = 2.48158
+z_index = 100
+shape = SubResource( 14 )
+
+[node name="LowerJaw" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -21.3083, -76.1164 )
+rotation = 1.66395
+z_index = 100
+shape = SubResource( 15 )
+
+[node name="UpperJaw" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -21.8184, -103.259 )
+rotation = -1.66239
+z_index = 100
+shape = SubResource( 16 )
+
+[node name="StateChart" type="Node" parent="."]
+script = ExtResource( 3 )
+
+[node name="Root" type="Node" parent="StateChart"]
+script = ExtResource( 4 )
+initial_state = NodePath("Growing")
+
+[node name="On StartPush" type="Node" parent="StateChart/Root"]
+script = ExtResource( 6 )
+to = NodePath("../PushedBack")
+event = "start_push"
+
+[node name="On PlayerDead" type="Node" parent="StateChart/Root"]
+script = ExtResource( 6 )
+to = NodePath("../Roar")
+event = "player_dead"
+
+[node name="On Die" type="Node" parent="StateChart/Root"]
+script = ExtResource( 6 )
+to = NodePath("../Dying")
+event = "die"
+
+[node name="Growing" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On Transformed" type="Node" parent="StateChart/Root/Growing"]
+script = ExtResource( 6 )
+to = NodePath("../../Roar")
+event = "transformed"
+
+[node name="Roar" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On RoarDone" type="Node" parent="StateChart/Root/Roar"]
+script = ExtResource( 6 )
+to = NodePath("../../Chasing")
+event = "roar_done"
+guard_expression = "not player_dead"
+
+[node name="Chasing" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On Cooldown" type="Node" parent="StateChart/Root/Chasing"]
+script = ExtResource( 6 )
+to = NodePath("../../Shooting")
+delay = 2.0
+
+[node name="On InRange" type="Node" parent="StateChart/Root/Chasing"]
+script = ExtResource( 6 )
+to = NodePath("../../Punching")
+event = "in_range"
+
+[node name="Punching" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On OutOfRange" type="Node" parent="StateChart/Root/Punching"]
+script = ExtResource( 6 )
+to = NodePath("../../Roar")
+event = "out_of_range"
+
+[node name="PunchCooldown" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On Cooldown" type="Node" parent="StateChart/Root/PunchCooldown"]
+script = ExtResource( 6 )
+to = NodePath("../../Roar")
+delay = 0.5
+
+[node name="Shooting" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On ShootDone" type="Node" parent="StateChart/Root/Shooting"]
+script = ExtResource( 6 )
+to = NodePath("../../Chasing")
+event = "shoot_done"
+
+[node name="PushedBack" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="On StopPush" type="Node" parent="StateChart/Root/PushedBack"]
+script = ExtResource( 6 )
+to = NodePath("../../Roar")
+event = "stop_push"
+
+[node name="Dying" type="Node" parent="StateChart/Root"]
+script = ExtResource( 5 )
+
+[node name="InRangeCast" type="RayCast2D" parent="."]
+position = Vector2( 0, -64 )
+enabled = true
+cast_to = Vector2( -48, 0 )
+collision_mask = 4
+collide_with_areas = true
+collide_with_bodies = false
+
+[node name="OutRangeCast" type="RayCast2D" parent="."]
+position = Vector2( 0, -72 )
+enabled = true
+cast_to = Vector2( -64, 0 )
+collision_mask = 4
+collide_with_areas = true
+collide_with_bodies = false
+
+[node name="ShootRangeCast" type="RayCast2D" parent="."]
+position = Vector2( 0, -80 )
+enabled = true
+cast_to = Vector2( -192, 0 )
+collision_mask = 4
+collide_with_areas = true
+collide_with_bodies = false
+
+[node name="Grumble" type="AudioStreamPlayer" parent="."]
+
+[node name="Fire" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 27 )
+volume_db = -10.0
+
+[node name="Tween" type="Tween" parent="."]
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"]
+[connection signal="state_entered" from="StateChart/Root/Roar" to="." method="_on_Roar_state_entered" flags=3]
+[connection signal="state_entered" from="StateChart/Root/Chasing" to="." method="_on_Chasing_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Chasing" to="." method="_on_Chasing_state_physics_processing"]
+[connection signal="state_entered" from="StateChart/Root/Punching" to="." method="_on_Punching_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/PunchCooldown" to="." method="_on_PunchCooldown_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_physics_processing"]
+[connection signal="state_entered" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_physics_processing"]
+[connection signal="state_entered" from="StateChart/Root/Dying" to="." method="_on_Dying_state_entered"]
diff --git a/objects/enemy/boss/intelli_head.tscn b/objects/enemy/boss/intelli_head.tscn
new file mode 100644
index 0000000..ed77b03
--- /dev/null
+++ b/objects/enemy/boss/intelli_head.tscn
@@ -0,0 +1,29 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://graphics/npc/intelli_head.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/constant_bleed.tscn" type="PackedScene" id=2]
+
+[sub_resource type="PhysicsMaterial" id=17]
+bounce = 0.5
+
+[sub_resource type="CircleShape2D" id=16]
+radius = 5.0
+
+[node name="IntelliHead" type="RigidBody2D"]
+position = Vector2( 0, -4 )
+mass = 2.0
+physics_material_override = SubResource( 17 )
+linear_velocity = Vector2( -80, -80 )
+
+[node name="DeathSplatter" parent="." instance=ExtResource( 2 )]
+position = Vector2( -1, 5 )
+emission_shape = 0
+direction = Vector2( 0, 1 )
+spread = 60.0
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+flip_h = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 16 )
diff --git a/objects/enemy/boss/scrump.gd b/objects/enemy/boss/scrump.gd
new file mode 100644
index 0000000..90901a1
--- /dev/null
+++ b/objects/enemy/boss/scrump.gd
@@ -0,0 +1,69 @@
+extends "res://objects/enemy/enemy_move_sidesideupdown.gd"
+
+signal entered_phase(phase)
+
+#Stats
+var hp = 3
+var arrow_speed = 80
+var shoot_time = Vector2(0.4,0.7)
+export var phase2_speed = 100
+export var phase3_speed = 150
+#Onready
+onready var shoot_timer = $ShootTimer
+onready var shootpoint = $Position2D
+onready var blood_position = $BloodPosition
+onready var shoot_sound = $ShootSound
+onready var map = get_owner()
+const Projectile = preload("res://objects/enemy/boss/scrump_projectile.tscn")
+const Gore = preload("res://objects/enemy/boss/scrump_gore.tscn")
+
+
+func _ready():
+ if Debug.sus_monster == true: sus_monster()
+ seed(hash("HEROMARK2"))
+ # adjust to difficulty
+ arrow_speed *= Game.enemy_speed_factor
+ shoot_time /= Game.enemy_speed_factor
+ speed *= Game.enemy_speed_factor
+ phase2_speed *= Game.enemy_speed_factor
+ phase3_speed *= Game.enemy_speed_factor
+
+func shoot():
+ var r = rand_range(0.8,1.2)
+ shoot_sound.pitch_scale = r
+ shoot_sound.play()
+ Game.instance_node(Projectile,shootpoint.global_position.x,stepify(shootpoint.global_position.y,8),map)
+
+func _on_ShootTimer_timeout():
+ shoot_timer.start(rand_range(shoot_time.x,shoot_time.y))
+ shoot()
+
+func die():
+ hp -= 1
+ Audio.play_sound(Audio.a_scrump_hurt,Audio.ac_boss)
+ match hp:
+ 2:
+ emit_signal("entered_phase", 2)
+ speed = phase2_speed
+ shoot_time = Vector2(0.4,0.5)
+ 1:
+ emit_signal("entered_phase", 3)
+ speed = phase3_speed
+ shoot_time = Vector2(0.3,0.5)
+ 0:
+ Game.instance_node(Gore,position.x,position.y,map)
+ Audio.play_sound(Audio.a_scrump_die,Audio.ac_boss)
+ emit_signal("entered_phase",4)
+ queue_free()
+
+ #Bleed particles
+ var death_particles = DeathParticles.instance()
+ death_particles.global_position = blood_position.global_position
+ death_particles.emitting = true
+ death_particles.amount = 64
+ death_particles.lifetime = 0.45
+ get_parent().add_child(death_particles)
+
+func sus_monster():
+ $Sus.visible = true
+ $Sprite.visible = false
diff --git a/objects/enemy/boss/scrump.tscn b/objects/enemy/boss/scrump.tscn
new file mode 100644
index 0000000..ccffb1a
--- /dev/null
+++ b/objects/enemy/boss/scrump.tscn
@@ -0,0 +1,110 @@
+[gd_scene load_steps=11 format=2]
+
+[ext_resource path="res://objects/enemy/boss/scrump.gd" type="Script" id=1]
+[ext_resource path="res://audio/sounds/gover.ogg" type="AudioStream" id=2]
+[ext_resource path="res://audio/sounds/die.ogg" type="AudioStream" id=3]
+[ext_resource path="res://graphics/enemy/boss/the_scrump.png" type="Texture" id=4]
+[ext_resource path="res://audio/sounds/scrump_shot.ogg" type="AudioStream" id=5]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 5.5, 9.5 )
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 20, 27 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 55, 64 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 4 )
+region = Rect2( 55, 0, 55, 64 )
+
+[sub_resource type="SpriteFrames" id=5]
+animations = [ {
+"frames": [ SubResource( 3 ), SubResource( 4 ) ],
+"loop": true,
+"name": "default",
+"speed": 10.0
+} ]
+
+[node name="TheScrump" type="Node2D" groups=["scrump"]]
+script = ExtResource( 1 )
+move_direction = 1
+phase2_speed = 75
+phase3_speed = 100
+
+[node name="Sus" type="ColorRect" parent="."]
+visible = false
+margin_left = 8.0
+margin_right = 40.0
+margin_bottom = 40.0
+color = Color( 0.960784, 0.2, 0.258824, 1 )
+
+[node name="BackPack" type="ColorRect" parent="Sus"]
+margin_left = 24.0
+margin_top = 8.0
+margin_right = 40.0
+margin_bottom = 32.0
+color = Color( 0.960784, 0.2, 0.258824, 1 )
+
+[node name="LegR" type="ColorRect" parent="Sus"]
+margin_top = 40.0
+margin_right = 8.0
+margin_bottom = 48.0
+color = Color( 0.960784, 0.2, 0.258824, 1 )
+
+[node name="LegL" type="ColorRect" parent="Sus"]
+margin_left = 24.0
+margin_top = 40.0
+margin_right = 32.0
+margin_bottom = 48.0
+color = Color( 0.960784, 0.2, 0.258824, 1 )
+
+[node name="Visor" type="ColorRect" parent="Sus"]
+margin_left = -8.0
+margin_top = 8.0
+margin_right = 16.0
+margin_bottom = 24.0
+color = Color( 0.27451, 0.796078, 0.756863, 1 )
+
+[node name="WeakSpot" type="Area2D" parent="." groups=["boss_weakspot", "enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="WeakSpot"]
+position = Vector2( 5.5, 14.5 )
+shape = SubResource( 1 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["blocks_arrow", "enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 32, 32 )
+shape = SubResource( 2 )
+
+[node name="ShootTimer" type="Timer" parent="."]
+wait_time = 0.5
+one_shot = true
+autostart = true
+
+[node name="Position2D" type="Position2D" parent="."]
+position = Vector2( 14, 29 )
+
+[node name="Sprite" type="AnimatedSprite" parent="."]
+position = Vector2( 26, 27 )
+frames = SubResource( 5 )
+playing = true
+
+[node name="BloodPosition" type="Position2D" parent="."]
+position = Vector2( 0, 14 )
+
+[node name="HurtSound" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 3 )
+
+[node name="DeathSound" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 2 )
+
+[node name="ShootSound" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 5 )
+volume_db = -8.0
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"]
diff --git a/objects/enemy/boss/scrump_gore.tscn b/objects/enemy/boss/scrump_gore.tscn
new file mode 100644
index 0000000..576d0bd
--- /dev/null
+++ b/objects/enemy/boss/scrump_gore.tscn
@@ -0,0 +1,368 @@
+[gd_scene load_steps=37 format=2]
+
+[ext_resource path="res://objects/enemy/constant_bleed.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle5.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle1.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/brain4.png" type="Texture" id=4]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/eyestalk.png" type="Texture" id=5]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/eye.png" type="Texture" id=6]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle3.png" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle6.png" type="Texture" id=8]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/brain1.png" type="Texture" id=9]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/headlower.png" type="Texture" id=10]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/brain3.png" type="Texture" id=11]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/brain2.png" type="Texture" id=12]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/headupper.png" type="Texture" id=13]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle4.png" type="Texture" id=14]
+[ext_resource path="res://graphics/enemy/boss/scrump_gore/tentacle2.png" type="Texture" id=15]
+[ext_resource path="res://scripts/launch_rigid.gd" type="Script" id=16]
+[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=17]
+
+[sub_resource type="PhysicsMaterial" id=21]
+bounce = 0.3
+
+[sub_resource type="ShaderMaterial" id=22]
+shader = ExtResource( 17 )
+shader_param/pixel_scale = 1.0
+
+[sub_resource type="CapsuleShape2D" id=17]
+radius = 7.26425
+height = 4.59118
+
+[sub_resource type="CapsuleShape2D" id=18]
+radius = 4.7065
+height = 9.55582
+
+[sub_resource type="CapsuleShape2D" id=19]
+radius = 7.26425
+height = 6.06268
+
+[sub_resource type="CapsuleShape2D" id=20]
+radius = 2.66902
+height = 10.9959
+
+[sub_resource type="PhysicsMaterial" id=4]
+bounce = 0.9
+
+[sub_resource type="CircleShape2D" id=3]
+radius = 6.0
+
+[sub_resource type="CapsuleShape2D" id=13]
+radius = 1.27316
+height = 11.6157
+
+[sub_resource type="CapsuleShape2D" id=14]
+radius = 1.27316
+height = 9.45369
+
+[sub_resource type="CapsuleShape2D" id=15]
+radius = 1.27316
+height = 9.45369
+
+[sub_resource type="CapsuleShape2D" id=5]
+radius = 12.0465
+height = 15.9447
+
+[sub_resource type="CapsuleShape2D" id=6]
+radius = 7.00002
+
+[sub_resource type="CapsuleShape2D" id=7]
+radius = 2.0
+height = 10.5018
+
+[sub_resource type="CapsuleShape2D" id=8]
+radius = 2.0
+height = 12.0
+
+[sub_resource type="CapsuleShape2D" id=9]
+radius = 3.0
+height = 14.0
+
+[sub_resource type="CapsuleShape2D" id=10]
+radius = 3.0
+height = 12.0
+
+[sub_resource type="CapsuleShape2D" id=11]
+radius = 2.0
+height = 12.0
+
+[sub_resource type="CapsuleShape2D" id=12]
+radius = 3.0
+height = 14.0
+
+[node name="Gore" type="Node2D"]
+
+[node name="Brain1" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+
+[node name="Sprite" type="Sprite" parent="Brain1"]
+material = SubResource( 22 )
+position = Vector2( 27, 27 )
+texture = ExtResource( 9 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Brain1"]
+position = Vector2( 23, 18 )
+rotation = 0.504296
+shape = SubResource( 17 )
+
+[node name="DeathSplatter" parent="Brain1" instance=ExtResource( 1 )]
+position = Vector2( 29, 9 )
+
+[node name="DeathSplatter2" parent="Brain1" instance=ExtResource( 1 )]
+position = Vector2( 15, 24 )
+
+[node name="Brain2" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+
+[node name="DeathSplatter" parent="Brain2" instance=ExtResource( 1 )]
+position = Vector2( 48, 11 )
+
+[node name="DeathSplatter2" parent="Brain2" instance=ExtResource( 1 )]
+position = Vector2( 37, 29 )
+
+[node name="Sprite2" type="Sprite" parent="Brain2"]
+material = SubResource( 22 )
+position = Vector2( 27, 27 )
+texture = ExtResource( 12 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Brain2"]
+position = Vector2( 47, 23 )
+rotation = 0.34434
+shape = SubResource( 18 )
+
+[node name="Brain3" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+
+[node name="DeathSplatter" parent="Brain3" instance=ExtResource( 1 )]
+position = Vector2( 44, 7 )
+
+[node name="DeathSplatter2" parent="Brain3" instance=ExtResource( 1 )]
+position = Vector2( 32, 25 )
+
+[node name="Sprite3" type="Sprite" parent="Brain3"]
+material = SubResource( 22 )
+position = Vector2( 27, 27 )
+texture = ExtResource( 11 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Brain3"]
+position = Vector2( 38, 17 )
+rotation = 0.504296
+shape = SubResource( 19 )
+
+[node name="Brain4" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+
+[node name="DeathSplatter" parent="Brain4" instance=ExtResource( 1 )]
+position = Vector2( 49, 23 )
+
+[node name="Sprite3" type="Sprite" parent="Brain4"]
+material = SubResource( 22 )
+position = Vector2( 27, 27 )
+texture = ExtResource( 4 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Brain4"]
+position = Vector2( 46, 32 )
+rotation = 0.294044
+shape = SubResource( 20 )
+
+[node name="Eye" type="RigidBody2D" parent="."]
+position = Vector2( 5, 15 )
+physics_material_override = SubResource( 4 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Eye" instance=ExtResource( 1 )]
+position = Vector2( 1, -6 )
+
+[node name="Sprite" type="Sprite" parent="Eye"]
+material = SubResource( 22 )
+position = Vector2( 21, 12 )
+texture = ExtResource( 6 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Eye"]
+shape = SubResource( 3 )
+
+[node name="Eyestalk" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Eyestalk" instance=ExtResource( 1 )]
+position = Vector2( 6, 8 )
+
+[node name="DeathSplatter2" parent="Eyestalk" instance=ExtResource( 1 )]
+position = Vector2( 25, 5 )
+
+[node name="Sprite" type="Sprite" parent="Eyestalk"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 5 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Eyestalk"]
+position = Vector2( 9, 3 )
+rotation = 0.669829
+shape = SubResource( 13 )
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="Eyestalk"]
+position = Vector2( 18, -3 )
+rotation = 1.57079
+shape = SubResource( 14 )
+
+[node name="CollisionShape2D3" type="CollisionShape2D" parent="Eyestalk"]
+position = Vector2( 25, 1 )
+rotation = 2.57212
+shape = SubResource( 15 )
+
+[node name="UpperHead" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="UpperHead" instance=ExtResource( 1 )]
+position = Vector2( 41, 10 )
+
+[node name="DeathSplatter2" parent="UpperHead" instance=ExtResource( 1 )]
+position = Vector2( 49, 20 )
+
+[node name="DeathSplatter3" parent="UpperHead" instance=ExtResource( 1 )]
+position = Vector2( 42, 26 )
+
+[node name="DeathSplatter4" parent="UpperHead" instance=ExtResource( 1 )]
+position = Vector2( 33, 28 )
+
+[node name="Sprite" type="Sprite" parent="UpperHead"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 13 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="UpperHead"]
+position = Vector2( 33, 19 )
+rotation = 1.59593
+shape = SubResource( 5 )
+
+[node name="LowerHead" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 32, 28 )
+
+[node name="DeathSplatter2" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 43, 27 )
+
+[node name="DeathSplatter3" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 18, 37 )
+
+[node name="DeathSplatter4" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 26, 38 )
+
+[node name="DeathSplatter5" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 35, 37 )
+
+[node name="DeathSplatter6" parent="LowerHead" instance=ExtResource( 1 )]
+position = Vector2( 44, 37 )
+
+[node name="Sprite" type="Sprite" parent="LowerHead"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 10 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="LowerHead"]
+position = Vector2( 35, 33 )
+rotation = 1.57079
+shape = SubResource( 6 )
+
+[node name="Tentacle1" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle1" instance=ExtResource( 1 )]
+position = Vector2( 19, 37 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle1"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 3 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle1"]
+position = Vector2( 19, 45 )
+rotation = 0.188719
+shape = SubResource( 7 )
+
+[node name="Tentacle2" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle2" instance=ExtResource( 1 )]
+position = Vector2( 23, 38 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle2"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 15 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle2"]
+position = Vector2( 24, 47 )
+rotation = 0.16322
+shape = SubResource( 8 )
+
+[node name="Tentacle3" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle3" instance=ExtResource( 1 )]
+position = Vector2( 27, 38 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle3"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 7 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle3"]
+position = Vector2( 27, 48 )
+shape = SubResource( 9 )
+
+[node name="Tentacle4" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle4" instance=ExtResource( 1 )]
+position = Vector2( 33, 38 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle4"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 14 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle4"]
+position = Vector2( 33, 48 )
+shape = SubResource( 10 )
+
+[node name="Tentacle5" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle5" instance=ExtResource( 1 )]
+position = Vector2( 38, 38 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle5"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle5"]
+position = Vector2( 39, 47 )
+shape = SubResource( 11 )
+
+[node name="Tentacle6" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 21 )
+script = ExtResource( 16 )
+
+[node name="DeathSplatter" parent="Tentacle6" instance=ExtResource( 1 )]
+position = Vector2( 43, 38 )
+
+[node name="Sprite" type="Sprite" parent="Tentacle6"]
+material = SubResource( 22 )
+position = Vector2( 26, 27 )
+texture = ExtResource( 8 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tentacle6"]
+position = Vector2( 44, 48 )
+shape = SubResource( 12 )
diff --git a/objects/enemy/boss/scrump_projectile.gd b/objects/enemy/boss/scrump_projectile.gd
new file mode 100644
index 0000000..6c45fd9
--- /dev/null
+++ b/objects/enemy/boss/scrump_projectile.gd
@@ -0,0 +1,26 @@
+extends "res://objects/enemy/enemy.gd"
+
+
+var speed: float = 80.0
+
+
+func _physics_process(delta: float) -> void:
+ position.x -= speed * delta
+
+func _on_Hitbox_area_entered(area: Node) -> void:
+ ._on_Hitbox_area_entered(area)
+ if area.is_in_group("player_hitbox"):
+ _stop()
+
+
+func _on_Hitbox_body_entered(body: Node) -> void:
+ if body is TileMap:
+ _stop()
+
+
+func _stop() -> void:
+ speed = 0.0
+ $Hitbox.queue_free()
+ for child in $Particles.get_children():
+ if child is CPUParticles2D:
+ child.emitting = false
diff --git a/objects/enemy/boss/scrump_projectile.tscn b/objects/enemy/boss/scrump_projectile.tscn
new file mode 100644
index 0000000..d2524cf
--- /dev/null
+++ b/objects/enemy/boss/scrump_projectile.tscn
@@ -0,0 +1,92 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/particles/goo_back.png" type="Texture" id=1]
+[ext_resource path="res://graphics/particles/goo_trail.png" type="Texture" id=2]
+[ext_resource path="res://graphics/particles/goo.png" type="Texture" id=3]
+[ext_resource path="res://objects/enemy/boss/scrump_projectile.gd" type="Script" id=4]
+
+[sub_resource type="Curve" id=2]
+_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Curve" id=3]
+_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 3, 3 )
+
+[node name="Boss1Projectile" type="Node2D"]
+z_index = -1
+script = ExtResource( 4 )
+
+[node name="Particles" type="Node2D" parent="."]
+position = Vector2( 0, 4 )
+
+[node name="GooTrail" type="CPUParticles2D" parent="Particles"]
+z_index = -1
+local_coords = false
+texture = ExtResource( 2 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+spread = 180.0
+gravity = Vector2( 0, 40 )
+initial_velocity = 8.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_curve = SubResource( 2 )
+
+[node name="GooBackground" type="CPUParticles2D" parent="Particles"]
+amount = 16
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 2, 2 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 4.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.8
+scale_amount_curve = SubResource( 3 )
+
+[node name="GooBackgroundFall" type="CPUParticles2D" parent="Particles"]
+amount = 16
+preprocess = 1.0
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 2, 2 )
+spread = 180.0
+gravity = Vector2( 80, 0 )
+initial_velocity = 4.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.8
+scale_amount_curve = SubResource( 3 )
+
+[node name="GooForeground" type="CPUParticles2D" parent="Particles"]
+lifetime = 0.5
+preprocess = 0.5
+texture = ExtResource( 3 )
+emission_shape = 2
+emission_rect_extents = Vector2( 2, 2 )
+spread = 180.0
+gravity = Vector2( 80, 0 )
+initial_velocity = 4.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.4
+scale_amount_curve = SubResource( 3 )
+
+[node name="Hitbox" type="Area2D" parent="."]
+position = Vector2( 0, 4 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 1 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"]
diff --git a/objects/enemy/boss/sg2083.gd b/objects/enemy/boss/sg2083.gd
new file mode 100644
index 0000000..d76304e
--- /dev/null
+++ b/objects/enemy/boss/sg2083.gd
@@ -0,0 +1,178 @@
+extends KinematicBody2D
+
+
+signal died()
+signal health_changed(amount)
+signal energy_changed(amount,laser_energy)
+
+
+enum State {DEAD, STAND, FORWARD, BACK, DUCK, BEAM, INACTIVE}
+
+const Bullet = preload("res://objects/enemy/2083_bullet.tscn")
+const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.tscn")
+
+
+export var hp: float = 100.0
+export var max_energy: float = 100.0
+export var energy_recovery: float = 5.0
+export var shot_speed: float = 50.0
+export var move_speed: float = 30.0
+export var safe_from_breath: bool = false
+export var make_explosions: bool = false
+export var bullet_damage: float = 0.2
+export var bullet_energy: float = 0.0
+export var beam_energy: float = 75.0
+export var duck_energy: float = 0.15
+export var explosion_rect: Rect2
+export var famira_path: NodePath
+
+
+var state: int = State.STAND
+var knockback: float = 0.0
+var energy: float = max_energy
+
+
+onready var bullet_positions = $"%BulletPositions"
+onready var anims: AnimationPlayer = $"%AnimationPlayer"
+onready var head_sprite = $"%Head"
+
+
+func _physics_process(delta: float) -> void:
+ match state:
+ State.DEAD:
+ return
+ State.INACTIVE:
+ return
+ State.STAND:
+ if sign(Input.get_axis("move_up", "move_down") + get_stick_input(JOY_AXIS_1)) == 1 and energy >= duck_energy:
+ state = State.DUCK
+ anims.play("Duck")
+ elif Input.is_action_pressed("move_right"):
+ state = State.FORWARD
+ anims.play("Walk")
+ elif Input.is_action_pressed("move_left"):
+ state = State.BACK
+ anims.play("Walk", -1.0, -1.0, true)
+ State.DUCK:
+ if (!Input.is_action_pressed("move_down") && get_stick_input(JOY_AXIS_1) != 1) and anims.current_animation.empty():
+ anims.play("UnDuck")
+ energy -= duck_energy
+
+ State.FORWARD:
+ move_and_slide(Vector2(move_speed, 0.0))
+ State.BACK:
+ move_and_slide(Vector2(-move_speed, 0.0))
+ move_and_slide(Vector2(-knockback, 0.0))
+ knockback *= pow(0.1, delta)
+ set_energy(energy + energy_recovery * delta)
+
+
+func _input(event: InputEvent) -> void:
+ if state == State.DEAD or state == State.INACTIVE:
+ return
+ if event.is_action_pressed("shoot") and (state == State.STAND or state == State.FORWARD or state == State.BACK) and energy >= bullet_energy:
+ shoot()
+ if event.is_action_pressed("jump") and state == State.STAND and energy >= beam_energy:
+ beam()
+
+func get_stick_input(axis):
+ var inp = Input.get_joy_axis(0,axis)
+ if abs(inp) >= 0.5:
+ return sign(inp)
+ else:
+ return 0
+
+func set_energy(value: float) -> void:
+ energy = clamp(value, 0.0, max_energy)
+ emit_signal("energy_changed", energy, beam_energy)
+
+func land(duck: bool) -> void:
+ if duck:
+ anims.play("Duck")
+ else:
+ anims.play("UnDuck")
+
+
+func shoot() -> void:
+ set_energy(energy - bullet_energy)
+ Audio.play_sound(Audio.a_vulcan,Audio.ac_mech_shoot)
+ for pos in bullet_positions.get_children():
+ var bullet = Bullet.instance()
+ bullet.global_position = pos.global_position
+ bullet.direction = Vector2.LEFT.rotated(pos.rotation)
+ bullet.speed = shot_speed
+ bullet.damage = bullet_damage
+ get_parent().add_child(bullet)
+
+
+func beam() -> void:
+ state = State.BEAM
+ var tween = create_tween()
+ tween.tween_method(self, "set_energy", energy, energy - beam_energy, 0.9)
+ anims.play("Beam")
+
+
+func hurt(amount: float, can_duck: bool = false) -> void:
+ if can_duck and state == State.DUCK:
+ return
+ hp -= amount
+ emit_signal("health_changed", hp)
+ if state != State.DEAD and hp <= 0.0:
+ state = State.DEAD
+ emit_signal("died")
+ anims.play("die")
+
+
+func knock_back(amount: float, can_duck: bool = false) -> void:
+ if can_duck and state == State.DUCK:
+ return
+ knockback += amount
+
+
+func _play_laser_sound(play: bool):
+ var famira = get_node(famira_path)
+ if play:
+ if famira.has_method("start_push"):
+ famira.start_push()
+ Audio.play_sound(Audio.a_rainbow_laser,Audio.ac_collectible)
+ else:
+ if famira.has_method("stop_push"):
+ famira.stop_push()
+ Audio.ac_collectible.playing = false
+
+
+func _play_charge_sound(play: bool):
+ if play:
+ Audio.play_sound(Audio.a_2600_charge,Audio.ac_collectible)
+ else:
+ Audio.ac_collectible.playing = false
+
+
+func _spawn_explosions() -> void:
+ while make_explosions:
+ yield(get_tree().create_timer(randf() * 0.5, false), "timeout")
+ var explosion = SmallExplosion.instance()
+ explosion.position = Vector2(
+ rand_range(explosion_rect.position.x, explosion_rect.end.x),
+ rand_range(explosion_rect.position.y, explosion_rect.end.y)
+ )
+ add_child(explosion)
+
+
+func _on_animation_finished(anim_name: String) -> void:
+ if state == State.INACTIVE:
+ return
+ match anim_name:
+ "UnDuck":
+ state = State.STAND
+ "Walk":
+ if state == State.FORWARD and Input.is_action_pressed("move_right"):
+ anims.play("Walk")
+ elif state == State.BACK and Input.is_action_pressed("move_left"):
+ anims.play("Walk", -1.0, -1.0, true)
+ else:
+ state = State.STAND
+ "Beam":
+ state = State.STAND
+ "die":
+ Game.change_map(load("res://menus/game_over.tscn"))
diff --git a/objects/enemy/boss/sg2083.tscn b/objects/enemy/boss/sg2083.tscn
new file mode 100644
index 0000000..fa76448
--- /dev/null
+++ b/objects/enemy/boss/sg2083.tscn
@@ -0,0 +1,2265 @@
+[gd_scene load_steps=40 format=2]
+
+[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/tailpipes.png" type="Texture" id=2]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam.png" type="Texture" id=4]
+[ext_resource path="res://graphics/npc/intelli_idle.png" type="Texture" id=5]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/sg_2083.png" type="Texture" id=6]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_large.png" type="Texture" id=7]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_medium.png" type="Texture" id=8]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/leg.png" type="Texture" id=9]
+[ext_resource path="res://scripts/sprite_ext.gd" type="Script" id=10]
+[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=11]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/foot.png" type="Texture" id=12]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam_gradient.png" type="Texture" id=13]
+[ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=14]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=15]
+[ext_resource path="res://graphics/particles/smoke.png" type="Texture" id=16]
+[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=17]
+[ext_resource path="res://graphics/fade_patterns/stg_explosion.png" type="Texture" id=18]
+[ext_resource path="res://objects/enemy/boss/sg2083.gd" type="Script" id=19]
+
+[sub_resource type="RectangleShape2D" id=27]
+extents = Vector2( 44, 76 )
+
+[sub_resource type="Animation" id=4]
+resource_name = "Beam"
+length = 4.0
+tracks/0/type = "method"
+tracks/0/path = NodePath(".")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"values": [ {
+"args": [ true ],
+"method": "_play_charge_sound"
+}, {
+"args": [ true ],
+"method": "_play_laser_sound"
+}, {
+"args": [ false ],
+"method": "_play_laser_sound"
+} ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle/Head/Beam:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.9, 1, 3.3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1e-05 ), Vector2( 1, 1e-05 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/InternalBeam:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.7, 3.3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 1, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/Head/BeamChargeParticles:emitting")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -25.1199 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 51.0254 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -26.8344 ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -25.1199 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 51.0254 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0.5, 4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -26.8344 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/Head/Beam:visible")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 0.9, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+
+[sub_resource type="Animation" id=21]
+resource_name = "Duck"
+length = 0.2
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 42, 78 ), Vector2( 42, 87.5 ), Vector2( 42, 97 ), Vector2( 42, 106.5 ), Vector2( 42, 116 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ), Vector2( 0.00786438, 47.8817 ), Vector2( 0.005, 47.75 ), Vector2( 0.00294914, 47.9556 ), Vector2( 0, 48 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -42.8239, -52.6 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 71.6413, 96.9236, 110.502, 128.135 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointFront/LegFront:position")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -38.9649, -54.4339, -63.1815, -75.4293 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ), Vector2( 0.00589828, 47.9113 ), Vector2( 0, 47.75 ), Vector2( 0.004, 48 ), Vector2( 0.01, 48 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -42.6063, -52.8 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 51.0254, -5939.68, -82.9, 2.5, 128.421 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 6012.0, 180.0, 108.0, 0.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle/JointBack/LegBack:position")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -39.4117, -54.688, -63.5339, -76.1645 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath(".:safe_from_breath")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle/Head/Beam:scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1e-05 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle/Head/InternalBeam:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/Head:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/Head/Beam:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/Head/BeamChargeParticles:emitting")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle:position")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 42, 78 ) ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle/Head/Intelli:visible")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle:visible")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:position")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Axle:rotation_degrees")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 3.8147e-06, 36 ) ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("Axle/JointFront/LegFront:position")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 36 ) ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("Axle/JointBack/LegBack:position")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("Axle/JointFront:position")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 11, -4 ) ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("Axle/JointFront:rotation_degrees")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath(".:make_explosions")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=24]
+resource_name = "UnDuck"
+length = 0.2
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 42, 116 ), Vector2( 42, 106.5 ), Vector2( 42, 97 ), Vector2( 42, 87.5 ), Vector2( 42, 78 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 48 ), Vector2( 0.00294914, 47.9556 ), Vector2( 0.005, 47.75 ), Vector2( 0.00786438, 47.8817 ), Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ -52.5731, -42.8239, -25.1199 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ), Vector2( 3.8147e-06, 36 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 129.974, 110.502, 96.9236, 71.6413, 51.0254 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointFront/LegFront:position")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -77.3026, -63.1815, -54.4339, -38.9649, -26.8344 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0.01, 48 ), Vector2( 0.004, 48 ), Vector2( 0, 47.75 ), Vector2( 0.00589828, 47.9113 ), Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ -52.1914, -42.6063, -25.1199 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 130.023, 2.5, -82.9, -5939.68, 51.0254 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ), Vector2( 0, 36 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 108.0, 180.0, 6012.0, 0.0 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle/JointBack/LegBack:position")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -77.4075, -63.5339, -54.688, -39.4117, -26.8344 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath(".:safe_from_breath")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0.05 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("UnDuck:playing")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=25]
+resource_name = "Walk"
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 42, 78 ), Vector2( 42, 72 ), Vector2( 42, 78 ), Vector2( 42, 72 ), Vector2( 42, 78 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0, 0.0, 0.0, 0.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -43.1593, -34.7251, -0.87926, -25.1199 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 60.0, 37.1965, -18.9988, 51.0254 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -13.4621, -3.40035, 19.2038, -26.8344 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -25.1199, -4.6348, -6.27576, -43.6, -25.1199 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 51.0254, 23.4, 43.8, 74.0, 51.0254 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ -26.8344, -19.6257, -38.4223, -36.3773, -26.8344 ]
+}
+
+[sub_resource type="Animation" id=15]
+resource_name = "die"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle:position")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ), Vector2( 43, 78 ), Vector2( 41, 78 ) ]
+}
+tracks/1/type = "method"
+tracks/1/path = NodePath(".")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "_spawn_explosions"
+} ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/Intelli:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/3/type = "animation"
+tracks/3/path = NodePath("BigExplosion/ExplosionAnimation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"clips": PoolStringArray( "explode" ),
+"times": PoolRealArray( 2 )
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 2.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath(".:make_explosions")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointBack:position")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -10, -4 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointBack:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointBack/LegBack:position")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 36 ) ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Axle/JointFront:position")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 11, -4 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Axle/JointFront:rotation_degrees")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Axle/JointFront/LegFront:position")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 3.8147e-06, 36 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:position")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("Axle/KneeBack:position")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 6.25088, 28.1233 ) ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("Axle/KneeBack:rotation_degrees")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -8.65142e-06 ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath("Axle/KneeFront:position")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 27.2509, 28.1233 ) ]
+}
+tracks/27/type = "value"
+tracks/27/path = NodePath("Axle/KneeFront:rotation_degrees")
+tracks/27/interp = 1
+tracks/27/loop_wrap = true
+tracks/27/imported = false
+tracks/27/enabled = true
+tracks/27/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -8.65142e-06 ]
+}
+
+[sub_resource type="Animation" id=28]
+resource_name = "force idle"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Axle/Head/Beam:scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1e-05 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Axle/Head/InternalBeam:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Axle/Head:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Axle/Head/Beam:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Axle/Head/BeamChargeParticles:emitting")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -25.1199 ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 51.0254 ]
+}
+tracks/11/type = "value"
+tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/12/type = "value"
+tracks/12/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/12/interp = 1
+tracks/12/loop_wrap = true
+tracks/12/imported = false
+tracks/12/enabled = true
+tracks/12/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ -26.8344 ]
+}
+tracks/13/type = "value"
+tracks/13/path = NodePath("Axle:position")
+tracks/13/interp = 1
+tracks/13/loop_wrap = true
+tracks/13/imported = false
+tracks/13/enabled = true
+tracks/13/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 42, 78 ) ]
+}
+tracks/14/type = "value"
+tracks/14/path = NodePath("Axle/Head/Intelli:visible")
+tracks/14/interp = 1
+tracks/14/loop_wrap = true
+tracks/14/imported = false
+tracks/14/enabled = true
+tracks/14/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/15/type = "value"
+tracks/15/path = NodePath("Axle:visible")
+tracks/15/interp = 1
+tracks/15/loop_wrap = true
+tracks/15/imported = false
+tracks/15/enabled = true
+tracks/15/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/16/type = "value"
+tracks/16/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
+tracks/16/interp = 1
+tracks/16/loop_wrap = true
+tracks/16/imported = false
+tracks/16/enabled = true
+tracks/16/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/17/type = "value"
+tracks/17/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:position")
+tracks/17/interp = 1
+tracks/17/loop_wrap = true
+tracks/17/imported = false
+tracks/17/enabled = true
+tracks/17/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0.00983047, 47.8521 ) ]
+}
+tracks/18/type = "value"
+tracks/18/path = NodePath("Axle:rotation_degrees")
+tracks/18/interp = 1
+tracks/18/loop_wrap = true
+tracks/18/imported = false
+tracks/18/enabled = true
+tracks/18/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/19/type = "value"
+tracks/19/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
+tracks/19/interp = 1
+tracks/19/loop_wrap = true
+tracks/19/imported = false
+tracks/19/enabled = true
+tracks/19/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 3.8147e-06, 36 ) ]
+}
+tracks/20/type = "value"
+tracks/20/path = NodePath("Axle/JointFront/LegFront:position")
+tracks/20/interp = 1
+tracks/20/loop_wrap = true
+tracks/20/imported = false
+tracks/20/enabled = true
+tracks/20/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/21/type = "value"
+tracks/21/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
+tracks/21/interp = 1
+tracks/21/loop_wrap = true
+tracks/21/imported = false
+tracks/21/enabled = true
+tracks/21/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/22/type = "value"
+tracks/22/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
+tracks/22/interp = 1
+tracks/22/loop_wrap = true
+tracks/22/imported = false
+tracks/22/enabled = true
+tracks/22/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 36 ) ]
+}
+tracks/23/type = "value"
+tracks/23/path = NodePath("Axle/JointBack/LegBack:position")
+tracks/23/interp = 1
+tracks/23/loop_wrap = true
+tracks/23/imported = false
+tracks/23/enabled = true
+tracks/23/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/24/type = "value"
+tracks/24/path = NodePath("Axle/JointFront:position")
+tracks/24/interp = 1
+tracks/24/loop_wrap = true
+tracks/24/imported = false
+tracks/24/enabled = true
+tracks/24/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 11, -4 ) ]
+}
+tracks/25/type = "value"
+tracks/25/path = NodePath("Axle/JointFront:rotation_degrees")
+tracks/25/interp = 1
+tracks/25/loop_wrap = true
+tracks/25/imported = false
+tracks/25/enabled = true
+tracks/25/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/26/type = "value"
+tracks/26/path = NodePath(".:make_explosions")
+tracks/26/interp = 1
+tracks/26/loop_wrap = true
+tracks/26/imported = false
+tracks/26/enabled = true
+tracks/26/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=14]
+resource_name = "stomping"
+length = 5.0
+loop = true
+tracks/0/type = "bezier"
+tracks/0/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"points": PoolRealArray( -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/2/type = "bezier"
+tracks/2/path = NodePath("Axle/JointFront/LegFront:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"points": PoolRealArray( -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ),
+"times": PoolRealArray( 0, 1.2, 1.5, 1.8 )
+}
+tracks/3/type = "bezier"
+tracks/3/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"points": PoolRealArray( -25.1199, -0.25, 0, 0.25, 0, -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/4/type = "bezier"
+tracks/4/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"points": PoolRealArray( 51.0254, -0.25, 0, 0.25, 0, 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/5/type = "bezier"
+tracks/5/path = NodePath("Axle/JointBack/LegBack:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"points": PoolRealArray( -26.8344, -0.25, 0, 0.25, 0, -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ),
+"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3 )
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="ShaderMaterial" id=11]
+shader = ExtResource( 3 )
+shader_param/speed = Vector2( 16, 32 )
+shader_param/ammount = Vector2( 0.6, 0.6 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="Curve" id=12]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.130639, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.348684, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 14 )
+shader_param/cycle_speed = 1.0
+shader_param/gradient = ExtResource( 13 )
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 128, 8 )
+
+[sub_resource type="Curve" id=13]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.803571, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=22]
+shader = ExtResource( 1 )
+shader_param/animate_noise = true
+shader_param/noise_intensity = 1.0
+shader_param/fps = 60.0
+
+[sub_resource type="ShaderMaterial" id=8]
+shader = ExtResource( 11 )
+shader_param/pixel_scale = 1.0
+
+[sub_resource type="ShaderMaterial" id=20]
+resource_local_to_scene = true
+shader = ExtResource( 17 )
+shader_param/color = Color( 1, 1, 1, 1 )
+shader_param/smooth_mode = true
+shader_param/reverse = true
+shader_param/opacity = 0.0
+
+[sub_resource type="Animation" id=17]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:material:shader_param/reverse")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ExplosionRect:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "explode"
+length = 0.7
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 0.0, 1.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ExplosionRect:modulate")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.833333 ), Color( 1, 1, 1, 0.666667 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.333333 ), Color( 1, 1, 1, 0.166667 ), Color( 1, 1, 1, 0 ) ]
+}
+
+[sub_resource type="SegmentShape2D" id=26]
+a = Vector2( 4, -76 )
+b = Vector2( 4, 76 )
+
+[node name="2083" type="KinematicBody2D"]
+collision_mask = 5
+script = ExtResource( 19 )
+explosion_rect = Rect2( 24, 16, 88, 64 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 60, 92 )
+shape = SubResource( 27 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+unique_name_in_owner = true
+anims/Beam = SubResource( 4 )
+anims/Duck = SubResource( 21 )
+anims/RESET = SubResource( 5 )
+anims/UnDuck = SubResource( 24 )
+anims/Walk = SubResource( 25 )
+anims/die = SubResource( 15 )
+"anims/force idle" = SubResource( 28 )
+anims/stomping = SubResource( 14 )
+
+[node name="Axle" type="Node2D" parent="."]
+position = Vector2( 42, 78 )
+scale = Vector2( -1, 1 )
+
+[node name="JointBack" type="Sprite" parent="Axle"]
+modulate = Color( 0.74902, 0.74902, 0.74902, 1 )
+position = Vector2( -10, -4 )
+z_index = -1
+texture = ExtResource( 7 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="LegBack" type="Sprite" parent="Axle/JointBack"]
+show_behind_parent = true
+rotation = -0.468349
+texture = ExtResource( 9 )
+offset = Vector2( 0, 18 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="KneeBack" type="Node2D" parent="Axle/JointBack/LegBack"]
+position = Vector2( 0, 36 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="ShinBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"]
+rotation = 0.890561
+texture = ExtResource( 9 )
+offset = Vector2( 0, 24 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 48 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="FootBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack/ShinBack"]
+position = Vector2( 0.00983047, 47.8521 )
+rotation = -0.438425
+texture = ExtResource( 12 )
+offset = Vector2( -11.6527, 2.61113 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_bone_": true
+}
+rotation_lock = nan
+
+[node name="Endpoint" type="Position2D" parent="Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack"]
+position = Vector2( -17, 0 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="KneeGraphic" type="RemoteTransform2D" parent="Axle/JointBack/LegBack/KneeBack"]
+remote_path = NodePath("../../../../KneeBack")
+update_rotation = false
+update_scale = false
+
+[node name="Head" type="Sprite" parent="Axle"]
+unique_name_in_owner = true
+position = Vector2( 0, -4 )
+z_index = 5
+texture = ExtResource( 6 )
+offset = Vector2( -13, -25 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="End" type="Position2D" parent="Axle/Head"]
+position = Vector2( -20, -28 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/Head"]
+position = Vector2( -18, -10 )
+
+[node name="CannonBG" type="ColorRect" parent="Axle/Head"]
+show_behind_parent = true
+margin_left = -64.0
+margin_top = -18.0
+margin_right = -32.0
+margin_bottom = -2.0
+color = Color( 0.266667, 0.266667, 0.305882, 1 )
+
+[node name="Tailpipes" type="Sprite" parent="Axle/Head"]
+visible = false
+show_behind_parent = true
+material = SubResource( 11 )
+position = Vector2( 21, -36 )
+texture = ExtResource( 2 )
+
+[node name="SmokeParticles" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 10, -10 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angular_velocity = 180.0
+angular_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="SmokeParticles2" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 8, 0 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="SmokeParticles3" type="CPUParticles2D" parent="Axle/Head/Tailpipes"]
+position = Vector2( 5, -9 )
+amount = 12
+texture = ExtResource( 16 )
+direction = Vector2( 1.25, -1 )
+spread = 0.0
+gravity = Vector2( 0, -30 )
+initial_velocity = 20.0
+initial_velocity_random = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 12 )
+color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
+
+[node name="Intelli" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+position = Vector2( -37, -32 )
+texture = ExtResource( 5 )
+flip_h = true
+
+[node name="IntelliHeadPos" type="Position2D" parent="Axle/Head/Intelli"]
+unique_name_in_owner = true
+position = Vector2( 0, -4 )
+
+[node name="Beam" type="Sprite" parent="Axle/Head"]
+visible = false
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -58, -10 )
+scale = Vector2( 1, 1e-05 )
+texture = ExtResource( 4 )
+offset = Vector2( -128, 0 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 256, 16 )
+
+[node name="Hitbox" type="Area2D" parent="Axle/Head/Beam" groups=["blocks arrow", "enemy_hitbox"]]
+
+[node name="BeamShape" type="CollisionShape2D" parent="Axle/Head/Beam/Hitbox"]
+position = Vector2( -128, 0 )
+z_index = 10
+shape = SubResource( 6 )
+disabled = true
+
+[node name="InternalBeam" type="Sprite" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -33, -10 )
+scale = Vector2( 1e-05, 1 )
+texture = ExtResource( 4 )
+offset = Vector2( -12, 0 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 24, 16 )
+
+[node name="BeamChargeParticles" type="CPUParticles2D" parent="Axle/Head"]
+show_behind_parent = true
+material = SubResource( 10 )
+position = Vector2( -62, -10 )
+scale = Vector2( 1, 0.987022 )
+emitting = false
+amount = 12
+lifetime = 1.5
+speed_scale = 3.0
+texture = ExtResource( 15 )
+emission_shape = 3
+emission_points = PoolVector2Array( -32, 0, -28, -12, -28, 12, -24, -16, -24, 16, -30, -8, -30, 8, -32, -4, -32, 4 )
+emission_colors = PoolColorArray( )
+gravity = Vector2( 0, 0 )
+radial_accel = -32.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 0.5
+scale_amount_curve = SubResource( 13 )
+
+[node name="Static" type="ColorRect" parent="Axle/Head"]
+material = SubResource( 22 )
+margin_left = -28.0
+margin_top = -15.0
+margin_right = -14.0
+margin_bottom = -4.0
+
+[node name="BulletPositions" type="Node2D" parent="Axle/Head"]
+unique_name_in_owner = true
+position = Vector2( -61, -18 )
+rotation = 3.14159
+scale = Vector2( 1, -1 )
+
+[node name="Position1" type="Position2D" parent="Axle/Head/BulletPositions"]
+position = Vector2( 6.08833, 2.28882e-05 )
+rotation = 2.87979
+
+[node name="Position2" type="Position2D" parent="Axle/Head/BulletPositions"]
+position = Vector2( 6.08832, 8.00003 )
+rotation = 3.14159
+
+[node name="Position3" type="Position2D" parent="Axle/Head/BulletPositions"]
+position = Vector2( 6.08832, 16 )
+rotation = 3.40339
+
+[node name="JointFront" type="Sprite" parent="Axle"]
+position = Vector2( 11, -4 )
+z_index = 5
+texture = ExtResource( 7 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="LegFront" type="Sprite" parent="Axle/JointFront"]
+show_behind_parent = true
+rotation = -0.468349
+texture = ExtResource( 9 )
+offset = Vector2( 0, 18 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 36 )
+__meta__ = {
+"_edit_bone_": true,
+"_edit_ik_": true
+}
+
+[node name="ShinFront" type="Sprite" parent="Axle/JointFront/LegFront"]
+material = SubResource( 8 )
+position = Vector2( 3.8147e-06, 36 )
+rotation = 0.890561
+texture = ExtResource( 9 )
+offset = Vector2( 0, 24 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 12, 48 )
+__meta__ = {
+"_edit_bone_": true
+}
+
+[node name="FootFront" type="Sprite" parent="Axle/JointFront/LegFront/ShinFront"]
+position = Vector2( 0.00983047, 47.8521 )
+rotation = -0.438425
+texture = ExtResource( 12 )
+offset = Vector2( -11.6527, 2.61113 )
+script = ExtResource( 10 )
+__meta__ = {
+"_edit_bone_": true
+}
+rotation_lock = nan
+
+[node name="Endpoint" type="Position2D" parent="Axle/JointFront/LegFront/ShinFront/FootFront"]
+position = Vector2( -17, 0 )
+__meta__ = {
+"_edit_bone_": true,
+"_gizmo_extents_": 4.0
+}
+
+[node name="KneeGraphic" type="RemoteTransform2D" parent="Axle/JointFront/LegFront"]
+position = Vector2( 7.62939e-06, 36 )
+remote_path = NodePath("../../../KneeFront")
+update_rotation = false
+update_scale = false
+
+[node name="KneeBack" type="Sprite" parent="Axle"]
+modulate = Color( 0.74902, 0.74902, 0.74902, 1 )
+position = Vector2( 6.25089, 28.1233 )
+scale = Vector2( 1, -1 )
+z_index = -1
+texture = ExtResource( 8 )
+hframes = 8
+script = ExtResource( 10 )
+fps = 4.0
+ping_pong = true
+rotation_lock = 0.0
+
+[node name="KneeFront" type="Sprite" parent="Axle"]
+position = Vector2( 27.2509, 28.1233 )
+z_index = 5
+texture = ExtResource( 8 )
+hframes = 8
+script = ExtResource( 10 )
+fps = 4.0
+rotation_lock = 0.0
+
+[node name="BigExplosion" type="CanvasLayer" parent="."]
+layer = 101
+
+[node name="ExplosionRect" type="TextureRect" parent="BigExplosion"]
+material = SubResource( 20 )
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 18 )
+flip_h = true
+__meta__ = {
+"_edit_lock_": true
+}
+
+[node name="ExplosionAnimation" type="AnimationPlayer" parent="BigExplosion"]
+anims/RESET = SubResource( 17 )
+anims/explode = SubResource( 18 )
+
+[node name="DetectionBox" type="Area2D" parent="."]
+collision_layer = 4
+collision_mask = 0
+monitoring = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="DetectionBox"]
+position = Vector2( 100, 92 )
+shape = SubResource( 26 )
+
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"]
diff --git a/objects/enemy/bullet_casing.gd b/objects/enemy/bullet_casing.gd
new file mode 100644
index 0000000..ea7236f
--- /dev/null
+++ b/objects/enemy/bullet_casing.gd
@@ -0,0 +1,12 @@
+extends RigidBody2D
+
+
+var has_played_sound = false
+
+
+
+func _on_BoneParticle_body_entered(body):
+ if !has_played_sound:
+ Audio.play_sound(Audio.a_bullet_casing, Audio.ac_climb)
+ has_played_sound = true
+
diff --git a/objects/enemy/bullet_casing.tscn b/objects/enemy/bullet_casing.tscn
new file mode 100644
index 0000000..32239f0
--- /dev/null
+++ b/objects/enemy/bullet_casing.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://graphics/particles/bullet_casing.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/bullet_casing.gd" type="Script" id=2]
+
+[sub_resource type="PhysicsMaterial" id=4]
+bounce = 0.5
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 1, 1.5 )
+
+[node name="BoneParticle" type="RigidBody2D"]
+collision_layer = 17
+physics_material_override = SubResource( 4 )
+contacts_reported = 1
+contact_monitor = true
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 0, 0.5 )
+shape = SubResource( 3 )
+__meta__ = {
+"_edit_group_": true
+}
+
+[connection signal="body_entered" from="." to="." method="_on_BoneParticle_body_entered"]
+[connection signal="body_shape_entered" from="." to="." method="_on_BoneParticle_body_shape_entered"]
diff --git a/objects/enemy/constant_bleed.tscn b/objects/enemy/constant_bleed.tscn
new file mode 100644
index 0000000..6f8435d
--- /dev/null
+++ b/objects/enemy/constant_bleed.tscn
@@ -0,0 +1,24 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+
+[sub_resource type="Curve" id=43]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[node name="DeathSplatter" type="CPUParticles2D"]
+lifetime = 0.2
+local_coords = false
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 43 )
diff --git a/objects/enemy/cop.gd b/objects/enemy/cop.gd
new file mode 100644
index 0000000..47e0f9d
--- /dev/null
+++ b/objects/enemy/cop.gd
@@ -0,0 +1,185 @@
+tool
+extends "res://objects/enemy/enemy.gd"
+
+export var walk_speed = 25.0
+export var left_boundary = 0.0 setget _set_left_boundary
+export var right_boundary = 0.0 setget _set_right_boundary
+export var direction = 1.0
+export var idle_turns = 0
+export var turn_time = 0.5
+export var shoot_time = 1.0
+
+export var bones_amount = 8
+export var bones_speed = 50.0
+
+onready var sprite = $AnimatedSprite
+onready var shoot_position = $"%ShootPosition"
+onready var shoot_cast = $"%ShootCast"
+onready var graphics_cast = $"%GraphicsCast"
+onready var shoot_line = $"%ShootLine"
+onready var sparks = $SparkParticles
+onready var muzzle_flash = $"%MuzzleFlashParticles"
+
+var shooting = false
+var turns = 0
+
+const BoneParticle = preload("res://objects/enemy/bone_particle.tscn")
+const GoreParticle = preload("res://objects/enemy/gore_particle.tscn")
+const EasyBullet = preload("res://objects/enemy/roboturret_proj.tscn")
+const BulletCasing = preload("res://objects/enemy/bullet_casing.tscn")
+
+func _ready():
+ if Engine.editor_hint:
+ update()
+ return
+ # convert boundaries into actual coordinate positions
+ left_boundary = position.x - left_boundary * 8.0
+ right_boundary = position.x + right_boundary * 8.0
+ # make facing match direction
+ sprite.scale.x = direction
+ # make animation speed sync to walk speed
+ sprite.speed_scale = inverse_lerp(0.0, 25.0, walk_speed)
+
+func _physics_process(delta):
+ if Engine.editor_hint:
+ return
+ if !shooting:
+ # check for player in raycast
+ var collider = shoot_cast.get_collider()
+ if collider != null && (collider.is_in_group("player_hitbox") or collider.is_in_group("msx")):
+ if Game.get_sector(global_position) == Game.get_sector(collider.global_position):
+ if Game.is_easy_mode:
+ var easy_bullet = EasyBullet.instance()
+ easy_bullet.target_group = "player_hitbox"
+ easy_bullet.direction = sign(shoot_position.global_position.x - global_position.x)
+ easy_bullet.global_position = shoot_position.global_position
+ easy_bullet.speed = 100
+ get_parent().call_deferred("add_child", easy_bullet)
+ else:
+ # kill player and enter shooting state temporarily
+ collider.get_parent().die()
+
+ # play sound
+ Audio.play_sound(Audio.a_explosion, Audio.ac_boss)
+
+ # muzzle flash
+ muzzle_flash.emitting = true
+ shooting = true
+ get_tree().create_timer(0.5, false).connect("timeout", self, "_stop_shoot")
+ sprite.play("shoot")
+
+ # check other raycast to find collision passing through player
+ graphics_cast.force_raycast_update()
+ var hit_position = graphics_cast.to_global(Vector2(256.0, 0.0))
+ if graphics_cast.is_colliding():
+ hit_position = graphics_cast.get_collision_point()
+ # set line point to point of collision
+ var hit_x = shoot_line.to_local(hit_position).x
+ shoot_line.points[1].x = hit_x
+ # shoot_line.visible = true
+ # get_tree().create_timer(0.05, false).connect("timeout", shoot_line, "set_visible", [false], CONNECT_DEFERRED)
+ # move and play sparks
+ sparks.global_position = hit_position
+ sparks.emitting = true
+
+ # spawn a bullet casing
+ var casing = BulletCasing.instance()
+ casing.rotation = rand_range(0.0, 2.0*PI) # random rotation
+ casing.global_position = shoot_position.global_position
+ casing.linear_velocity = Vector2(45.0 * rand_range(0.5, 1.5), 0.0).rotated(rand_range(-PI, 0.0))
+ casing.angular_velocity = rand_range(-PI*2.0, PI*2.0)
+ var timer = get_tree().create_timer(3.0 + rand_range(0.0, 1.0), false)
+ timer.connect("timeout", casing, "queue_free")
+ get_parent().call_deferred("add_child", casing)
+ return
+
+ # if there aren't turns, walk around
+ if turns == 0:
+ sprite.play("walk")
+ position.x += direction * walk_speed * delta
+ if position.x <= left_boundary:
+ position.x = left_boundary
+ direction = 1.0
+ _do_turn()
+ elif position.x >= right_boundary:
+ position.x = right_boundary
+ direction = -1.0
+ _do_turn()
+
+func _do_turn():
+ if shooting:
+ get_tree().create_timer(turn_time, false).connect("timeout", self, "_do_turn")
+ return
+ sprite.play("idle")
+ # still pause with zero "turns"
+ if idle_turns <= 0:
+ # set turns to -1 to stop walking
+ turns = -1
+ # wait for turn_tie
+ yield(get_tree().create_timer(turn_time, false), "timeout")
+ sprite.scale.x *= -1.0
+ # wait a bit after turning
+ get_tree().create_timer(turn_time, false).connect("timeout", self, "set", ["turns", 0])
+ return
+ sprite.scale.x *= -1.0
+ if turns < idle_turns * 2:
+ turns += 1
+ get_tree().create_timer(turn_time, false).connect("timeout", self, "_do_turn")
+ else:
+ get_tree().create_timer(turn_time, false).connect("timeout", self, "set", ["turns", 0])
+# turns = 0
+
+func _stop_shoot():
+ shooting = false
+ shoot_line.visible = false
+ if turns == 0:
+ sprite.play("walk")
+ else:
+ sprite.play("idle")
+
+# editor debug drawing
+func _draw():
+ if Engine.editor_hint:
+ var left = -left_boundary * 8.0
+ var right = right_boundary * 8.0 + 8.0
+ draw_line(
+ Vector2(left, 0.0),
+ Vector2(right, 0.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+ draw_line(
+ Vector2(left, 2.0),
+ Vector2(left, -2.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+ draw_line(
+ Vector2(right, 2.0),
+ Vector2(right, -2.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+
+func _set_left_boundary(value):
+ left_boundary = value
+ if Engine.editor_hint:
+ update()
+
+func _set_right_boundary(value):
+ right_boundary = value
+ if Engine.editor_hint:
+ update()
+
+func die():
+ for n in bones_amount:
+ var bone
+ if randi() % 3 == 0:
+ bone = BoneParticle.instance()
+ else:
+ bone = GoreParticle.instance()
+ bone.rotation = rand_range(0.0, 2.0*PI) # random rotation
+ bone.global_position = global_position
+ bone.linear_velocity = Vector2(bones_speed * rand_range(0.5, 1.5), 0.0).rotated(rand_range(-PI, 0.0))
+ bone.angular_velocity = rand_range(-PI*2.0, PI*2.0)
+ var timer = get_tree().create_timer(3.0 + rand_range(0.0, 1.0), false)
+ timer.connect("timeout", bone, "queue_free")
+ get_parent().call_deferred("add_child", bone)
+ .die() # call rest of enemy.gd die() funciton
diff --git a/objects/enemy/cop.tscn b/objects/enemy/cop.tscn
new file mode 100644
index 0000000..3cda741
--- /dev/null
+++ b/objects/enemy/cop.tscn
@@ -0,0 +1,152 @@
+[gd_scene load_steps=20 format=2]
+
+[ext_resource path="res://objects/enemy/cop.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/cop/cop_idle.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/cop/cop_walk.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/cop/cop_shoot.png" type="Texture" id=4]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=5]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=6]
+[ext_resource path="res://graphics/particles/muzzle_flash.png" type="Texture" id=7]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 5 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 3 )
+region = Rect2( 20, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 3 )
+region = Rect2( 40, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 3 )
+region = Rect2( 60, 0, 20, 21 )
+
+[sub_resource type="SpriteFrames" id=6]
+animations = [ {
+"frames": [ SubResource( 1 ) ],
+"loop": false,
+"name": "idle",
+"speed": 5.0
+}, {
+"frames": [ ExtResource( 4 ) ],
+"loop": false,
+"name": "shoot",
+"speed": 1.0
+}, {
+"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ) ],
+"loop": true,
+"name": "walk",
+"speed": 5.0
+} ]
+
+[sub_resource type="Curve" id=11]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.5, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=12]
+interpolation_mode = 2
+offsets = PoolRealArray( 0.20339, 0.432203 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 3, 8 )
+
+[sub_resource type="Curve" id=9]
+_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=10]
+offsets = PoolRealArray( 0, 0.515152 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[node name="Cop" type="Node2D" groups=["cop", "enemy"]]
+script = ExtResource( 1 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+show_behind_parent = true
+material = SubResource( 7 )
+position = Vector2( 5, -2 )
+frames = SubResource( 6 )
+animation = "idle"
+playing = true
+
+[node name="ShootPosition" type="Position2D" parent="AnimatedSprite"]
+unique_name_in_owner = true
+position = Vector2( 7, 0.5 )
+__meta__ = {
+"_gizmo_extents_": 4.0
+}
+
+[node name="ShootCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+enabled = true
+cast_to = Vector2( 72, 0 )
+collision_mask = 8
+collide_with_areas = true
+
+[node name="GraphicsCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+cast_to = Vector2( 256, 0 )
+collision_mask = 8
+
+[node name="ShootLine" type="Line2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+points = PoolVector2Array( 0, 0, 8, 0 )
+width = 1.0
+default_color = Color( 1, 1, 0.290196, 1 )
+
+[node name="MuzzleFlashParticles" type="CPUParticles2D" parent="AnimatedSprite/ShootPosition"]
+pause_mode = 2
+unique_name_in_owner = true
+rotation = 1.0472
+emitting = false
+amount = 6
+lifetime = 0.1
+one_shot = true
+explosiveness = 0.75
+draw_order = 1
+texture = ExtResource( 7 )
+gravity = Vector2( 0, 0 )
+angle = 120.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 11 )
+color_ramp = SubResource( 12 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 0 )
+shape = SubResource( 8 )
+
+[node name="SparkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+emitting = false
+amount = 16
+lifetime = 0.5
+one_shot = true
+explosiveness = 1.0
+texture = ExtResource( 6 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 30.0
+initial_velocity_random = 0.5
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_curve = SubResource( 9 )
+color_ramp = SubResource( 10 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/death_particles.gd b/objects/enemy/death_particles.gd
new file mode 100644
index 0000000..24d7af4
--- /dev/null
+++ b/objects/enemy/death_particles.gd
@@ -0,0 +1,22 @@
+extends CPUParticles2D
+
+
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
+
+
+export var spray_ammount: int = 16
+export var spray_velocity: float = 80
+export var autoplay: bool = false
+export var spray_scale: float = 1.0
+
+
+func _ready() -> void:
+ if autoplay:
+ emitting = true
+ yield(get_tree(), "idle_frame")
+ for i in spray_ammount:
+ var spray = BloodSpray.instance()
+ spray.global_position = global_position
+ spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * TAU)
+ spray.scale = Vector2(spray_scale, spray_scale)
+ get_parent().add_child(spray)
diff --git a/objects/enemy/death_particles.tscn b/objects/enemy/death_particles.tscn
index 52c3390..1c620e2 100644
--- a/objects/enemy/death_particles.tscn
+++ b/objects/enemy/death_particles.tscn
@@ -1,13 +1,15 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=4 format=2]
[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/death_particles.gd" type="Script" id=2]
[sub_resource type="Curve" id=43]
_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
[node name="DeathSplatter" type="CPUParticles2D"]
emitting = false
-lifetime = 0.2
+amount = 32
+lifetime = 0.3
one_shot = true
explosiveness = 0.9
local_coords = false
@@ -25,3 +27,4 @@ angle_random = 1.0
scale_amount = 0.5
scale_amount_random = 1.0
scale_amount_curve = SubResource( 43 )
+script = ExtResource( 2 )
diff --git a/objects/enemy/death_particles_big.gd b/objects/enemy/death_particles_big.gd
new file mode 100644
index 0000000..f9e15c7
--- /dev/null
+++ b/objects/enemy/death_particles_big.gd
@@ -0,0 +1,20 @@
+extends CPUParticles2D
+
+
+const BloodSpray := preload("res://objects/environment/blood/blood_spray_big.tscn")
+
+
+export var spray_ammount: int = 1
+export var spray_velocity: float = 120
+export var autoplay: bool = false
+
+
+func _ready() -> void:
+ if autoplay:
+ emitting = true
+ yield(get_tree(), "idle_frame")
+ for i in spray_ammount:
+ var spray = BloodSpray.instance()
+ spray.global_position = global_position
+ spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * (TAU / 45))
+ get_parent().add_child(spray)
diff --git a/objects/enemy/death_particles_big.tscn b/objects/enemy/death_particles_big.tscn
new file mode 100644
index 0000000..035dc72
--- /dev/null
+++ b/objects/enemy/death_particles_big.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/death_particles_big.gd" type="Script" id=2]
+
+[sub_resource type="Curve" id=43]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[node name="DeathSplatter" type="CPUParticles2D"]
+emitting = false
+amount = 32
+lifetime = 0.3
+one_shot = true
+explosiveness = 0.9
+local_coords = false
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 43 )
+script = ExtResource( 2 )
diff --git a/objects/enemy/death_particles_famira.gd b/objects/enemy/death_particles_famira.gd
new file mode 100644
index 0000000..e250c94
--- /dev/null
+++ b/objects/enemy/death_particles_famira.gd
@@ -0,0 +1,23 @@
+extends CPUParticles2D
+
+
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
+
+
+export var spray_ammount: int = 16
+export var spray_velocity: float = 80
+export var autoplay: bool = false
+export var spray_scale: float = 1.0
+
+
+func _ready() -> void:
+ if autoplay:
+ emitting = true
+ yield(get_tree(), "idle_frame")
+ for i in spray_ammount:
+ var spray = BloodSpray.instance()
+ spray.global_position = global_position
+ spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * TAU)
+ spray.scale = Vector2(spray_scale, spray_scale)
+ spray.color = Color(0x9ccd67ff)
+ get_parent().add_child(spray)
diff --git a/objects/enemy/death_particles_famira.tscn b/objects/enemy/death_particles_famira.tscn
new file mode 100644
index 0000000..a6efa46
--- /dev/null
+++ b/objects/enemy/death_particles_famira.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/death_particles_famira.gd" type="Script" id=2]
+
+[sub_resource type="Curve" id=43]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[node name="DeathSplatter" type="CPUParticles2D"]
+emitting = false
+amount = 32
+lifetime = 0.3
+one_shot = true
+explosiveness = 0.9
+local_coords = false
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 43 )
+script = ExtResource( 2 )
diff --git a/objects/enemy/eel.gd b/objects/enemy/eel.gd
new file mode 100644
index 0000000..86d19ee
--- /dev/null
+++ b/objects/enemy/eel.gd
@@ -0,0 +1,90 @@
+extends "res://objects/enemy/enemy.gd"
+
+
+# distance between segments
+const SEGMENT_LENGTH: float = 4.0
+
+# number of segments
+export var segments: int = 8
+# speed eel travels
+export var speed: float = 32.0
+# how far eel travels along path for complete wave
+export var wave_length: float = 0.0
+# intensity in pixels of eel wave animation
+export var wave_amplitude: float = 0.0
+
+var _segments: Array
+
+onready var head: PathFollow2D = $Head
+onready var tail: PathFollow2D = $Tail
+
+
+func _ready() -> void:
+ # get nodes
+ var first_segment: PathFollow2D = $Segment
+ var first_segment_shape: CollisionShape2D = $"%SegmentShape"
+ # initialize segments array
+ _segments = []
+ _segments.resize(segments)
+ # loop for number of segments needed
+ for i in segments:
+ # create and add new segment instance
+ var new_segment = first_segment.duplicate()
+ add_child(new_segment)
+ _segments[i] = new_segment
+ # add new shape to hitbox
+ var new_segment_shape = first_segment_shape.duplicate()
+ $Hitbox.add_child(new_segment_shape)
+ # link segment's remote transform to its collision shape
+ var new_shape_transform = new_segment.get_node("ShapeTransform")
+ new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape)
+ # free template segment
+ first_segment.queue_free()
+ first_segment_shape.queue_free()
+
+
+func _physics_process(delta: float) -> void:
+ # move along path
+ head.offset += speed * delta
+ # position segments accordingly
+ _offset_segments()
+ # waving animation
+ _wave_segments()
+
+
+func _offset_segments() -> void:
+ # put tail at end
+ tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1)
+ # loop through segments
+ for i in _segments.size():
+ # set segment position based on index and length
+ _segments[i].offset = head.offset - SEGMENT_LENGTH * float(i + 1)
+
+
+func _wave_segments() -> void:
+ # save the effort of looping if nothing will come of it
+ if wave_length == 0.0 and wave_amplitude == 0.0:
+ return
+ for child in get_children():
+ # only affect childent that are pathfollows
+ var segment = child as PathFollow2D
+ if segment:
+ # multiply by tau to use pixels as unit
+ segment.v_offset = sin(segment.offset * TAU / wave_length) * wave_amplitude
+
+
+func die() -> void:
+ # instance death particles for every segment
+ for segment in _segments:
+ # instance particles for this segment
+ var death_particles = DeathParticles.instance()
+ # TODO: something is wrong here, particles to not show up in correct position
+ death_particles.global_transform = segment.global_transform
+ # tone them down a little per-segment
+ death_particles.amount /= 4
+ death_particles.initial_velocity /= 2.0
+ # emit
+ death_particles.emitting = true
+ # detach from self
+ get_parent().add_child(death_particles)
+ .die()
diff --git a/objects/enemy/eel.tscn b/objects/enemy/eel.tscn
new file mode 100644
index 0000000..f4afb0a
--- /dev/null
+++ b/objects/enemy/eel.tscn
@@ -0,0 +1,115 @@
+[gd_scene load_steps=13 format=2]
+
+[ext_resource path="res://objects/enemy/eel.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/eel_head.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/eel_body.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/eel_tail.png" type="Texture" id=4]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=6]
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 2, 2 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 4.5, 2 )
+
+[sub_resource type="RectangleShape2D" id=9]
+extents = Vector2( 2, 2 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 14, 12 )
+
+[sub_resource type="AtlasTexture" id=11]
+atlas = ExtResource( 2 )
+region = Rect2( 14, 0, 14, 12 )
+
+[sub_resource type="SpriteFrames" id=12]
+animations = [ {
+"frames": [ SubResource( 10 ), SubResource( 11 ) ],
+"loop": true,
+"name": "chomp",
+"speed": 8.0
+} ]
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 6 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[node name="Eel" type="Path2D" groups=["enemy"]]
+curve = null
+script = ExtResource( 1 )
+segments = 2
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+position = Vector2( 4, 0 )
+z_index = 2
+
+[node name="TailShape" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -4, 0 )
+shape = SubResource( 8 )
+
+[node name="HeadShape" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -1.5, 0 )
+shape = SubResource( 7 )
+
+[node name="SegmentShape" type="CollisionShape2D" parent="Hitbox"]
+unique_name_in_owner = true
+position = Vector2( -4, 0 )
+shape = SubResource( 9 )
+
+[node name="Head" type="PathFollow2D" parent="." groups=["eel_segment"]]
+offset = 8.0
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="AnimatedSprite" parent="Head"]
+position = Vector2( 4, 0 )
+z_index = 1
+frames = SubResource( 12 )
+animation = "chomp"
+playing = true
+
+[node name="Border" type="AnimatedSprite" parent="Head/Sprite"]
+material = SubResource( 6 )
+frames = SubResource( 12 )
+animation = "chomp"
+playing = true
+
+[node name="ShapeTransform" type="RemoteTransform2D" parent="Head"]
+position = Vector2( 2.5, 0 )
+remote_path = NodePath("../../Hitbox/HeadShape")
+
+[node name="Tail" type="PathFollow2D" parent="."]
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="Sprite" parent="Tail"]
+position = Vector2( -2, 0 )
+z_index = 1
+texture = ExtResource( 4 )
+
+[node name="Border" type="Sprite" parent="Tail/Sprite"]
+material = SubResource( 6 )
+texture = ExtResource( 4 )
+
+[node name="ShapeTransform" type="RemoteTransform2D" parent="Tail"]
+remote_path = NodePath("../../Hitbox/TailShape")
+
+[node name="Segment" type="PathFollow2D" parent="."]
+offset = 4.0
+cubic_interp = false
+lookahead = 0.001
+
+[node name="Sprite" type="Sprite" parent="Segment"]
+z_index = 1
+texture = ExtResource( 3 )
+
+[node name="Border" type="Sprite" parent="Segment/Sprite"]
+material = SubResource( 6 )
+texture = ExtResource( 3 )
+
+[node name="ShapeTransform" type="RemoteTransform2D" parent="Segment"]
+remote_path = NodePath("../../Hitbox/SegmentShape")
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/enemy.gd b/objects/enemy/enemy.gd
index 58b5188..db51571 100644
--- a/objects/enemy/enemy.gd
+++ b/objects/enemy/enemy.gd
@@ -8,6 +8,8 @@ extends Node2D
const DeathParticles = preload("res://objects/enemy/death_particles.tscn")
+signal died()
+
### these variables have been replaced with groups to put on the hitbox
### - "blocks_arrow"
### - "blocks_sword"
@@ -16,15 +18,14 @@ const DeathParticles = preload("res://objects/enemy/death_particles.tscn")
#export var can_be_killed_by_arrow = true
#export var can_be_squashed = true
-export var score_for_killing = 0
export var blood = true
-var death_sound = Game.a_die
+export var death_sound: AudioStream = preload("res://audio/sounds/die.ogg")
var death_blood_offset = Vector2.ZERO
func _on_Hitbox_area_entered(area):
#Kill player
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
area.get_parent().die()
func die():
@@ -34,6 +35,6 @@ func die():
death_particles.emitting = true
get_parent().add_child(death_particles)
- Game.play_sound(death_sound, Game.ac_die)
- Game.score += score_for_killing
+ Audio.play_sound(death_sound, Audio.ac_die)
+ emit_signal("died")
queue_free()
diff --git a/objects/enemy/enemy_arrow.tscn b/objects/enemy/enemy_arrow.tscn
index 7e1dc44..87f9239 100644
--- a/objects/enemy/enemy_arrow.tscn
+++ b/objects/enemy/enemy_arrow.tscn
@@ -1,26 +1,30 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=10 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
[ext_resource path="res://graphics/player/arrow.png" type="Texture" id=2]
[ext_resource path="res://objects/player/arrow_projectile.gd" type="Script" id=3]
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=4]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=5]
[sub_resource type="ShaderMaterial" id=1]
+resource_local_to_scene = true
shader = ExtResource( 1 )
shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = true
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 5 )
[sub_resource type="Curve" id=3]
_data = [ Vector2( 0, 1 ), 0.0, -0.139481, 0, 0, Vector2( 1, 0 ), -2.82064, 0.0, 0, 0 ]
[sub_resource type="RectangleShape2D" id=7]
-extents = Vector2( 4.5, 0.5 )
+extents = Vector2( 5.75, 0.5 )
[sub_resource type="Curve" id=6]
_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
[node name="ArrowProjectile" type="Node2D"]
script = ExtResource( 3 )
+target_group = "player_hitbox"
[node name="Sprite" type="Sprite" parent="."]
material = SubResource( 1 )
@@ -46,6 +50,8 @@ scale_amount_random = 0.25
scale_amount_curve = SubResource( 3 )
[node name="Hitbox" type="Area2D" parent="." groups=["arrow"]]
+collision_layer = 4
+collision_mask = 5
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
position = Vector2( -0.5, -0.5 )
diff --git a/objects/enemy/enemy_climber.gd b/objects/enemy/enemy_climber.gd
deleted file mode 100644
index 9289230..0000000
--- a/objects/enemy/enemy_climber.gd
+++ /dev/null
@@ -1,15 +0,0 @@
-extends "res://objects/enemy/enemy.gd"
-
-# Declare member variables here. Examples:
-# var a = 2
-# var b = "text"
-
-
-# Called when the node enters the scene tree for the first time.
-func _ready():
- pass # Replace with function body.
-
-
-# Called every frame. 'delta' is the elapsed time since the previous frame.
-#func _process(delta):
-# pass
diff --git a/objects/enemy/enemy_jump.gd b/objects/enemy/enemy_jump.gd
index 64897c3..74fbc89 100644
--- a/objects/enemy/enemy_jump.gd
+++ b/objects/enemy/enemy_jump.gd
@@ -12,6 +12,9 @@ onready var sprite = $Sprite
func _ready():
anims.play("idle")
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
+ anims.playback_speed *= Game.enemy_speed_factor
func _physics_process(delta):
if anims.current_animation == "jump":
diff --git a/objects/enemy/enemy_move_diagonal.gd b/objects/enemy/enemy_move_diagonal.gd
new file mode 100644
index 0000000..e718565
--- /dev/null
+++ b/objects/enemy/enemy_move_diagonal.gd
@@ -0,0 +1,34 @@
+extends "res://objects/enemy/enemy.gd"
+
+#How far to move
+export var up_boundary = 0.0
+export var down_boundary = 0.0
+#Start direction
+var direction = Vector2(1,1)
+export var speed = 50
+#Move horizontal or vertical
+export(int, "/", "\\") var move_direction
+#Onreadys
+onready var startpos = position
+
+func _ready():
+ death_sound = Audio.a_explosion
+ up_boundary *= 8
+ down_boundary *= 8
+ #Move in direction selected
+ if move_direction == 0:
+ direction = Vector2(1,-1)
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
+
+func _physics_process(delta):
+ #Move
+ position += direction * (speed * delta)
+ #Switch dir
+ if position.y >= startpos.y + (down_boundary):
+ direction *= -1
+ if position.y <= startpos.y - (up_boundary):
+ direction *= -1
+
+func die():
+ .die()
diff --git a/objects/enemy/enemy_move_sidesideupdown.gd b/objects/enemy/enemy_move_sidesideupdown.gd
index ab350f3..86cec17 100644
--- a/objects/enemy/enemy_move_sidesideupdown.gd
+++ b/objects/enemy/enemy_move_sidesideupdown.gd
@@ -1,24 +1,35 @@
+tool
extends "res://objects/enemy/enemy.gd"
+enum Direction {HORIZONTAL, VERTICAL}
+
#How far to move
-export var left_up_boundry = 0.0
-export var right_down_boundry = 0.0
+export var left_up_boundary = 0.0 setget _set_left_up_boundary
+export var right_down_boundary = 0.0 setget _set_right_down_boundary
#Start direction
export var direction = 1
export var speed = 50
#Move horizontal or vertical
-export(int, "Horizontal", "Vertical") var move_direction
-export var flip_sprite = true
+export(Direction) var move_direction
+export var node_to_flip: NodePath
#Onreadys
onready var startpos = position
-onready var sprite = $AnimatedSprite
+onready var _flipped_node: Node2D = get_node_or_null(node_to_flip)
func _ready():
- left_up_boundry *= 8
- right_down_boundry *= 8
+ if Engine.editor_hint:
+ return
+ left_up_boundary *= 8
+ right_down_boundary *= 8
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
func _physics_process(delta):
- if move_direction == 0:
+ if Engine.editor_hint:
+ return
+ if right_down_boundary == 0 and left_up_boundary == 0:
+ return
+ elif move_direction == 0:
move_side_to_side(delta)
else: move_up_and_down(delta)
@@ -26,20 +37,51 @@ func move_side_to_side(delta):
#Move
position.x += direction * (speed * delta)
#Switch dir
- if position.x >= startpos.x + (right_down_boundry):
+ if position.x >= startpos.x + (right_down_boundary):
direction = -1
- if flip_sprite == true: sprite.scale.x = -1
- if position.x <= startpos.x + (-left_up_boundry):
+ if is_instance_valid(_flipped_node):
+ _flipped_node.scale.x = -1.0
+ if position.x <= startpos.x + (-left_up_boundary):
direction = 1
- if flip_sprite == true: sprite.scale.x = 1
+ if is_instance_valid(_flipped_node):
+ _flipped_node.scale.x = 1.0
func move_up_and_down(delta):
#Move
position.y += direction * (speed * delta)
#Switch dir
- if position.y >= startpos.y + (right_down_boundry):
+ if position.y >= startpos.y + (right_down_boundary):
direction = -1
- if flip_sprite == true: sprite.scale.y = 1
- if position.y <= startpos.y + (-left_up_boundry):
+ if is_instance_valid(_flipped_node):
+ _flipped_node.scale.y = 1.0
+ if position.y <= startpos.y + (-left_up_boundary):
direction = 1
- if flip_sprite == true: sprite.scale.y = -1
+ if is_instance_valid(_flipped_node):
+ _flipped_node.scale.y = -1.0
+
+# editor debug drawing
+func _draw():
+ if Engine.editor_hint:
+ match move_direction:
+ Direction.HORIZONTAL:
+ draw_line(
+ Vector2(-left_up_boundary * 8.0, 0.0),
+ Vector2(right_down_boundary * 8.0, 0.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+ Direction.VERTICAL:
+ draw_line(
+ Vector2(0.0, -left_up_boundary * 8.0),
+ Vector2(0.0, right_down_boundary * 8.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+
+func _set_left_up_boundary(value):
+ left_up_boundary = value
+ if Engine.editor_hint:
+ update()
+
+func _set_right_down_boundary(value):
+ right_down_boundary = value
+ if Engine.editor_hint:
+ update()
diff --git a/objects/enemy/enemy_speedup_in_range.gd b/objects/enemy/enemy_speedup_in_range.gd
index 4eb24f6..6fb0ebc 100644
--- a/objects/enemy/enemy_speedup_in_range.gd
+++ b/objects/enemy/enemy_speedup_in_range.gd
@@ -1,8 +1,8 @@
extends "res://objects/enemy/enemy.gd"
#How far to move
-export var left_up_boundry = 0.0
-export var right_down_boundry = 0.0
+export var left_up_boundary = 0.0
+export var right_down_boundary = 0.0
#Start direction
export var direction = 1
export var slower_speed = 50
@@ -19,13 +19,19 @@ onready var timer = $Timer
var speed = 50
var go_fast = false
+func _ready():
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
+ slower_speed *= Game.enemy_speed_factor
+ faster_speed *= Game.enemy_speed_factor
+
func _physics_process(delta):
if move_direction == 0:
move_side_to_side(delta)
else: move_up_and_down(delta)
#Speed up if in raycast
if raycast.get_collider() != null:
- if raycast.get_collider().is_in_group("player"):
+ if raycast.get_collider().is_in_group("player_hitbox"):
go_fast = true
timer.set_wait_time(0.5)
timer.start()
@@ -42,10 +48,10 @@ func move_side_to_side(delta):
#Move
position.x += direction * (speed * delta)
#Switch dir
- if position.x >= startpos.x + (right_down_boundry * 8):
+ if position.x >= startpos.x + (right_down_boundary * 8):
direction = -1
if flip_sprite == true: sprite.scale.x = -1
- if position.x <= startpos.x + (-left_up_boundry * 8):
+ if position.x <= startpos.x + (-left_up_boundary * 8):
direction = 1
if flip_sprite == true: sprite.scale.x = 1
@@ -53,10 +59,10 @@ func move_up_and_down(delta):
#Move
position.y += direction * (speed * delta)
#Switch dir
- if position.y >= startpos.y + (right_down_boundry * 8):
+ if position.y >= startpos.y + (right_down_boundary * 8):
direction = -1
if flip_sprite == true: sprite.scale.y = 1
- if position.y <= startpos.y + (-left_up_boundry * 8):
+ if position.y <= startpos.y + (-left_up_boundary * 8):
direction = 1
if flip_sprite == true: sprite.scale.y = -1
diff --git a/objects/enemy/explosion.gd b/objects/enemy/explosion.gd
new file mode 100644
index 0000000..c233713
--- /dev/null
+++ b/objects/enemy/explosion.gd
@@ -0,0 +1,11 @@
+extends "res://objects/enemy/enemy.gd"
+
+func _ready():
+ $AnimatedSprite.play("explode")
+ Audio.play_sound(Audio.a_explosion,Audio.ac_boss)
+
+func _on_animation_finished():
+ queue_free()
+
+func die():
+ return
diff --git a/objects/enemy/explosion.tscn b/objects/enemy/explosion.tscn
new file mode 100644
index 0000000..8362a16
--- /dev/null
+++ b/objects/enemy/explosion.tscn
@@ -0,0 +1,56 @@
+[gd_scene load_steps=11 format=2]
+
+[ext_resource path="res://objects/enemy/explosion.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/explosion.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 2 )
+region = Rect2( 64, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 2 )
+region = Rect2( 128, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 2 )
+region = Rect2( 192, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 2 )
+region = Rect2( 256, 0, 64, 64 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 2 )
+region = Rect2( 320, 0, 64, 64 )
+
+[sub_resource type="SpriteFrames" id=7]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
+"loop": false,
+"name": "explode",
+"speed": 10.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 24, 24 )
+
+[node name="Explosion" type="Node2D"]
+pause_mode = 2
+script = ExtResource( 1 )
+blood = false
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+frames = SubResource( 7 )
+animation = "explode"
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox", "explosion"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 8 )
+
+[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_animation_finished"]
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/fish.tscn b/objects/enemy/fish.tscn
new file mode 100644
index 0000000..876e086
--- /dev/null
+++ b/objects/enemy/fish.tscn
@@ -0,0 +1,87 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://graphics/enemy/fish.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/enemy_move_sidesideupdown.gd" type="Script" id=3]
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 11, 10 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 1 )
+region = Rect2( 11, 0, 11, 10 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 1 )
+region = Rect2( 22, 0, 11, 10 )
+
+[sub_resource type="SpriteFrames" id=4]
+animations = [ {
+"frames": [ SubResource( 6 ), SubResource( 7 ), SubResource( 6 ), SubResource( 10 ) ],
+"loop": true,
+"name": "default",
+"speed": 7.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 4, 4 )
+
+[sub_resource type="Animation" id=8]
+resource_name = "glow"
+length = 2.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("AnimatedSprite:modulate")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1, 2 ),
+"transitions": PoolRealArray( 0.5, 4, 1 ),
+"update": 0,
+"values": [ Color( 1.5, 1.5, 1.5, 1 ), Color( 0.8, 0.8, 0.8, 1 ), Color( 1.5, 1.5, 1.5, 1 ) ]
+}
+
+[sub_resource type="Animation" id=9]
+resource_name = "bob"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("AnimatedSprite:position")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 6 ), Vector2( 0, 2 ), Vector2( 0, 6 ) ]
+}
+
+[node name="Fish" type="Node2D" groups=["enemy"]]
+script = ExtResource( 3 )
+node_to_flip = NodePath("AnimatedSprite")
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+modulate = Color( 0.8, 0.8, 0.8, 1 )
+light_mask = 0
+frames = SubResource( 4 )
+frame = 2
+playing = true
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0, 4 )
+shape = SubResource( 5 )
+
+[node name="GlowAnim" type="AnimationPlayer" parent="."]
+autoplay = "glow"
+anims/glow = SubResource( 8 )
+
+[node name="BobAnim" type="AnimationPlayer" parent="."]
+autoplay = "bob"
+anims/bob = SubResource( 9 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/ghost.tscn b/objects/enemy/ghost.tscn
index d6556c8..672821d 100644
--- a/objects/enemy/ghost.tscn
+++ b/objects/enemy/ghost.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://graphics/enemy/ghost.png" type="Texture" id=1]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
[ext_resource path="res://objects/enemy/ghost.gd" type="Script" id=3]
[sub_resource type="Animation" id=3]
diff --git a/objects/enemy/gore_particle.tscn b/objects/enemy/gore_particle.tscn
new file mode 100644
index 0000000..43c05fb
--- /dev/null
+++ b/objects/enemy/gore_particle.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+
+[sub_resource type="PhysicsMaterial" id=4]
+bounce = 0.25
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 1, 1 )
+
+[node name="GoreParticle" type="RigidBody2D"]
+collision_layer = 16
+physics_material_override = SubResource( 4 )
+
+[node name="Sprite" type="Sprite" parent="."]
+scale = Vector2( 0.5, 0.5 )
+texture = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 3 )
diff --git a/objects/enemy/hellarcher.tscn b/objects/enemy/hellarcher.tscn
new file mode 100644
index 0000000..11a6095
--- /dev/null
+++ b/objects/enemy/hellarcher.tscn
@@ -0,0 +1,132 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/hellarcher_shoot.png" type="Texture" id=2]
+[ext_resource path="res://objects/enemy/skelarcher.gd" type="Script" id=3]
+
+[sub_resource type="ShaderMaterial" id=18]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="RectangleShape2D" id=10]
+extents = Vector2( 4, 4 )
+
+[sub_resource type="Animation" id=19]
+resource_name = "idle"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Rect2( 0, 0, 19, 20 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:texture")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 2 ) ]
+}
+
+[sub_resource type="Animation" id=20]
+resource_name = "shoot"
+length = 0.5
+step = 0.06
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.06, 0.12, 0.24, 0.3, 0.36, 0.42 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ Rect2( 0, 0, 19, 20 ), Rect2( 19, 0, 19, 20 ), Rect2( 38, 0, 19, 20 ), Rect2( 76, 0, 19, 20 ), Rect2( 95, 0, 19, 20 ), Rect2( 114, 0, 19, 20 ), Rect2( 133, 0, 19, 20 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:texture")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 2 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("AnimationPlayer:current_animation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.48 ),
+"transitions": PoolRealArray( 1 ),
+"update": 2,
+"values": [ "idle" ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath(".")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.24 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "spawn_arrow"
+} ]
+}
+
+[node name="Hellarcher" type="Node2D" groups=["enemy"]]
+script = ExtResource( 3 )
+blood = false
+shoot_time = 2.0
+arrow_speed = 80.0
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 18 )
+position = Vector2( 5, -2 )
+texture = ExtResource( 2 )
+region_enabled = true
+region_rect = Rect2( 133, 0, 19, 20 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+position = Vector2( 5, -2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -1, 6 )
+shape = SubResource( 10 )
+
+[node name="Timer" type="Timer" parent="."]
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/idle = SubResource( 19 )
+anims/shoot = SubResource( 20 )
+
+[node name="ArrowSpawnR" type="Position2D" parent="."]
+visible = false
+position = Vector2( 9, 2 )
+
+[node name="ArrowSpawnL" type="Position2D" parent="."]
+visible = false
+position = Vector2( -9, 2 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
diff --git a/objects/enemy/laser_wall.gd b/objects/enemy/laser_wall.gd
new file mode 100644
index 0000000..931bfae
--- /dev/null
+++ b/objects/enemy/laser_wall.gd
@@ -0,0 +1,48 @@
+extends "res://objects/enemy/enemy_move_sidesideupdown.gd"
+
+export var off_time = 1.0
+export var on_time = 0.5
+export var delay = 0.0
+
+onready var line = $Laser
+onready var cast = $RayCast2D
+onready var timer = $Timer
+onready var sparks = $SparkParticles
+
+func _ready():
+ yield(get_tree().create_timer(delay, false), "timeout")
+ _disable_laser()
+ # adjust to difficulty
+ off_time /= Game.enemy_speed_factor
+ on_time /= Game.enemy_speed_factor
+
+func _physics_process(delta):
+ if cast.is_colliding():
+ line.points[1].y = line.to_local(cast.get_collision_point()).y
+ line.visible = true
+ sparks.global_position = cast.get_collision_point()
+ sparks.emitting = true
+
+ var collider = cast.get_collider()
+ if collider.is_in_group("player_hitbox") or collider.is_in_group("msx"):
+ collider.get_parent().die()
+ else:
+ line.visible = false
+ sparks.emitting = false
+
+func switch_action():
+ cast.enabled = false
+ off_time = INF
+ on_time = 0
+
+func _enable_laser():
+ cast.enabled = true
+ timer.wait_time = on_time
+ timer.connect("timeout", self, "_disable_laser", [], CONNECT_ONESHOT)
+ timer.start()
+
+func _disable_laser():
+ cast.enabled = false
+ timer.wait_time = off_time
+ timer.connect("timeout", self, "_enable_laser", [], CONNECT_ONESHOT)
+ timer.start()
diff --git a/objects/enemy/laser_wall.tscn b/objects/enemy/laser_wall.tscn
new file mode 100644
index 0000000..9b0a909
--- /dev/null
+++ b/objects/enemy/laser_wall.tscn
@@ -0,0 +1,82 @@
+[gd_scene load_steps=9 format=2]
+
+[ext_resource path="res://graphics/enemy/laser_wall.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/laser_wall.gd" type="Script" id=2]
+[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=4]
+[ext_resource path="res://graphics/enemy/tin_eye.png" type="Texture" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/animate_noise = true
+shader_param/noise_intensity = 0.5
+
+[sub_resource type="Curve" id=2]
+_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
+
+[sub_resource type="Animation" id=3]
+resource_name = "eye hue"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Eye:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.560784, 1, 0.560784, 1 ), Color( 1, 0.56, 0.567333, 1 ), Color( 0.560784, 1, 0.560784, 1 ) ]
+}
+
+[node name="LaserWall" type="Node2D"]
+script = ExtResource( 2 )
+blood = false
+speed = 16
+
+[node name="Laser" type="Line2D" parent="."]
+material = SubResource( 1 )
+position = Vector2( 4, 2 )
+points = PoolVector2Array( 0, 0, 0, 8 )
+width = 2.0
+default_color = Color( 0.960784, 0.2, 0.258824, 1 )
+
+[node name="RayCast2D" type="RayCast2D" parent="."]
+position = Vector2( 4, 2 )
+cast_to = Vector2( 0, 256 )
+collision_mask = 10
+collide_with_areas = true
+
+[node name="Timer" type="Timer" parent="."]
+process_mode = 0
+one_shot = true
+
+[node name="SparkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+amount = 16
+lifetime = 0.5
+texture = ExtResource( 4 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 30.0
+initial_velocity_random = 0.5
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.3
+scale_amount_curve = SubResource( 2 )
+color = Color( 1, 1, 0.290196, 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+centered = false
+
+[node name="Eye" type="Sprite" parent="."]
+modulate = Color( 0.560784, 1, 0.560784, 1 )
+position = Vector2( 4, 1 )
+texture = ExtResource( 5 )
+
+[node name="EyeAnim" type="AnimationPlayer" parent="."]
+autoplay = "eye hue"
+"anims/eye hue" = SubResource( 3 )
diff --git a/objects/enemy/mine.gd b/objects/enemy/mine.gd
new file mode 100644
index 0000000..934af7e
--- /dev/null
+++ b/objects/enemy/mine.gd
@@ -0,0 +1,28 @@
+extends "res://objects/enemy/enemy.gd"
+
+const Explosion = preload("res://objects/enemy/explosion.tscn")
+
+onready var chain = $Chain
+onready var hitbox = $Hitbox
+
+func _ready():
+ var ground_cast = $GroundCast
+ ground_cast.force_raycast_update()
+ if ground_cast.is_colliding():
+ chain.points[1].y = chain.to_local(ground_cast.get_collision_point()).y
+
+func _process(delta):
+ chain.points[0].x = hitbox.position.x
+
+func _on_Hitbox_area_entered(area):
+ if area.is_in_group("explosion"):
+ var timer = get_tree().create_timer(0.2, false)
+ timer.connect("timeout", self, "die")
+ if area.is_in_group("player_hitbox"):
+ die()
+
+func die():
+ var explosion = Explosion.instance()
+ explosion.global_position = hitbox.global_position
+ get_parent().call_deferred("add_child", explosion)
+ queue_free()
diff --git a/objects/enemy/mine.tscn b/objects/enemy/mine.tscn
new file mode 100644
index 0000000..e458781
--- /dev/null
+++ b/objects/enemy/mine.tscn
@@ -0,0 +1,104 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://objects/enemy/mine.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/mine.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/chain.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=4]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 7, 7.5 )
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hitbox:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 8, 8 ) ]
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("Hitbox:position:x")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 8, -0.25, 0, 0.25, 0 ),
+"times": PoolRealArray( 0 )
+}
+tracks/2/type = "bezier"
+tracks/2/path = NodePath("Hitbox:position:y")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"points": PoolRealArray( 8, -0.25, 0, 0.25, 0 ),
+"times": PoolRealArray( 0 )
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "sway"
+length = 8.0
+loop = true
+tracks/0/type = "bezier"
+tracks/0/path = NodePath("Hitbox:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"points": PoolRealArray( 4, -1.7, -0.0788159, 1.7, 0.0788159, 12, -1.9, -0.00271606, 1.9, 0.00271606, 4, -1.6, -0.0139103, 1.6, 0.0139103 ),
+"times": PoolRealArray( 0, 4, 8 )
+}
+tracks/1/type = "bezier"
+tracks/1/path = NodePath("Hitbox:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"points": PoolRealArray( 8, -0.25, 0, 0.25, 0, 8, -0.25, 0, 0.25, 0, 8, -0.25, 0, 0.25, 0, 8, -0.25, 0, 0.25, 0, 8, -0.25, 0, 0.25, 0 ),
+"times": PoolRealArray( 0, 2, 4, 6, 8 )
+}
+
+[node name="Mine" type="Node2D"]
+script = ExtResource( 1 )
+blood = false
+
+[node name="GroundCast" type="RayCast2D" parent="."]
+visible = false
+position = Vector2( 8, 8 )
+cast_to = Vector2( 0, 192 )
+
+[node name="Chain" type="Line2D" parent="."]
+material = SubResource( 4 )
+position = Vector2( 0, 8 )
+points = PoolVector2Array( 8, 0, 8, 16 )
+width = 4.0
+default_color = Color( 1, 1, 1, 1 )
+texture = ExtResource( 3 )
+texture_mode = 1
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+position = Vector2( 8, 8 )
+
+[node name="Sprite" type="Sprite" parent="Hitbox"]
+texture = ExtResource( 2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0, 0.5 )
+shape = SubResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 2 )
+anims/sway = SubResource( 3 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/robosnake.tscn b/objects/enemy/robosnake.tscn
new file mode 100644
index 0000000..e98abe4
--- /dev/null
+++ b/objects/enemy/robosnake.tscn
@@ -0,0 +1,9 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://objects/enemy/snake.tscn" type="PackedScene" id=1]
+
+[node name="Snake" instance=ExtResource( 1 )]
+
+[node name="AnimatedSprite" parent="." index="0"]
+animation = "robo"
+frame = 1
diff --git a/objects/enemy/robot_die.gd b/objects/enemy/robot_die.gd
new file mode 100644
index 0000000..ff779ad
--- /dev/null
+++ b/objects/enemy/robot_die.gd
@@ -0,0 +1,23 @@
+extends Node2D
+
+
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
+
+
+export var spray_color := Color(0x20223aff)
+export var spray_ammount: int = 16
+export var spray_velocity: float = 80
+
+
+func _ready() -> void:
+ $AnimatedSprite.playing = true
+ for i in spray_ammount:
+ var spray = BloodSpray.instance()
+ spray.color = spray_color
+ spray.global_position = global_position
+ spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * TAU)
+ get_parent().add_child(spray)
+
+
+func _on_AnimatedSprite_animation_finished():
+ $AnimatedSprite.queue_free()
diff --git a/objects/enemy/roboturret.gd b/objects/enemy/roboturret.gd
new file mode 100644
index 0000000..bef4570
--- /dev/null
+++ b/objects/enemy/roboturret.gd
@@ -0,0 +1,49 @@
+extends "res://objects/enemy/enemy.gd"
+
+#Exports
+export var shoot_time = 1.0
+export var arrow_speed = 80.0
+#Onready
+onready var timer = $Timer
+onready var anims = $AnimationPlayer
+onready var shootpos = $ShootPos
+onready var raycast = $RayCast2D
+onready var muzzle_flash = $MuzzleFlashParticles
+const ArrowProjectile = preload("res://objects/enemy/roboturret_proj.tscn")
+const Death = preload("res://objects/enemy/roboturret_die.tscn")
+
+func _ready():
+ timer.start(shoot_time)
+ death_sound = Audio.a_explosion
+ # adjust to difficulty
+ shoot_time /= Game.enemy_speed_factor
+ arrow_speed *= Game.enemy_speed_factor
+
+func _physics_process(delta):
+ if raycast.is_colliding():
+ if raycast.get_collider().is_in_group("player_hitbox"):
+ if sign(shootpos.position.x) == -1:
+ anims.play("turn right")
+ else:
+ anims.play("turn left")
+
+func spawn_bullet():
+ muzzle_flash.emitting = true
+ var arrow = ArrowProjectile.instance()
+ arrow.global_position = global_position + (shootpos.position * scale)
+ arrow.direction = sign(shootpos.position.x) * scale.x
+ arrow.target_group = "player_hitbox"
+ arrow.speed = arrow_speed
+ Game.get_map().add_child(arrow)
+
+func die():
+ .die()
+ var death = Death.instance()
+ death.spray_color = Color(0xffbe42ff)
+ death.global_position = global_position
+ get_parent().add_child(death)
+
+func _on_Timer_timeout():
+ if !anims.is_playing(): spawn_bullet()
+
+
diff --git a/objects/enemy/roboturret.tscn b/objects/enemy/roboturret.tscn
new file mode 100644
index 0000000..6d0d60f
--- /dev/null
+++ b/objects/enemy/roboturret.tscn
@@ -0,0 +1,271 @@
+[gd_scene load_steps=14 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/roboturret.png" type="Texture" id=2]
+[ext_resource path="res://objects/enemy/roboturret.gd" type="Script" id=3]
+[ext_resource path="res://graphics/enemy/tin_eye.png" type="Texture" id=4]
+[ext_resource path="res://graphics/particles/muzzle_flash.png" type="Texture" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ShootPos:position")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -9, 3 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("MuzzleFlashParticles:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 240.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("MuzzleFlashParticles:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( -7, 3 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "turn left"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 4, 3, 2, 1, 0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShootPos:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ Vector2( 15, 3 ), Vector2( -9, 3 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("RayCast2D:cast_to")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ Vector2( -48, 0 ), Vector2( 48, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("MuzzleFlashParticles:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 60.0, 240.0 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("MuzzleFlashParticles:position")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 13, 3 ), Vector2( -7, 3 ) ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "turn right"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3, 4 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ShootPos:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ Vector2( -9, 3 ), Vector2( 15, 3 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("RayCast2D:cast_to")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ Vector2( 48, 0 ), Vector2( -48, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("MuzzleFlashParticles:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -7, 3 ), Vector2( 13, 3 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("MuzzleFlashParticles:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.4 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 240.0, 60.0 ]
+}
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 2, 3 )
+
+[sub_resource type="Animation" id=6]
+resource_name = "eye hue"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Eye:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.560784, 1, 0.560784, 1 ), Color( 1, 0.56, 0.567333, 1 ), Color( 0.560784, 1, 0.560784, 1 ) ]
+}
+
+[sub_resource type="Curve" id=7]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.5, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=8]
+interpolation_mode = 2
+offsets = PoolRealArray( 0.20339, 0.432203 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[node name="Roboturret" type="Node2D" groups=["enemy"]]
+script = ExtResource( 3 )
+blood = false
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 1 )
+position = Vector2( 3, 0 )
+texture = ExtResource( 2 )
+hframes = 5
+region_rect = Rect2( 20, 0, 20, 16 )
+
+[node name="Eye" type="Sprite" parent="."]
+modulate = Color( 0.912157, 0.648, 0.566023, 1 )
+position = Vector2( 3, 3 )
+texture = ExtResource( 4 )
+
+[node name="ShootPos" type="Position2D" parent="."]
+position = Vector2( -9, 3 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+playback_speed = 0.75
+anims/RESET = SubResource( 2 )
+"anims/turn left" = SubResource( 3 )
+"anims/turn right" = SubResource( 4 )
+
+[node name="Timer" type="Timer" parent="."]
+
+[node name="RayCast2D" type="RayCast2D" parent="."]
+position = Vector2( 3, 3 )
+enabled = true
+cast_to = Vector2( 48, 0 )
+collision_mask = 10
+collide_with_areas = true
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 3, 5 )
+shape = SubResource( 5 )
+
+[node name="EyeAnim" type="AnimationPlayer" parent="."]
+autoplay = "eye hue"
+"anims/eye hue" = SubResource( 6 )
+
+[node name="MuzzleFlashParticles" type="CPUParticles2D" parent="."]
+pause_mode = 2
+unique_name_in_owner = true
+position = Vector2( -7, 3 )
+rotation = 4.18879
+emitting = false
+amount = 6
+lifetime = 0.1
+one_shot = true
+explosiveness = 0.75
+draw_order = 1
+texture = ExtResource( 5 )
+gravity = Vector2( 0, 0 )
+angle = 120.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 7 )
+color_ramp = SubResource( 8 )
+
+[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/roboturret_die.tscn b/objects/enemy/roboturret_die.tscn
new file mode 100644
index 0000000..791a040
--- /dev/null
+++ b/objects/enemy/roboturret_die.tscn
@@ -0,0 +1,158 @@
+[gd_scene load_steps=17 format=2]
+
+[ext_resource path="res://graphics/enemy/explosion_small.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/robot_die.gd" type="Script" id=2]
+[ext_resource path="res://graphics/enemy/roboturret.png" type="Texture" id=3]
+[ext_resource path="res://scripts/launch_rigid.gd" type="Script" id=4]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 1 )
+region = Rect2( 32, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 1 )
+region = Rect2( 48, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 1 )
+region = Rect2( 64, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 1 )
+region = Rect2( 80, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=7]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
+"loop": false,
+"name": "default",
+"speed": 20.0
+} ]
+
+[sub_resource type="PhysicsMaterial" id=9]
+bounce = 0.1
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 3, 1 )
+
+[sub_resource type="RectangleShape2D" id=10]
+extents = Vector2( 3, 2.5 )
+
+[sub_resource type="RectangleShape2D" id=11]
+extents = Vector2( 2, 1.5 )
+
+[sub_resource type="RectangleShape2D" id=12]
+extents = Vector2( 2, 1.5 )
+
+[node name="RoboTurret" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+position = Vector2( 3, 3 )
+frames = SubResource( 7 )
+
+[node name="Barrel" type="RigidBody2D" parent="."]
+position = Vector2( -2, 6 )
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="Barrel"]
+position = Vector2( -2, -2 )
+texture = ExtResource( 3 )
+region_enabled = true
+region_rect = Rect2( -1, 9, 8, 5 )
+region_filter_clip = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Barrel"]
+position = Vector2( -1, -3 )
+shape = SubResource( 8 )
+
+[node name="Timer" type="Timer" parent="Barrel"]
+wait_time = 5.0
+autostart = true
+
+[node name="Head" type="RigidBody2D" parent="."]
+position = Vector2( -2, 6 )
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="Head"]
+position = Vector2( 6, -3 )
+texture = ExtResource( 3 )
+region_enabled = true
+region_rect = Rect2( 7, 8, 8, 5 )
+region_filter_clip = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Head"]
+position = Vector2( 5, -3.5 )
+shape = SubResource( 10 )
+
+[node name="Timer" type="Timer" parent="Head"]
+wait_time = 5.0
+autostart = true
+
+[node name="BaseL" type="RigidBody2D" parent="."]
+position = Vector2( -2, 6 )
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="BaseL"]
+position = Vector2( 3, 1 )
+texture = ExtResource( 3 )
+region_enabled = true
+region_rect = Rect2( 6, 13, 4, 3 )
+region_filter_clip = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="BaseL"]
+position = Vector2( 3, 0.5 )
+shape = SubResource( 11 )
+
+[node name="Timer" type="Timer" parent="BaseL"]
+wait_time = 5.0
+autostart = true
+
+[node name="BaseR" type="RigidBody2D" parent="."]
+position = Vector2( -2, 6 )
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="BaseR"]
+position = Vector2( 7, 1 )
+texture = ExtResource( 3 )
+region_enabled = true
+region_rect = Rect2( 10, 13, 4, 3 )
+region_filter_clip = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="BaseR"]
+position = Vector2( 7, 0.5 )
+shape = SubResource( 12 )
+
+[node name="Timer" type="Timer" parent="BaseR"]
+wait_time = 5.0
+autostart = true
+
+[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_AnimatedSprite_animation_finished"]
+[connection signal="timeout" from="Barrel/Timer" to="Barrel" method="queue_free"]
+[connection signal="timeout" from="Head/Timer" to="Head" method="queue_free"]
+[connection signal="timeout" from="BaseL/Timer" to="BaseL" method="queue_free"]
+[connection signal="timeout" from="BaseR/Timer" to="BaseR" method="queue_free"]
diff --git a/objects/enemy/roboturret_proj.tscn b/objects/enemy/roboturret_proj.tscn
new file mode 100644
index 0000000..eb04445
--- /dev/null
+++ b/objects/enemy/roboturret_proj.tscn
@@ -0,0 +1,76 @@
+[gd_scene load_steps=9 format=2]
+
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=1]
+[ext_resource path="res://graphics/enemy/roboturret_projectile.png" type="Texture" id=2]
+[ext_resource path="res://objects/player/arrow_projectile.gd" type="Script" id=3]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=4]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 4 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="Curve" id=3]
+_data = [ Vector2( 0, 1 ), 0.0, -0.139481, 0, 0, Vector2( 1, 0 ), -2.82064, 0.0, 0, 0 ]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 3.5, 1 )
+
+[sub_resource type="Curve" id=6]
+_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
+
+[node name="BulletBall" type="Node2D"]
+light_mask = 0
+script = ExtResource( 3 )
+target_group = "player_hitbox"
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 7 )
+z_index = -1
+texture = ExtResource( 2 )
+
+[node name="DustParticles" type="CPUParticles2D" parent="."]
+show_behind_parent = true
+position = Vector2( -2, 0 )
+z_index = -1
+local_coords = false
+texture = ExtResource( 1 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 8.0
+initial_velocity_random = 0.18
+damping = 1.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.25
+scale_amount_random = 0.25
+scale_amount_curve = SubResource( 3 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["arrow"]]
+collision_layer = 4
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( -0.5, 0 )
+shape = SubResource( 1 )
+
+[node name="SparkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+emitting = false
+amount = 16
+lifetime = 0.5
+one_shot = true
+explosiveness = 1.0
+texture = ExtResource( 1 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 30.0
+initial_velocity_random = 0.5
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.3
+scale_amount_curve = SubResource( 6 )
+color = Color( 1, 1, 0.290196, 1 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"]
diff --git a/objects/enemy/rolling_fiend.gd b/objects/enemy/rolling_fiend.gd
index 40467bb..a0c88b0 100644
--- a/objects/enemy/rolling_fiend.gd
+++ b/objects/enemy/rolling_fiend.gd
@@ -1,32 +1,64 @@
extends "res://objects/enemy/enemy.gd"
-export var move_speed: float = 0.0
+## the floor directions a fiend can be attached to
+const DIRS = [Vector2.DOWN, Vector2.RIGHT, Vector2.UP, Vector2.LEFT]
+
+export var move_speed: float = 50.0
export var clockwise: bool = false
+## keep options for shape query around because they will mostly stay the same
onready var floor_test = Physics2DShapeQueryParameters.new()
onready var test_shape = $FloorTestShape
-var floor_direction = Vector2.ZERO
+## index of the current floor direction
+var floor_direction: int = 0
+## builds up movement so that fractional movement carries on
+var movement_accumulator: float = 0.0
func _ready():
+ # scale animation to move speed
+ $AnimatedSprite.speed_scale = inverse_lerp(0.0, 50.0, move_speed)
+ # flip if going backwards
if clockwise:
$AnimatedSprite.flip_h = true
+ # fill in shape query parameters that stay the same
floor_test.set_shape(test_shape.shape)
floor_test.collision_layer = 1
- for dir in [Vector2.DOWN, Vector2.UP, Vector2.LEFT, Vector2.RIGHT]:
- if is_on_surface(dir):
- floor_direction = dir
+ # loop through possible directions to find which one should start on
+ for i in DIRS.size():
+ if is_on_surface(DIRS[i]):
+ floor_direction = i
break
+ # adjust to difficulty
+ move_speed *= Game.enemy_speed_factor
func _physics_process(delta):
- var rot_dir = -1.5708 if clockwise else 1.5708
- if !is_on_surface(floor_direction):
- floor_direction = floor_direction.rotated(-rot_dir)
- elif is_on_surface(floor_direction.rotated(rot_dir)):
- floor_direction = floor_direction.rotated(rot_dir)
- position += floor_direction.rotated(rot_dir) * move_speed * delta
+ # add to accumulator
+ movement_accumulator += move_speed * delta
+ # move one pixel at a time until out of integer movment
+ while movement_accumulator >= 1.0:
+ # check next direction for wall if clockwise, else previous
+ var offset = 1 if clockwise else -1
+ # movement dir should be the next direction from the floor direction
+ var move_dir = posmod(floor_direction + offset, DIRS.size())
+ # check if gone off edge
+ if !is_on_surface(DIRS[floor_direction]):
+ # change to next floor direction
+ floor_direction = posmod(floor_direction - offset, DIRS.size())
+ # check if collided with wall
+ elif is_on_surface(DIRS[move_dir]):
+ # new floor direction is where wall is
+ floor_direction = move_dir
+ # move along new floor direction
+ position += DIRS[posmod(floor_direction + offset, DIRS.size())]
+ # 1 pixel of movement spent from accumulator
+ movement_accumulator -= 1.0
+## tests if there is a floor 1 pixel in the direction tested
func is_on_surface(dir):
+ # get the physics space state
var space_state = get_world_2d().direct_space_state
+ # set position to test box at, moved 1 pixel in the direction tested
floor_test.transform = test_shape.global_transform.translated(dir)
- return space_state.collide_shape(floor_test, 1).size() > 0
+ # collide_shape returns array of collisions, if not empy there is a floor there
+ return not space_state.collide_shape(floor_test, 1).empty()
diff --git a/objects/enemy/rolling_fiend.tscn b/objects/enemy/rolling_fiend.tscn
index 366d513..fd842ee 100644
--- a/objects/enemy/rolling_fiend.tscn
+++ b/objects/enemy/rolling_fiend.tscn
@@ -1,8 +1,8 @@
[gd_scene load_steps=10 format=2]
-[ext_resource path="res://graphics/enemy/roller_fiend.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/rolling_fiend.png" type="Texture" id=2]
[ext_resource path="res://objects/enemy/rolling_fiend.gd" type="Script" id=3]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=4]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=4]
[sub_resource type="ShaderMaterial" id=5]
shader = ExtResource( 4 )
@@ -29,18 +29,16 @@ animations = [ {
extents = Vector2( 3.5, 3.5 )
[sub_resource type="RectangleShape2D" id=4]
-extents = Vector2( 4, 4 )
+extents = Vector2( 4, 3.75 )
[node name="RollingFiend" type="Node2D" groups=["enemy"]]
script = ExtResource( 3 )
score_for_killing = 40
-move_speed = 50.0
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
material = SubResource( 5 )
position = Vector2( 4, 4 )
frames = SubResource( 3 )
-frame = 1
playing = true
[node name="FloorTestShape" type="CollisionShape2D" parent="."]
@@ -51,6 +49,7 @@ shape = SubResource( 8 )
position = Vector2( 4, 4 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0, 0.25 )
shape = SubResource( 4 )
[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/rolling_saw.tscn b/objects/enemy/rolling_saw.tscn
new file mode 100644
index 0000000..cee4f76
--- /dev/null
+++ b/objects/enemy/rolling_saw.tscn
@@ -0,0 +1,57 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://graphics/enemy/sawblade.png" type="Texture" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://objects/enemy/rolling_fiend.gd" type="Script" id=3]
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 12, 12 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 12, 0, 12, 12 )
+
+[sub_resource type="SpriteFrames" id=3]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ) ],
+"loop": true,
+"name": "default",
+"speed": 20.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 3.5, 3.5 )
+
+[sub_resource type="RectangleShape2D" id=4]
+extents = Vector2( 4, 3.75 )
+
+[node name="RollingSaw" type="Node2D" groups=["enemy"]]
+script = ExtResource( 3 )
+score_for_killing = 40
+blood = false
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+material = SubResource( 5 )
+position = Vector2( 4, 4 )
+frames = SubResource( 3 )
+frame = 1
+playing = true
+
+[node name="FloorTestShape" type="CollisionShape2D" parent="."]
+position = Vector2( 4, 4 )
+shape = SubResource( 8 )
+
+[node name="Hitbox" type="Area2D" parent="."]
+position = Vector2( 4, 4 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0, 0.25 )
+shape = SubResource( 4 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/scope.tscn b/objects/enemy/scope.tscn
new file mode 100644
index 0000000..7f9ef94
--- /dev/null
+++ b/objects/enemy/scope.tscn
@@ -0,0 +1,148 @@
+[gd_scene load_steps=19 format=2]
+
+[ext_resource path="res://objects/enemy/cop.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/cop/scope_idle.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/cop/scope_walk.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/cop/scope_shoot.png" type="Texture" id=4]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=5]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=6]
+[ext_resource path="res://graphics/particles/muzzle_flash.png" type="Texture" id=7]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 5 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 3 )
+region = Rect2( 20, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 3 )
+region = Rect2( 40, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 3 )
+region = Rect2( 60, 0, 20, 21 )
+
+[sub_resource type="SpriteFrames" id=6]
+animations = [ {
+"frames": [ ExtResource( 2 ) ],
+"loop": false,
+"name": "idle",
+"speed": 5.0
+}, {
+"frames": [ ExtResource( 4 ) ],
+"loop": false,
+"name": "shoot",
+"speed": 1.0
+}, {
+"frames": [ SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ) ],
+"loop": true,
+"name": "walk",
+"speed": 5.0
+} ]
+
+[sub_resource type="Curve" id=11]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.5, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=12]
+interpolation_mode = 2
+offsets = PoolRealArray( 0.20339, 0.432203 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 3, 8 )
+
+[sub_resource type="Curve" id=9]
+_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=10]
+offsets = PoolRealArray( 0, 0.515152 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[node name="Cop" type="Node2D" groups=["cop", "enemy"]]
+script = ExtResource( 1 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+show_behind_parent = true
+material = SubResource( 7 )
+position = Vector2( 5, -2 )
+frames = SubResource( 6 )
+animation = "idle"
+playing = true
+
+[node name="ShootPosition" type="Position2D" parent="AnimatedSprite"]
+unique_name_in_owner = true
+position = Vector2( 7, 0.5 )
+__meta__ = {
+"_gizmo_extents_": 4.0
+}
+
+[node name="ShootCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+enabled = true
+cast_to = Vector2( 72, 0 )
+collision_mask = 8
+collide_with_areas = true
+
+[node name="GraphicsCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+cast_to = Vector2( 256, 0 )
+collision_mask = 8
+
+[node name="ShootLine" type="Line2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+points = PoolVector2Array( 0, 0, 8, 0 )
+width = 1.0
+default_color = Color( 1, 1, 0.290196, 1 )
+
+[node name="MuzzleFlashParticles" type="CPUParticles2D" parent="AnimatedSprite/ShootPosition"]
+pause_mode = 2
+unique_name_in_owner = true
+rotation = 1.0472
+emitting = false
+amount = 6
+lifetime = 0.1
+one_shot = true
+explosiveness = 0.75
+draw_order = 1
+texture = ExtResource( 7 )
+gravity = Vector2( 0, 0 )
+angle = 120.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 11 )
+color_ramp = SubResource( 12 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 0 )
+shape = SubResource( 8 )
+
+[node name="SparkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+emitting = false
+amount = 16
+lifetime = 0.5
+one_shot = true
+explosiveness = 1.0
+texture = ExtResource( 6 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 30.0
+initial_velocity_random = 0.5
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_curve = SubResource( 9 )
+color_ramp = SubResource( 10 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/sheriff.tscn b/objects/enemy/sheriff.tscn
new file mode 100644
index 0000000..8e6bd67
--- /dev/null
+++ b/objects/enemy/sheriff.tscn
@@ -0,0 +1,148 @@
+[gd_scene load_steps=19 format=2]
+
+[ext_resource path="res://objects/enemy/cop.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/cop/the_sheriff_idle.png" type="Texture" id=2]
+[ext_resource path="res://graphics/enemy/cop/the_sheriff_shoot.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/cop/the_sheriff_walk.png" type="Texture" id=4]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=5]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=6]
+[ext_resource path="res://graphics/particles/muzzle_flash.png" type="Texture" id=7]
+
+[sub_resource type="ShaderMaterial" id=7]
+shader = ExtResource( 5 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 4 )
+region = Rect2( 20, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 4 )
+region = Rect2( 40, 0, 20, 21 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 4 )
+region = Rect2( 60, 0, 20, 21 )
+
+[sub_resource type="SpriteFrames" id=6]
+animations = [ {
+"frames": [ ExtResource( 2 ) ],
+"loop": false,
+"name": "idle",
+"speed": 5.0
+}, {
+"frames": [ ExtResource( 3 ) ],
+"loop": false,
+"name": "shoot",
+"speed": 1.0
+}, {
+"frames": [ SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ) ],
+"loop": true,
+"name": "walk",
+"speed": 5.0
+} ]
+
+[sub_resource type="Curve" id=11]
+_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.5, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=12]
+interpolation_mode = 2
+offsets = PoolRealArray( 0.20339, 0.432203 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 3, 8 )
+
+[sub_resource type="Curve" id=9]
+_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=10]
+offsets = PoolRealArray( 0, 0.515152 )
+colors = PoolColorArray( 1, 1, 1, 1, 1, 1, 0.290196, 1 )
+
+[node name="Cop" type="Node2D" groups=["cop", "enemy"]]
+script = ExtResource( 1 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+show_behind_parent = true
+material = SubResource( 7 )
+position = Vector2( 5, -2 )
+frames = SubResource( 6 )
+animation = "idle"
+playing = true
+
+[node name="ShootPosition" type="Position2D" parent="AnimatedSprite"]
+unique_name_in_owner = true
+position = Vector2( 7, 0.5 )
+__meta__ = {
+"_gizmo_extents_": 4.0
+}
+
+[node name="ShootCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+enabled = true
+cast_to = Vector2( 72, 0 )
+collision_mask = 8
+collide_with_areas = true
+
+[node name="GraphicsCast" type="RayCast2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+cast_to = Vector2( 256, 0 )
+collision_mask = 8
+
+[node name="ShootLine" type="Line2D" parent="AnimatedSprite/ShootPosition"]
+unique_name_in_owner = true
+visible = false
+points = PoolVector2Array( 0, 0, 8, 0 )
+width = 1.0
+default_color = Color( 1, 1, 0.290196, 1 )
+
+[node name="MuzzleFlashParticles" type="CPUParticles2D" parent="AnimatedSprite/ShootPosition"]
+pause_mode = 2
+unique_name_in_owner = true
+rotation = 1.0472
+emitting = false
+amount = 6
+lifetime = 0.1
+one_shot = true
+explosiveness = 0.75
+draw_order = 1
+texture = ExtResource( 7 )
+gravity = Vector2( 0, 0 )
+angle = 120.0
+angle_random = 1.0
+scale_amount_curve = SubResource( 11 )
+color_ramp = SubResource( 12 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 0 )
+shape = SubResource( 8 )
+
+[node name="SparkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+emitting = false
+amount = 16
+lifetime = 0.5
+one_shot = true
+explosiveness = 1.0
+texture = ExtResource( 6 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 30.0
+initial_velocity_random = 0.5
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_curve = SubResource( 9 )
+color_ramp = SubResource( 10 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/skelarcher.gd b/objects/enemy/skelarcher.gd
index ad99ef6..7e6c9a8 100644
--- a/objects/enemy/skelarcher.gd
+++ b/objects/enemy/skelarcher.gd
@@ -2,10 +2,9 @@ extends "res://objects/enemy/enemy.gd"
const ArrowProjectile = preload("res://objects/enemy/enemy_arrow.tscn")
const BoneParticle = preload("res://objects/enemy/bone_particle.tscn")
-const arrowpos = Vector2(9,2)
export var shoot_time = 1.0
-export var arrow_speed = 120.0
+export var arrow_speed = 60.0
# bone death particles
export var bones_amount = 12
export var bones_speed = 50.0
@@ -17,8 +16,11 @@ onready var arrow_spawn_l = $ArrowSpawnL
onready var arrow_spawn_r = $ArrowSpawnR
func _ready():
- death_sound = Game.a_die_skeleton
+ death_sound = Audio.a_die_skeleton
timer.start(shoot_time)
+ # adjust to difficulty
+ shoot_time /= Game.enemy_speed_factor
+ arrow_speed *= Game.enemy_speed_factor
func _on_Timer_timeout():
anims.play("shoot")
@@ -30,10 +32,9 @@ func spawn_arrow():
else:
arrow.global_position = global_position + arrow_spawn_l.position
arrow.direction = scale.x
- arrow.target_group = "player"
+ arrow.target_group = "player_hitbox"
arrow.speed = arrow_speed
Game.get_map().add_child(arrow)
- timer.start(shoot_time)
func die():
for n in bones_amount:
@@ -42,7 +43,7 @@ func die():
bone.global_position = global_position
bone.linear_velocity = Vector2(bones_speed * rand_range(0.5, 1.5), 0.0).rotated(rand_range(-PI, 0.0))
bone.angular_velocity = rand_range(-PI*2.0, PI*2.0)
- var timer = get_tree().create_timer(3.0 + rand_range(0.0, 1.0), false)
- timer.connect("timeout", bone, "queue_free")
+ var bone_timer = get_tree().create_timer(3.0 + rand_range(0.0, 1.0), false)
+ bone_timer.connect("timeout", bone, "queue_free")
get_parent().call_deferred("add_child", bone)
.die() # call rest of enemy.gd die() funciton
diff --git a/objects/enemy/skelarcher.tscn b/objects/enemy/skelarcher.tscn
index 0f4af1a..8c9e724 100644
--- a/objects/enemy/skelarcher.tscn
+++ b/objects/enemy/skelarcher.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=8 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
[ext_resource path="res://graphics/enemy/skelarcher_shoot.png" type="Texture" id=2]
[ext_resource path="res://objects/enemy/skelarcher.gd" type="Script" id=4]
@@ -13,7 +13,6 @@ shader_param/border_corners = true
extents = Vector2( 4, 4 )
[sub_resource type="Animation" id=19]
-resource_name = "idle"
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:region_rect")
tracks/0/interp = 1
@@ -40,7 +39,6 @@ tracks/1/keys = {
}
[sub_resource type="Animation" id=20]
-resource_name = "shoot"
length = 0.5
step = 0.06
tracks/0/type = "value"
@@ -97,7 +95,7 @@ tracks/3/keys = {
[node name="Skelarcher" type="Node2D" groups=["enemy"]]
script = ExtResource( 4 )
blood = false
-shoot_time = 3.0
+shoot_time = 2.0
[node name="Sprite" type="Sprite" parent="."]
material = SubResource( 18 )
diff --git a/objects/enemy/slime.gd b/objects/enemy/slime.gd
new file mode 100644
index 0000000..2f9d7c4
--- /dev/null
+++ b/objects/enemy/slime.gd
@@ -0,0 +1,11 @@
+extends "res://objects/enemy/enemy.gd"
+
+const slime_particles = preload("res://objects/enemy/slime_particles.tscn")
+
+func die():
+ .die()
+ var death_particles = slime_particles.instance()
+ death_particles.global_position = global_position + death_blood_offset
+ death_particles.emitting = true
+ get_parent().add_child(death_particles)
+
diff --git a/objects/enemy/slime.tscn b/objects/enemy/slime.tscn
index 3600715..ad00ed9 100644
--- a/objects/enemy/slime.tscn
+++ b/objects/enemy/slime.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=10 format=2]
[ext_resource path="res://graphics/enemy/slime.png" type="Texture" id=1]
-[ext_resource path="res://scripts/recolor_border.shader" type="Shader" id=2]
-[ext_resource path="res://graphics/enemy/slime_purple.png" type="Texture" id=3]
-[ext_resource path="res://objects/enemy/enemy.gd" type="Script" id=4]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/pal_slime_purple.png" type="Texture" id=3]
+[ext_resource path="res://objects/enemy/slime.gd" type="Script" id=4]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 2 )
@@ -28,23 +28,24 @@ animations = [ {
} ]
[sub_resource type="RectangleShape2D" id=5]
-extents = Vector2( 5.5, 4.5 )
+extents = Vector2( 4, 4 )
[node name="Slime" type="Node2D" groups=["enemy"]]
script = ExtResource( 4 )
-score_for_killing = 10
+blood = false
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
material = SubResource( 1 )
-position = Vector2( 1, 3 )
+position = Vector2( 4, 3 )
frames = SubResource( 4 )
+frame = 1
playing = true
[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
position = Vector2( -4, 0 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
-position = Vector2( 4.5, 3.5 )
+position = Vector2( 8, 4 )
shape = SubResource( 5 )
[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/slime_particles.gd b/objects/enemy/slime_particles.gd
new file mode 100644
index 0000000..2c9164f
--- /dev/null
+++ b/objects/enemy/slime_particles.gd
@@ -0,0 +1,17 @@
+extends CPUParticles2D
+
+
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
+
+
+export var spray_ammount: int = 16
+export var spray_velocity: float = 80
+
+
+func _ready() -> void:
+ for i in spray_ammount:
+ var spray = BloodSpray.instance()
+ spray.global_position = global_position
+ spray.color = Color(0xa05ef2ff)
+ spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * TAU)
+ get_parent().add_child(spray)
diff --git a/objects/enemy/slime_particles.tscn b/objects/enemy/slime_particles.tscn
new file mode 100644
index 0000000..e38f9f0
--- /dev/null
+++ b/objects/enemy/slime_particles.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/slime.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/slime_particles.gd" type="Script" id=2]
+
+[sub_resource type="Curve" id=43]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[node name="DeathSplatter" type="CPUParticles2D"]
+emitting = false
+amount = 16
+lifetime = 0.4
+one_shot = true
+speed_scale = 1.25
+explosiveness = 0.9
+local_coords = false
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 43 )
+script = ExtResource( 2 )
diff --git a/objects/enemy/snail.tscn b/objects/enemy/snail.tscn
index 5ff0998..d3aac96 100644
--- a/objects/enemy/snail.tscn
+++ b/objects/enemy/snail.tscn
@@ -1,14 +1,8 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=7 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
[ext_resource path="res://graphics/enemy/snail.png" type="Texture" id=2]
[ext_resource path="res://objects/enemy/enemy_speedup_in_range.gd" type="Script" id=3]
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 1 )
-shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = false
-
[sub_resource type="AtlasTexture" id=2]
atlas = ExtResource( 2 )
region = Rect2( 0, 0, 12, 11 )
@@ -32,13 +26,11 @@ extents = Vector2( 4, 4 )
script = ExtResource( 3 )
score_for_killing = 30
slower_speed = 30
-faster_speed = 80
+faster_speed = 60
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
-material = SubResource( 1 )
position = Vector2( 3, 3 )
frames = SubResource( 4 )
-frame = 1
playing = true
[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
diff --git a/objects/enemy/snake.tscn b/objects/enemy/snake.tscn
index 5e6505f..a64061d 100644
--- a/objects/enemy/snake.tscn
+++ b/objects/enemy/snake.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=12 format=2]
[ext_resource path="res://graphics/enemy/snake.png" type="Texture" id=1]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
[ext_resource path="res://objects/enemy/enemy_move_sidesideupdown.gd" type="Script" id=3]
+[ext_resource path="res://graphics/enemy/robosnake.png" type="Texture" id=4]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 2 )
@@ -17,12 +18,25 @@ region = Rect2( 0, 0, 16, 16 )
atlas = ExtResource( 1 )
region = Rect2( 16, 0, 16, 16 )
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 4 )
+region = Rect2( 16, 0, 16, 16 )
+
[sub_resource type="SpriteFrames" id=4]
animations = [ {
"frames": [ SubResource( 2 ), SubResource( 3 ) ],
"loop": true,
"name": "default",
"speed": 7.0
+}, {
+"frames": [ SubResource( 6 ), SubResource( 7 ) ],
+"loop": true,
+"name": "robo",
+"speed": 7.0
} ]
[sub_resource type="RectangleShape2D" id=5]
@@ -31,10 +45,12 @@ extents = Vector2( 4, 4 )
[node name="Snake" type="Node2D" groups=["enemy"]]
script = ExtResource( 3 )
score_for_killing = 15
+node_to_flip = NodePath("AnimatedSprite")
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
material = SubResource( 1 )
frames = SubResource( 4 )
+frame = 1
playing = true
[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
diff --git a/objects/enemy/spider.gd b/objects/enemy/spider.gd
index 4550a79..445a9cc 100644
--- a/objects/enemy/spider.gd
+++ b/objects/enemy/spider.gd
@@ -23,6 +23,8 @@ func _ready():
hitbox.global_position.y = old_y
line.points[1].y = hitbox.position.y
raycast.queue_free()
+ # adjust to difficulty
+ speed *= Game.enemy_speed_factor
func _physics_process(delta):
hitbox.position.y += direction * speed * delta
diff --git a/objects/enemy/spider.tscn b/objects/enemy/spider.tscn
index 5c91706..eb4a9bc 100644
--- a/objects/enemy/spider.tscn
+++ b/objects/enemy/spider.tscn
@@ -42,6 +42,7 @@ position = Vector2( 5, 5 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="Hitbox"]
frames = SubResource( 3 )
+frame = 1
playing = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
diff --git a/objects/enemy/squig.gd b/objects/enemy/squig.gd
new file mode 100644
index 0000000..05923fa
--- /dev/null
+++ b/objects/enemy/squig.gd
@@ -0,0 +1,104 @@
+extends "res://objects/enemy/enemy.gd"
+
+enum State {SWIMMING, FALLING, TRANSITION}
+
+# whether the squid should start in falling state
+export var start_falling: bool = false
+export var speed: float = 50.0
+export var damping: float = 0.9
+export var delay: float = 1.0
+# margin of screen hitbox is disabled in
+export var hitbox_clip: Rect2 = Rect2(0.0, 0.0, 7.0, 7.0)
+export var full_clip: Rect2 = Rect2(-4.0, -4.0, 16.0, 16.0)
+
+
+var velocity: Vector2 = Vector2.ZERO
+# start of the sector it is trapped in
+var home_sector: Vector2 = Vector2.ZERO
+var _can_transition: bool = true
+
+
+onready var current_state: int = State.SWIMMING
+onready var hitbox_shape: CollisionShape2D = $"%HitboxShape"
+onready var animation_player: AnimationPlayer = $AnimationPlayer
+
+
+func _ready() -> void:
+ if start_falling:
+ _start_falling()
+ else:
+ _start_swimming()
+ home_sector = Game.get_sector(global_position)
+
+func _physics_process(delta: float) -> void:
+ if Game.current_sector != home_sector:
+ hitbox_shape.disabled = true
+ return
+ # process movement and apply damping
+ velocity.y *= pow(damping, delta)
+ if current_state == State.FALLING:
+ velocity.y = speed
+ global_position += velocity * delta
+
+ var sector_rect = Rect2(home_sector * Game.RESOLUTION, Game.RESOLUTION)
+
+ # disable hitbox at edge of screen
+ var global_hitbox_clip = hitbox_clip
+ global_hitbox_clip.position += global_position
+ if sector_rect.encloses(global_hitbox_clip):
+ hitbox_shape.disabled = false
+ else:
+ hitbox_shape.disabled = true
+
+ # check if out of sector
+ var global_full_clip = full_clip
+ global_full_clip.position += global_position
+ if not sector_rect.intersects(global_full_clip) and _can_transition:
+ match current_state:
+ State.SWIMMING:
+ current_state = State.TRANSITION
+ _can_transition = false
+ velocity = Vector2.ZERO
+ var tween = create_tween()
+ tween.tween_interval(delay)
+ tween.tween_callback(self, "_start_falling")
+ State.FALLING:
+ current_state = State.TRANSITION
+ _can_transition = false
+ velocity = Vector2.ZERO
+ var tween = create_tween()
+ tween.tween_interval(delay)
+ tween.tween_callback(self, "_start_swimming")
+ State.TRANSITION:
+ pass
+
+ # clip to inside of home sector
+ var rid = get_canvas_item()
+ var rect = Rect2(to_local(home_sector * Game.RESOLUTION), Game.RESOLUTION)
+ VisualServer.canvas_item_set_custom_rect(rid, true, rect)
+ VisualServer.canvas_item_set_clip(rid, true)
+
+
+# give a burst of speed
+func _propel() -> void:
+ velocity.y = -speed
+
+func _start_falling() -> void:
+ if not _can_transition:
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null:
+ global_position.x = player.global_position.x - 3.0
+ animation_player.play("falling")
+ current_state = State.FALLING
+ yield(create_tween().tween_interval(1.0), "finished")
+ _can_transition = true
+
+func _start_swimming() -> void:
+ if not _can_transition:
+ var player = get_tree().get_nodes_in_group("player").pop_back()
+ if player != null:
+ global_position.x = player.global_position.x - 3.0
+ animation_player.play("swimming")
+ current_state = State.SWIMMING
+ yield(create_tween().tween_interval(1.0), "finished")
+ _can_transition = true
diff --git a/objects/enemy/squig.tscn b/objects/enemy/squig.tscn
new file mode 100644
index 0000000..55cdf7c
--- /dev/null
+++ b/objects/enemy/squig.tscn
@@ -0,0 +1,88 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://objects/enemy/enemy_move_sidesideupdown.gd" type="Script" id=1]
+[ext_resource path="res://graphics/enemy/squig.png" type="Texture" id=2]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=3]
+
+[sub_resource type="Curve" id=6]
+_data = [ Vector2( 0, 0.5 ), 0.0, 0.0, 0, 0, Vector2( 0.3, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.541165, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 2.5, 2.5 )
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
+
+[sub_resource type="Animation" id=7]
+resource_name = "up_and_down"
+length = 0.3
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ 0, 1 ]
+}
+
+[node name="Squig" type="Node2D" groups=["enemy"]]
+light_mask = 8
+script = ExtResource( 1 )
+direction = -1
+move_direction = 1
+node_to_flip = NodePath("Sprite")
+
+[node name="InkParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 3.5, 7 )
+scale = Vector2( 0.5, 0.5 )
+amount = 16
+local_coords = false
+texture = ExtResource( 3 )
+spread = 180.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 8.0
+initial_velocity_random = 0.5
+damping = 4.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 1.5
+scale_amount_curve = SubResource( 6 )
+color = Color( 0, 0, 0, 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+light_mask = 8
+position = Vector2( 4, 4 )
+texture = ExtResource( 2 )
+hframes = 2
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+position = Vector2( 4, 4 )
+
+[node name="HitboxShape" type="CollisionShape2D" parent="Hitbox"]
+unique_name_in_owner = true
+position = Vector2( -0.5, -0.5 )
+shape = SubResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "up_and_down"
+anims/RESET = SubResource( 2 )
+anims/up_and_down = SubResource( 7 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/steam.gd b/objects/enemy/steam.gd
new file mode 100644
index 0000000..fcb02be
--- /dev/null
+++ b/objects/enemy/steam.gd
@@ -0,0 +1,38 @@
+ extends "res://objects/enemy/enemy.gd"
+
+export var off_time = 1.0
+export var on_time = 1.0
+export var active = false
+
+onready var particles = $SteamParticles
+onready var collision_shape = $Hitbox/CollisionShape2D
+onready var animation_player = $AnimationPlayer
+
+var time = 0.0
+
+func _ready():
+ if !active:
+ particles.emitting = false
+ collision_shape.disabled = true
+ # adjust to difficulty
+ off_time /= Game.enemy_speed_factor
+ on_time /= Game.enemy_speed_factor
+
+func _physics_process(delta):
+ time += delta
+ if active && time >= on_time:
+ time -= on_time
+ active = false
+ animation_player.play("turn_off")
+ elif !active && time >= off_time:
+ time -= off_time
+ active = true
+ animation_player.play("turn_on")
+
+func switch_action():
+ animation_player.play("turn_off")
+ animation_player.connect("animation_finished", self, "_queue_free")
+
+#stupidstupidstupidstupidarrrghhhwouldnotneedtodothisshitingodot4grumblegrumble
+func _queue_free(_anim_name):
+ queue_free()
diff --git a/objects/enemy/steam.tscn b/objects/enemy/steam.tscn
new file mode 100644
index 0000000..06d0f2d
--- /dev/null
+++ b/objects/enemy/steam.tscn
@@ -0,0 +1,185 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://objects/enemy/steam.gd" type="Script" id=1]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=2]
+
+[sub_resource type="Curve" id=2]
+_data = [ Vector2( 0, 0.291411 ), 0.0, 5.40019, 0, 0, Vector2( 0.263812, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -0.0915322, 0.0, 0, 0 ]
+
+[sub_resource type="RectangleShape2D" id=1]
+resource_local_to_scene = true
+extents = Vector2( 2, 12 )
+
+[sub_resource type="Animation" id=3]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hitbox/CollisionShape2D:shape:extents")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 2, 12 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hitbox/CollisionShape2D:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -12 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "turn_off"
+tracks/0/type = "value"
+tracks/0/path = NodePath("SteamParticles:emitting")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hitbox/CollisionShape2D:shape:extents")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 2, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hitbox/CollisionShape2D:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 4, -24 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "turn_on"
+tracks/0/type = "value"
+tracks/0/path = NodePath("SteamParticles:emitting")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hitbox/CollisionShape2D:shape:extents")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 2, 0 ), Vector2( 2, 12 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hitbox/CollisionShape2D:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, 0 ), Vector2( 4, -12 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[node name="Steam" type="Node2D"]
+script = ExtResource( 1 )
+blood = false
+off_time = 2.0
+
+[node name="SteamParticles" type="CPUParticles2D" parent="."]
+position = Vector2( 4, 0 )
+emitting = false
+amount = 16
+texture = ExtResource( 2 )
+direction = Vector2( 0, -1 )
+spread = 10.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 51.55
+damping = 50.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.75
+scale_amount_curve = SubResource( 2 )
+
+[node name="Hitbox" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, -12 )
+shape = SubResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 3 )
+anims/turn_off = SubResource( 4 )
+anims/turn_on = SubResource( 5 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/super_slime.gd b/objects/enemy/super_slime.gd
new file mode 100644
index 0000000..bc6d6cd
--- /dev/null
+++ b/objects/enemy/super_slime.gd
@@ -0,0 +1,131 @@
+tool
+extends "res://objects/enemy/enemy.gd"
+
+const SlimeParticles = preload("res://objects/enemy/slime_particles.tscn")
+
+export var left_boundary: float = 0.0
+export var right_boundary: float = 0.0
+export var direction: float = 1.0
+export var speed: float = 50.0
+export var jump_distance: float = 0.0
+export var jump_speed: float = 50.0
+export (Array, float) var bottom_jumps: Array = [] setget _set_bottom_jumps
+export (Array, float) var top_jumps: Array = [] setget _set_top_jumps
+export var detect_player: bool = false
+
+var _jumping: bool = false
+var _jump_direction: float = -1.0
+
+onready var hitbox: Area2D = $Hitbox
+onready var sprite: AnimatedSprite = $Hitbox/Sprite
+onready var detect_player_cast: RayCast2D = $"%DetectPlayerCast"
+
+
+func _ready() -> void:
+ if Engine.editor_hint:
+ return
+ left_boundary *= 8.0
+ right_boundary *= 8.0
+ jump_distance *= 8.0
+ for i in bottom_jumps.size():
+ bottom_jumps[i] *= 8.0
+ for i in top_jumps.size():
+ top_jumps[i] *= 8.0
+ detect_player_cast.cast_to = Vector2(0.0, -jump_distance)
+ speed *= Game.enemy_speed_factor
+
+
+func _physics_process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+ # check for jump point
+ var jump_points = bottom_jumps if sign(_jump_direction) == -1.0 else top_jumps
+ for x in jump_points:
+ if abs(hitbox.position.x - x) <= 4.0:
+ _jumping = true
+ break
+ # check for player
+ if detect_player and detect_player_cast.is_colliding():
+ _jumping = true
+ # move if not jumping
+ if _jumping:
+ hitbox.position.y += _jump_direction * jump_speed * delta
+ if hitbox.position.y >= 8.0:
+ hitbox.position.y = 0.0
+ _jump_direction = -1.0
+ hitbox.scale.y = 1.0
+ _jumping = false
+ elif hitbox.position.y <= -jump_distance - 8.0:
+ hitbox.position.y = -jump_distance
+ _jump_direction = 1.0
+ hitbox.scale.y = -1.0
+ _jumping = false
+ else:
+ hitbox.position.x += direction * speed * delta
+ if hitbox.position.x >= right_boundary:
+ hitbox.position.x = right_boundary
+ direction = -1.0
+ sprite.flip_h = true
+ elif hitbox.position.x <= -left_boundary:
+ hitbox.position.x = -left_boundary
+ sprite.flip_h = false
+ direction = 1.0
+
+
+func _process(delta: float) -> void:
+ if Engine.editor_hint and Engine.get_frames_drawn() % 10 == 0:
+ update()
+
+
+func _draw() -> void:
+ if Engine.editor_hint:
+ # bottom travel zone
+ draw_line(
+ Vector2(-left_boundary * 8.0, 4.0),
+ Vector2(right_boundary * 8.0 + 8.0, 4.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+ # top travel zone
+ draw_line(
+ Vector2(-left_boundary * 8.0, -jump_distance * 8.0 - 4.0),
+ Vector2(right_boundary * 8.0 + 8.0, -jump_distance * 8.0 - 4.0),
+ Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+ )
+ # jump lines
+ for x in bottom_jumps:
+ draw_line(
+ Vector2(x * 8.0, 4.0),
+ Vector2(x * 8.0, -jump_distance * 4.0),
+ Color(1.0, 0.0, 0.0, 0.75), 1.01, false
+ )
+ draw_circle(Vector2(x * 8.0, 4.0), 2.0, Color.red)
+ for x in top_jumps:
+ draw_line(
+ Vector2(x * 8.0, -jump_distance * 8.0 - 4.0),
+ Vector2(x * 8.0, -jump_distance * 4.0),
+ Color(1.0, 0.0, 0.0, 0.75), 1.01, false
+ )
+ draw_circle(Vector2(x * 8.0, -jump_distance * 8.0 - 4.0), 2.0, Color.red)
+# draw_line(
+# Vector2(4.0, 4.0),
+# Vector2(4.0, -jump_distance * 8.0 - 4.0),
+# Color(0.4, 0.2, 0.6, 0.75), 1.01, false
+# )
+
+
+func _set_bottom_jumps(value: Array) -> void:
+ bottom_jumps = value
+ update()
+
+
+func _set_top_jumps(value: Array) -> void:
+ top_jumps = value
+ update()
+
+
+func die() -> void:
+ .die()
+ var death_particles = SlimeParticles.instance()
+ death_particles.global_position = hitbox.global_position + Vector2(4.0, 4.0)
+ death_particles.emitting = true
+ get_parent().add_child(death_particles)
diff --git a/objects/enemy/super_slime.tscn b/objects/enemy/super_slime.tscn
new file mode 100644
index 0000000..121f8ed
--- /dev/null
+++ b/objects/enemy/super_slime.tscn
@@ -0,0 +1,56 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://objects/enemy/super_slime.gd" type="Script" id=1]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/pal_slime_purple.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/slime.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 3 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 13, 13 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 4 )
+region = Rect2( 13, 0, 13, 13 )
+
+[sub_resource type="SpriteFrames" id=5]
+animations = [ {
+"frames": [ SubResource( 2 ), SubResource( 3 ) ],
+"loop": true,
+"name": "default",
+"speed": 7.0
+} ]
+
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 4, 4 )
+
+[node name="SuperSlime" type="Node2D" groups=["ememy"]]
+script = ExtResource( 1 )
+blood = false
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="Sprite" type="AnimatedSprite" parent="Hitbox"]
+material = SubResource( 4 )
+position = Vector2( 4, 3 )
+frames = SubResource( 5 )
+playing = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 4 )
+shape = SubResource( 6 )
+
+[node name="DetectPlayerCast" type="RayCast2D" parent="Hitbox"]
+unique_name_in_owner = true
+position = Vector2( 4, 0 )
+enabled = true
+cast_to = Vector2( 0, -16 )
+collision_mask = 128
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/tin.gd b/objects/enemy/tin.gd
new file mode 100644
index 0000000..6e5ecf3
--- /dev/null
+++ b/objects/enemy/tin.gd
@@ -0,0 +1,4 @@
+extends "res://objects/enemy/enemy_move_diagonal.gd"
+
+func _on_Tin_died():
+ Game.instance_node(load("res://objects/enemy/tin_die.tscn"), position.x, position.y, get_parent())
diff --git a/objects/enemy/tin.tscn b/objects/enemy/tin.tscn
new file mode 100644
index 0000000..071744f
--- /dev/null
+++ b/objects/enemy/tin.tscn
@@ -0,0 +1,55 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://objects/enemy/tin.gd" type="Script" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/tin.png" type="Texture" id=3]
+[ext_resource path="res://graphics/enemy/tin_eye.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="Animation" id=2]
+resource_name = "eye hue"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Eye:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 0.560784, 1, 0.560784, 1 ), Color( 1, 0.56, 0.567333, 1 ), Color( 0.560784, 1, 0.560784, 1 ) ]
+}
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 4, 4 )
+
+[node name="Tin" type="Node2D" groups=["enemy"]]
+script = ExtResource( 1 )
+score_for_killing = 100
+blood = false
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Eye" type="Sprite" parent="."]
+modulate = Color( 0.560784, 1, 0.560784, 1 )
+texture = ExtResource( 4 )
+
+[node name="EyeAnim" type="AnimationPlayer" parent="."]
+autoplay = "eye hue"
+"anims/eye hue" = SubResource( 2 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 3 )
+
+[connection signal="died" from="." to="." method="_on_Tin_died" flags=3]
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/tin_die.tscn b/objects/enemy/tin_die.tscn
new file mode 100644
index 0000000..b432702
--- /dev/null
+++ b/objects/enemy/tin_die.tscn
@@ -0,0 +1,143 @@
+[gd_scene load_steps=14 format=2]
+
+[ext_resource path="res://graphics/enemy/explosion_small.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/robot_die.gd" type="Script" id=2]
+[ext_resource path="res://graphics/enemy/tin.png" type="Texture" id=3]
+[ext_resource path="res://scripts/launch_rigid.gd" type="Script" id=4]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 1 )
+region = Rect2( 16, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 1 )
+region = Rect2( 32, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 1 )
+region = Rect2( 48, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 1 )
+region = Rect2( 64, 0, 16, 16 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 1 )
+region = Rect2( 80, 0, 16, 16 )
+
+[sub_resource type="SpriteFrames" id=7]
+animations = [ {
+"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
+"loop": false,
+"name": "default",
+"speed": 20.0
+} ]
+
+[sub_resource type="PhysicsMaterial" id=9]
+bounce = 0.1
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 2, 2 )
+
+[node name="TinDie" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+frames = SubResource( 7 )
+
+[node name="Topleft" type="RigidBody2D" parent="."]
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="Topleft"]
+position = Vector2( -2, -2 )
+texture = ExtResource( 3 )
+hframes = 2
+vframes = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Topleft"]
+position = Vector2( -2, -2 )
+shape = SubResource( 8 )
+
+[node name="Timer" type="Timer" parent="Topleft"]
+wait_time = 5.0
+autostart = true
+
+[node name="TopRight" type="RigidBody2D" parent="."]
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="TopRight"]
+position = Vector2( 3, -2 )
+texture = ExtResource( 3 )
+hframes = 2
+vframes = 2
+frame = 1
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="TopRight"]
+position = Vector2( 2, -2 )
+shape = SubResource( 8 )
+
+[node name="Timer" type="Timer" parent="TopRight"]
+wait_time = 5.3
+autostart = true
+
+[node name="BottomLeft" type="RigidBody2D" parent="."]
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="BottomLeft"]
+position = Vector2( -2, 3 )
+texture = ExtResource( 3 )
+hframes = 2
+vframes = 2
+frame = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="BottomLeft"]
+position = Vector2( -2, 2 )
+shape = SubResource( 8 )
+
+[node name="Timer" type="Timer" parent="BottomLeft"]
+wait_time = 5.5
+autostart = true
+
+[node name="BottomRight" type="RigidBody2D" parent="."]
+position = Vector2( 3, 3 )
+collision_layer = 4
+mass = 2.0
+physics_material_override = SubResource( 9 )
+script = ExtResource( 4 )
+impulse_max = 200
+
+[node name="Sprite" type="Sprite" parent="BottomRight"]
+texture = ExtResource( 3 )
+hframes = 2
+vframes = 2
+frame = 3
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="BottomRight"]
+position = Vector2( -1, -1 )
+shape = SubResource( 8 )
+
+[node name="Timer" type="Timer" parent="BottomRight"]
+wait_time = 5.8
+autostart = true
+
+[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_AnimatedSprite_animation_finished"]
+[connection signal="timeout" from="Topleft/Timer" to="Topleft" method="queue_free"]
+[connection signal="timeout" from="TopRight/Timer" to="TopRight" method="queue_free"]
+[connection signal="timeout" from="BottomLeft/Timer" to="BottomLeft" method="queue_free"]
+[connection signal="timeout" from="BottomRight/Timer" to="BottomRight" method="queue_free"]
diff --git a/objects/enemy/turtle.gd b/objects/enemy/turtle.gd
new file mode 100644
index 0000000..b99b5c7
--- /dev/null
+++ b/objects/enemy/turtle.gd
@@ -0,0 +1,113 @@
+tool
+extends "res://objects/enemy/enemy_move_sidesideupdown.gd"
+
+enum SpikeDirection {BOTH, LEFT, RIGHT}
+
+## positions along the path where spikes will trigger
+export (Array, float) var spike_positions: Array = []
+## time spikes stay active
+export var spike_time: float = 0.25
+## which direction the turtle should be able to spike
+export (SpikeDirection) var spike_direction: int = SpikeDirection.BOTH
+
+# animates the spikes
+var can_spike: bool = true
+var spike_tween: SceneTreeTween
+
+onready var sprite: Sprite = $"%Sprite"
+onready var spike_shape: CollisionShape2D = $"%SpikeShape"
+
+func _ready() -> void:
+ # don't act in the editor
+ if Engine.editor_hint:
+ return
+
+func _process(delta: float) -> void:
+ # update debug graphics in editor
+ if Engine.editor_hint and Engine.get_frames_drawn() % 10 == 0:
+ update()
+
+func _physics_process(delta: float) -> void:
+ # do nothing in editor
+ if Engine.editor_hint:
+ return
+
+ # sync hitbox
+ $HeadHitbox.scale.x = $ToFlip.scale.x
+
+ # check if can still spike before doing all this work
+ if not can_spike:
+ return
+ # use positions in correct axis
+ var pos = position.x if move_direction == Direction.HORIZONTAL else position.y
+ var pos_start = startpos.x if move_direction == Direction.HORIZONTAL else startpos.y
+ # only spike if matching direction
+ if spike_direction == SpikeDirection.LEFT and sign(direction) == 1.0:
+ return
+ if spike_direction == SpikeDirection.RIGHT and sign(direction) == -1.0:
+ return
+ # spike if close enough to an activation point
+ for spike_pos in spike_positions:
+ if abs(pos_start + (spike_pos * 8.0) - pos) <= 2.0:
+ spike()
+ break
+ # slightly different logic depending on forward/backwards unfortunately :I
+# match sign(direction):
+# 1.0:
+# # make sure there are any positions left to check in this direction
+# if current_spike_position < spike_positions.size():
+# # check if passed the spike position
+# if pos >= pos_start + spike_positions[current_spike_position]:
+# # move on to next position
+# current_spike_position += 1
+# if spike_direction != SpikeDirection.LEFT:
+# spike()
+# -1.0:
+# # make sure there are still positions left in this direction
+# if current_spike_position - 1 >= 0:
+# # check if passed the position
+# if pos <= pos_start + spike_positions[current_spike_position - 1]:
+# # move on to next (previous because backwards) position
+# current_spike_position -= 1
+# if spike_direction != SpikeDirection.RIGHT:
+# spike()
+
+## performs the spike animation
+func spike() -> void:
+ # reset tween
+ if spike_tween != null:
+ spike_tween.kill() # never have two tweens acting on the same thing
+ spike_tween = create_tween()
+ spike_tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
+ # indicator sprite
+ spike_tween.tween_property(sprite, "frame_coords:y", 1.0, 0.0)
+ spike_tween.tween_interval(spike_time * 2.0)
+ # spikes active
+ spike_tween.tween_property(spike_shape, "disabled", false, 0.0)
+ spike_tween.tween_property(sprite, "frame_coords:y", 2.0, 0.0)
+ spike_tween.tween_interval(spike_time)
+ # spikes gone once more
+ spike_tween.tween_property(spike_shape, "disabled", true, 0.0)
+ spike_tween.tween_property(sprite, "frame_coords:y", 0.0, 0.0)
+
+func die() -> void:
+ # disable spiking
+ can_spike = false
+ # stop tween
+ if spike_tween != null:
+ spike_tween.kill()
+ # disable hitbox
+ spike_shape.set_deferred("disabled", true)
+ # reset animation
+ sprite.frame_coords.y = 3
+ Audio.play_sound(death_sound, Audio.ac_die)
+ $"%DeathSplatter".replace_by_instance()
+
+func _draw() -> void:
+ if Engine.editor_hint:
+ # still draw base moving enemy debug lines
+ ._draw()
+ # draw dots at spike positions
+ for pos in spike_positions:
+ var dir = Vector2.RIGHT if move_direction == Direction.HORIZONTAL else Vector2.DOWN
+ draw_circle(dir * pos * 8.0, 2.0, Color.red)
diff --git a/objects/enemy/turtle.tscn b/objects/enemy/turtle.tscn
new file mode 100644
index 0000000..aefac1a
--- /dev/null
+++ b/objects/enemy/turtle.tscn
@@ -0,0 +1,104 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://graphics/enemy/turtle.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/turtle.gd" type="Script" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=4]
+
+[sub_resource type="ShaderMaterial" id=6]
+shader = ExtResource( 4 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="Animation" id=1]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("ToFlip/Sprite:frame_coords:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "swim"
+length = 0.9
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("ToFlip/Sprite:frame_coords:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3, 0.6, 0.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0.0, 1.0, 2.0, 0.0 ]
+}
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 2.5, 2.5 )
+
+[sub_resource type="RectangleShape2D" id=5]
+extents = Vector2( 8, 1.5 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 8.5, 3 )
+
+[node name="Turtle" type="Node2D" groups=["enemy"]]
+script = ExtResource( 2 )
+blood = false
+speed = 20
+node_to_flip = NodePath("ToFlip")
+
+[node name="ToFlip" type="Node2D" parent="."]
+position = Vector2( 8.5, 4 )
+
+[node name="Sprite" type="Sprite" parent="ToFlip"]
+unique_name_in_owner = true
+material = SubResource( 6 )
+position = Vector2( -9.5, -9 )
+texture = ExtResource( 1 )
+centered = false
+hframes = 3
+vframes = 4
+
+[node name="SwimPlayer" type="AnimationPlayer" parent="ToFlip"]
+root_node = NodePath("../..")
+autoplay = "swim"
+anims/RESET = SubResource( 1 )
+anims/swim = SubResource( 2 )
+
+[node name="HeadHitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+position = Vector2( 8.5, 4 )
+
+[node name="HeadShape" type="CollisionShape2D" parent="HeadHitbox"]
+position = Vector2( 11, -0.5 )
+shape = SubResource( 3 )
+
+[node name="DeathSplatter" parent="HeadHitbox/HeadShape" instance_placeholder="res://objects/enemy/death_particles.tscn"]
+unique_name_in_owner = true
+autoplay = true
+
+[node name="SpikeHitbox" type="Area2D" parent="."]
+
+[node name="SpikeShape" type="CollisionShape2D" parent="SpikeHitbox"]
+unique_name_in_owner = true
+position = Vector2( 8.5, -1.5 )
+shape = SubResource( 5 )
+disabled = true
+
+[node name="Platform" type="KinematicBody2D" parent="SpikeHitbox"]
+collision_layer = 4
+collision_mask = 0
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="SpikeHitbox/Platform"]
+position = Vector2( 8.5, 3 )
+shape = SubResource( 7 )
+
+[connection signal="area_entered" from="SpikeHitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/enemy/uncanny_cat.gd b/objects/enemy/uncanny_cat.gd
new file mode 100644
index 0000000..7e5f7e5
--- /dev/null
+++ b/objects/enemy/uncanny_cat.gd
@@ -0,0 +1,31 @@
+extends "res://objects/enemy/enemy.gd"
+
+
+export var acceleration: float = 8.0
+export var max_speed: float = 16.0
+
+
+var velocity: Vector2 = Vector2.ZERO
+
+
+onready var player: Node2D = get_tree().get_nodes_in_group("player")[0]
+
+
+func _physics_process(delta: float) -> void:
+ if not is_instance_valid(player):
+ return
+
+ var target = (player.global_position - global_position).normalized()
+ velocity += target * acceleration * delta
+ velocity = velocity.clamped(max_speed)
+
+ global_position += velocity * delta
+
+func _on_Hitbox_area_entered(area):
+ #Kill player
+ if area.is_in_group("player_hitbox"):
+ area.get_parent().die()
+ $Jumpscare.visible = true
+ $JumpscareSound.play()
+ var tween = create_tween()
+ tween.tween_property($Jumpscare, "visible", false, 0).set_delay(1.7)
diff --git a/objects/enemy/uncanny_cat.tscn b/objects/enemy/uncanny_cat.tscn
new file mode 100644
index 0000000..d944707
--- /dev/null
+++ b/objects/enemy/uncanny_cat.tscn
@@ -0,0 +1,44 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://graphics/secret/uncanny.png" type="Texture" id=1]
+[ext_resource path="res://objects/enemy/uncanny_cat.gd" type="Script" id=2]
+[ext_resource path="res://audio/sounds/scrump_die.ogg" type="AudioStream" id=3]
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 7.0
+
+[node name="UncannyCat" type="Node2D"]
+script = ExtResource( 2 )
+blood = false
+acceleration = 48.0
+max_speed = 56.0
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+
+[node name="Hitbox" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+shape = SubResource( 1 )
+
+[node name="JumpscareSound" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 3 )
+pitch_scale = 2.0
+bus = "sound"
+
+[node name="Jumpscare" type="CanvasLayer" parent="."]
+visible = false
+
+[node name="ColorRect" type="ColorRect" parent="Jumpscare"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="TextureRect" type="TextureRect" parent="Jumpscare"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+texture = ExtResource( 1 )
+expand = true
+stretch_mode = 6
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/environment/barrier/barrier.gd b/objects/environment/barrier/barrier.gd
index 001f01e..acb0cf1 100644
--- a/objects/environment/barrier/barrier.gd
+++ b/objects/environment/barrier/barrier.gd
@@ -16,12 +16,12 @@ func _ready():
scale.y = 1
#Label
label.visible = true
- label.set_text(str(cost))
+ label.set_text("¶" + str(cost))
label.rect_position.y = scale.y / 2 + label_offset.y
func _physics_process(delta):
#Open
- if Game.golds >= cost: open = true
+ if Game.keys >= cost: open = true
if open == true:
sprite.region_rect.size.y -= 1
if sprite.region_rect.size.y < 1: queue_free()
diff --git a/objects/environment/barrier/barrier.tscn b/objects/environment/barrier/barrier.tscn
index d7d480e..7bb395d 100644
--- a/objects/environment/barrier/barrier.tscn
+++ b/objects/environment/barrier/barrier.tscn
@@ -2,7 +2,8 @@
[ext_resource path="res://objects/environment/barrier/barrier.gd" type="Script" id=1]
[ext_resource path="res://graphics/barrier/barrier_2px.png" type="Texture" id=2]
-[ext_resource path="res://fonts/2ndpuberty..fnt" type="BitmapFont" id=3]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=3]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=4]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 2, 0.5 )
@@ -87,10 +88,8 @@ tracks/2/keys = {
"values": [ Vector2( 1, 1 ), Vector2( 1, 0 ) ]
}
-[sub_resource type="Theme" id=5]
-default_font = ExtResource( 3 )
-
[node name="Barrier" type="Node2D"]
+z_index = 50
script = ExtResource( 1 )
[node name="Sprite" type="Sprite" parent="."]
@@ -111,12 +110,13 @@ anims/open = SubResource( 3 )
[node name="Label" type="Label" parent="."]
visible = false
+material = ExtResource( 4 )
margin_left = -18.0
margin_top = -15.0
margin_right = 22.0
margin_bottom = 5.0
-theme = SubResource( 5 )
-text = "00"
+theme = ExtResource( 3 )
+text = "¶00"
align = 1
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
diff --git a/objects/environment/barrier/jail_bars.gd b/objects/environment/barrier/jail_bars.gd
new file mode 100644
index 0000000..7d73505
--- /dev/null
+++ b/objects/environment/barrier/jail_bars.gd
@@ -0,0 +1,7 @@
+extends Node2D
+
+func switch_action():
+ var tween = create_tween()
+ tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
+ tween.tween_property(self,"scale",Vector2(1,0),0.4)
+ tween.tween_callback(self,"queue_free")
diff --git a/objects/environment/barrier/jail_bars.tscn b/objects/environment/barrier/jail_bars.tscn
new file mode 100644
index 0000000..3f58d69
--- /dev/null
+++ b/objects/environment/barrier/jail_bars.tscn
@@ -0,0 +1,21 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/barrier/jail_bars.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/barrier/jail_bars.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 4 )
+
+[node name="JailBars" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+centered = false
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+collision_layer = 9
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 4, 4 )
+shape = SubResource( 1 )
diff --git a/objects/environment/beach_ball/beach_ball.tscn b/objects/environment/beach_ball/beach_ball.tscn
new file mode 100644
index 0000000..4a34e39
--- /dev/null
+++ b/objects/environment/beach_ball/beach_ball.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/secret/beach_ball.png" type="Texture" id=1]
+
+[sub_resource type="PhysicsMaterial" id=1]
+friction = 0.3
+bounce = 1.0
+
+[sub_resource type="CircleShape2D" id=2]
+radius = 6.0
+
+[node name="BeachBall" type="RigidBody2D"]
+physics_material_override = SubResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 2 )
diff --git a/objects/environment/blood/blood_spray.gd b/objects/environment/blood/blood_spray.gd
new file mode 100644
index 0000000..0483dc5
--- /dev/null
+++ b/objects/environment/blood/blood_spray.gd
@@ -0,0 +1,42 @@
+extends Area2D
+
+
+const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn")
+const PlayerStain := preload("res://objects/player/player_stain.tscn")
+
+
+export var color: Color = Color(0xf53342ff)
+export var stains_player: bool = true
+
+
+var velocity := Vector2.ZERO
+
+
+onready var sprite: Sprite = $Sprite
+
+
+func _ready() -> void:
+ sprite.self_modulate = color
+
+
+func _physics_process(delta: float) -> void:
+ velocity.y += 98.0 * delta
+ position += velocity * delta
+ sprite.global_rotation = velocity.angle()
+
+
+func _on_body_entered(body: Node) -> void:
+ if body.is_in_group("can_stain"):
+ var stain = BloodStain.instance()
+ stain.modulate = color
+ stain.global_position = global_position
+ StainLayer.add_stain(stain)
+ queue_free()
+ elif body is TileMap:
+ queue_free()
+ elif stains_player and body.is_in_group("player"):
+ var stain = PlayerStain.instance()
+ stain.color = color
+ body.get_node("Graphics/Sprite").add_child(stain)
+ stain.global_position = global_position
+ queue_free()
diff --git a/objects/environment/blood/blood_spray.tscn b/objects/environment/blood/blood_spray.tscn
new file mode 100644
index 0000000..14f873c
--- /dev/null
+++ b/objects/environment/blood/blood_spray.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/muzzle_flash.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/blood/blood_spray.gd" type="Script" id=3]
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 0.5
+
+[node name="BloodSpray" type="Area2D"]
+collision_mask = 129
+script = ExtResource( 3 )
+
+[node name="Sprite" type="Sprite" parent="."]
+self_modulate = Color( 0.960784, 0.2, 0.258824, 1 )
+scale = Vector2( 0.75, 0.5 )
+texture = ExtResource( 1 )
+offset = Vector2( 2, 0 )
+flip_h = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[connection signal="body_entered" from="." to="." method="_on_body_entered"]
diff --git a/objects/environment/blood/blood_spray_big.gd b/objects/environment/blood/blood_spray_big.gd
new file mode 100644
index 0000000..382c9d9
--- /dev/null
+++ b/objects/environment/blood/blood_spray_big.gd
@@ -0,0 +1,42 @@
+extends Area2D
+
+
+const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn")
+const PlayerStain := preload("res://objects/player/player_stain.tscn")
+
+
+export var color: Color
+export var stains_player: bool = true
+
+
+var velocity := Vector2.ZERO
+
+
+onready var sprite: Sprite = $Sprite
+
+
+func _ready() -> void:
+ sprite.self_modulate = color
+
+
+func _physics_process(delta: float) -> void:
+ velocity.y += 98.0 * delta
+ position += velocity * delta
+ sprite.global_rotation = velocity.angle()
+
+
+func _on_body_entered(body: Node) -> void:
+ if body.is_in_group("can_stain"):
+ var stain = BloodStain.instance()
+ stain.modulate = color
+ stain.global_position = global_position
+ StainLayer.add_stain(stain)
+ queue_free()
+ elif body is TileMap:
+ queue_free()
+ elif stains_player and body.is_in_group("player"):
+ var stain = PlayerStain.instance()
+ stain.color = color
+ body.get_node("Graphics/Sprite").add_child(stain)
+ stain.global_position = global_position
+ queue_free()
diff --git a/objects/environment/blood/blood_spray_big.tscn b/objects/environment/blood/blood_spray_big.tscn
new file mode 100644
index 0000000..26d0e21
--- /dev/null
+++ b/objects/environment/blood/blood_spray_big.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/famira_blood.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/blood/blood_spray_big.gd" type="Script" id=2]
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 0.5
+
+[node name="BloodSpray" type="Area2D"]
+collision_mask = 129
+script = ExtResource( 2 )
+color = Color( 0.701961, 0.745098, 0.4, 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+scale = Vector2( 0.75, 0.5 )
+texture = ExtResource( 1 )
+offset = Vector2( 2, 0 )
+flip_h = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[connection signal="body_entered" from="." to="." method="_on_body_entered"]
diff --git a/objects/environment/blood/blood_stain.gd b/objects/environment/blood/blood_stain.gd
new file mode 100644
index 0000000..23247fe
--- /dev/null
+++ b/objects/environment/blood/blood_stain.gd
@@ -0,0 +1,5 @@
+extends Sprite
+
+
+func _ready() -> void:
+ rotation = randf() * TAU
diff --git a/objects/environment/blood/blood_stain.tscn b/objects/environment/blood/blood_stain.tscn
new file mode 100644
index 0000000..6fc0bdf
--- /dev/null
+++ b/objects/environment/blood/blood_stain.tscn
@@ -0,0 +1,9 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/blood/blood_stain.gd" type="Script" id=2]
+
+[node name="BloodStain" type="Sprite"]
+light_mask = 3
+texture = ExtResource( 1 )
+script = ExtResource( 2 )
diff --git a/objects/environment/blood_rain/blood_rain.gd b/objects/environment/blood_rain/blood_rain.gd
new file mode 100644
index 0000000..0cfba1f
--- /dev/null
+++ b/objects/environment/blood_rain/blood_rain.gd
@@ -0,0 +1,10 @@
+extends Node2D
+
+const Blood = preload("res://objects/environment/blood/blood_spray.tscn")
+
+func _ready():
+ for i in 256:
+ var blood = Blood.instance()
+ blood.global_position = Vector2(i,-4)
+ blood.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
+ self.add_child(blood)
diff --git a/objects/environment/blood_rain/blood_rain.tscn b/objects/environment/blood_rain/blood_rain.tscn
new file mode 100644
index 0000000..ba1101f
--- /dev/null
+++ b/objects/environment/blood_rain/blood_rain.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/environment/blood/blood_spray.tscn" type="PackedScene" id=1]
+[ext_resource path="res://objects/environment/blood_rain/blood_rain.gd" type="Script" id=2]
+
+[node name="BloodRain" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="BloodSpray" parent="." instance=ExtResource( 1 )]
+position = Vector2( 0, -4 )
diff --git a/objects/environment/bubble/bubble.gd b/objects/environment/bubble/bubble.gd
new file mode 100644
index 0000000..cc7547e
--- /dev/null
+++ b/objects/environment/bubble/bubble.gd
@@ -0,0 +1,32 @@
+extends Area2D
+
+export var speed = 16.0
+
+onready var sprite = $Sprite
+onready var activation_timer = $ActivationTimer
+
+var lifetime = 0.0
+
+func _ready():
+ sprite.frame_coords.x = randi() % sprite.hframes
+
+func _physics_process(delta):
+ lifetime += delta
+ if speed > 0.0:
+ sprite.position.x = sin(lifetime * 4.0) * 4.0
+ position.y -= speed * delta
+
+func pop():
+ sprite.frame_coords.y = 1
+ $CollisionShape2D.queue_free()
+ speed = 0.0
+ get_tree().create_timer(0.5, false).connect("timeout", self, "queue_free")
+
+func _on_Bubble_body_entered(body):
+ if body.is_in_group("player"):
+ body.oxygen_timer.start()
+ Audio.play_sound(Audio.a_bubble,Audio.ac_die)
+ pop()
+ elif activation_timer.time_left == 0:
+ pop()
+
diff --git a/objects/environment/bubble/bubble.tscn b/objects/environment/bubble/bubble.tscn
new file mode 100644
index 0000000..c8a185c
--- /dev/null
+++ b/objects/environment/bubble/bubble.tscn
@@ -0,0 +1,28 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/particles/bubble.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/bubble/bubble.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 5, 5 )
+
+[node name="Bubble" type="Area2D"]
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+hframes = 4
+vframes = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[node name="ActivationTimer" type="Timer" parent="."]
+wait_time = 0.2
+one_shot = true
+autostart = true
+__meta__ = {
+"_editor_description_": "timer until the bubble can be broken by objects other than the player"
+}
+
+[connection signal="body_entered" from="." to="." method="_on_Bubble_body_entered"]
diff --git a/objects/environment/bubble/bubble_spawner.tscn b/objects/environment/bubble/bubble_spawner.tscn
new file mode 100644
index 0000000..6284238
--- /dev/null
+++ b/objects/environment/bubble/bubble_spawner.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/environment/bubble/bubble.tscn" type="PackedScene" id=1]
+[ext_resource path="res://scripts/random_spawner.gd" type="Script" id=2]
+
+[node name="BubbleSpawner" type="Node2D"]
+script = ExtResource( 2 )
+scene = ExtResource( 1 )
+extents = Rect2( 0, 0, 8, 8 )
+delay = 3.0
diff --git a/objects/environment/collapse_block/collapse_block.gd b/objects/environment/collapse_block/collapse_block.gd
new file mode 100644
index 0000000..9908026
--- /dev/null
+++ b/objects/environment/collapse_block/collapse_block.gd
@@ -0,0 +1,14 @@
+extends RigidBody2D
+
+onready var start_position = Vector2(position.x,position.y)
+onready var sound = $AudioStreamPlayer
+
+func _ready():
+ for node in get_tree().get_nodes_in_group("delete_on_collapse"):
+ node.queue_free()
+
+func _on_AnimationPlayer_animation_finished(anim_name):
+ queue_free()
+
+func _on_Timer_timeout():
+ $AnimationPlayer.play("die")
diff --git a/objects/environment/collapse_block/collapse_block.tscn b/objects/environment/collapse_block/collapse_block.tscn
new file mode 100644
index 0000000..bf72c3f
--- /dev/null
+++ b/objects/environment/collapse_block/collapse_block.tscn
@@ -0,0 +1,57 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://tilesets/t_factory.tres" type="TileSet" id=1]
+[ext_resource path="res://objects/environment/collapse_block/collapse_block.gd" type="Script" id=2]
+
+[sub_resource type="PhysicsMaterial" id=2]
+bounce = 0.07
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 4 )
+
+[sub_resource type="Animation" id=3]
+length = 0.001
+
+[sub_resource type="Animation" id=4]
+resource_name = "die"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("TileMap:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true, false, true, false, true, false ]
+}
+
+[node name="CollapseBlock" type="RigidBody2D" groups=["collapse_block"]]
+physics_material_override = SubResource( 2 )
+script = ExtResource( 2 )
+
+[node name="TileMap" type="TileMap" parent="."]
+tile_set = ExtResource( 1 )
+collision_layer = 0
+collision_mask = 0
+format = 1
+tile_data = PoolIntArray( 0, 0, 0 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 4, 4 )
+shape = SubResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 3 )
+anims/die = SubResource( 4 )
+
+[node name="Timer" type="Timer" parent="."]
+wait_time = 3.0
+one_shot = true
+autostart = true
+
+[connection signal="body_entered" from="." to="." method="_on_CollapseBlock_body_entered"]
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
+[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
diff --git a/objects/environment/death tile/death_tile.gd b/objects/environment/death tile/death_tile.gd
index 5d335b2..c9fedbc 100644
--- a/objects/environment/death tile/death_tile.gd
+++ b/objects/environment/death tile/death_tile.gd
@@ -2,5 +2,5 @@ extends Area2D
func _on_Area2D_area_entered(area):
#Kill player
- if area.is_in_group("player"):
- area.get_parent().die()
+ if area.is_in_group("player_hitbox"):
+ area.get_parent().zap()
diff --git a/objects/environment/electric_tiles/electric_tiles.tscn b/objects/environment/electric_tiles/electric_tiles.tscn
new file mode 100644
index 0000000..83037c4
--- /dev/null
+++ b/objects/environment/electric_tiles/electric_tiles.tscn
@@ -0,0 +1,185 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://objects/environment/death tile/death_tile.tscn" type="PackedScene" id=1]
+[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=3]
+[ext_resource path="res://shaders/electricity.gdshader" type="Shader" id=4]
+
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 4 )
+shader_param/arc_speed = 4.0
+shader_param/arc_fps = 10.0
+shader_param/arc_scale = 8.0
+shader_param/arc_threshold = 0.15
+shader_param/arc_color = Color( 1, 0.93, 0, 1 )
+shader_param/gamma = 2.0
+shader_param/flash_rate = 20.0
+shader_param/flash_intensity = 0.2
+
+[sub_resource type="Animation" id=66]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:material:shader_param/arc_color")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 0.93, 0, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath(".:material:shader_param/arc_speed")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 4.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:material:shader_param/gamma")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2.0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:material:shader_param/flash_intensity")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.2 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath(".:collision_layer")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 1 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("DeathTile:monitoring")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=67]
+resource_name = "electricity"
+length = 3.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:material:shader_param/arc_color")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 2.2, 2.4, 3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 0.929412, 0, 0 ), Color( 1, 0.929412, 0, 0 ), Color( 1, 0.93, 0, 1 ), Color( 1, 0.93, 0, 1 ), Color( 1, 0.929412, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath(".:material:shader_param/gamma")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 2, 2.2, 3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 1.0, 1.0, 2.0, 2.0, 1.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath(".:material:shader_param/flash_intensity")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 2, 2.2, 3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 0.0, 0.0, 0.2, 0.2, 0.0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath(".:collision_layer")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 2.2, 2.4, 3, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 1, 1, 33, 1, 1 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath(".:collision_layer")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 2.4, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ 1, 1, 1 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("DeathTile:monitoring")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 2.4, 3.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ false, true, false ]
+}
+
+[node name="ElectricTiles" type="TileMap" groups=["death"]]
+material = SubResource( 10 )
+tile_set = ExtResource( 3 )
+cell_size = Vector2( 8, 8 )
+format = 1
+tile_data = PoolIntArray( 1376272, 1, 0 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "electricity"
+playback_process_mode = 0
+anims/RESET = SubResource( 66 )
+anims/electricity = SubResource( 67 )
+
+[node name="DeathTile" parent="." instance=ExtResource( 1 )]
+position = Vector2( 127, 167 )
+scale = Vector2( 1.24, 1.24 )
diff --git a/objects/environment/exit/exit.gd b/objects/environment/exit/exit.gd
index a6a9772..ef86f28 100644
--- a/objects/environment/exit/exit.gd
+++ b/objects/environment/exit/exit.gd
@@ -1,45 +1,48 @@
extends Node2D
-export var cost = 0
-onready var label = $Label
-onready var anims = $AnimationPlayer
-onready var map = get_owner()
+export var cost: int = 0
+
+var open: bool = false
+
+onready var label: Label = $Label
+onready var sprite: Sprite = $Sprite
+onready var closed_collision: CollisionShape2D = $"%ClosedCollision"
func _ready():
- anims.play("closed")
- label.text = str(cost)
-
+ label.text = "¶" + str(cost)
func _physics_process(delta):
- if Game.shards >= cost:
- anims.play("open")
+ if Game.keys >= cost and not open:
+ open = true
+ label.visible = false
+ var tween = create_tween()
+ tween.tween_property(sprite, "frame", 3, 0.25)
+ tween.tween_property(closed_collision, "disabled", true, 0.0)
func _on_Area2D_area_entered(area):
- if area.is_in_group("player"):
- if Game.score > Game.high_score: Game.high_score = Game.score
- #BONUSES
- #Collection bonus
- if Game.golds == 50: Game.score += 500
- if Game.shards == 5: Game.score += 500
- if Game.golds == 50 && Game.shards == 5:
- Game.score += 250
- Game.shards_collected[5] = true
- #Time bonus
- if Game.golds == 50 && Game.shards == 5:
- if Game.time < map.target_time_100:
- Game.score += floor(2500 * (Game.time / map.target_time_100))
- Game.shards_collected[6] = true
+ if area.is_in_group("player_hitbox"):
+ Game.still_playing = false
+ Game.can_pause = false
+ var player = area.get_parent()
+ player.state_chart.send_event("start_teleport")
+ player.connect("teleport_finished", self, "_on_player_teleport_finished")
+ #Play level complete jingle
+ if Game.check_time_bonus() == true:
+ Audio.play_music(Audio.a_time_bonus)
else:
- if Game.time < map.target_time_any:
- Game.score += floor(2500 * (Game.time / map.target_time_any))
- Game.shards_collected[6] = true
- #Life bonus
- if Game.lives == 1: Game.score += 500
- if Game.lives == 2:
- Game.score += 1500
- Game.shards_collected[7] = true
- #Perfect bonus
- if Game.lives == 2 && Game.golds == 50 && Game.shards == 5 && Game.time < map.target_time_100:
- Game.score += 1000
- Game.save()
- Game.change_map(load("res://maps/level_select.tscn"))
+ Audio.play_music(Audio.a_victory)
+ #Display 3D Text
+ var hud = get_tree().get_nodes_in_group("hud").pop_back()
+ if hud:
+ var text = preload("res://objects/hud/3d_text.tscn").instance()
+ text.anim = "level complete"
+ yield(get_tree(), "idle_frame")
+ hud.add_child(text)
+
+func _on_player_teleport_finished():
+ Game.tally_scores()
+ yield(get_tree().create_timer(4.0, false), "timeout")
+ Fade.fade_out(Options.transition_speed_secs)
+ yield(Fade, "fade_finished")
+
+ SceneManager.change_scene(preload("res://menus/results.tscn").instance())
diff --git a/objects/environment/exit/exit.tscn b/objects/environment/exit/exit.tscn
index eb4a8ed..0af9d47 100644
--- a/objects/environment/exit/exit.tscn
+++ b/objects/environment/exit/exit.tscn
@@ -1,151 +1,110 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=14 format=2]
-[ext_resource path="res://scripts/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
[ext_resource path="res://objects/environment/exit/exit.gd" type="Script" id=2]
[ext_resource path="res://graphics/exit/exit.png" type="Texture" id=3]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=4]
+[ext_resource path="res://shaders/beam_of_sin.gdshader" type="Shader" id=4]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=5]
+[ext_resource path="res://graphics/exit/exit_back.png" type="Texture" id=6]
+[ext_resource path="res://shaders/can_stain.tres" type="Material" id=7]
-[sub_resource type="ShaderMaterial" id=1]
+[sub_resource type="ShaderMaterial" id=9]
shader = ExtResource( 4 )
-shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = true
+shader_param/speed = 1.0
+shader_param/cycle_offset = 0.0
+shader_param/wave_length = 8.0
+shader_param/thickness = 0.1
-[sub_resource type="RectangleShape2D" id=2]
-extents = Vector2( 8, 7.5 )
+[sub_resource type="ShaderMaterial" id=10]
+shader = ExtResource( 4 )
+shader_param/speed = -2.0
+shader_param/cycle_offset = 3.0
+shader_param/wave_length = 5.0
+shader_param/thickness = 0.1
-[sub_resource type="Animation" id=3]
-resource_name = "closed"
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ Rect2( 0, 0, 16, 24 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Area2D/CollisionShape2D:disabled")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("Label:visible")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("Sprite:modulate")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ Color( 1, 1, 1, 1 ) ]
-}
+[sub_resource type="Gradient" id=11]
+interpolation_mode = 1
+offsets = PoolRealArray( 0, 0.5 )
+colors = PoolColorArray( 0.345098, 0.74902, 0.878431, 1, 0.396078, 1, 1, 1 )
-[sub_resource type="Animation" id=4]
-resource_name = "open"
-length = 0.8
-loop = true
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ Rect2( 16, 0, 16, 24 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Area2D/CollisionShape2D:disabled")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ false ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("Label:visible")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ false ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("Sprite:modulate")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0, 0.4, 0.8 ),
-"transitions": PoolRealArray( 1, 1, 1 ),
-"update": 0,
-"values": [ Color( 1, 0, 0, 1 ), Color( 0, 1, 0.203922, 1 ), Color( 1, 0, 0, 1 ) ]
-}
+[sub_resource type="SegmentShape2D" id=12]
+b = Vector2( 0, 15 )
+
+[sub_resource type="RectangleShape2D" id=7]
+extents = Vector2( 7, 7.5 )
+
+[sub_resource type="RectangleShape2D" id=8]
+extents = Vector2( 8, 4.5 )
[node name="Exit" type="Node2D"]
-z_index = -1
script = ExtResource( 2 )
-[node name="Label" type="Label" parent="."]
-visible = false
-margin_left = -3.0
-margin_top = -15.0
-margin_right = 37.0
-margin_bottom = 5.0
-theme = ExtResource( 1 )
-text = "2"
+[node name="Background" type="Sprite" parent="."]
+position = Vector2( 0, 5 )
+z_index = -1
+texture = ExtResource( 6 )
[node name="Sprite" type="Sprite" parent="."]
-material = SubResource( 1 )
+material = ExtResource( 7 )
texture = ExtResource( 3 )
-region_enabled = true
-region_rect = Rect2( 0, 0, 16, 24 )
+hframes = 4
-[node name="Area2D" type="Area2D" parent="."]
-z_index = -3
+[node name="Energy" type="Node2D" parent="Sprite"]
+show_behind_parent = true
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+[node name="Wave1" type="ColorRect" parent="Sprite/Energy"]
+material = SubResource( 9 )
+margin_left = -7.0
+margin_top = -3.0
+margin_right = 7.0
+margin_bottom = 12.0
+color = Color( 0.396078, 1, 1, 1 )
+
+[node name="Wave2" type="ColorRect" parent="Sprite/Energy"]
+material = SubResource( 10 )
+margin_left = -7.0
+margin_top = -3.0
+margin_right = 7.0
+margin_bottom = 12.0
+color = Color( 0.345098, 0.74902, 0.878431, 1 )
+
+[node name="Sparkles" type="CPUParticles2D" parent="Sprite/Energy"]
+position = Vector2( 0, 12 )
+amount = 16
+lifetime = 2.0
+emission_shape = 2
+emission_rect_extents = Vector2( 6, 0 )
+direction = Vector2( 0, -1 )
+spread = 0.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 12.0
+damping = 4.0
+color_initial_ramp = SubResource( 11 )
+
+[node name="Label" type="Label" parent="."]
+material = ExtResource( 5 )
+margin_left = -10.0
+margin_top = -12.0
+margin_right = 11.0
+margin_bottom = 8.0
+theme = ExtResource( 1 )
+text = "¶22"
+
+[node name="DetectPlayer" type="Area2D" parent="."]
+
+[node name="CollisionShape" type="CollisionShape2D" parent="DetectPlayer"]
+position = Vector2( 0, -3 )
+shape = SubResource( 12 )
+
+[node name="Collision" type="StaticBody2D" parent="." groups=["can_stain"]]
+
+[node name="ClosedCollision" type="CollisionShape2D" parent="Collision"]
+unique_name_in_owner = true
position = Vector2( 0, 4.5 )
-shape = SubResource( 2 )
-disabled = true
+shape = SubResource( 7 )
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-anims/closed = SubResource( 3 )
-anims/open = SubResource( 4 )
+[node name="TopShape" type="CollisionShape2D" parent="Collision"]
+position = Vector2( 0, -7.5 )
+shape = SubResource( 8 )
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
+[connection signal="area_entered" from="DetectPlayer" to="." method="_on_Area2D_area_entered"]
diff --git a/objects/environment/falling_block/falling_block.gd b/objects/environment/falling_block/falling_block.gd
index eed6938..3095ab0 100644
--- a/objects/environment/falling_block/falling_block.gd
+++ b/objects/environment/falling_block/falling_block.gd
@@ -8,6 +8,12 @@ onready var refresh_timer = $RefreshTimer
onready var crush_area = $CrushArea
onready var collision_shape = $CollisionShape2D
onready var anims = $AnimationPlayer
+onready var sprite = $Sprite
+
+func _ready():
+ # adjust to difficulty
+ fall_speed *= Game.enemy_speed_factor
+ fall_timer.wait_time /= Game.enemy_speed_factor
func _physics_process(delta):
#Fall
@@ -15,7 +21,7 @@ func _physics_process(delta):
position.y += fall_speed
#Crush the player
for area in crush_area.get_overlapping_areas():
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
var player = area.get_parent()
if player.is_on_floor():
player.die()
@@ -24,13 +30,17 @@ func _physics_process(delta):
anims.play("disappear")
func _on_Area2D_area_entered(area):
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
fall_timer.start()
+ sprite.frame = 1
+
-func _on_VisibilityNotifier2D_screen_exited():
- position = startpos
- fall = false
+#func _on_VisibilityNotifier2D_screen_exited():
+# position = startpos
+# fall = false
+# refresh_timer.stop()
+# anims.play("disappear", -1, -1.0, true)
func _on_RefreshTimer_timeout():
collision_shape.disabled = true # disable collision
@@ -39,11 +49,14 @@ func _on_RefreshTimer_timeout():
collision_shape.call_deferred("set_disabled", false)
fall = false
anims.play("idle")
+ anims.play("disappear", -1, -1.0, true)
+ sprite.frame = 0
func _on_FallTimer_timeout():
fall = true
refresh_timer.start()
-func _on_Area2D_area_exited(area):
- fall_timer.stop()
+#func _on_Area2D_area_exited(area):
+# if area.is_in_group("player_hitbox") && graphic == Graphics.GRAVEYARD:
+# sprite.frame = 0
diff --git a/objects/environment/falling_block/falling_block.tscn b/objects/environment/falling_block/falling_block.tscn
deleted file mode 100644
index f90b080..0000000
--- a/objects/environment/falling_block/falling_block.tscn
+++ /dev/null
@@ -1,96 +0,0 @@
-[gd_scene load_steps=8 format=2]
-
-[ext_resource path="res://graphics/falling_block/falling_block_cave.png" type="Texture" id=1]
-[ext_resource path="res://objects/environment/falling_block/falling_block.gd" type="Script" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2( 4, 1.5 )
-
-[sub_resource type="RectangleShape2D" id=2]
-extents = Vector2( 4, 0.5 )
-
-[sub_resource type="RectangleShape2D" id=3]
-extents = Vector2( 3, 0.5 )
-
-[sub_resource type="Animation" id=4]
-resource_name = "disappear"
-length = 0.6
-step = 0.05
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:visible")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0.00203761, 0.1, 0.2, 0.3, 0.4, 0.5 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
-"update": 1,
-"values": [ true, false, true, false, true, false ]
-}
-
-[sub_resource type="Animation" id=5]
-resource_name = "idle"
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:visible")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-
-[node name="FallingBlock" type="KinematicBody2D"]
-collision_layer = 4
-script = ExtResource( 2 )
-
-[node name="Sprite" type="Sprite" parent="."]
-texture = ExtResource( 1 )
-centered = false
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-position = Vector2( 4, 2.5 )
-shape = SubResource( 1 )
-
-[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."]
-visible = false
-position = Vector2( 4, 4 )
-scale = Vector2( 0.4, 0.4 )
-
-[node name="Area2D" type="Area2D" parent="."]
-collision_mask = 2
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
-position = Vector2( 4, -0.5 )
-shape = SubResource( 2 )
-
-[node name="FallTimer" type="Timer" parent="."]
-process_mode = 0
-wait_time = 0.15
-one_shot = true
-
-[node name="RefreshTimer" type="Timer" parent="."]
-process_mode = 0
-wait_time = 2.0
-one_shot = true
-
-[node name="CrushArea" type="Area2D" parent="."]
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="CrushArea"]
-position = Vector2( 4, 4.5 )
-shape = SubResource( 3 )
-
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-autoplay = "idle"
-anims/disappear = SubResource( 4 )
-anims/idle = SubResource( 5 )
-
-[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"]
-[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
-[connection signal="area_exited" from="Area2D" to="." method="_on_Area2D_area_exited"]
-[connection signal="timeout" from="FallTimer" to="." method="_on_FallTimer_timeout"]
-[connection signal="timeout" from="RefreshTimer" to="." method="_on_RefreshTimer_timeout"]
diff --git a/objects/environment/falling_block/falling_block_cave.tscn b/objects/environment/falling_block/falling_block_cave.tscn
new file mode 100644
index 0000000..a30e355
--- /dev/null
+++ b/objects/environment/falling_block/falling_block_cave.tscn
@@ -0,0 +1,140 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/falling_block/falling_block_cave.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/falling_block/falling_block.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 1.5 )
+
+[sub_resource type="RectangleShape2D" id=2]
+extents = Vector2( 3.5, 0.5 )
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 3, 0.5 )
+
+[sub_resource type="Animation" id=4]
+resource_name = "disappear"
+length = 0.6
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.00203761, 0.1, 0.2, 0.3, 0.4, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true, false, true, false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Area2D/CollisionShape2D:disabled")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("CollisionShape2D:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "idle"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("CollisionShape2D:disabled")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Area2D/CollisionShape2D:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[node name="FallingBlock" type="KinematicBody2D"]
+collision_layer = 4
+script = ExtResource( 2 )
+fall_speed = 1.0
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+centered = false
+hframes = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 4, 2.5 )
+shape = SubResource( 1 )
+
+[node name="Area2D" type="Area2D" parent="."]
+collision_mask = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2( 4, 0 )
+shape = SubResource( 2 )
+
+[node name="FallTimer" type="Timer" parent="."]
+process_mode = 0
+wait_time = 0.2
+one_shot = true
+
+[node name="RefreshTimer" type="Timer" parent="."]
+process_mode = 0
+wait_time = 2.0
+one_shot = true
+
+[node name="CrushArea" type="Area2D" parent="."]
+visible = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="CrushArea"]
+position = Vector2( 4, 4.5 )
+shape = SubResource( 3 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "idle"
+anims/disappear = SubResource( 4 )
+anims/idle = SubResource( 5 )
+
+[connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"]
+[connection signal="timeout" from="FallTimer" to="." method="_on_FallTimer_timeout"]
+[connection signal="timeout" from="RefreshTimer" to="." method="_on_RefreshTimer_timeout"]
diff --git a/objects/environment/falling_block/falling_block_graveyard.tscn b/objects/environment/falling_block/falling_block_graveyard.tscn
new file mode 100644
index 0000000..15bc850
--- /dev/null
+++ b/objects/environment/falling_block/falling_block_graveyard.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/falling_block/woeful_soul.png" type="Texture" id=2]
+
+[node name="FallingBlock" instance=ExtResource( 1 )]
+
+[node name="Sprite" parent="." index="0"]
+texture = ExtResource( 2 )
+
+[node name="FallTimer" parent="." index="3"]
+wait_time = 0.2
diff --git a/objects/environment/falling_block/falling_block_lab.tscn b/objects/environment/falling_block/falling_block_lab.tscn
new file mode 100644
index 0000000..0dd9e71
--- /dev/null
+++ b/objects/environment/falling_block/falling_block_lab.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/environment/falling_block/falling_block_cave.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/falling_block/falling_block_lab.png" type="Texture" id=2]
+
+[node name="FallingBlock" instance=ExtResource( 1 )]
+
+[node name="Sprite" parent="." index="0"]
+texture = ExtResource( 2 )
+
+[node name="FallTimer" parent="." index="3"]
+wait_time = 0.2
diff --git a/objects/environment/hatch/hatch.gd b/objects/environment/hatch/hatch.gd
new file mode 100644
index 0000000..2310e3a
--- /dev/null
+++ b/objects/environment/hatch/hatch.gd
@@ -0,0 +1,30 @@
+extends Node2D
+
+onready var anims = $SpriteAnim
+onready var down_prompt = $DownPrompt
+onready var snap_position = $Position2D
+var can_interact = false
+var player = null
+
+func _physics_process(delta):
+ if Input.is_action_just_pressed("enter_hatch") && can_interact:
+ anims.play("open")
+ player.enter_hatch(position + snap_position.position)
+ down_prompt.scale.y = -1
+ down_prompt.visible = true
+ player.connect("hatch_exited", self, "exit_hatch", [], CONNECT_ONESHOT)
+
+func exit_hatch():
+ anims.play("open")
+ down_prompt.scale.y = 1
+
+func _on_TriggerArea_area_entered(area):
+ down_prompt.visible = true
+ down_prompt.scale.y = 1
+ can_interact = true
+ player = area.get_owner()
+
+func _on_TriggerArea_area_exited(area):
+ if down_prompt.scale.y == 1:
+ down_prompt.visible = false
+ can_interact = false
diff --git a/objects/environment/hatch/hatch.tscn b/objects/environment/hatch/hatch.tscn
new file mode 100644
index 0000000..1b50803
--- /dev/null
+++ b/objects/environment/hatch/hatch.tscn
@@ -0,0 +1,78 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://graphics/hatch/hatch.png" type="Texture" id=1]
+[ext_resource path="res://graphics/hud/down_prompt.png" type="Texture" id=2]
+[ext_resource path="res://objects/environment/hatch/hatch.gd" type="Script" id=3]
+
+[sub_resource type="Animation" id=1]
+resource_name = "open"
+length = 0.9
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.7, 0.8 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 1, 0 ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "idle"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("DownPrompt:position")
+tracks/0/interp = 0
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, -18 ), Vector2( 4, -16 ), Vector2( 4, -18 ) ]
+}
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 4, 4 )
+
+[node name="Hatch" type="Node2D"]
+script = ExtResource( 3 )
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 6, 3 )
+texture = ExtResource( 1 )
+hframes = 3
+
+[node name="SpriteAnim" type="AnimationPlayer" parent="."]
+anims/open = SubResource( 1 )
+
+[node name="DownPrompt" type="Sprite" parent="."]
+visible = false
+position = Vector2( 4, -18 )
+texture = ExtResource( 2 )
+
+[node name="ArrowAnim" type="AnimationPlayer" parent="."]
+autoplay = "idle"
+anims/idle = SubResource( 2 )
+
+[node name="TriggerArea" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 2
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="TriggerArea"]
+position = Vector2( 4, 4 )
+shape = SubResource( 3 )
+
+[node name="Position2D" type="Position2D" parent="."]
+position = Vector2( 4, -2 )
+__meta__ = {
+"_gizmo_extents_": 0.0
+}
+
+[connection signal="area_entered" from="TriggerArea" to="." method="_on_TriggerArea_area_entered"]
+[connection signal="area_exited" from="TriggerArea" to="." method="_on_TriggerArea_area_exited"]
diff --git a/objects/environment/ladder/ladder.gd b/objects/environment/ladder/ladder.gd
index 4b2fd1c..759101e 100644
--- a/objects/environment/ladder/ladder.gd
+++ b/objects/environment/ladder/ladder.gd
@@ -1,4 +1,11 @@
-extends Node2D
-onready var left_snap = $LeftSnap
-onready var right_snap = $RightSnap
-onready var middle = position.x + 4
+extends Area2D
+
+export var can_climb_left: bool = true
+export var can_climb_right: bool = true
+
+onready var left_snap: float = $LeftSnap.global_position.x
+onready var right_snap: float = $RightSnap.global_position.x
+onready var middle: float = global_position.x + 4.0
+
+func _ready() -> void:
+ $CollisionShape2D.global_position.y -= 1.0
diff --git a/objects/environment/ladder/ladder.tscn b/objects/environment/ladder/ladder.tscn
index 80766f5..5b8985c 100644
--- a/objects/environment/ladder/ladder.tscn
+++ b/objects/environment/ladder/ladder.tscn
@@ -5,14 +5,11 @@
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 6, 4 )
-[node name="Ladder" type="Node2D"]
+[node name="Ladder" type="Area2D" groups=["ladder"]]
+collision_layer = 64
script = ExtResource( 1 )
-[node name="Area2D" type="Area2D" parent="."]
-collision_layer = 4
-collision_mask = 4
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( 4, 4 )
shape = SubResource( 1 )
diff --git a/objects/environment/moving_platform/moving_platform.gd b/objects/environment/moving_platform/moving_platform.gd
new file mode 100644
index 0000000..a2f64f8
--- /dev/null
+++ b/objects/environment/moving_platform/moving_platform.gd
@@ -0,0 +1,51 @@
+extends KinematicBody2D
+
+export var direction = 1
+export var speed = 20
+#How far to move
+export var left_up_boundary = 0.0
+export var right_down_boundary = 0.0
+#Move horizontal or vertical
+export(int, "Horizontal", "Vertical") var move_direction
+#Onreadys
+onready var startpos = position
+onready var sprite = $Sprite
+onready var hitbox = $CollisionShape2D
+
+func _ready():
+ sprite.set_region_rect(Rect2(0,0,8 * scale.x,4))
+ sprite.scale.x /= scale.x
+ left_up_boundary *= 8
+ right_down_boundary *= 8
+ #Better offset for vertical platforms
+ if move_direction == 1:
+ right_down_boundary -= 5
+ left_up_boundary -= 1
+
+func _physics_process(delta):
+ if move_direction == 0:
+ move_side_to_side(delta)
+ else: move_up_and_down(delta)
+
+func move_side_to_side(delta):
+ #Move
+ position.x += direction * (speed * delta)
+ #Switch dir
+ if position.x >= startpos.x + (right_down_boundary):
+ direction = -1
+ if position.x <= startpos.x + (-left_up_boundary):
+ direction = 1
+
+func move_up_and_down(delta):
+ #Move
+ position.y += direction * (speed * delta)
+ #fix graphics
+ if direction < 0.0 and speed >= 30.0:
+ sprite.position.y = 1.0
+ else:
+ sprite.position.y = 2.0
+ #Switch dir
+ if position.y >= startpos.y + (right_down_boundary):
+ direction = -1
+ if position.y <= startpos.y + (-left_up_boundary):
+ direction = 1
diff --git a/objects/environment/moving_platform/moving_platform.tscn b/objects/environment/moving_platform/moving_platform.tscn
new file mode 100644
index 0000000..2c4d38d
--- /dev/null
+++ b/objects/environment/moving_platform/moving_platform.tscn
@@ -0,0 +1,25 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/moving_platform/moving_platform.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform.gd" type="Script" id=2]
+
+[sub_resource type="SegmentShape2D" id=1]
+a = Vector2( -4, -2 )
+b = Vector2( 4, -2 )
+
+[node name="MovingPlatform" type="KinematicBody2D"]
+collision_layer = 4
+motion/sync_to_physics = true
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 0, 2 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 8, 4 )
+region_filter_clip = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 0, 2 )
+shape = SubResource( 1 )
+one_way_collision = true
diff --git a/objects/environment/moving_platform/moving_platform_scholar.gd b/objects/environment/moving_platform/moving_platform_scholar.gd
new file mode 100644
index 0000000..ea6cc83
--- /dev/null
+++ b/objects/environment/moving_platform/moving_platform_scholar.gd
@@ -0,0 +1,92 @@
+tool
+extends Node2D
+
+
+const DEBUG_COLOR := Color(0.4, 0.2, 0.6, 0.75)
+
+export var size: float = 8.0 setget _set_size
+export var speed: float = 20.0
+export var point_a := Vector2.ZERO setget _set_point_a
+export var point_b := Vector2.ZERO setget _set_point_b
+export (float, 0.0, 1.0, 0.1) var start_position: float = 0.0 setget _set_start_position
+export var start_reversed: bool = false
+
+onready var body: KinematicBody2D = $Body
+onready var sprite: Sprite = $"%Sprite"
+
+var _previous_position: Vector2
+
+
+func _ready() -> void:
+ if Engine.editor_hint:
+ return
+
+ var distance := point_a.distance_to(point_b)
+ var start_target := point_a if start_reversed else point_b
+ var end_target := point_b if start_reversed else point_a
+ var start_weight := start_position if start_reversed else 1.0 - start_position
+
+ var tween := create_tween()
+ tween.stop()
+ tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
+ tween.set_loops()
+ tween.tween_property(body, "position", end_target, distance / speed)
+ tween.tween_property(body, "position", start_target, distance / speed)
+ var start_tween := create_tween()
+ start_tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
+ start_tween.tween_property(body, "position", start_target, start_weight * distance / speed)
+ start_tween.tween_callback(tween, "play")
+
+ _previous_position = body.global_position
+
+
+func _physics_process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+
+ if (body.global_position.y - _previous_position.y) < 0.0 and speed >= 40.0:
+ sprite.position.y = -1.0
+ else:
+ sprite.position.y = 0.0
+ _previous_position = body.global_position
+
+
+func _set_size(value: float) -> void:
+ size = value
+ get_node("%Sprite").region_rect.size.x = size
+ var segment = get_node("%CollisionShape").shape as SegmentShape2D
+ segment.a.x = size * -0.5
+ segment.b.x = size * 0.5
+
+
+func _set_start_position(value: float) -> void:
+ start_position = value
+ if Engine.editor_hint:
+ get_node("Body").position = lerp(point_a, point_b, start_position)
+
+
+func _set_point_a(value: Vector2) -> void:
+ point_a = value
+ if Engine.editor_hint:
+ _update_positions()
+
+
+func _set_point_b(value: Vector2) -> void:
+ point_b = value
+ if Engine.editor_hint:
+ _update_positions()
+
+
+func _update_positions() -> void:
+ if point_a == point_b:
+ _set_start_position(0.0)
+ else:
+ var closest_point := Geometry.get_closest_point_to_segment_2d(get_node("Body").position, point_a, point_b)
+ _set_start_position(point_a.distance_to(closest_point) / point_a.distance_to(point_b))
+ property_list_changed_notify()
+ update()
+
+
+func _draw() -> void:
+ if Engine.editor_hint:
+ draw_line(point_a, point_b, DEBUG_COLOR, 1.01)
diff --git a/objects/environment/moving_platform/moving_platform_scholar.tscn b/objects/environment/moving_platform/moving_platform_scholar.tscn
new file mode 100644
index 0000000..0d83800
--- /dev/null
+++ b/objects/environment/moving_platform/moving_platform_scholar.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/moving_platform/moving_platform.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/moving_platform/moving_platform_scholar.gd" type="Script" id=2]
+
+[sub_resource type="SegmentShape2D" id=1]
+resource_local_to_scene = true
+a = Vector2( -4, 0.01 )
+b = Vector2( 4, 0.01 )
+
+[node name="MovingPlatform" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="Body" type="KinematicBody2D" parent="."]
+collision_layer = 4
+motion/sync_to_physics = true
+moving_platform_apply_velocity_on_leave = 1
+
+[node name="Sprite" type="Sprite" parent="Body"]
+unique_name_in_owner = true
+texture = ExtResource( 1 )
+offset = Vector2( 0, 2 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 8, 4 )
+region_filter_clip = true
+
+[node name="CollisionShape" type="CollisionShape2D" parent="Body"]
+unique_name_in_owner = true
+shape = SubResource( 1 )
+one_way_collision = true
diff --git a/objects/environment/rock/crate.tscn b/objects/environment/rock/crate.tscn
new file mode 100644
index 0000000..55117a6
--- /dev/null
+++ b/objects/environment/rock/crate.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://objects/environment/rock/rock.tscn" type="PackedScene" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/rock/crate.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Crate" instance=ExtResource( 1 )]
+
+[node name="Sprite" parent="." index="0"]
+material = SubResource( 1 )
+position = Vector2( 0, 0 )
+texture = ExtResource( 3 )
diff --git a/objects/environment/rock/rock.gd b/objects/environment/rock/rock.gd
index d7f33ae..7bc5ee2 100644
--- a/objects/environment/rock/rock.gd
+++ b/objects/environment/rock/rock.gd
@@ -1,23 +1,33 @@
extends KinematicBody2D
-var velocity = Vector2.ZERO
-onready var bottom = $Bottom
+
+var velocity: Vector2 = Vector2.ZERO
+const SplashParticles = preload("res://objects/environment/splash/splash_particles.tscn")
func _physics_process(delta):
- if !is_on_floor():
+ if not is_on_floor():
#Gravity
- velocity.y = 100
- velocity.x = 0
+ velocity.y = 100.0
+ velocity.x = 0.0
else:
- velocity.y = 0
+ velocity.y = 0.0
move_and_slide(velocity,Vector2.UP)
- velocity.x = 0
+ velocity.x = 0.0
-func push(direction):
- velocity -= direction * 32
+func push(amount: float):
+ velocity.x = amount
func _on_Hitbox_area_entered(area):
# do not squish if in "blocks_squash" group
- if area.is_in_group("enemy_hitbox") && !area.is_in_group("blocks_squash"):
- var enemy = area.get_parent()
- if enemy.global_position.y > global_position.y && velocity.y > 0:
+ if area.is_in_group("enemy_hitbox") and not area.is_in_group("blocks_squash"):
+ var enemy = area.get_owner()
+ if enemy.global_position.y > global_position.y and velocity.y > 0:
enemy.die()
+
+
+func _on_Hitbox_body_entered(body):
+ if body.is_in_group("has_splash"):
+ var particles = SplashParticles.instance()
+ particles.global_position = global_position
+ particles.color = body.splash_color
+ particles.emitting = true
+ get_parent().add_child(particles)
diff --git a/objects/environment/rock/rock.tscn b/objects/environment/rock/rock.tscn
index 3609eca..aa761b0 100644
--- a/objects/environment/rock/rock.tscn
+++ b/objects/environment/rock/rock.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://graphics/rock/rock.png" type="Texture" id=1]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
[ext_resource path="res://objects/environment/rock/rock.gd" type="Script" id=3]
[sub_resource type="ShaderMaterial" id=1]
@@ -10,18 +10,19 @@ shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = false
[sub_resource type="RectangleShape2D" id=2]
-extents = Vector2( 3.9, 3.9 )
+extents = Vector2( 3.75, 4 )
[sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 4, 4 )
-[node name="Rock" type="KinematicBody2D" groups=["pushable"]]
+[node name="Rock" type="KinematicBody2D" groups=["pushable", "stop_arrow"]]
collision_layer = 4
script = ExtResource( 3 )
[node name="Sprite" type="Sprite" parent="."]
material = SubResource( 1 )
position = Vector2( -1, -1 )
+z_index = -1
texture = ExtResource( 1 )
centered = false
@@ -31,12 +32,12 @@ shape = SubResource( 2 )
[node name="Hitbox" type="Area2D" parent="." groups=["squash"]]
position = Vector2( -1, 0 )
+collision_layer = 5
+collision_mask = 33
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
position = Vector2( 5, 4 )
shape = SubResource( 3 )
-[node name="Bottom" type="Position2D" parent="."]
-position = Vector2( 4, 8 )
-
[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"]
diff --git a/objects/environment/spaghetti/spaghetti.gd b/objects/environment/spaghetti/spaghetti.gd
new file mode 100644
index 0000000..7461548
--- /dev/null
+++ b/objects/environment/spaghetti/spaghetti.gd
@@ -0,0 +1,24 @@
+extends Node2D
+
+
+export var segments: int = 8
+
+
+onready var segment: RigidBody2D = $Segment
+
+
+func _ready() -> void:
+ var line = segment.get_node("Line")
+ line.default_color = line.default_color.darkened(rand_range(-0.1, 0.1))
+ var last_segment = $Segment
+ for i in segments:
+ var new_segment = last_segment.duplicate(0)
+ add_child(new_segment)
+ new_segment.position.x -= 3.0
+ var joint = last_segment.get_node("Joint")
+ joint.node_a = joint.get_path_to(last_segment)
+ joint.node_b = joint.get_path_to(new_segment)
+ new_segment.apply_central_impulse(Vector2(30.0, rand_range(-10.0, -100.0)))
+ last_segment = new_segment
+ position.x += 1.5 * float(segments)
+ Audio.play_sound(Audio.a_spaghetti, Audio.ac_boss)
diff --git a/objects/environment/spaghetti/spaghetti.tscn b/objects/environment/spaghetti/spaghetti.tscn
new file mode 100644
index 0000000..c97cc30
--- /dev/null
+++ b/objects/environment/spaghetti/spaghetti.tscn
@@ -0,0 +1,28 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/environment/spaghetti/spaghetti.gd" type="Script" id=1]
+
+[sub_resource type="PhysicsMaterial" id=3]
+friction = 0.25
+
+[sub_resource type="CapsuleShape2D" id=1]
+radius = 0.5
+height = 3.0
+
+[node name="Spaghetti" type="Node2D"]
+script = ExtResource( 1 )
+
+[node name="Segment" type="RigidBody2D" parent="."]
+physics_material_override = SubResource( 3 )
+
+[node name="Line" type="Line2D" parent="Segment"]
+points = PoolVector2Array( -2, 0, 2, 0 )
+width = 1.0
+default_color = Color( 0.988235, 0.984314, 0.839216, 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Segment"]
+rotation = 1.5708
+shape = SubResource( 1 )
+
+[node name="Joint" type="PinJoint2D" parent="Segment"]
+position = Vector2( -1.5, 0 )
diff --git a/objects/environment/splash/splash_particles.tscn b/objects/environment/splash/splash_particles.tscn
new file mode 100644
index 0000000..d84eecb
--- /dev/null
+++ b/objects/environment/splash/splash_particles.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://graphics/particles/splash.png" type="Texture" id=1]
+
+[node name="SplashParticles" type="CPUParticles2D"]
+pause_mode = 2
+z_index = -5
+emitting = false
+amount = 16
+lifetime = 2.0
+one_shot = true
+explosiveness = 0.9
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 2, 0 )
+flag_align_y = true
+direction = Vector2( 0, -1 )
+spread = 10.0
+gravity = Vector2( 0, 120 )
+initial_velocity = 100.0
+initial_velocity_random = 0.5
+scale_amount = 0.25
+scale_amount_random = 0.5
diff --git a/objects/environment/stalactite/stalactite.gd b/objects/environment/stalactite/stalactite.gd
new file mode 100644
index 0000000..fe987e0
--- /dev/null
+++ b/objects/environment/stalactite/stalactite.gd
@@ -0,0 +1,43 @@
+extends Node2D
+
+onready var cast = $RayCast2D
+export var fall_speed = 100
+var fall = false
+onready var refresh_timer = $RefreshTimer
+onready var anims = $AnimationPlayer
+onready var startpos = position
+
+func _ready():
+ # adjust to difficulty
+ fall_speed *= Game.enemy_speed_factor
+
+func _physics_process(delta):
+ if cast.is_colliding():
+ var collider = cast.get_collider()
+ if collider.is_in_group("player_hitbox") or collider.is_in_group("msx"):
+ anims.play("wiggle")
+
+ if fall == true:
+ position.y += fall_speed * delta
+
+ if !refresh_timer.is_stopped() && refresh_timer.get_time_left() <= 0.6:
+ anims.play("disappear")
+
+
+
+func _on_Hitbox_area_entered(area):
+ if area.is_in_group("player_hitbox"):
+ area.get_parent().die()
+
+
+func _on_RefreshTimer_timeout():
+ call_deferred("set_position", startpos)
+ fall = false
+ anims.play("idle")
+ anims.play("disappear", -1, -1.0, true)
+
+
+func _on_AnimationPlayer_animation_finished(anim_name):
+ if anim_name == "wiggle":
+ if fall == false: refresh_timer.start()
+ fall = true
diff --git a/objects/environment/stalactite/stalactite.tscn b/objects/environment/stalactite/stalactite.tscn
new file mode 100644
index 0000000..1d66b73
--- /dev/null
+++ b/objects/environment/stalactite/stalactite.tscn
@@ -0,0 +1,157 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/stalactite/stalactite.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/stalactite/stalactite.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 4, 2.5 )
+
+[sub_resource type="Animation" id=4]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=2]
+resource_name = "disappear"
+length = 0.6
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0.00203761, 0.1, 0.2, 0.3, 0.4, 0.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ true, false, true, false, true, false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("RayCast2D:enabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "idle"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("RayCast2D:enabled")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "wiggle"
+length = 0.1
+step = 0.025
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:position")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 4, 3 ), Vector2( 3, 3 ), Vector2( 4, 3 ), Vector2( 5, 3 ), Vector2( 4, 3 ) ]
+}
+
+[node name="Stalactite" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 4, 3 )
+texture = ExtResource( 1 )
+
+[node name="RayCast2D" type="RayCast2D" parent="."]
+position = Vector2( 3, 3 )
+enabled = true
+cast_to = Vector2( 0, 40 )
+collision_mask = 10
+collide_with_areas = true
+
+[node name="Hitbox" type="Area2D" parent="."]
+position = Vector2( 0, 3 )
+collision_mask = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 0 )
+shape = SubResource( 1 )
+disabled = true
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "idle"
+anims/RESET = SubResource( 4 )
+anims/disappear = SubResource( 2 )
+anims/idle = SubResource( 3 )
+anims/wiggle = SubResource( 5 )
+
+[node name="RefreshTimer" type="Timer" parent="."]
+wait_time = 2.0
+one_shot = true
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
+[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
+[connection signal="timeout" from="RefreshTimer" to="." method="_on_RefreshTimer_timeout"]
diff --git a/objects/environment/stalactite/stalactite_particles.gd b/objects/environment/stalactite/stalactite_particles.gd
new file mode 100644
index 0000000..ea07667
--- /dev/null
+++ b/objects/environment/stalactite/stalactite_particles.gd
@@ -0,0 +1,4 @@
+extends CPUParticles2D
+
+func _ready():
+ emitting = true
diff --git a/objects/environment/stalactite/stalactite_particles.tscn b/objects/environment/stalactite/stalactite_particles.tscn
new file mode 100644
index 0000000..c8fba30
--- /dev/null
+++ b/objects/environment/stalactite/stalactite_particles.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/particles/stalactite.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/stalactite/stalactite_particles.gd" type="Script" id=2]
+
+[node name="StalactiteParticles" type="CPUParticles2D"]
+emitting = false
+lifetime = 0.2
+one_shot = true
+texture = ExtResource( 1 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 300 )
+initial_velocity = 80.0
+angle = 255.3
+angle_random = 0.47
+scale_amount = 0.0
+scale_amount_random = 1.0
+script = ExtResource( 2 )
diff --git a/objects/environment/switches/button.gd b/objects/environment/switches/button.gd
new file mode 100644
index 0000000..836b530
--- /dev/null
+++ b/objects/environment/switches/button.gd
@@ -0,0 +1,14 @@
+tool
+extends "res://objects/environment/switches/switch.gd"
+
+var pressed = false
+var sound = load("res://audio/sounds/button.ogg")
+
+func _on_ActivationArea_area_entered(area):
+ if !pressed:
+ if area.is_in_group("player_hitbox"):
+ activate()
+ $Sprite.frame = 1
+ $StaticBody2D/CollisionPolygon2D.disabled = true
+ pressed = true
+ Audio.play_sound(sound,$AudioStreamPlayer)
diff --git a/objects/environment/switches/button.tscn b/objects/environment/switches/button.tscn
new file mode 100644
index 0000000..f49b15d
--- /dev/null
+++ b/objects/environment/switches/button.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/switches/button.png" type="Texture" id=1]
+[ext_resource path="res://objects/environment/switches/button.gd" type="Script" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 2, 0.5 )
+
+[node name="Button" type="Node2D"]
+script = ExtResource( 2 )
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 4, 4 )
+texture = ExtResource( 1 )
+hframes = 2
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="StaticBody2D"]
+polygon = PoolVector2Array( 1, 7, 0, 8, 1, 8, 7, 8, 8, 8, 7, 7 )
+
+[node name="ActivationArea" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="ActivationArea"]
+position = Vector2( 4, 6.5 )
+shape = SubResource( 1 )
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+volume_db = -8.0
+
+[connection signal="area_entered" from="ActivationArea" to="." method="_on_ActivationArea_area_entered"]
diff --git a/objects/environment/switches/switch.gd b/objects/environment/switches/switch.gd
new file mode 100644
index 0000000..41b2742
--- /dev/null
+++ b/objects/environment/switches/switch.gd
@@ -0,0 +1,19 @@
+tool
+extends Node2D
+
+export (String) var target_group = ""
+
+func activate():
+ for object in get_tree().get_nodes_in_group(target_group):
+ object.switch_action()
+
+func _process(delta):
+ # redraw lines every frame to account for things changing
+ if Engine.editor_hint and Engine.get_frames_drawn() % 10 == 0:
+ update()
+
+func _draw():
+ if Engine.editor_hint:
+ for node in get_tree().get_nodes_in_group(target_group):
+ if node is Node2D:
+ draw_line(Vector2.ZERO, to_local(node.global_position), Color(0.2, 1.0, 0.0, 0.5), 1.5)
diff --git a/objects/environment/test_fire/test_fire.tscn b/objects/environment/test_fire/test_fire.tscn
new file mode 100644
index 0000000..ae6b1b0
--- /dev/null
+++ b/objects/environment/test_fire/test_fire.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://graphics/backgrounds/fire.png" type="Texture" id=1]
+[ext_resource path="res://shaders/fire.gdshader" type="Shader" id=2]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+
+[node name="Node2D" type="Node2D"]
+
+[node name="ColorRect" type="ColorRect" parent="."]
+margin_right = 256.0
+margin_bottom = 192.0
+color = Color( 0, 0, 0, 1 )
+
+[node name="Fire" type="Sprite" parent="."]
+material = SubResource( 1 )
+position = Vector2( 144, 96 )
+scale = Vector2( 2.02667, 1 )
+texture = ExtResource( 1 )
diff --git a/objects/environment/tube/tube_entrance.gd b/objects/environment/tube/tube_entrance.gd
index 4962417..fb73f6e 100644
--- a/objects/environment/tube/tube_entrance.gd
+++ b/objects/environment/tube/tube_entrance.gd
@@ -4,7 +4,7 @@ export var speed = 120.0
export var direction = Vector2.RIGHT
func _on_TubeEntrance_area_entered(area):
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
var player = area.get_parent()
player.global_position = global_position + Vector2(4.0, 4.0)
player.enter_transport(speed, direction)
diff --git a/objects/environment/tube/tube_exit.gd b/objects/environment/tube/tube_exit.gd
index 9a584df..a8cb131 100644
--- a/objects/environment/tube/tube_exit.gd
+++ b/objects/environment/tube/tube_exit.gd
@@ -1,5 +1,5 @@
extends Area2D
func _on_TubeExit_area_entered(area):
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
area.get_parent().exit_transport()
diff --git a/objects/environment/turniwood/turning_platform.gd b/objects/environment/turniwood/turning_platform.gd
index 0f34719..5bc03d0 100644
--- a/objects/environment/turniwood/turning_platform.gd
+++ b/objects/environment/turniwood/turning_platform.gd
@@ -1,19 +1,33 @@
+tool
extends Node2D
+
onready var anims = $AnimationPlayer
onready var flip_timer = $FlipTimer
onready var delay_timer = $DelayTimer
+onready var static_body = $StaticBody2D
export var time:float = 60
export var delay = 0.0
-export(int, "Wood", "Yellow") var color
-onready var time_ms = time * 0.0166666666666667 # Time is converted from frames @ 60fps to ms
+export var texture: Texture setget _set_texture
+onready var time_ms = time / 60.0 # Time is converted from frames @ 60fps to ms
+onready var collision_layer = static_body.collision_layer
func _ready():
+ if Engine.editor_hint:
+ return
+ _set_texture(texture)
#Auto start if delay variable is zero
if delay == 0.0:
anims.play("idle")
flip_timer.start(time_ms)
else:
delay_timer.start(delay)
+ #Easy mode
+ time_ms /= Game.enemy_speed_factor
+
+func _set_texture(new_texture: Texture) -> void:
+ texture = new_texture
+ if is_inside_tree():
+ $Sprite.texture = new_texture
func _on_AnimationPlayer_animation_finished(anim_name):
#Return to idle after turn animation
@@ -21,6 +35,7 @@ func _on_AnimationPlayer_animation_finished(anim_name):
anims.play("idle")
flip_timer.start(time_ms)
+
func _on_FlipTimer_timeout():
anims.play("turn")
@@ -28,3 +43,12 @@ func _on_FlipTimer_timeout():
func _on_DelayTimer_timeout():
anims.play("idle")
flip_timer.start(time_ms)
+
+
+func _on_DetectPlayer_body_entered(body: Node) -> void:
+ if body.is_in_group("player"):
+ static_body.collision_layer = 0
+
+func _on_DetectPlayer_body_exited(body: Node) -> void:
+ if body.is_in_group("player"):
+ static_body.collision_layer = collision_layer
diff --git a/objects/environment/turniwood/turning_platform.tscn b/objects/environment/turniwood/turning_platform.tscn
index bdeb679..6e0e46f 100644
--- a/objects/environment/turniwood/turning_platform.tscn
+++ b/objects/environment/turniwood/turning_platform.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=8 format=2]
[ext_resource path="res://objects/environment/turniwood/turning_platform.gd" type="Script" id=1]
[ext_resource path="res://graphics/turniwood/turning_platform_yellow.png" type="Texture" id=2]
@@ -6,12 +6,30 @@
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 4, 1 )
+[sub_resource type="RectangleShape2D" id=4]
+extents = Vector2( 3.5, 0.5 )
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
+
[sub_resource type="Animation" id=2]
resource_name = "idle"
loop = true
step = 0.125
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("StaticBody2D/CollisionShape2D:disabled")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
@@ -20,10 +38,10 @@ tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 8, 8 ) ]
+"values": [ false ]
}
tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:rotation_degrees")
+tracks/1/path = NodePath("Sprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
@@ -32,19 +50,7 @@ tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
-"values": [ 0.0 ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("StaticBody2D/CollisionShape2D:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ false ]
+"values": [ 0 ]
}
[sub_resource type="Animation" id=3]
@@ -76,46 +82,61 @@ tracks/1/keys = {
"values": [ Rect2( 0, 0, 8, 8 ), Rect2( 8, 0, 8, 8 ), Rect2( 0, 0, 8, 8 ), Rect2( 8, 0, 8, 8 ), Rect2( 0, 0, 8, 8 ) ]
}
tracks/2/type = "value"
-tracks/2/path = NodePath("Sprite:rotation_degrees")
+tracks/2/path = NodePath("Sprite:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
-"times": PoolRealArray( 0.4, 0.55, 0.65, 0.8, 0.9 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
-"update": 1,
-"values": [ 0.0, 90.0, 90.0, 0.0, 0.0 ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("Sprite:position")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
"times": PoolRealArray( 0.15, 0.2, 0.35, 0.4 ),
"transitions": PoolRealArray( 1, 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 4, 4 ), Vector2( 5, 4 ), Vector2( 3, 4 ), Vector2( 4, 4 ) ]
}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Sprite:frame")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.55, 0.65, 0.8, 0.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3, 0 ]
+}
[node name="TurningPlatform" type="Node2D"]
script = ExtResource( 1 )
+texture = ExtResource( 2 )
[node name="Sprite" type="Sprite" parent="."]
position = Vector2( 4, 4 )
texture = ExtResource( 2 )
-region_enabled = true
+hframes = 4
region_rect = Rect2( 0, 0, 8, 8 )
[node name="StaticBody2D" type="StaticBody2D" parent="."]
+collision_layer = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+visible = false
position = Vector2( 4, 4 )
shape = SubResource( 1 )
+one_way_collision = true
+
+[node name="DetectPlayer" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 128
+monitoring = false
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="DetectPlayer"]
+position = Vector2( 4, 4 )
+shape = SubResource( 4 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 5 )
anims/idle = SubResource( 2 )
anims/turn = SubResource( 3 )
@@ -124,6 +145,8 @@ anims/turn = SubResource( 3 )
[node name="DelayTimer" type="Timer" parent="."]
one_shot = true
+[connection signal="body_entered" from="DetectPlayer" to="." method="_on_DetectPlayer_body_entered"]
+[connection signal="body_exited" from="DetectPlayer" to="." method="_on_DetectPlayer_body_exited"]
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
[connection signal="timeout" from="FlipTimer" to="." method="_on_FlipTimer_timeout"]
[connection signal="timeout" from="DelayTimer" to="." method="_on_DelayTimer_timeout"]
diff --git a/objects/environment/turret/turret.gd b/objects/environment/turret/turret.gd
index 61998d8..276a963 100644
--- a/objects/environment/turret/turret.gd
+++ b/objects/environment/turret/turret.gd
@@ -35,4 +35,4 @@ func _physics_process(delta):
bullet.direction = bullet.direction.rotated(rand_range(-bullet_spread, bullet_spread))
bullet.speed = bullet_speed
get_parent().call_deferred("add_child", bullet)
- Game.play_sound(Game.a_arrow, Game.ac_climb)
+ Audio.play_sound(Audio.a_arrow, Audio.ac_climb)
diff --git a/objects/environment/turret/turret_bullet.gd b/objects/environment/turret/turret_bullet.gd
index daa3298..ef8631c 100644
--- a/objects/environment/turret/turret_bullet.gd
+++ b/objects/environment/turret/turret_bullet.gd
@@ -9,7 +9,7 @@ func _physics_process(delta):
func _on_Hitbox_area_entered(area):
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
area.get_parent().die()
diff --git a/objects/environment/zball/zball.gd b/objects/environment/zball/zball.gd
new file mode 100644
index 0000000..7c9a173
--- /dev/null
+++ b/objects/environment/zball/zball.gd
@@ -0,0 +1,26 @@
+extends RigidBody2D
+
+
+export var max_glow: float = 5.0
+
+
+onready var glow: Light2D = $Glow
+
+
+func _on_Hurtbox_area_entered(area: Area2D) -> void:
+ if area.is_in_group("enemy_hitbox"):
+ var target = area.get_parent()
+ target.die()
+
+
+func _physics_process(delta: float) -> void:
+ var speed: float = inverse_lerp(0.0, 250.0, linear_velocity.length())
+ glow.energy = lerp(0.0, max_glow, speed)
+
+
+func _on_body_entered(body: Node) -> void:
+ pass
+# if glow.energy < max_glow:
+# pass
+# glow.energy += glow_increase
+# smoke_particles.amount += 1
diff --git a/objects/environment/zball/zball.tscn b/objects/environment/zball/zball.tscn
new file mode 100644
index 0000000..c531390
--- /dev/null
+++ b/objects/environment/zball/zball.tscn
@@ -0,0 +1,38 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://objects/environment/zball/zball.gd" type="Script" id=1]
+[ext_resource path="res://graphics/secret/zball.png" type="Texture" id=2]
+[ext_resource path="res://graphics/secret/zball_glow.png" type="Texture" id=3]
+
+[sub_resource type="PhysicsMaterial" id=2]
+bounce = 0.75
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 4.0
+
+[node name="ZBall" type="RigidBody2D"]
+mass = 5.0
+physics_material_override = SubResource( 2 )
+continuous_cd = 2
+script = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+light_mask = 9
+texture = ExtResource( 2 )
+
+[node name="Glow" type="Light2D" parent="."]
+texture = ExtResource( 3 )
+energy = 5.0
+range_item_cull_mask = 8
+
+[node name="Hurtbox" type="Area2D" parent="."]
+collision_mask = 5
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"]
+shape = SubResource( 1 )
+
+[connection signal="body_entered" from="." to="." method="_on_body_entered"]
+[connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"]
diff --git a/objects/hud/3d_text.gd b/objects/hud/3d_text.gd
new file mode 100644
index 0000000..ffdbd9e
--- /dev/null
+++ b/objects/hud/3d_text.gd
@@ -0,0 +1,35 @@
+tool
+extends ViewportContainer
+
+
+export var text: String = "" setget _set_text
+export var text_material: Material = null setget _set_material
+
+
+onready var text_mesh = $"%TextMesh"
+onready var animation_player = $"%AnimationPlayer"
+export var anim = "RESET"
+
+func _ready() -> void:
+ animation_player.play(anim)
+
+
+func _set_text(value: String) -> void:
+ text = value
+ if not is_instance_valid(text_mesh):
+ yield(self, "ready")
+ text_mesh.mesh.text = text
+
+
+func _set_material(value: Material) -> void:
+ text_material = value
+ if not is_instance_valid(text_mesh):
+ yield(self, "ready")
+ text_mesh.mesh.material = text_material
+
+func final_score():
+ _set_text("%05d" % Game.final_score)
+ Audio.play_sound(Audio.a_final_score,Audio.ac_collectible)
+
+func play_confirm_sound():
+ pass # Replace with function body.
diff --git a/objects/hud/3d_text.tscn b/objects/hud/3d_text.tscn
new file mode 100644
index 0000000..da91231
--- /dev/null
+++ b/objects/hud/3d_text.tscn
@@ -0,0 +1,692 @@
+[gd_scene load_steps=23 format=2]
+
+[ext_resource path="res://ui/PressStart2P-Regular.ttf" type="DynamicFontData" id=1]
+[ext_resource path="res://objects/hud/3d_text.gd" type="Script" id=2]
+[ext_resource path="res://ui/Kozuka Mincho Std H.otf" type="DynamicFontData" id=3]
+[ext_resource path="res://ui/Boba Date.otf" type="DynamicFontData" id=4]
+[ext_resource path="res://ui/HooskaiChamferedSquare.ttf" type="DynamicFontData" id=5]
+
+[sub_resource type="DynamicFont" id=19]
+font_data = ExtResource( 1 )
+
+[sub_resource type="TextMesh" id=2]
+resource_local_to_scene = true
+text = "TEXT"
+font = SubResource( 19 )
+pixel_size = 0.05
+depth = 0.1
+
+[sub_resource type="Environment" id=4]
+background_mode = 1
+ambient_light_color = Color( 1, 1, 1, 1 )
+ambient_light_energy = 0.5
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 1, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 1.1, 1.5, 2 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextMesh:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text_material")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ null ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("..:text")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "TEXT" ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ ExtResource( 1 ) ]
+}
+
+[sub_resource type="Animation" id=6]
+resource_name = "Zoom Entrance"
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 1, -100 ), Vector3( 0, 1, 0 ) ]
+}
+
+[sub_resource type="SpatialMaterial" id=16]
+albedo_color = Color( 0.105882, 0.34902, 0.509804, 1 )
+metallic = 0.46
+
+[sub_resource type="Animation" id=17]
+resource_name = "bug world"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:rotation_degrees")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 360, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0.8, 0.8, 0.8 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("..:text_material")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 16 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "WELC0ME T0 BUG W0RLD" ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 4 ) ]
+}
+
+[sub_resource type="SpatialMaterial" id=11]
+albedo_color = Color( 0.309804, 0.690196, 0.380392, 1 )
+metallic = 0.35
+metallic_specular = 0.11
+
+[sub_resource type="Animation" id=20]
+resource_name = "final score"
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:rotation_degrees")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 180, 0, 216 ), Vector3( 360, 0, 360 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("..:text_material")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 11 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "00000" ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 5 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("TextMesh:translation")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( -8, 1.8, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/6/type = "method"
+tracks/6/path = NodePath("..")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "final_score"
+} ]
+}
+
+[sub_resource type="SpatialMaterial" id=9]
+albedo_color = Color( 0.901961, 0.133333, 0.133333, 1 )
+metallic = 0.35
+
+[sub_resource type="Animation" id=18]
+resource_name = "fucker"
+length = 2.0
+step = 0.025
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 1.4, 1.825 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, -3, 0 ), Vector3( 0, 1, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 1.4, 1.825 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextMesh:rotation_degrees")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 1.4, 1.825 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 180, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text_material")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 1.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 9 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("..:text")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 1.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "FUCKER" ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 1.4 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ) ]
+}
+
+[sub_resource type="Animation" id=10]
+resource_name = "game over"
+length = 2.0
+step = 0.025
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, -3, 0 ), Vector3( 0, 1.8, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextMesh:rotation_degrees")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 180, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text_material")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 9 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("..:text")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "GAME OVER" ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ) ]
+}
+
+[sub_resource type="Animation" id=7]
+resource_name = "level complete"
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:rotation_degrees")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3, 0.8 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 180, 0, 216 ), Vector3( 360, 0, 360 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.8, 0.9, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 1, 1, 1 ), Vector3( 1.1, 1.1, 1.1 ), Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("..:text_material")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 11 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "YOU WIN!" ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ) ]
+}
+
+[sub_resource type="SpatialMaterial" id=12]
+albedo_color = Color( 0.439216, 0.780392, 0.658824, 1 )
+
+[sub_resource type="Animation" id=13]
+resource_name = "prey slaughtered"
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 1, 0 ), Vector3( 0, 1, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.3, 0.35, 0.4 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 1, 1, 1 ), Vector3( 1.1, 1.1, 1.1 ), Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextMesh:rotation_degrees")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text_material")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 12 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 3 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("..:text")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "PREY SLAUGHTERED" ]
+}
+
+[sub_resource type="SpatialMaterial" id=14]
+albedo_color = Color( 0.901961, 0.619608, 0.133333, 1 )
+
+[sub_resource type="Animation" id=15]
+resource_name = "victory"
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("TextMesh:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, -3, 0 ), Vector3( 0, 1, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("TextMesh:scale")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.9, 0.95, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 1, 1, 1 ), Vector3( 1.1, 1.1, 1.1 ), Vector3( 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("TextMesh:rotation_degrees")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 180, 0 ), Vector3( 0, 0, 720 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("..:text_material")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ SubResource( 14 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("..:text")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ "VICTORY!" ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("TextMesh:mesh:font:font_data")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ) ]
+}
+
+[node name="3DText" type="ViewportContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+script = ExtResource( 2 )
+text = "TEXT"
+
+[node name="Viewport" type="Viewport" parent="."]
+size = Vector2( 256, 192 )
+transparent_bg = true
+handle_input_locally = false
+usage = 3
+render_target_update_mode = 3
+gui_disable_input = true
+
+[node name="TextMesh" type="MeshInstance" parent="Viewport"]
+unique_name_in_owner = true
+transform = Transform( 1.1, 0, 0, 0, 1.5, 0, 0, 0, 2, 0, 1, 0 )
+mesh = SubResource( 2 )
+
+[node name="DirectionalLight" type="DirectionalLight" parent="Viewport"]
+transform = Transform( 0.893849, 0.317044, -0.317044, 0, 0.707107, 0.707107, 0.448368, -0.632047, 0.632047, 0, 1, 0 )
+light_specular = 16.0
+
+[node name="Camera" type="Camera" parent="Viewport"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5 )
+environment = SubResource( 4 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="Viewport"]
+unique_name_in_owner = true
+anims/RESET = SubResource( 5 )
+"anims/Zoom Entrance" = SubResource( 6 )
+"anims/bug world" = SubResource( 17 )
+"anims/final score" = SubResource( 20 )
+anims/fucker = SubResource( 18 )
+"anims/game over" = SubResource( 10 )
+"anims/level complete" = SubResource( 7 )
+"anims/prey slaughtered" = SubResource( 13 )
+anims/victory = SubResource( 15 )
diff --git a/objects/hud/blocktext.tscn b/objects/hud/blocktext.tscn
index 4efea9b..56ffa1b 100644
--- a/objects/hud/blocktext.tscn
+++ b/objects/hud/blocktext.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=6 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
[ext_resource path="res://objects/hud/blocktext.gd" type="Script" id=2]
[ext_resource path="res://graphics/hud/block_text.png" type="Texture" id=3]
diff --git a/objects/hud/gamepad_buttons.atlastex b/objects/hud/gamepad_buttons.atlastex
new file mode 100644
index 0000000..d9d5e07
Binary files /dev/null and b/objects/hud/gamepad_buttons.atlastex differ
diff --git a/objects/hud/hud.gd b/objects/hud/hud.gd
index 6dc1b2b..c1a7f77 100644
--- a/objects/hud/hud.gd
+++ b/objects/hud/hud.gd
@@ -1,4 +1,4 @@
-extends Control
+extends CanvasLayer
onready var gold_counter = $GoldCounter
onready var shard_counter = $ShardCounter
@@ -12,42 +12,84 @@ onready var arrow_counter = $ArrowCounter
onready var lives_counter = $LivesCounter
onready var high_counter = $HighCounter
onready var time_counter = $TimeCounter
+onready var oxygen = $Oxygen
+onready var oxygen_meter = $Oxygen/OxygenMeter
+export var song_name = "♫Music"
export (Color) var bonus_color
func _ready():
- Game.time = 0
+ # load arrow palette
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $Arrow.material.set_shader_param("palette", palette)
+ #Change graphics depending on if lives are on
+ if Game.use_lives:
+ $LivesHead.visible = true
+ else:
+ $DeathsHead.visible = true
+ #Change text to song name
+ var music = $Music
+ music.text = song_name
+ yield(get_tree(), "idle_frame")
+ var tween = create_tween()
+ tween.tween_property(music, "rect_position:x", 254.0 - music.rect_size.x, 1.0)
+ tween.tween_interval(3.0)
+ tween.tween_property(music, "rect_position:x", 256.0, 1.0)
+ #Fixes frame 1 2 deaths counter
+ if Game.use_lives == false:
+ lives_counter.text = str(Game.deaths)
+ #Show oxygen meter when underwater
+# var player = get_tree().get_nodes_in_group("player").pop_back()
+# if player.underwater == true: oxygen.visible = true
+
+func shard_popup(shard_number):
+ #Change text to song name
+ var shard_title = $ShardTitle
+ var level = LevelData.levels[Game.current_level]
+ shard_title.text = "§" + str(level.shard_titles[shard_number])
+ yield(get_tree(), "idle_frame")
+ var tween = create_tween()
+ tween.tween_property(shard_title, "rect_position:x", 254.0 - shard_title.rect_size.x, 1.0)
+ tween.tween_interval(3.0)
+ tween.tween_property(shard_title, "rect_position:x", 256.0, 1.0)
func _physics_process(delta):
#Gold Counter
- gold_counter.text = "%02d" % Game.golds
+ gold_counter.text = "%02d" % Game.keys
#Shard Counter
shard_counter.text = str(Game.shards)
#Star Counter
- red_star.visible = Game.stars[0]
- yellow_star.visible = Game.stars[1]
- green_star.visible = Game.stars[2]
- blue_star.visible = Game.stars[3]
- magenta_star.visible = Game.stars[4]
+ red_star.visible = Game.stars_collected[0]
+ yellow_star.visible = Game.stars_collected[1]
+ green_star.visible = Game.stars_collected[2]
+ blue_star.visible = Game.stars_collected[3]
+ magenta_star.visible = Game.stars_collected[4]
#Score Counter
score_counter.text = "%05d" % Game.score
#Arrow Counter
arrow_counter.text = str(Game.arrows)
##TOUCH UP LATER
#Lives counter
- lives_counter.text = str(Game.lives)
+ if Game.use_lives:
+ lives_counter.text = str(Game.lives)
+ else:
+ if Game.marathon_mode:
+ lives_counter.text = str(Game.marathon_deaths)
+ else:
+ lives_counter.text = str(Game.deaths)
#Life bonus color
- if Game.lives == 2:
+ if Game.deaths <= 0:
lives_counter.modulate = bonus_color
else:
lives_counter.modulate = Color.white
- #High counter
- high_counter.text = str("HIGH:") + str("%06d" % Game.high_score)
##Timer
- Game.time += delta
- time_counter.text = Game.timeify(Game.time)
+ time_counter.text = Game.format_time(Game.time)
#Time bonus counter
if (Game.has_collection_bonus() && Game.time <= Game.get_map().target_time_100) or (!Game.has_collection_bonus() && Game.time <= Game.get_map().target_time_any):
time_counter.modulate = bonus_color
else:
time_counter.modulate = Color.white
+# #Oxygen meter
+# var player = get_tree().get_nodes_in_group("player").pop_back()
+# oxygen_meter.scale.x = player.oxygen_timer.time_left
+ #if oxygen_meter.scale.x > 15: oxygen_meter.scale.x = 15
diff --git a/objects/hud/hud.tscn b/objects/hud/hud.tscn
index 302d0a6..20b2064 100644
--- a/objects/hud/hud.tscn
+++ b/objects/hud/hud.tscn
@@ -1,126 +1,215 @@
-[gd_scene load_steps=7 format=2]
+[gd_scene load_steps=22 format=2]
[ext_resource path="res://graphics/hud/stars_hud.png" type="Texture" id=1]
+[ext_resource path="res://graphics/hud/lives_head.png" type="Texture" id=2]
[ext_resource path="res://graphics/hud/hud.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/deaths_head.png" type="Texture" id=4]
+[ext_resource path="res://graphics/hud/gold_counter.png" type="Texture" id=5]
[ext_resource path="res://objects/hud/hud.gd" type="Script" id=6]
-[ext_resource path="res://scripts/theme.tres" type="Theme" id=10]
+[ext_resource path="res://graphics/hud/key_counter.png" type="Texture" id=7]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=9]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=10]
+[ext_resource path="res://graphics/hud/oxygen.png" type="Texture" id=11]
+[ext_resource path="res://graphics/hud/oxygen_meter.png" type="Texture" id=12]
+[ext_resource path="res://shaders/recolor.tres" type="Shader" id=13]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=14]
+[ext_resource path="res://graphics/hud/hud_arrow.png" type="Texture" id=15]
+[ext_resource path="res://scripts/sg_palette.gd" type="Script" id=16]
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 13 )
+shader_param/palette = ExtResource( 14 )
[sub_resource type="ShaderMaterial" id=1]
[sub_resource type="ShaderMaterial" id=2]
-[node name="CanvasLayer" type="CanvasLayer"]
-layer = 100
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 13 )
-[node name="HUD" type="Control" parent="."]
-margin_top = 1.0
-margin_bottom = 1.0
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 9 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[node name="HUD" type="CanvasLayer" groups=["hud"]]
+layer = 100
script = ExtResource( 6 )
bonus_color = Color( 0.478431, 1, 0.47451, 1 )
-[node name="Back" type="Sprite" parent="HUD"]
-position = Vector2( 128, 95 )
+[node name="Back" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
texture = ExtResource( 3 )
-[node name="GoldCounter" type="Label" parent="HUD"]
+[node name="GoldCounter" type="Label" parent="."]
margin_left = 12.0
-margin_top = -2.0
-margin_right = 52.0
-margin_bottom = 18.0
+margin_top = 1.0
+margin_right = 26.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
-text = "00
-"
+text = "00"
-[node name="ShardCounter" type="Label" parent="HUD"]
+[node name="ShardCounter" type="Label" parent="."]
margin_left = 41.0
-margin_top = -2.0
-margin_right = 81.0
-margin_bottom = 18.0
+margin_top = 1.0
+margin_right = 48.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
text = "0"
-[node name="RedStar" type="Sprite" parent="HUD"]
+[node name="Gold" type="Sprite" parent="."]
+visible = false
+position = Vector2( 8, 6 )
+texture = ExtResource( 5 )
+
+[node name="Key" type="Sprite" parent="."]
+position = Vector2( 9, 6 )
+texture = ExtResource( 7 )
+
+[node name="Arrow" type="Sprite" parent="."]
+material = SubResource( 4 )
+position = Vector2( 58, 6 )
+texture = ExtResource( 15 )
+
+[node name="ArrowShade" type="Sprite" parent="Arrow"]
+modulate = Color( 0.57, 0.57, 0.57, 1 )
+use_parent_material = true
+position = Vector2( 0, 4 )
+texture = ExtResource( 15 )
+region_enabled = true
+region_rect = Rect2( 0, 6, 5, 1 )
+
+[node name="RedStar" type="Sprite" parent="."]
visible = false
material = SubResource( 1 )
-position = Vector2( 83, 5 )
+position = Vector2( 83, 6 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 0, 0, 8, 8 )
-[node name="YellowStar" type="Sprite" parent="HUD"]
+[node name="YellowStar" type="Sprite" parent="."]
visible = false
material = SubResource( 2 )
-position = Vector2( 93, 5 )
+position = Vector2( 93, 6 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 8, 0, 8, 8 )
-[node name="GreenStar" type="Sprite" parent="HUD"]
+[node name="GreenStar" type="Sprite" parent="."]
visible = false
-position = Vector2( 103, 5 )
+position = Vector2( 103, 6 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 16, 0, 8, 8 )
-[node name="BlueStar" type="Sprite" parent="HUD"]
+[node name="BlueStar" type="Sprite" parent="."]
visible = false
-position = Vector2( 113, 5 )
+position = Vector2( 113, 6 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 24, 0, 8, 8 )
-[node name="MagentaStar" type="Sprite" parent="HUD"]
+[node name="MagentaStar" type="Sprite" parent="."]
visible = false
-position = Vector2( 123, 5 )
+position = Vector2( 123, 6 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 32, 0, 8, 8 )
-[node name="ScoreText" type="Label" parent="HUD"]
+[node name="LivesHead" type="Sprite" parent="."]
+visible = false
+material = SubResource( 5 )
+position = Vector2( 234, 6 )
+texture = ExtResource( 2 )
+script = ExtResource( 16 )
+
+[node name="DeathsHead" type="Sprite" parent="."]
+visible = false
+position = Vector2( 236, 6 )
+texture = ExtResource( 4 )
+
+[node name="ScoreText" type="Label" parent="."]
margin_left = 137.0
-margin_top = -2.0
+margin_top = 1.0
margin_right = 221.0
-margin_bottom = 18.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
text = "SCORE:"
-[node name="ScoreCounter" type="Label" parent="HUD"]
+[node name="ScoreCounter" type="Label" parent="."]
margin_left = 179.0
-margin_top = -2.0
-margin_right = 263.0
-margin_bottom = 18.0
+margin_top = 1.0
+margin_right = 214.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
text = "00000"
-[node name="HighCounter" type="Label" parent="HUD"]
+[node name="HighCounter" type="Label" parent="."]
visible = false
margin_left = 178.0
-margin_top = 178.0
+margin_top = 179.0
margin_right = 262.0
-margin_bottom = 198.0
+margin_bottom = 199.0
theme = ExtResource( 10 )
text = "High:000000"
-[node name="LivesCounter" type="Label" parent="HUD"]
+[node name="LivesCounter" type="Label" parent="."]
+modulate = Color( 0.478431, 1, 0.47451, 1 )
margin_left = 240.0
-margin_top = -2.0
-margin_right = 324.0
-margin_bottom = 18.0
+margin_top = 1.0
+margin_right = 247.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
text = "2"
-[node name="ArrowCounter" type="Label" parent="HUD"]
+[node name="ArrowCounter" type="Label" parent="."]
margin_left = 61.0
-margin_top = -2.0
-margin_right = 145.0
-margin_bottom = 18.0
+margin_top = 1.0
+margin_right = 68.0
+margin_bottom = 11.0
theme = ExtResource( 10 )
text = "0"
-[node name="TimeCounter" type="Label" parent="HUD"]
+[node name="TimeCounter" type="Label" parent="."]
+modulate = Color( 0.478431, 1, 0.47451, 1 )
margin_left = 1.0
-margin_top = 178.0
-margin_right = 57.0
-margin_bottom = 198.0
+margin_top = 181.0
+margin_right = 50.0
+margin_bottom = 191.0
theme = ExtResource( 10 )
-text = "0:00:00"
+text = "00:00:00"
+
+[node name="Music" type="Label" parent="."]
+material = ExtResource( 8 )
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = -10.0
+margin_right = 42.0
+theme = ExtResource( 10 )
+text = "♫Music"
+align = 2
+
+[node name="ShardTitle" type="Label" parent="."]
+material = SubResource( 3 )
+margin_left = 256.0
+margin_top = 182.0
+margin_right = 333.0
+margin_bottom = 192.0
+theme = ExtResource( 10 )
+text = "§time bonus"
+align = 2
+
+[node name="Oxygen" type="Sprite" parent="."]
+visible = false
+position = Vector2( 16, 18 )
+texture = ExtResource( 11 )
+
+[node name="OxygenMeter" type="Sprite" parent="Oxygen"]
+position = Vector2( -2, -1 )
+rotation = 3.14159
+scale = Vector2( 15, 1 )
+texture = ExtResource( 12 )
+flip_v = true
diff --git a/objects/hud/hud_boss.gd b/objects/hud/hud_boss.gd
new file mode 100644
index 0000000..6e145e8
--- /dev/null
+++ b/objects/hud/hud_boss.gd
@@ -0,0 +1,85 @@
+extends CanvasLayer
+
+onready var gold_counter = $GoldCounter
+onready var shard_counter = $ShardCounter
+onready var red_star = $RedStar
+onready var yellow_star = $YellowStar
+onready var green_star = $GreenStar
+onready var blue_star = $BlueStar
+onready var magenta_star = $MagentaStar
+onready var score_counter = $ScoreCounter
+onready var arrow_counter = $ArrowCounter
+onready var lives_counter = $LivesCounter
+onready var high_counter = $HighCounter
+onready var time_counter = $TimeCounter
+onready var oxygen = $Oxygen
+onready var oxygen_meter = $Oxygen/OxygenMeter
+
+export var song_name = "♫Music"
+export (Color) var bonus_color
+
+func _ready():
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $Arrow.material.set_shader_param("palette", palette)
+ #Change graphics depending on if lives are on
+ if Game.use_lives:
+ $LivesHead.visible = true
+ else:
+ $DeathsHead.visible = true
+ #Change text to song name
+ var music = $Music
+ music.text = song_name
+ yield(get_tree(), "idle_frame")
+ var tween = create_tween()
+ tween.tween_property(music, "rect_position:x", 254.0 - music.rect_size.x, 1.0)
+ tween.tween_interval(3.0)
+ tween.tween_property(music, "rect_position:x", 256.0, 1.0)
+ #Fixes frame 1 2 deaths counter
+ if Game.use_lives == false:
+ lives_counter.text = str(Game.deaths)
+ #Show oxygen meter when underwater
+# var player = get_tree().get_nodes_in_group("player").pop_back()
+# if player.underwater == true: oxygen.visible = true
+
+func shard_popup(shard_number):
+ #Change text to song name
+ var shard_title = $ShardTitle
+ var level = LevelData.levels[Game.current_level]
+ shard_title.text = "§" + str(level.shard_titles[shard_number])
+ yield(get_tree(), "idle_frame")
+ var tween = create_tween()
+ tween.tween_property(shard_title, "rect_position:x", 254.0 - shard_title.rect_size.x, 1.0)
+ tween.tween_interval(3.0)
+ tween.tween_property(shard_title, "rect_position:x", 256.0, 1.0)
+
+func _physics_process(delta):
+ #Star Counter
+ red_star.visible = Game.stars_collected[0]
+ yellow_star.visible = Game.stars_collected[1]
+ green_star.visible = Game.stars_collected[2]
+ blue_star.visible = Game.stars_collected[3]
+ magenta_star.visible = Game.stars_collected[4]
+ #Arrow Counter
+ arrow_counter.text = str(Game.arrows)
+ ##TOUCH UP LATER
+ #Lives counter
+ if Game.use_lives:
+ lives_counter.text = str(Game.lives)
+ else:
+ lives_counter.text = str(Game.deaths)
+ #Life bonus color
+ if Game.lives == 2:
+ lives_counter.modulate = bonus_color
+ else:
+ lives_counter.modulate = Color.white
+ ##Timer
+ time_counter.text = Game.format_time(Game.time)
+ #Time bonus counter
+ if (Game.has_collection_bonus() && Game.time <= Game.get_map().target_time_100) or (!Game.has_collection_bonus() && Game.time <= Game.get_map().target_time_any):
+ time_counter.modulate = bonus_color
+ else:
+ time_counter.modulate = Color.white
+# #Oxygen meter
+# var player = get_tree().get_nodes_in_group("player").pop_back()
+# oxygen_meter.scale.x = player.oxygen_timer.time_left
+ #if oxygen_meter.scale.x > 15: oxygen_meter.scale.x = 15
diff --git a/objects/hud/hud_boss.tscn b/objects/hud/hud_boss.tscn
new file mode 100644
index 0000000..7dabda4
--- /dev/null
+++ b/objects/hud/hud_boss.tscn
@@ -0,0 +1,218 @@
+[gd_scene load_steps=22 format=2]
+
+[ext_resource path="res://graphics/hud/stars_hud.png" type="Texture" id=1]
+[ext_resource path="res://graphics/hud/lives_head.png" type="Texture" id=2]
+[ext_resource path="res://graphics/hud/hud.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/deaths_head.png" type="Texture" id=4]
+[ext_resource path="res://graphics/hud/gold_counter.png" type="Texture" id=5]
+[ext_resource path="res://objects/hud/hud_boss.gd" type="Script" id=6]
+[ext_resource path="res://graphics/hud/key_counter.png" type="Texture" id=7]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=9]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=10]
+[ext_resource path="res://graphics/hud/oxygen.png" type="Texture" id=11]
+[ext_resource path="res://graphics/hud/oxygen_meter.png" type="Texture" id=12]
+[ext_resource path="res://shaders/recolor.tres" type="Shader" id=13]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=14]
+[ext_resource path="res://graphics/hud/hud_arrow.png" type="Texture" id=15]
+[ext_resource path="res://scripts/sg_palette.gd" type="Script" id=16]
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 13 )
+shader_param/palette = ExtResource( 14 )
+
+[sub_resource type="ShaderMaterial" id=1]
+
+[sub_resource type="ShaderMaterial" id=2]
+
+[sub_resource type="ShaderMaterial" id=5]
+shader = ExtResource( 13 )
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 9 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
+
+[node name="BossHUD" type="CanvasLayer" groups=["hud"]]
+layer = 100
+script = ExtResource( 6 )
+bonus_color = Color( 0.478431, 1, 0.47451, 1 )
+
+[node name="Back" type="Sprite" parent="."]
+position = Vector2( 128, 96 )
+texture = ExtResource( 3 )
+
+[node name="GoldCounter" type="Label" parent="."]
+modulate = Color( 0.690196, 0.690196, 0.690196, 1 )
+margin_left = 12.0
+margin_top = 1.0
+margin_right = 26.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "--"
+
+[node name="ShardCounter" type="Label" parent="."]
+modulate = Color( 0.690196, 0.690196, 0.690196, 1 )
+margin_left = 41.0
+margin_top = 1.0
+margin_right = 48.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "-"
+
+[node name="Gold" type="Sprite" parent="."]
+visible = false
+position = Vector2( 8, 6 )
+texture = ExtResource( 5 )
+
+[node name="Key" type="Sprite" parent="."]
+position = Vector2( 9, 6 )
+texture = ExtResource( 7 )
+
+[node name="Arrow" type="Sprite" parent="."]
+material = SubResource( 4 )
+position = Vector2( 58, 6 )
+texture = ExtResource( 15 )
+
+[node name="ArrowShade" type="Sprite" parent="Arrow"]
+modulate = Color( 0.57, 0.57, 0.57, 1 )
+use_parent_material = true
+position = Vector2( 0, 4 )
+texture = ExtResource( 15 )
+region_enabled = true
+region_rect = Rect2( 0, 6, 5, 1 )
+
+[node name="RedStar" type="Sprite" parent="."]
+visible = false
+material = SubResource( 1 )
+position = Vector2( 83, 6 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 0, 0, 8, 8 )
+
+[node name="YellowStar" type="Sprite" parent="."]
+visible = false
+material = SubResource( 2 )
+position = Vector2( 93, 6 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 8, 0, 8, 8 )
+
+[node name="GreenStar" type="Sprite" parent="."]
+visible = false
+position = Vector2( 103, 6 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 16, 0, 8, 8 )
+
+[node name="BlueStar" type="Sprite" parent="."]
+visible = false
+position = Vector2( 113, 6 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 24, 0, 8, 8 )
+
+[node name="MagentaStar" type="Sprite" parent="."]
+visible = false
+position = Vector2( 123, 6 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 32, 0, 8, 8 )
+
+[node name="LivesHead" type="Sprite" parent="."]
+visible = false
+material = SubResource( 5 )
+position = Vector2( 234, 6 )
+texture = ExtResource( 2 )
+script = ExtResource( 16 )
+
+[node name="DeathsHead" type="Sprite" parent="."]
+visible = false
+position = Vector2( 236, 6 )
+texture = ExtResource( 4 )
+
+[node name="ScoreText" type="Label" parent="."]
+margin_left = 137.0
+margin_top = 1.0
+margin_right = 221.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "SCORE:"
+
+[node name="ScoreCounter" type="Label" parent="."]
+modulate = Color( 0.690196, 0.690196, 0.690196, 1 )
+margin_left = 179.0
+margin_top = 1.0
+margin_right = 214.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "-----"
+
+[node name="HighCounter" type="Label" parent="."]
+visible = false
+margin_left = 178.0
+margin_top = 179.0
+margin_right = 262.0
+margin_bottom = 199.0
+theme = ExtResource( 10 )
+text = "High:000000"
+
+[node name="LivesCounter" type="Label" parent="."]
+modulate = Color( 0.478431, 1, 0.47451, 1 )
+margin_left = 240.0
+margin_top = 1.0
+margin_right = 247.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "2"
+
+[node name="ArrowCounter" type="Label" parent="."]
+margin_left = 61.0
+margin_top = 1.0
+margin_right = 68.0
+margin_bottom = 11.0
+theme = ExtResource( 10 )
+text = "0"
+
+[node name="TimeCounter" type="Label" parent="."]
+modulate = Color( 0.478431, 1, 0.47451, 1 )
+margin_left = 1.0
+margin_top = 181.0
+margin_right = 50.0
+margin_bottom = 191.0
+theme = ExtResource( 10 )
+text = "00:00:00"
+
+[node name="Music" type="Label" parent="."]
+material = ExtResource( 8 )
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = -10.0
+margin_right = 42.0
+theme = ExtResource( 10 )
+text = "♫Music"
+align = 2
+
+[node name="ShardTitle" type="Label" parent="."]
+material = SubResource( 3 )
+margin_left = 256.0
+margin_top = 182.0
+margin_right = 333.0
+margin_bottom = 192.0
+theme = ExtResource( 10 )
+text = "§time bonus"
+align = 2
+
+[node name="Oxygen" type="Sprite" parent="."]
+visible = false
+position = Vector2( 16, 18 )
+texture = ExtResource( 11 )
+
+[node name="OxygenMeter" type="Sprite" parent="Oxygen"]
+position = Vector2( -2, -1 )
+rotation = 3.14159
+scale = Vector2( 15, 1 )
+texture = ExtResource( 12 )
+flip_v = true
diff --git a/objects/hud/labeled_slider.gd b/objects/hud/labeled_slider.gd
new file mode 100644
index 0000000..af9b80b
--- /dev/null
+++ b/objects/hud/labeled_slider.gd
@@ -0,0 +1,14 @@
+extends HSlider
+
+
+export var label: NodePath
+
+
+func _init() -> void:
+ connect("value_changed", self, "_on_value_changed")
+
+
+func _on_value_changed(value: float) -> void:
+ var l = get_node(label)
+ if l is Label:
+ l.text = str(value)
diff --git a/objects/hud/letter_block.gd b/objects/hud/letter_block.gd
new file mode 100644
index 0000000..3f49e6e
--- /dev/null
+++ b/objects/hud/letter_block.gd
@@ -0,0 +1,56 @@
+tool
+extends "res://objects/enemy/enemy.gd"
+
+signal letter_chosen(letter)
+signal backspace()
+
+enum Glyph {
+ A, B, C, D, E, F, G, H,
+ I, J, K, L, M, N, O, P,
+ Q, R, S, T, U, V, W, X,
+ Y, Z, _0, _1, _2, _3, _4, _5,
+ _6, _7, _8, _9, Backspace
+}
+const GLYPH_STRINGS = [
+ "A", "B", "C", "D", "E", "F", "G", "H",
+ "I", "J", "K", "L", "M", "N", "O", "P",
+ "Q", "R", "S", "T", "U", "V", "W", "X",
+ "Y", "Z", "0", "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", ""
+]
+
+export (Glyph) var glyph: int = 0 setget _set_glyph
+
+onready var sprite: Sprite = $Sprite
+onready var _seed: float = randf() * 250.0
+
+func _set_glyph(value: int) -> void:
+ glyph = value
+ get_node("Sprite").frame = value
+
+func _ready() -> void:
+ if Engine.editor_hint:
+ return
+ # connect to node in "gets_letters" group so don't have to do the shit manually
+ for node in get_tree().get_nodes_in_group("gets_letters"):
+ if node.has_method("_on_letter_chosen"):
+ connect("letter_chosen", node, "_on_letter_chosen")
+ if node.has_method("_on_backspace"):
+ connect("backspace", node, "_on_backspace")
+
+func _process(delta: float) -> void:
+ if Engine.editor_hint:
+ return
+ sprite.position.x = 4.0 + sin(float(Time.get_ticks_msec()) / 250.0 + _seed)
+ sprite.position.y = 5.0 + sin(float(Time.get_ticks_msec()) / 125.0 + _seed)
+
+func die() -> void:
+ emit_signal("letter_chosen", GLYPH_STRINGS[glyph])
+ if glyph == Glyph.Backspace:
+ emit_signal("backspace")
+
+func _on_Hitbox_area_entered(area):
+ emit_signal("letter_chosen", GLYPH_STRINGS[glyph])
+ if glyph == Glyph.Backspace:
+ emit_signal("backspace")
+ ._on_Hitbox_area_entered(area)
diff --git a/objects/hud/letter_block.tscn b/objects/hud/letter_block.tscn
new file mode 100644
index 0000000..10f3495
--- /dev/null
+++ b/objects/hud/letter_block.tscn
@@ -0,0 +1,27 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/hud/letter_block.gd" type="Script" id=1]
+[ext_resource path="res://graphics/hud/letter_blocks.png" type="Texture" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 3, 3.5 )
+
+[node name="LetterBlock" type="Node2D" groups=["enemy"]]
+script = ExtResource( 1 )
+blood = false
+
+[node name="Sprite" type="Sprite" parent="."]
+position = Vector2( 4, 5 )
+texture = ExtResource( 2 )
+hframes = 8
+vframes = 5
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]]
+collision_layer = 0
+collision_mask = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 4, 4.5 )
+shape = SubResource( 1 )
+
+[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]
diff --git a/objects/hud/menu_sounds.gd b/objects/hud/menu_sounds.gd
new file mode 100644
index 0000000..385f933
--- /dev/null
+++ b/objects/hud/menu_sounds.gd
@@ -0,0 +1,27 @@
+extends Node
+
+const SEMITONE := 1.05946
+const CHROMATIC := [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0]
+const RUMBLE := [0.0, 0.0, 5.0, 7.0, 10.0, 0.0, 5.0, 7.0, 10.0, 7.0]
+
+var can_play: bool = false
+var current_note: int = 0
+var notes_till_rumble: int = 48
+
+onready var select_sound: AudioStreamPlayer = $"%SelectSound"
+
+func play_select_sound():
+ if can_play:
+ var tune = CHROMATIC if notes_till_rumble > 0 else RUMBLE
+ if notes_till_rumble == 0:
+ current_note = 0
+ Audio.ac_menu.pitch_scale = pow(SEMITONE, tune[current_note])
+ Audio.play_sound(Audio.a_select,Audio.ac_menu)
+ current_note = posmod(current_note + 1, tune.size())
+ notes_till_rumble -= 1
+ else:
+ can_play = true
+
+func play_confirm_sound():
+ Audio.ac_menu.pitch_scale = 1
+ Audio.play_sound(Audio.a_confirm,Audio.ac_menu)
diff --git a/objects/hud/menu_sounds.tscn b/objects/hud/menu_sounds.tscn
new file mode 100644
index 0000000..6217b8c
--- /dev/null
+++ b/objects/hud/menu_sounds.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/hud/menu_sounds.gd" type="Script" id=1]
+[ext_resource path="res://audio/sounds/confirm.ogg" type="AudioStream" id=2]
+[ext_resource path="res://audio/sounds/select.ogg" type="AudioStream" id=3]
+
+[node name="MenuSounds" type="Node"]
+script = ExtResource( 1 )
+
+[node name="SelectSound" type="AudioStreamPlayer" parent="."]
+unique_name_in_owner = true
+stream = ExtResource( 3 )
+volume_db = -15.0
+
+[node name="ConfirmSound" type="AudioStreamPlayer" parent="."]
+unique_name_in_owner = true
+stream = ExtResource( 2 )
+volume_db = -15.0
diff --git a/objects/hud/msx_off_level_indicator.gd b/objects/hud/msx_off_level_indicator.gd
new file mode 100644
index 0000000..74dda07
--- /dev/null
+++ b/objects/hud/msx_off_level_indicator.gd
@@ -0,0 +1,3 @@
+extends Node2D
+
+onready var anims = $AnimationPlayer
diff --git a/objects/hud/msx_off_level_indicator.tscn b/objects/hud/msx_off_level_indicator.tscn
new file mode 100644
index 0000000..2fc9b4e
--- /dev/null
+++ b/objects/hud/msx_off_level_indicator.tscn
@@ -0,0 +1,212 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://graphics/hud/off_level_indicator.png" type="Texture" id=1]
+[ext_resource path="res://graphics/hud/msx_head.png" type="Texture" id=2]
+[ext_resource path="res://objects/hud/msx_off_level_indicator.gd" type="Script" id=3]
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Head:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ArrowR:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ArrowL:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "left"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Head:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ArrowL:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ArrowL:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( -11, 0 ), Vector2( -13, 0 ), Vector2( -11, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ArrowR:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=1]
+resource_name = "onscreen"
+tracks/0/type = "value"
+tracks/0/path = NodePath("Head:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("ArrowR:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ArrowL:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "right"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("ArrowR:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Head:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("ArrowR:position")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 11, 1 ), Vector2( 13, 1 ), Vector2( 11, 1 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("ArrowL:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[node name="MsxOffLevelIndicator" type="Node2D"]
+script = ExtResource( 3 )
+
+[node name="Head" type="Sprite" parent="."]
+visible = false
+texture = ExtResource( 2 )
+
+[node name="ArrowR" type="Sprite" parent="."]
+visible = false
+position = Vector2( 11.336, 1 )
+rotation = 1.5708
+texture = ExtResource( 1 )
+
+[node name="ArrowL" type="Sprite" parent="."]
+visible = false
+position = Vector2( -11.336, 0 )
+rotation = -1.5708
+texture = ExtResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 2 )
+anims/left = SubResource( 3 )
+anims/onscreen = SubResource( 1 )
+anims/right = SubResource( 4 )
diff --git a/objects/hud/off_level_indicator.tscn b/objects/hud/off_level_indicator.tscn
new file mode 100644
index 0000000..ba3281e
--- /dev/null
+++ b/objects/hud/off_level_indicator.tscn
@@ -0,0 +1,46 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=2]
+[ext_resource path="res://graphics/hud/off_level_indicator.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/sg_head.png" type="Texture" id=4]
+[ext_resource path="res://scripts/sg_palette.gd" type="Script" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 2 )
+
+[sub_resource type="Animation" id=2]
+resource_name = "wobble"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Arrow:position")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, 5 ), Vector2( 1, 3 ), Vector2( 1, 5 ) ]
+}
+
+[node name="OffLevelIndicator" type="Node2D"]
+z_index = 4096
+
+[node name="Head" type="Sprite" parent="."]
+material = SubResource( 1 )
+position = Vector2( 0, 15 )
+texture = ExtResource( 4 )
+script = ExtResource( 5 )
+
+[node name="Arrow" type="Sprite" parent="."]
+position = Vector2( 1, 5 )
+texture = ExtResource( 3 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "wobble"
+anims/wobble = SubResource( 2 )
diff --git a/objects/hud/options_screen.gd b/objects/hud/options_screen.gd
new file mode 100644
index 0000000..c688f01
--- /dev/null
+++ b/objects/hud/options_screen.gd
@@ -0,0 +1,106 @@
+extends Control
+
+# emmitted when "back" is pressed
+signal exit
+
+export (StyleBox) var tab_selected_style
+
+onready var tabs = $Tabs
+onready var confirm_dialog = $ConfirmDialog
+
+# option controls #
+# game
+onready var rumble = $"%Rumble"
+# video
+onready var fullscreen = $"%Fullscreen"
+onready var window_size = $"%WindowSize"
+onready var scaling_mode = $"%ScalingMode"
+onready var transition_speed = $"%TransitionSpeed"
+# audio
+onready var master_volume = $"%MasterSlider"
+onready var music_volume = $"%MusicSlider"
+onready var sound_volume = $"%SoundSlider"
+
+# flagged when options have been changed
+var dirty = false
+
+func focus():
+ load_options(Options)
+ dirty = false
+ visible = true
+ confirm_dialog.visible = false
+ grab_focus()
+
+func load_options(options):
+ # game
+ rumble.select(options.rumble)
+ # video
+ fullscreen.select(1 if options.fullscreen else 0) # index 1 is the "on" button
+# window_size.select(options.window_size)
+ scaling_mode.select(options.scaling_mode)
+ transition_speed.select(options.transition_speed)
+ # audio
+ master_volume.value = options.master_volume
+ music_volume.value = options.music_volume
+ sound_volume.value = options.sound_volume
+
+func apply_options():
+ # game
+ Options.rumble = rumble.get_selection()
+ # video
+ Options.fullscreen = fullscreen.get_selection() == 1 # true if 1, otherwise false
+# Options.window_size = window_size.get_selection()
+ Options.scaling_mode = scaling_mode.get_selection()
+ Options.transition_speed = transition_speed.get_selection()
+ # audio
+ Options.master_volume = master_volume.value
+ Options.music_volume = music_volume.value
+ Options.sound_volume = sound_volume.value
+
+ Options.save_options()
+
+func _gui_input(event):
+ if event.is_action_pressed("ui_left"):
+ tabs.current_tab = posmod(tabs.current_tab - 1, tabs.get_child_count())
+ elif event.is_action_pressed("ui_right"):
+ tabs.current_tab = posmod(tabs.current_tab + 1, tabs.get_child_count())
+ elif event.is_action_pressed("ui_down"):
+ var current_tab = tabs.get_current_tab_control()
+ current_tab.get_node(current_tab.focus_neighbour_bottom).grab_focus()
+ accept_event()
+
+func _unhandled_input(event):
+ if !visible:
+ return
+ if event.is_action_pressed("ui_accept"):
+ apply_options()
+ dirty = false
+ elif event.is_action_pressed("ui_cancel"):
+ if dirty:
+ confirm_dialog.visible = true
+ confirm_dialog.grab_focus()
+ else:
+ emit_signal("exit")
+ elif event.is_action_pressed("ui_reset"):
+ load_options(Options.defaults)
+ dirty = true
+
+# "_unused" is a dirty hack,
+# but it means we can connect signals that provide parameters
+func _mark_dirty(_unused = null, _unused2 = null):
+ dirty = true
+
+func _on_ConfirmDialog_gui_input(event):
+ if event.is_action_pressed("ui_accept"):
+ apply_options()
+ confirm_dialog.visible = false
+ emit_signal("exit")
+ elif event.is_action_pressed("ui_cancel"):
+ confirm_dialog.visible = false
+ emit_signal("exit")
+
+func _on_tabs_focus_entered():
+ tabs.set("custom_styles/tab_fg", tab_selected_style)
+
+func _on_tabs_focus_exited():
+ tabs.set("custom_styles/tab_fg", null)
diff --git a/objects/hud/options_screen.tscn b/objects/hud/options_screen.tscn
new file mode 100644
index 0000000..5993a79
--- /dev/null
+++ b/objects/hud/options_screen.tscn
@@ -0,0 +1,554 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://objects/hud/options_screen.gd" type="Script" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://objects/hud/selection_group.gd" type="Script" id=4]
+
+[sub_resource type="StyleBoxFlat" id=6]
+content_margin_left = 4.0
+content_margin_right = 4.0
+content_margin_bottom = 0.0
+bg_color = Color( 0.6, 0.6, 0.6, 0 )
+border_width_bottom = 1
+border_color = Color( 1, 1, 1, 1 )
+expand_margin_bottom = 5.0
+anti_aliasing = false
+
+[sub_resource type="ButtonGroup" id=1]
+
+[sub_resource type="ButtonGroup" id=7]
+
+[sub_resource type="ButtonGroup" id=3]
+
+[sub_resource type="ButtonGroup" id=4]
+
+[sub_resource type="ButtonGroup" id=5]
+
+[node name="OptionsScreen" type="Control"]
+focus_mode = 2
+theme = ExtResource( 2 )
+script = ExtResource( 1 )
+tab_selected_style = SubResource( 6 )
+
+[node name="Panel" type="Panel" parent="."]
+margin_left = 8.0
+margin_top = 16.0
+margin_right = 248.0
+margin_bottom = 176.0
+
+[node name="OptionsTitle" type="Label" parent="."]
+margin_left = 16.0
+margin_top = 24.0
+margin_right = 240.0
+margin_bottom = 34.0
+theme = ExtResource( 2 )
+text = "-OPTIONS-"
+align = 1
+
+[node name="Tabs" type="TabContainer" parent="."]
+margin_left = 16.0
+margin_top = 40.0
+margin_right = 240.0
+margin_bottom = 152.0
+theme = ExtResource( 2 )
+
+[node name="Game" type="VBoxContainer" parent="Tabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 10.0
+focus_neighbour_bottom = NodePath("Rumble")
+
+[node name="Spacer" type="Control" parent="Tabs/Game"]
+margin_right = 224.0
+margin_bottom = 5.0
+rect_min_size = Vector2( 0, 5 )
+
+[node name="Rumble" type="HBoxContainer" parent="Tabs/Game"]
+unique_name_in_owner = true
+margin_top = 9.0
+margin_right = 224.0
+margin_bottom = 32.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_top = NodePath("../../..")
+script = ExtResource( 4 )
+group = SubResource( 1 )
+
+[node name="Label" type="Label" parent="Tabs/Game/Rumble"]
+margin_right = 53.0
+margin_bottom = 23.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Rumble:
+"
+
+[node name="None" type="Button" parent="Tabs/Game/Rumble"]
+margin_left = 69.0
+margin_right = 97.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+pressed = true
+action_mode = 0
+group = SubResource( 1 )
+text = "None"
+
+[node name="Normal" type="Button" parent="Tabs/Game/Rumble"]
+margin_left = 119.0
+margin_right = 161.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 1 )
+text = "Normal"
+
+[node name="BPM" type="Button" parent="Tabs/Game/Rumble"]
+margin_left = 187.0
+margin_right = 208.0
+margin_bottom = 10.0
+focus_neighbour_right = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+custom_colors/font_color_focus = Color( 1, 0, 0, 1 )
+toggle_mode = true
+action_mode = 0
+group = SubResource( 1 )
+text = "BPM"
+align = 0
+
+[node name="Video" type="VBoxContainer" parent="Tabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 10.0
+focus_neighbour_bottom = NodePath("Fullscreen")
+
+[node name="Spacer" type="Control" parent="Tabs/Video"]
+margin_right = 224.0
+margin_bottom = 8.0
+rect_min_size = Vector2( 0, 8 )
+
+[node name="Fullscreen" type="HBoxContainer" parent="Tabs/Video"]
+unique_name_in_owner = true
+margin_top = 12.0
+margin_right = 224.0
+margin_bottom = 24.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_top = NodePath("../../..")
+focus_neighbour_bottom = NodePath("../WindowSize")
+script = ExtResource( 4 )
+group = SubResource( 7 )
+
+[node name="Label" type="Label" parent="Tabs/Video/Fullscreen"]
+margin_right = 140.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Start in fullscreen:"
+
+[node name="Off" type="Button" parent="Tabs/Video/Fullscreen"]
+margin_left = 152.0
+margin_right = 173.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+focus_neighbour_right = NodePath("../On")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+pressed = true
+action_mode = 0
+group = SubResource( 7 )
+text = "Off"
+
+[node name="On" type="Button" parent="Tabs/Video/Fullscreen"]
+margin_left = 198.0
+margin_right = 212.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../Off")
+focus_neighbour_right = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 7 )
+text = "on"
+
+[node name="WindowSize" type="HBoxContainer" parent="Tabs/Video"]
+unique_name_in_owner = true
+margin_top = 28.0
+margin_right = 224.0
+margin_bottom = 40.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_top = NodePath("../Fullscreen")
+focus_neighbour_bottom = NodePath("../ScalingMode")
+script = ExtResource( 4 )
+group = SubResource( 3 )
+
+[node name="Label" type="Label" parent="Tabs/Video/WindowSize"]
+margin_right = 84.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Window Size:"
+
+[node name="1x" type="Button" parent="Tabs/Video/WindowSize"]
+margin_left = 93.0
+margin_right = 107.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+pressed = true
+action_mode = 0
+group = SubResource( 3 )
+text = "1x"
+
+[node name="2x" type="Button" parent="Tabs/Video/WindowSize"]
+margin_left = 121.0
+margin_right = 135.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 3 )
+text = "2x"
+
+[node name="3x" type="Button" parent="Tabs/Video/WindowSize"]
+margin_left = 149.0
+margin_right = 163.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 3 )
+text = "3x"
+
+[node name="4x" type="Button" parent="Tabs/Video/WindowSize"]
+margin_left = 177.0
+margin_right = 191.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../3x")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 3 )
+text = "4x"
+
+[node name="5x" type="Button" parent="Tabs/Video/WindowSize"]
+margin_left = 205.0
+margin_right = 219.0
+margin_bottom = 10.0
+focus_neighbour_right = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 3 )
+text = "5x"
+
+[node name="ScalingMode" type="HBoxContainer" parent="Tabs/Video"]
+unique_name_in_owner = true
+margin_top = 44.0
+margin_right = 224.0
+margin_bottom = 56.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_top = NodePath("../WindowSize")
+focus_neighbour_bottom = NodePath("../TransitionSpeed")
+script = ExtResource( 4 )
+group = SubResource( 4 )
+
+[node name="Label" type="Label" parent="Tabs/Video/ScalingMode"]
+margin_right = 56.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Scaling:"
+
+[node name="Integer" type="Button" parent="Tabs/Video/ScalingMode"]
+margin_left = 61.0
+margin_right = 110.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+pressed = true
+action_mode = 0
+group = SubResource( 4 )
+text = "integer"
+
+[node name="Aspect" type="Button" parent="Tabs/Video/ScalingMode"]
+margin_left = 121.0
+margin_right = 163.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 4 )
+text = "aspect"
+
+[node name="Stretch" type="Button" parent="Tabs/Video/ScalingMode"]
+margin_left = 173.0
+margin_right = 222.0
+margin_bottom = 10.0
+focus_neighbour_right = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 4 )
+text = "stretch"
+align = 0
+
+[node name="TransitionSpeed" type="HBoxContainer" parent="Tabs/Video"]
+unique_name_in_owner = true
+margin_top = 60.0
+margin_right = 224.0
+margin_bottom = 72.0
+rect_min_size = Vector2( 0, 12 )
+focus_neighbour_top = NodePath("../ScalingMode")
+script = ExtResource( 4 )
+group = SubResource( 5 )
+
+[node name="Label" type="Label" parent="Tabs/Video/TransitionSpeed"]
+margin_right = 77.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Fade speed:"
+
+[node name="None" type="Button" parent="Tabs/Video/TransitionSpeed"]
+margin_left = 81.0
+margin_right = 109.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 5 )
+text = "None"
+
+[node name="Slow" type="Button" parent="Tabs/Video/TransitionSpeed"]
+margin_left = 115.0
+margin_right = 143.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 5 )
+text = "slow"
+
+[node name="Medium" type="Button" parent="Tabs/Video/TransitionSpeed"]
+margin_left = 148.0
+margin_right = 190.0
+margin_bottom = 10.0
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+pressed = true
+action_mode = 0
+group = SubResource( 5 )
+text = "Medium"
+
+[node name="Fast" type="Button" parent="Tabs/Video/TransitionSpeed"]
+margin_left = 195.0
+margin_right = 223.0
+margin_bottom = 10.0
+focus_neighbour_right = NodePath(".")
+size_flags_horizontal = 6
+size_flags_vertical = 0
+toggle_mode = true
+action_mode = 0
+group = SubResource( 5 )
+text = "Fast"
+
+[node name="Audio" type="VBoxContainer" parent="Tabs"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_top = 10.0
+focus_neighbour_bottom = NodePath("MasterVolume/MasterSlider")
+
+[node name="Spacer" type="Control" parent="Tabs/Audio"]
+margin_right = 224.0
+margin_bottom = 8.0
+rect_min_size = Vector2( 0, 8 )
+
+[node name="MasterVolume" type="HBoxContainer" parent="Tabs/Audio"]
+margin_top = 12.0
+margin_right = 224.0
+margin_bottom = 24.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="Tabs/Audio/MasterVolume"]
+margin_right = 95.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "Master vol.:"
+valign = 1
+
+[node name="MasterSlider" type="HSlider" parent="Tabs/Audio/MasterVolume"]
+unique_name_in_owner = true
+margin_left = 99.0
+margin_right = 199.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 100, 0 )
+focus_neighbour_top = NodePath("../../../..")
+focus_neighbour_bottom = NodePath("../../MusicVolume/MusicSlider")
+size_flags_horizontal = 3
+max_value = 1.0
+step = 0.05
+value = 1.0
+scrollable = false
+__meta__ = {
+"_edit_group_": true
+}
+
+[node name="Volume" type="Label" parent="Tabs/Audio/MasterVolume"]
+margin_left = 203.0
+margin_right = 224.0
+margin_bottom = 12.0
+size_flags_horizontal = 9
+size_flags_vertical = 1
+text = "100"
+valign = 1
+
+[node name="MusicVolume" type="HBoxContainer" parent="Tabs/Audio"]
+margin_top = 28.0
+margin_right = 224.0
+margin_bottom = 40.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="Tabs/Audio/MusicVolume"]
+margin_right = 95.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "music vol.:"
+valign = 1
+
+[node name="MusicSlider" type="HSlider" parent="Tabs/Audio/MusicVolume"]
+unique_name_in_owner = true
+margin_left = 99.0
+margin_right = 199.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 100, 0 )
+focus_neighbour_top = NodePath("../../MasterVolume/MasterSlider")
+focus_neighbour_bottom = NodePath("../../SoundVolume/SoundSlider")
+size_flags_horizontal = 3
+max_value = 1.0
+step = 0.05
+value = 1.0
+scrollable = false
+__meta__ = {
+"_edit_group_": true
+}
+
+[node name="Volume" type="Label" parent="Tabs/Audio/MusicVolume"]
+margin_left = 203.0
+margin_right = 224.0
+margin_bottom = 12.0
+size_flags_horizontal = 9
+size_flags_vertical = 1
+text = "100"
+valign = 1
+
+[node name="SoundVolume" type="HBoxContainer" parent="Tabs/Audio"]
+margin_top = 44.0
+margin_right = 224.0
+margin_bottom = 56.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="Tabs/Audio/SoundVolume"]
+margin_right = 95.0
+margin_bottom = 12.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+text = "SOund vol.:"
+valign = 1
+
+[node name="SoundSlider" type="HSlider" parent="Tabs/Audio/SoundVolume"]
+unique_name_in_owner = true
+margin_left = 99.0
+margin_right = 199.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 100, 0 )
+focus_neighbour_top = NodePath("../../MusicVolume/MusicSlider")
+size_flags_horizontal = 3
+max_value = 1.0
+step = 0.05
+value = 1.0
+scrollable = false
+__meta__ = {
+"_edit_group_": true
+}
+
+[node name="Volume" type="Label" parent="Tabs/Audio/SoundVolume"]
+margin_left = 203.0
+margin_right = 224.0
+margin_bottom = 12.0
+size_flags_horizontal = 9
+size_flags_vertical = 1
+text = "100"
+valign = 1
+
+[node name="HBoxContainer" type="VBoxContainer" parent="."]
+margin_left = 16.0
+margin_top = 152.0
+margin_right = 240.0
+margin_bottom = 170.0
+theme = ExtResource( 2 )
+
+[node name="Controls" type="Label" parent="HBoxContainer"]
+margin_right = 224.0
+margin_bottom = 10.0
+text = "Z: back, X: apply, C: defaults"
+
+[node name="ConfirmDialog" type="PanelContainer" parent="."]
+visible = false
+margin_left = 48.0
+margin_top = 40.0
+margin_right = 208.0
+margin_bottom = 88.0
+focus_mode = 2
+
+[node name="Label" type="Label" parent="ConfirmDialog"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 157.0
+margin_bottom = 45.0
+size_flags_vertical = 5
+text = "Apply Changes?"
+align = 1
+
+[node name="Label2" type="Label" parent="ConfirmDialog"]
+margin_left = 3.0
+margin_top = 20.0
+margin_right = 157.0
+margin_bottom = 27.0
+text = "X: apply, Z: discard"
+align = 1
+
+[connection signal="focus_entered" from="." to="." method="_on_tabs_focus_entered"]
+[connection signal="focus_exited" from="." to="." method="_on_tabs_focus_exited"]
+[connection signal="gui_input" from="OptionsTitle" to="." method="_on_Tabs_gui_input"]
+[connection signal="selection_changed" from="Tabs/Game/Rumble" to="." method="_mark_dirty"]
+[connection signal="selection_changed" from="Tabs/Video/Fullscreen" to="." method="_mark_dirty"]
+[connection signal="selection_changed" from="Tabs/Video/WindowSize" to="." method="_mark_dirty"]
+[connection signal="selection_changed" from="Tabs/Video/ScalingMode" to="." method="_mark_dirty"]
+[connection signal="selection_changed" from="Tabs/Video/TransitionSpeed" to="." method="_mark_dirty"]
+[connection signal="value_changed" from="Tabs/Audio/MasterVolume/MasterSlider" to="." method="_mark_dirty"]
+[connection signal="value_changed" from="Tabs/Audio/MusicVolume/MusicSlider" to="." method="_mark_dirty"]
+[connection signal="value_changed" from="Tabs/Audio/SoundVolume/SoundSlider" to="." method="_mark_dirty"]
+[connection signal="gui_input" from="ConfirmDialog" to="." method="_on_ConfirmDialog_gui_input"]
diff --git a/objects/hud/options_screen_scholar.gd b/objects/hud/options_screen_scholar.gd
new file mode 100644
index 0000000..8206e92
--- /dev/null
+++ b/objects/hud/options_screen_scholar.gd
@@ -0,0 +1,134 @@
+extends Control
+
+
+signal exit
+
+
+# if true, options screen can not exit
+var can_exit: bool = true
+
+
+onready var tabs: TabContainer = $"%Tabs"
+onready var select_tab: HBoxContainer = $"%SelectTab"
+# options nodes
+onready var rumble: HBoxContainer = $"%SelectRumble"
+onready var gore: HBoxContainer = $"%SelectGore"
+onready var speedrun_timer: HBoxContainer = $"%SelectSpeedrunTimer"
+onready var speccy_help: HBoxContainer = $"%SelectSpeccyHelp"
+onready var fullscreen: HBoxContainer = $"%SelectFullscreen"
+onready var window_size: HBoxContainer = $"%SelectWindowSize"
+onready var scaling: HBoxContainer = $"%SelectScaling"
+onready var fade_speed: HBoxContainer = $"%SelectFadeSpeed"
+onready var border: Button = $"%SelectBorder"
+onready var scanlines: HBoxContainer = $"%SelectScanlines"
+onready var master_vol: HSlider = $"%SelectMasterVol"
+onready var music_vol: HSlider = $"%SelectMusicVol"
+onready var sound_vol: HSlider = $"%SelectSoundVol"
+onready var landing_sound: HBoxContainer = $"%SelectLandingSound"
+
+
+func _ready() -> void:
+ get_scene_instance_load_placeholder()
+ _init_values()
+
+
+func focus() -> void:
+ select_tab.selection = 0
+ $"%SelectTab".grab_focus()
+ _on_tab_selected(0)
+
+
+func _unhandled_input(event: InputEvent) -> void:
+ Options.save_options()
+
+ if can_exit and event.is_action_pressed("ui_cancel") and not Options.entry:
+ if visible == true: emit_signal("exit")
+
+
+func _init_values() -> void:
+ # game
+ rumble.selection = Options.rumble
+ gore.selection = Options.gore
+ speedrun_timer.selection = 1 if Options.speedrun_timer else 0
+ speccy_help.selection = 1 if Options.speccy_help else 0
+ # video
+ fullscreen.selection = 1 if Options.fullscreen else 0
+ window_size.selection = int(Options.window_size) - 1
+ scaling.selection = Options.scaling_mode
+ fade_speed.selection = Options.transition_speed
+ border._update()
+ scanlines.selection = Options.scanlines
+ # audio
+ master_vol.value = Options.master_volume * 100.0
+ music_vol.value = Options.music_volume * 100.0
+ sound_vol.value = Options.sound_volume * 100.0
+ landing_sound.selection = 1 if Options.landing_sound else 0
+
+
+func _on_tab_selected(selection: int) -> void:
+ tabs.current_tab = selection
+ var tab = tabs.get_current_tab_control()
+ var next = tab.get_node(tab.focus_next)
+ if next:
+ select_tab.focus_neighbour_bottom = select_tab.get_path_to(next)
+ else:
+ select_tab.focus_neighbour_bottom = @"."
+ select_tab.update_focus_targets()
+
+
+#
+# GAME
+#
+func _on_Rumble_selected(selection) -> void:
+ Options.rumble = selection
+
+func _on_Gore_selected(selection) -> void:
+ Options.gore = selection
+
+func _on_SelectSpeedrunTimer_selected(selection) -> void:
+ Options.speedrun_timer = selection == 1
+
+func _on_SelectSpeccyHelp_selected(selection) -> void:
+ Options.speccy_help = selection == 1
+
+
+#
+# VIDEO
+#
+func _on_Fullscreen_selected(selection) -> void:
+ Options.fullscreen = selection == 1 # true if 1, false otherwise
+
+func _on_WindowSize_selected(selection) -> void:
+ Options.window_size = float(selection + 1)
+
+func _on_Scaling_selected(selection) -> void:
+ Options.scaling_mode = selection
+
+func _on_FadeSpeed_selected(selection) -> void:
+ Options.transition_speed = selection
+
+func _on_Border_selected(selection) -> void:
+ Options.border = selection
+
+func _on_Scanlines_selected(selection) -> void:
+ Options.scanlines = selection
+
+
+#
+# AUDIO
+#
+func _on_MasterVol_value_changed(value: float) -> void:
+ Options.master_volume = value * 0.01
+
+func _on_MusicVol_value_changed(value: float) -> void:
+ Options.music_volume = value * 0.01
+
+func _on_SoundVol_value_changed(value: float) -> void:
+ Options.sound_volume = value * 0.01
+
+func _on_LandingSound_selected(selection) -> void:
+ Options.landing_sound = selection == 1
+
+
+func _on_DefaultControls_button_down() -> void:
+ Controls.default_controls()
diff --git a/objects/hud/options_screen_scholar.tscn b/objects/hud/options_screen_scholar.tscn
new file mode 100644
index 0000000..1939090
--- /dev/null
+++ b/objects/hud/options_screen_scholar.tscn
@@ -0,0 +1,934 @@
+[gd_scene load_steps=19 format=2]
+
+[ext_resource path="res://objects/hud/options_screen_scholar.gd" type="Script" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
+[ext_resource path="res://objects/hud/radio_buttons.gd" type="Script" id=3]
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=4]
+[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=5]
+[ext_resource path="res://objects/hud/select_border.gd" type="Script" id=6]
+[ext_resource path="res://objects/hud/labeled_slider.gd" type="Script" id=7]
+[ext_resource path="res://objects/hud/set_keyboard_button.gd" type="Script" id=8]
+[ext_resource path="res://objects/hud/set_gamepad_button.gd" type="Script" id=9]
+[ext_resource path="res://objects/hud/scroll_follow_focus.gd" type="Script" id=10]
+[ext_resource path="res://graphics/hud/levelselect_nexlevel.png" type="Texture" id=11]
+[ext_resource path="res://objects/hud/player_name_input.gd" type="Script" id=12]
+
+[sub_resource type="StyleBoxFlat" id=5]
+content_margin_left = 1.0
+content_margin_right = 1.0
+bg_color = Color( 0.14902, 0.0980392, 0.247059, 1 )
+corner_detail = 1
+anti_aliasing = false
+
+[sub_resource type="StyleBoxFlat" id=6]
+content_margin_left = 1.0
+content_margin_right = 1.0
+bg_color = Color( 0.213124, 0.165611, 0.382812, 1 )
+corner_detail = 1
+anti_aliasing = false
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = ExtResource( 4 )
+shader_param/speed = Vector2( 4, 0 )
+shader_param/ammount = Vector2( 2, 0 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 4, 0 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 11 )
+region = Rect2( 0, 0, 8, 8 )
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 11 )
+region = Rect2( 8, 0, 8, 8 )
+
+[node name="OptionsScreen" type="Control"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 2 )
+script = ExtResource( 1 )
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
+margin_left = 8.0
+margin_top = 16.0
+margin_right = 248.0
+margin_bottom = 176.0
+rect_min_size = Vector2( 240, 160 )
+
+[node name="MarginContainer" type="MarginContainer" parent="CenterContainer/PanelContainer"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 237.0
+margin_bottom = 157.0
+custom_constants/margin_right = 8
+custom_constants/margin_top = 4
+custom_constants/margin_left = 8
+custom_constants/margin_bottom = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer"]
+margin_left = 8.0
+margin_top = 4.0
+margin_right = 226.0
+margin_bottom = 152.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+margin_right = 218.0
+margin_bottom = 10.0
+text = "-options-"
+align = 1
+
+[node name="SelectTab" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+margin_top = 14.0
+margin_right = 218.0
+margin_bottom = 24.0
+focus_mode = 2
+alignment = 1
+script = ExtResource( 3 )
+condense = true
+options = [ "game", "video", "audio", "input" ]
+
+[node name="HSeparator" type="HSeparator" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+margin_top = 28.0
+margin_right = 218.0
+margin_bottom = 32.0
+
+[node name="Tabs" type="TabContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+margin_top = 36.0
+margin_right = 218.0
+margin_bottom = 148.0
+focus_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tabs_visible = false
+
+[node name="Game" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_next = NodePath("Rumble/SelectRumble")
+
+[node name="Rumble" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"]
+margin_right = 218.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Rumble"]
+margin_top = 1.0
+margin_right = 49.0
+margin_bottom = 11.0
+text = "Rumble:"
+
+[node name="SelectRumble" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Rumble"]
+unique_name_in_owner = true
+margin_left = 53.0
+margin_right = 218.0
+margin_bottom = 12.0
+focus_neighbour_top = NodePath("../../../../SelectTab")
+focus_neighbour_bottom = NodePath("../../Gore/SelectGore")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "off", "deaths", "full" ]
+
+[node name="Gore" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"]
+margin_top = 16.0
+margin_right = 218.0
+margin_bottom = 28.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Gore"]
+margin_top = 1.0
+margin_right = 35.0
+margin_bottom = 11.0
+text = "Gore:"
+
+[node name="SelectGore" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Gore"]
+unique_name_in_owner = true
+margin_left = 39.0
+margin_right = 218.0
+margin_bottom = 12.0
+focus_neighbour_top = NodePath("../../Rumble/SelectRumble")
+focus_neighbour_bottom = NodePath("../../SpeedrunTimer/SelectSpeedrunTimer")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "none", "no stains", "full" ]
+
+[node name="SpeedrunTimer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"]
+margin_top = 32.0
+margin_right = 218.0
+margin_bottom = 44.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeedrunTimer"]
+margin_top = 1.0
+margin_right = 105.0
+margin_bottom = 11.0
+text = "Speedrun Timer:"
+
+[node name="SelectSpeedrunTimer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeedrunTimer"]
+unique_name_in_owner = true
+margin_left = 144.0
+margin_right = 183.0
+margin_bottom = 12.0
+focus_neighbour_top = NodePath("../../Gore/SelectGore")
+focus_neighbour_bottom = NodePath("../../SpeccyHelp/SelectSpeccyHelp")
+focus_mode = 2
+size_flags_horizontal = 6
+script = ExtResource( 3 )
+condense = true
+options = [ "off", "on" ]
+
+[node name="SpeccyHelp" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"]
+margin_top = 48.0
+margin_right = 218.0
+margin_bottom = 60.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeccyHelp"]
+margin_top = 1.0
+margin_right = 119.0
+margin_bottom = 11.0
+text = "Help from speccy:"
+
+[node name="SelectSpeccyHelp" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeccyHelp"]
+unique_name_in_owner = true
+margin_left = 151.0
+margin_right = 190.0
+margin_bottom = 12.0
+focus_neighbour_top = NodePath("../../SpeedrunTimer/SelectSpeedrunTimer")
+focus_neighbour_bottom = NodePath("../../ScoreBoardName/PlayerNameInput")
+focus_mode = 2
+size_flags_horizontal = 6
+script = ExtResource( 3 )
+condense = true
+options = [ "off", "on" ]
+
+[node name="ScoreBoardName" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"]
+margin_top = 64.0
+margin_right = 218.0
+margin_bottom = 74.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName"]
+margin_right = 112.0
+margin_bottom = 10.0
+text = "Scoreboard name:"
+
+[node name="PlayerNameInput" type="TextEdit" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName"]
+margin_left = 130.0
+margin_right = 203.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 73, 0 )
+focus_neighbour_top = NodePath("../../SpeccyHelp/SelectSpeccyHelp")
+size_flags_horizontal = 6
+custom_constants/line_spacing = 0
+custom_styles/focus = SubResource( 5 )
+custom_styles/normal = SubResource( 6 )
+script = ExtResource( 12 )
+
+[node name="Video" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_next = NodePath("Fullscreen/SelectFullscreen")
+
+[node name="Fullscreen" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_right = 218.0
+margin_bottom = 10.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Fullscreen"]
+margin_right = 140.0
+margin_bottom = 10.0
+text = "Start In fullscreen:"
+
+[node name="SelectFullscreen" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Fullscreen"]
+unique_name_in_owner = true
+margin_left = 144.0
+margin_right = 218.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../../../SelectTab")
+focus_neighbour_bottom = NodePath("../../WindowSize/SelectWindowSize")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "off", "on" ]
+
+[node name="WindowSize" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_top = 14.0
+margin_right = 218.0
+margin_bottom = 24.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/WindowSize"]
+margin_right = 84.0
+margin_bottom = 10.0
+text = "window size:"
+
+[node name="SelectWindowSize" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/WindowSize"]
+unique_name_in_owner = true
+margin_left = 88.0
+margin_right = 218.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../Fullscreen/SelectFullscreen")
+focus_neighbour_bottom = NodePath("../../Scaling/SelectScaling")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "1x", "2x", "3x", "4x", "5x" ]
+
+[node name="Scaling" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_top = 28.0
+margin_right = 218.0
+margin_bottom = 38.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scaling"]
+margin_right = 56.0
+margin_bottom = 10.0
+text = "scaling:"
+
+[node name="SelectScaling" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scaling"]
+unique_name_in_owner = true
+margin_left = 60.0
+margin_right = 218.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../WindowSize/SelectWindowSize")
+focus_neighbour_bottom = NodePath("../../FadeSpeed/SelectFadeSpeed")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "integer", "aspect", "stretch" ]
+
+[node name="FadeSpeed" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_top = 42.0
+margin_right = 218.0
+margin_bottom = 52.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/FadeSpeed"]
+margin_right = 35.0
+margin_bottom = 10.0
+text = "fade:"
+
+[node name="SelectFadeSpeed" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/FadeSpeed"]
+unique_name_in_owner = true
+margin_left = 39.0
+margin_right = 218.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../Scaling/SelectScaling")
+focus_neighbour_bottom = NodePath("../../Border/HBoxContainer/SelectBorder")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "slow", "medium", "fast", "instant" ]
+
+[node name="Border" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_top = 56.0
+margin_right = 218.0
+margin_bottom = 66.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border"]
+margin_right = 49.0
+margin_bottom = 10.0
+text = "border:"
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border"]
+margin_left = 53.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+alignment = 1
+
+[node name="BorderBackArrow" type="TextureRect" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 1 )
+margin_left = 30.0
+margin_top = 1.0
+margin_right = 36.0
+margin_bottom = 9.0
+size_flags_vertical = 4
+texture = ExtResource( 5 )
+flip_h = true
+
+[node name="SelectBorder" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer"]
+unique_name_in_owner = true
+margin_left = 40.0
+margin_right = 124.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath(".")
+focus_neighbour_top = NodePath("../../../FadeSpeed/SelectFadeSpeed")
+focus_neighbour_right = NodePath(".")
+focus_neighbour_bottom = NodePath("../../../Scanlines/SelectScanlines")
+theme = ExtResource( 2 )
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+text = "trans rights"
+script = ExtResource( 6 )
+
+[node name="BorderNextArrow" type="TextureRect" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 2 )
+margin_left = 128.0
+margin_top = 1.0
+margin_right = 134.0
+margin_bottom = 9.0
+size_flags_vertical = 4
+texture = ExtResource( 5 )
+
+[node name="Scanlines" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video"]
+margin_top = 70.0
+margin_right = 218.0
+margin_bottom = 80.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scanlines"]
+margin_right = 70.0
+margin_bottom = 10.0
+text = "scanlines:"
+
+[node name="SelectScanlines" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scanlines"]
+unique_name_in_owner = true
+margin_left = 74.0
+margin_right = 218.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../Border/HBoxContainer/SelectBorder")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "none", "lcd", "crt" ]
+
+[node name="Audio" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_next = NodePath("Master/SelectMasterVol")
+
+[node name="Master" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio"]
+margin_right = 218.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Master"]
+margin_top = 1.0
+margin_right = 94.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+text = "Master vol.:"
+
+[node name="SelectMasterVol" type="HSlider" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Master"]
+unique_name_in_owner = true
+margin_left = 98.0
+margin_right = 193.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../../../SelectTab")
+focus_neighbour_bottom = NodePath("../../Music/SelectMusicVol")
+size_flags_horizontal = 3
+step = 5.0
+value = 100.0
+scrollable = false
+script = ExtResource( 7 )
+label = NodePath("../Volume")
+
+[node name="Volume" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Master"]
+margin_left = 197.0
+margin_top = 1.0
+margin_right = 218.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 21, 0 )
+size_flags_horizontal = 9
+text = "100"
+align = 2
+
+[node name="Music" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio"]
+margin_top = 16.0
+margin_right = 218.0
+margin_bottom = 28.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Music"]
+margin_top = 1.0
+margin_right = 94.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+text = "Music vol.:"
+
+[node name="SelectMusicVol" type="HSlider" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Music"]
+unique_name_in_owner = true
+margin_left = 98.0
+margin_right = 193.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../Master/SelectMasterVol")
+focus_neighbour_bottom = NodePath("../../Sound/SelectSoundVol")
+size_flags_horizontal = 3
+step = 5.0
+value = 100.0
+scrollable = false
+script = ExtResource( 7 )
+label = NodePath("../Volume")
+
+[node name="Volume" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Music"]
+margin_left = 197.0
+margin_top = 1.0
+margin_right = 218.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 21, 0 )
+size_flags_horizontal = 9
+text = "100"
+align = 2
+
+[node name="Sound" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio"]
+margin_top = 32.0
+margin_right = 218.0
+margin_bottom = 44.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Sound"]
+margin_top = 1.0
+margin_right = 94.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+text = "Sound vol.:"
+
+[node name="SelectSoundVol" type="HSlider" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Sound"]
+unique_name_in_owner = true
+margin_left = 98.0
+margin_right = 193.0
+margin_bottom = 10.0
+focus_neighbour_top = NodePath("../../Music/SelectMusicVol")
+focus_neighbour_bottom = NodePath("../../LandingSound/SelectLandingSound")
+size_flags_horizontal = 3
+step = 5.0
+value = 100.0
+scrollable = false
+script = ExtResource( 7 )
+label = NodePath("../Volume")
+
+[node name="Volume" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Sound"]
+margin_left = 197.0
+margin_top = 1.0
+margin_right = 218.0
+margin_bottom = 11.0
+rect_min_size = Vector2( 21, 0 )
+size_flags_horizontal = 9
+text = "100"
+align = 2
+
+[node name="LandingSound" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio"]
+margin_top = 48.0
+margin_right = 218.0
+margin_bottom = 60.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/LandingSound"]
+margin_top = 1.0
+margin_right = 98.0
+margin_bottom = 11.0
+text = "Landing sound:"
+
+[node name="SelectLandingSound" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/LandingSound"]
+unique_name_in_owner = true
+margin_left = 102.0
+margin_right = 218.0
+margin_bottom = 12.0
+focus_neighbour_top = NodePath("../../Sound/SelectSoundVol")
+focus_mode = 2
+size_flags_horizontal = 3
+script = ExtResource( 3 )
+options = [ "off", "on" ]
+
+[node name="Input" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"]
+visible = false
+anchor_right = 1.0
+anchor_bottom = 1.0
+focus_next = NodePath("ScrollContainer/ControlsVBox/Left/Keyboard")
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="Header" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input"]
+margin_right = 218.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 0, 12 )
+
+[node name="Spacer" type="CenterContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/Header"]
+margin_right = 92.0
+margin_bottom = 12.0
+rect_min_size = Vector2( 92, 0 )
+
+[node name="UpArrow" type="TextureRect" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/Header/Spacer"]
+unique_name_in_owner = true
+margin_left = 42.0
+margin_top = 2.0
+margin_right = 50.0
+margin_bottom = 10.0
+texture = SubResource( 3 )
+
+[node name="Keyboard" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/Header"]
+margin_left = 96.0
+margin_top = 1.0
+margin_right = 155.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+text = "Keyboard"
+align = 1
+
+[node name="Gamepad" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/Header"]
+margin_left = 159.0
+margin_top = 1.0
+margin_right = 218.0
+margin_bottom = 11.0
+size_flags_horizontal = 3
+text = "Gamepad"
+align = 1
+
+[node name="ScrollContainer" type="ScrollContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input"]
+margin_top = 16.0
+margin_right = 218.0
+margin_bottom = 98.0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+script = ExtResource( 10 )
+
+[node name="ControlsVBox" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer"]
+unique_name_in_owner = true
+margin_right = 218.0
+margin_bottom = 122.0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="Left" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_right = 218.0
+margin_bottom = 10.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Left"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "left"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Left"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "move_left"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Left"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+icon_align = 1
+script = ExtResource( 9 )
+action = "move_left"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Right" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 14.0
+margin_right = 218.0
+margin_bottom = 24.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Right"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "right"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Right"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "move_right"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Right"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "move_right"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Up" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 28.0
+margin_right = 218.0
+margin_bottom = 38.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Up"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "up"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Up"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "move_up"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Up"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "move_up"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Down" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 42.0
+margin_right = 218.0
+margin_bottom = 52.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Down"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "down"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Down"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "move_down"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Down"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "move_down"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Confirm" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 56.0
+margin_right = 218.0
+margin_bottom = 66.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Confirm"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "confirm"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Confirm"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "ui_accept"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Confirm"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "ui_accept"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Back" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 70.0
+margin_right = 218.0
+margin_bottom = 80.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Back"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "back"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Back"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "ui_cancel"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Back"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "ui_cancel"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Jump" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 84.0
+margin_right = 218.0
+margin_bottom = 94.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Jump"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "jump"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Jump"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "jump"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Jump"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "jump"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Attack" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_top = 98.0
+margin_right = 218.0
+margin_bottom = 108.0
+
+[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Attack"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+text = "attack"
+align = 1
+
+[node name="Keyboard" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Attack"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+focus_neighbour_left = NodePath("../..")
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 8 )
+action = "shoot"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="Gamepad" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/Attack"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+text = "-"
+script = ExtResource( 9 )
+action = "shoot"
+options_screen = NodePath("../../../../../../../../../..")
+
+[node name="DefaultControls" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox"]
+margin_left = 81.0
+margin_top = 112.0
+margin_right = 137.0
+margin_bottom = 122.0
+focus_neighbour_left = NodePath("..")
+focus_neighbour_right = NodePath("..")
+size_flags_horizontal = 4
+text = "defaults"
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input"]
+margin_top = 102.0
+margin_right = 218.0
+margin_bottom = 112.0
+
+[node name="Spacer" type="CenterContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/HBoxContainer"]
+margin_right = 92.0
+margin_bottom = 10.0
+rect_min_size = Vector2( 92, 0 )
+
+[node name="DownArrow" type="TextureRect" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/HBoxContainer/Spacer"]
+unique_name_in_owner = true
+margin_left = 42.0
+margin_top = 1.0
+margin_right = 50.0
+margin_bottom = 9.0
+texture = SubResource( 4 )
+
+[node name="Keyboard" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/HBoxContainer"]
+margin_left = 96.0
+margin_right = 155.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+align = 1
+
+[node name="Gamepad" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/HBoxContainer"]
+margin_left = 159.0
+margin_right = 218.0
+margin_bottom = 10.0
+size_flags_horizontal = 3
+align = 1
+
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/SelectTab" to="." method="_on_tab_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Rumble/SelectRumble" to="." method="_on_Rumble_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Gore/SelectGore" to="." method="_on_Gore_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeedrunTimer/SelectSpeedrunTimer" to="." method="_on_SelectSpeedrunTimer_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/SpeccyHelp/SelectSpeccyHelp" to="." method="_on_SelectSpeccyHelp_selected"]
+[connection signal="focus_entered" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_focus_entered"]
+[connection signal="focus_exited" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_focus_exited"]
+[connection signal="gui_input" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_gui_input"]
+[connection signal="text_changed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_text_changed"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Fullscreen/SelectFullscreen" to="." method="_on_Fullscreen_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/WindowSize/SelectWindowSize" to="." method="_on_WindowSize_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scaling/SelectScaling" to="." method="_on_Scaling_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/FadeSpeed/SelectFadeSpeed" to="." method="_on_FadeSpeed_selected"]
+[connection signal="focus_entered" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer/SelectBorder" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer/SelectBorder" method="_on_focus_entered"]
+[connection signal="focus_exited" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer/SelectBorder" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer/SelectBorder" method="_on_focus_exited"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Border/HBoxContainer/SelectBorder" to="." method="_on_Border_selected"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scanlines/SelectScanlines" to="." method="_on_Scanlines_selected"]
+[connection signal="value_changed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Master/SelectMasterVol" to="." method="_on_MasterVol_value_changed"]
+[connection signal="value_changed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Music/SelectMusicVol" to="." method="_on_MusicVol_value_changed"]
+[connection signal="value_changed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/Sound/SelectSoundVol" to="." method="_on_SoundVol_value_changed"]
+[connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Audio/LandingSound/SelectLandingSound" to="." method="_on_LandingSound_selected"]
+[connection signal="button_down" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Input/ScrollContainer/ControlsVBox/DefaultControls" to="." method="_on_DefaultControls_button_down"]
diff --git a/objects/hud/pause_screen.gd b/objects/hud/pause_screen.gd
index 4790214..7a9b7d8 100644
--- a/objects/hud/pause_screen.gd
+++ b/objects/hud/pause_screen.gd
@@ -1,28 +1,95 @@
-extends Node2D
+extends CanvasLayer
+
+var lore_entries: Array = []
+var current_lore: int = -1
+var can_switch_lore: bool = true
+
+onready var options_screen = $OptionsScreen
+onready var lore_container = $LoreContainer
# Called when the node enters the scene tree for the first time.
func _ready():
+
get_tree().paused = true
$Body/Resume.grab_focus()
+ if Game.marathon_mode:
+ $Body/Restart.disabled = true
+ $Body/Restart.focus_mode = Control.FOCUS_NONE
+ $"%GreyedRestart".visible = true
+ $Body.text = "RESUME\nRESTART\nOPTIONS\nQUIT GAME"
+ else:
+ $Body.text = "RESUME\nRESTART\nOPTIONS\nEXIT LEVEL"
+ #Random lore
+ if lore_entries != null and not lore_entries.empty():
+ current_lore = randi() % lore_entries.size()
+ _update_lore_entry()
+ #Pause music
+ Audio.ac_music.set_stream_paused(true)
+ Audio.ac_pause_music.play()
func _physics_process(delta):
#Resume with pause button
if Input.is_action_just_pressed("pause"):
- get_tree().paused = false
- queue_free()
+ unpause()
+
+func _input(event: InputEvent) -> void:
+ if can_switch_lore:
+ if event.is_action_pressed("ui_left"):
+ current_lore = posmod(current_lore - 1, lore_entries.size())
+ _update_lore_entry()
+ $MenuSounds.play_select_sound()
+ elif event.is_action_pressed("ui_right"):
+ current_lore = posmod(current_lore + 1, lore_entries.size())
+ _update_lore_entry()
+ $MenuSounds.play_select_sound()
+
+func _update_lore_entry() -> void:
+ if current_lore >= 0 and lore_entries != null and not lore_entries.empty():
+ for child in lore_container.get_children():
+ lore_container.remove_child(child)
+ var lore = lore_entries[current_lore].instance()
+ lore_container.add_child(lore)
func _on_Resume_pressed():
- get_tree().paused = false
- queue_free()
+ unpause()
func _on_Restart_pressed():
+ Audio.ac_music.set_stream_paused(false)
+ Audio.ac_pause_music.stop()
Game.call_deferred("restart_level")
get_tree().paused = false
queue_free()
+func _on_Settings_pressed():
+ $LoreContainer.visible = false
+ options_screen.visible = true
+ can_switch_lore = false
+ options_screen.focus()
+
+
func _on_ExitLevel_pressed():
+ Audio.ac_music.set_stream_paused(false)
+ Audio.ac_pause_music.stop()
get_tree().paused = false
- Game.change_map(load("res://maps/level_select.tscn"))
+ if Game.marathon_mode:
+ Game.change_map(load("res://menus/marathon_start.tscn"))
+ else:
+ Game.change_map(load("res://menus/level_select_scholar.tscn"))
+ yield(Fade, "fade_finished")
+ queue_free()
+
+
+func _on_OptionsScreen_exit():
+ options_screen.visible = false
+ $LoreContainer.visible = true
+ $Body/Settings.grab_focus()
+ can_switch_lore = true
+
+func unpause():
+ get_tree().paused = false
+ #Stop pause music
+ Audio.ac_music.set_stream_paused(false)
+ Audio.ac_pause_music.stop()
queue_free()
diff --git a/objects/hud/pause_screen.tscn b/objects/hud/pause_screen.tscn
index 20aea8e..2ce8e48 100644
--- a/objects/hud/pause_screen.tscn
+++ b/objects/hud/pause_screen.tscn
@@ -1,35 +1,45 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=9 format=2]
-[ext_resource path="res://tilesets/t_gui.tres" type="TileSet" id=1]
-[ext_resource path="res://scripts/theme.tres" type="Theme" id=2]
+[ext_resource path="res://ui/arrow_figure_8.tres" type="Material" id=1]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=2]
[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=3]
[ext_resource path="res://objects/hud/pause_screen.gd" type="Script" id=4]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=6]
+[ext_resource path="res://objects/hud/options_screen_scholar.tscn" type="PackedScene" id=7]
+[ext_resource path="res://ui/border.png" type="Texture" id=8]
+[ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=9]
-[node name="PauseScreen" type="Node2D"]
+[node name="PauseScreen" type="CanvasLayer"]
pause_mode = 2
+layer = 110
script = ExtResource( 4 )
-[node name="TileMap" type="TileMap" parent="."]
-pause_mode = 2
-tile_set = ExtResource( 1 )
-cell_size = Vector2( 8, 8 )
-format = 1
-tile_data = PoolIntArray( 524296, 0, 0, 524297, 536870912, 1, 524298, 536870912, 1, 524299, 536870912, 1, 524300, 536870912, 1, 524301, 536870912, 1, 524302, 536870912, 1, 524303, 536870912, 1, 524304, 536870912, 1, 524305, 536870912, 1, 524306, 536870912, 1, 524307, 536870912, 1, 524308, 536870912, 1, 524309, 536870912, 1, 524310, 536870912, 1, 524311, 536870912, 0, 589832, 0, 2, 589847, 536870912, 2, 655368, 0, 2, 655383, 536870912, 2, 720904, 0, 2, 720919, 536870912, 2, 786440, 0, 2, 786455, 536870912, 2, 851976, 0, 2, 851991, 536870912, 2, 917512, 0, 2, 917527, 536870912, 2, 983048, 1073741824, 0, 983049, 1610612736, 1, 983050, 1610612736, 1, 983051, 1610612736, 1, 983052, 1610612736, 1, 983053, 1610612736, 1, 983054, 1610612736, 1, 983055, 1610612736, 1, 983056, 1610612736, 1, 983057, 1610612736, 1, 983058, 1610612736, 1, 983059, 1610612736, 1, 983060, 1610612736, 1, 983061, 1610612736, 1, 983062, 1610612736, 1, 983063, 1610612736, 0 )
+[node name="Border" type="NinePatchRect" parent="."]
+margin_left = 64.0
+margin_top = 25.0
+margin_right = 192.0
+margin_bottom = 82.0
+texture = ExtResource( 8 )
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
[node name="ColorRect" type="ColorRect" parent="."]
pause_mode = 2
margin_left = 67.0
-margin_top = 72.0
+margin_top = 28.0
margin_right = 189.0
-margin_bottom = 120.0
+margin_bottom = 79.0
color = Color( 0.239216, 0.239216, 0.443137, 1 )
[node name="Paused" type="Label" parent="."]
pause_mode = 2
+material = ExtResource( 6 )
margin_left = 64.0
-margin_top = 56.0
+margin_top = 14.0
margin_right = 192.0
-margin_bottom = 70.0
+margin_bottom = 24.0
theme = ExtResource( 2 )
text = "PAUSED!"
align = 1
@@ -37,56 +47,99 @@ align = 1
[node name="Body" type="Label" parent="."]
pause_mode = 2
margin_left = 64.0
-margin_top = 74.0
+margin_top = 29.0
margin_right = 192.0
-margin_bottom = 122.0
+margin_bottom = 78.0
theme = ExtResource( 2 )
text = "RESUME
RESTART
-SETTINGS
+OPTIONS
EXit level"
align = 1
[node name="Resume" type="TextureButton" parent="Body"]
pause_mode = 2
+material = ExtResource( 1 )
margin_left = 36.0
-margin_top = 3.0
+margin_top = 1.0
margin_right = 44.0
-margin_bottom = 11.0
+margin_bottom = 9.0
+focus_neighbour_left = NodePath(".")
+focus_neighbour_right = NodePath(".")
focus_neighbour_bottom = NodePath("../Restart")
texture_focused = ExtResource( 3 )
[node name="Restart" type="TextureButton" parent="Body"]
pause_mode = 2
+material = ExtResource( 1 )
margin_left = 32.0
-margin_top = 13.0
+margin_top = 14.0
margin_right = 40.0
-margin_bottom = 21.0
+margin_bottom = 22.0
+focus_neighbour_left = NodePath(".")
focus_neighbour_top = NodePath("../Resume")
+focus_neighbour_right = NodePath(".")
focus_neighbour_bottom = NodePath("../Settings")
texture_focused = ExtResource( 3 )
+[node name="GreyedRestart" type="Label" parent="Body/Restart"]
+unique_name_in_owner = true
+visible = false
+margin_left = 7.0
+margin_top = -1.0
+margin_right = 63.0
+margin_bottom = 9.0
+custom_colors/font_color = Color( 0.690196, 0.690196, 0.690196, 1 )
+text = "Restart"
+
[node name="Settings" type="TextureButton" parent="Body"]
pause_mode = 2
-margin_left = 29.0
-margin_top = 23.0
-margin_right = 37.0
-margin_bottom = 31.0
+material = ExtResource( 1 )
+margin_left = 32.0
+margin_top = 27.0
+margin_right = 40.0
+margin_bottom = 35.0
+focus_neighbour_left = NodePath(".")
focus_neighbour_top = NodePath("../Restart")
+focus_neighbour_right = NodePath(".")
focus_neighbour_bottom = NodePath("../ExitLevel")
texture_focused = ExtResource( 3 )
[node name="ExitLevel" type="TextureButton" parent="Body"]
pause_mode = 2
+material = ExtResource( 1 )
margin_left = 22.0
-margin_top = 33.0
+margin_top = 40.0
margin_right = 30.0
-margin_bottom = 41.0
+margin_bottom = 48.0
+focus_neighbour_left = NodePath(".")
focus_neighbour_top = NodePath("../Settings")
+focus_neighbour_right = NodePath(".")
texture_focused = ExtResource( 3 )
-[node name="StaticBody2D" type="StaticBody2D" parent="."]
+[node name="LoreContainer" type="MarginContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 8.0
+margin_top = 84.0
+margin_right = -8.0
+margin_bottom = -14.0
+[node name="OptionsScreen" parent="." instance=ExtResource( 7 )]
+visible = false
+
+[node name="MenuSounds" parent="." instance=ExtResource( 9 )]
+
+[connection signal="focus_entered" from="Body/Resume" to="MenuSounds" method="play_select_sound"]
[connection signal="pressed" from="Body/Resume" to="." method="_on_Resume_pressed"]
+[connection signal="pressed" from="Body/Resume" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Body/Restart" to="MenuSounds" method="play_select_sound"]
[connection signal="pressed" from="Body/Restart" to="." method="_on_Restart_pressed"]
+[connection signal="pressed" from="Body/Restart" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Body/Settings" to="MenuSounds" method="play_select_sound"]
+[connection signal="pressed" from="Body/Settings" to="." method="_on_Settings_pressed"]
+[connection signal="pressed" from="Body/Settings" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="focus_entered" from="Body/ExitLevel" to="MenuSounds" method="play_select_sound"]
[connection signal="pressed" from="Body/ExitLevel" to="." method="_on_ExitLevel_pressed"]
+[connection signal="pressed" from="Body/ExitLevel" to="MenuSounds" method="play_confirm_sound"]
+[connection signal="exit" from="OptionsScreen" to="." method="_on_OptionsScreen_exit" flags=3]
diff --git a/objects/hud/player_name_input.gd b/objects/hud/player_name_input.gd
new file mode 100644
index 0000000..23edaf8
--- /dev/null
+++ b/objects/hud/player_name_input.gd
@@ -0,0 +1,29 @@
+extends TextEdit
+
+
+func _ready() -> void:
+ text = Options.scoreboard_name
+
+
+func _exit_tree() -> void:
+ Options.entry = false
+
+
+func _on_text_changed() -> void:
+ text = text.substr(0, 10).to_lower().strip_escapes()
+ Options.scoreboard_name = text
+ cursor_set_column(text.length())
+
+
+func _on_focus_entered() -> void:
+ Options.entry = true
+ cursor_set_column(text.length())
+
+
+func _on_focus_exited() -> void:
+ Options.set_deferred("entry", false)
+
+
+func _on_gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("text_enter"):
+ get_node(focus_neighbour_top).grab_focus()
diff --git a/objects/hud/radio_buttons.gd b/objects/hud/radio_buttons.gd
new file mode 100644
index 0000000..9949e94
--- /dev/null
+++ b/objects/hud/radio_buttons.gd
@@ -0,0 +1,101 @@
+tool
+class_name RadioButtons
+extends HBoxContainer
+
+
+signal selected(selection)
+
+
+export var condense: bool = false
+export var default_selection: int = 0 setget _set_default_selection
+export (Array, String) var options: Array = [] setget _set_options
+
+
+onready var selection: int = default_selection setget _set_selection
+
+
+var _buttons: Array = []
+
+
+func _init() -> void:
+ focus_mode = FOCUS_ALL
+ connect("focus_entered", self, "_on_focus_entered")
+
+
+func _set_default_selection(value: int) -> void:
+ if value < 0:
+ value = 0
+ elif value >= options.size() and value != 0:
+ value = options.size() - 1
+ default_selection = value
+ if not _buttons.empty():
+ _buttons[default_selection].pressed = true
+
+
+func _set_options(value: Array) -> void:
+ options = value
+ _init_buttons()
+
+
+func _set_selection(value: int) -> void:
+ selection = value
+ _buttons[selection].pressed = true
+
+
+func update_focus_targets() -> void:
+ for b in _buttons:
+ b.focus_neighbour_top = "../%s" % focus_neighbour_top
+ b.focus_neighbour_bottom = "../%s" % focus_neighbour_bottom
+
+
+func _init_buttons() -> void:
+ # initialize buttons array
+ for child in get_children():
+ remove_child(child)
+ child.queue_free()
+ _buttons.clear()
+ _buttons.resize(options.size())
+
+ # set up new buttons
+ var group := ButtonGroup.new()
+ for i in options.size():
+ # create new button
+ var b := Button.new()
+ b.text = options[i]
+ b.toggle_mode = true
+ b.group = group
+ # size flags
+ if condense:
+ b.size_flags_horizontal = 0
+ else:
+ b.size_flags_horizontal = SIZE_EXPAND | SIZE_SHRINK_CENTER
+ b.size_flags_vertical = 0
+ # connect signal with index as payload
+ b.connect("focus_entered", self, "_on_button_selected", [i])
+ # add button to children and array
+ _buttons[i] = b
+ add_child(b)
+ # sync top/bottom focus to self
+ b.focus_neighbour_top = "../%s" % focus_neighbour_top
+ b.focus_neighbour_bottom = "../%s" % focus_neighbour_bottom
+ # set up focus between buttons
+ if i > 0:
+ var prev_b: Button = _buttons[i - 1]
+ b.focus_neighbour_left = b.get_path_to(prev_b)
+ prev_b.focus_neighbour_right = prev_b.get_path_to(b)
+ elif i == 0:
+ b.focus_neighbour_left = @"."
+ elif i == options.size() - 1:
+ b.focus_neighbour_right = @"."
+ _buttons[default_selection].pressed = true
+
+
+func _on_focus_entered() -> void:
+ _buttons[selection].grab_focus()
+
+
+func _on_button_selected(i: int) -> void:
+ if i != selection:
+ selection = i
+ emit_signal("selected", i)
+ _buttons[i].pressed = true
diff --git a/objects/hud/scroll_follow_focus.gd b/objects/hud/scroll_follow_focus.gd
new file mode 100644
index 0000000..89c6282
--- /dev/null
+++ b/objects/hud/scroll_follow_focus.gd
@@ -0,0 +1,39 @@
+extends ScrollContainer
+
+
+onready var up_arrow: TextureRect = $"%UpArrow"
+onready var down_arrow: TextureRect = $"%DownArrow"
+onready var controls_v_box: VBoxContainer = $"%ControlsVBox"
+
+
+func _ready() -> void:
+ yield(get_tree(), "idle_frame")
+ get_viewport().connect("gui_focus_changed", self, "_on_focus_changed")
+ connect("visibility_changed", self, "_on_visibility_changed")
+
+
+func _exit_tree() -> void:
+ get_viewport().disconnect("gui_focus_changed", self, "_on_focus_changed")
+
+
+func _on_focus_changed(focused: Control) -> void:
+ if is_a_parent_of(focused):
+ var foc_rect := focused.get_global_rect()
+ if not get_global_rect().encloses(foc_rect):
+ var direction := sign(foc_rect.position.y - get_global_rect().position.y)
+ scroll_vertical += direction * 14.0
+
+ if scroll_vertical < 1.0:
+ up_arrow.visible = false
+ else:
+ up_arrow.visible = true
+
+ if scroll_vertical > 35.0:
+ down_arrow.visible = false
+ else:
+ down_arrow.visible = true
+
+
+func _on_visibility_changed() -> void:
+ scroll_vertical = 0.0
+ up_arrow.visible = false
diff --git a/objects/hud/select_border.gd b/objects/hud/select_border.gd
new file mode 100644
index 0000000..b0f61e1
--- /dev/null
+++ b/objects/hud/select_border.gd
@@ -0,0 +1,36 @@
+extends Button
+
+
+signal selected(selection)
+
+
+onready var back_arrow: TextureRect = $"%BorderBackArrow"
+onready var next_arrow: TextureRect = $"%BorderNextArrow"
+
+
+func _ready() -> void:
+ text = Border.names[Border.current_border]
+
+
+func _gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("ui_left"):
+ Border.current_border -= 1
+ _update()
+ elif event.is_action_pressed("ui_right"):
+ Border.current_border += 1
+ _update()
+
+
+func _update() -> void:
+ emit_signal("selected", Border.current_border)
+ text = Border.names[Border.current_border]
+
+
+func _on_focus_entered() -> void:
+ back_arrow.visible = true
+ next_arrow.visible = true
+
+
+func _on_focus_exited() -> void:
+ back_arrow.visible = false
+ next_arrow.visible = false
diff --git a/objects/hud/selection_group.gd b/objects/hud/selection_group.gd
new file mode 100644
index 0000000..4cd4f72
--- /dev/null
+++ b/objects/hud/selection_group.gd
@@ -0,0 +1,33 @@
+extends HBoxContainer
+
+signal selection_changed(selection)
+
+export (ButtonGroup) var group
+
+var _selection = 0
+
+func _ready():
+ focus_mode = FOCUS_ALL
+ connect("focus_entered", self, "_focused")
+ for child in get_children():
+ if child is BaseButton:
+ child.focus_neighbour_top = "../%s" % focus_neighbour_top
+ child.focus_neighbour_bottom = "../%s" % focus_neighbour_bottom
+ child.connect("focus_entered", child, "set_pressed", [true])
+ child.connect("focus_entered", self, "_button_selected", [], CONNECT_DEFERRED)
+
+func _focused():
+ _selection = get_selection()
+ group.get_pressed_button().grab_focus()
+
+func _button_selected():
+ var new_selection = get_selection()
+ if _selection != new_selection:
+ _selection = new_selection
+ emit_signal("selection_changed", _selection)
+
+func get_selection():
+ return group.get_buttons().find(group.get_pressed_button())
+
+func select(selection):
+ group.get_buttons()[selection].pressed = true
diff --git a/objects/hud/set_gamepad_button.gd b/objects/hud/set_gamepad_button.gd
new file mode 100644
index 0000000..fea23f9
--- /dev/null
+++ b/objects/hud/set_gamepad_button.gd
@@ -0,0 +1,69 @@
+extends Button
+
+
+const BLINK_SPEED: int = 150
+const GAMEPAD_BUTTONS: AtlasTexture = preload("res://objects/hud/gamepad_buttons.atlastex")
+
+export var action: String
+export var options_screen: NodePath
+
+
+var listen := false
+var gamepad_buttons := GAMEPAD_BUTTONS.duplicate()
+
+
+func _init() -> void:
+ icon_align = Button.ALIGN_CENTER
+ connect("pressed", self, "_on_pressed")
+ add_to_group("controls_buttons")
+
+
+func _ready() -> void:
+ _update_text()
+
+
+func _process(delta: float) -> void:
+ if listen:
+ if Time.get_ticks_msec() % (BLINK_SPEED * 2) < BLINK_SPEED:
+ modulate.a = 0.0
+ else:
+ modulate.a = 1.0
+
+
+func _update_text() -> void:
+ var button = Controls.get_button(action)
+ if button >= 0:
+ gamepad_buttons.region.position.x = float(button % 8) * 12.0
+ gamepad_buttons.region.position.y = float(button / 8) * 10.0
+ icon = gamepad_buttons
+ text = ""
+ else:
+ text = "-"
+ modulate.a = 1.0
+
+
+func _on_pressed() -> void:
+ if not listen:
+ listen = true
+ disabled = true
+ text = ""
+ get_node(options_screen).can_exit = false
+ get_tree().create_timer(2.0, true).connect("timeout", self, "_on_timeout")
+
+
+func _on_timeout() -> void:
+ listen = false
+ disabled = false
+ _update_text()
+ get_node(options_screen).set_deferred("can_exit", true)
+
+
+func _gui_input(event: InputEvent) -> void:
+ if listen:
+ if event is InputEventJoypadButton and event.pressed:
+ Controls.set_button(action, event.button_index)
+ listen = false
+ get_node(options_screen).set_deferred("can_exit", true)
+ set_deferred("disabled", false)
+ _update_text()
+ accept_event()
diff --git a/objects/hud/set_keyboard_button.gd b/objects/hud/set_keyboard_button.gd
new file mode 100644
index 0000000..ba5ae52
--- /dev/null
+++ b/objects/hud/set_keyboard_button.gd
@@ -0,0 +1,60 @@
+extends Button
+
+
+const BLINK_SPEED: int = 150
+
+
+export var action: String
+export var options_screen: NodePath
+
+
+var listen := false
+
+
+func _init() -> void:
+ connect("pressed", self, "_on_pressed")
+ add_to_group("controls_buttons")
+
+
+func _ready() -> void:
+ _update_text()
+
+
+func _process(delta: float) -> void:
+ if listen:
+ if Time.get_ticks_msec() % (BLINK_SPEED * 2) < BLINK_SPEED:
+ modulate.a = 0.0
+ else:
+ modulate.a = 1.0
+
+
+func _update_text() -> void:
+ text = OS.get_scancode_string(Controls.get_key(action))
+ modulate.a = 1.0
+
+
+func _on_pressed() -> void:
+ if not listen:
+ listen = true
+ disabled = true
+ text = ""
+ get_node(options_screen).can_exit = false
+ get_tree().create_timer(2.0, true).connect("timeout", self, "_on_timeout")
+
+
+func _on_timeout() -> void:
+ listen = false
+ disabled = false
+ _update_text()
+ get_node(options_screen).set_deferred("can_exit", true)
+
+
+func _gui_input(event: InputEvent) -> void:
+ if listen:
+ if event is InputEventKey and event.pressed:
+ Controls.set_key(action, event.physical_scancode)
+ listen = false
+ get_node(options_screen).set_deferred("can_exit", true)
+ set_deferred("disabled", false)
+ _update_text()
+ accept_event()
diff --git a/objects/hud/silhouette.tscn b/objects/hud/silhouette.tscn
new file mode 100644
index 0000000..427abde
--- /dev/null
+++ b/objects/hud/silhouette.tscn
@@ -0,0 +1,15 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://graphics/particles/pixel.png" type="Texture" id=1]
+
+[node name="Silhouette" type="CanvasLayer"]
+layer = 0
+
+[node name="Light2D" type="Light2D" parent="."]
+scale = Vector2( 256, 192 )
+texture = ExtResource( 1 )
+offset = Vector2( 0.5, 0.5 )
+color = Color( 0, 0, 0, 1 )
+mode = 2
+range_z_min = -3
+range_z_max = 50
diff --git a/objects/lore/abyss/beel.tscn b/objects/lore/abyss/beel.tscn
new file mode 100644
index 0000000..6462ba8
--- /dev/null
+++ b/objects/lore/abyss/beel.tscn
@@ -0,0 +1,56 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/lore/beel_lore.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[node name="Lore" type="HBoxContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 1 )
+custom_constants/separation = 0
+
+[node name="Panel" type="PanelContainer" parent="."]
+margin_top = 77.0
+margin_right = 38.0
+margin_bottom = 115.0
+rect_min_size = Vector2( 38, 38 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+
+[node name="TextureRect" type="TextureRect" parent="Panel"]
+material = SubResource( 1 )
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 35.0
+texture = ExtResource( 4 )
+expand = true
+stretch_mode = 4
+
+[node name="Control" type="PanelContainer" parent="."]
+margin_left = 38.0
+margin_top = 62.0
+margin_right = 256.0
+margin_bottom = 130.0
+rect_min_size = Vector2( 0, 40 )
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 6
+
+[node name="Label" type="Label" parent="Control"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 215.0
+margin_bottom = 65.0
+custom_fonts/font = ExtResource( 2 )
+text = "Beel:
+This man eating monster is part eel, part bee. its stinger has enough venom to immediately kill a human."
+align = 1
+autowrap = true
diff --git a/objects/lore/abyss/bullet_fish.tscn b/objects/lore/abyss/bullet_fish.tscn
new file mode 100644
index 0000000..427ec21
--- /dev/null
+++ b/objects/lore/abyss/bullet_fish.tscn
@@ -0,0 +1,53 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+[ext_resource path="res://graphics/enemy/fish.png" type="Texture" id=3]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 11, 10 )
+
+[node name="Lore" type="HBoxContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 1 )
+custom_constants/separation = 0
+
+[node name="Panel" type="PanelContainer" parent="."]
+margin_top = 77.0
+margin_right = 38.0
+margin_bottom = 115.0
+rect_min_size = Vector2( 38, 38 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+
+[node name="TextureRect" type="TextureRect" parent="Panel"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 35.0
+texture = SubResource( 1 )
+expand = true
+stretch_mode = 4
+
+[node name="Control" type="PanelContainer" parent="."]
+margin_left = 38.0
+margin_top = 55.0
+margin_right = 256.0
+margin_bottom = 136.0
+rect_min_size = Vector2( 0, 40 )
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 6
+
+[node name="Label" type="Label" parent="Control"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 215.0
+margin_bottom = 78.0
+custom_fonts/font = ExtResource( 2 )
+text = "Bullet fish:
+This little guy is the result of multiple species of fish stiched together. it glows because it's radioactive, so watch out!"
+align = 1
+autowrap = true
diff --git a/objects/lore/abyss/crater_of_the_abyss.tscn b/objects/lore/abyss/crater_of_the_abyss.tscn
new file mode 100644
index 0000000..52a42e6
--- /dev/null
+++ b/objects/lore/abyss/crater_of_the_abyss.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/crater_of_the_abyss.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 62.0
+margin_bottom = 130.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 65.0
+text = "Crater of the Abyss:
+One of the victims of Fami's horrible space laser. its only inhabitants are chimeras and fake coral."
diff --git a/objects/lore/abyss/mine.tscn b/objects/lore/abyss/mine.tscn
new file mode 100644
index 0000000..8decea7
--- /dev/null
+++ b/objects/lore/abyss/mine.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/mine.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 62.0
+margin_bottom = 130.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 65.0
+text = "Naval Mine:
+Fami set these up in crater of the abyss to make it seem more like a legitimate, historical body of water."
diff --git a/objects/lore/abyss/squig.tscn b/objects/lore/abyss/squig.tscn
new file mode 100644
index 0000000..6b45b1c
--- /dev/null
+++ b/objects/lore/abyss/squig.tscn
@@ -0,0 +1,53 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+[ext_resource path="res://graphics/enemy/squig.png" type="Texture" id=3]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 14, 15 )
+
+[node name="Lore2" type="HBoxContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 1 )
+custom_constants/separation = 0
+
+[node name="Panel" type="PanelContainer" parent="."]
+margin_top = 77.0
+margin_right = 38.0
+margin_bottom = 115.0
+rect_min_size = Vector2( 38, 38 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+
+[node name="TextureRect" type="TextureRect" parent="Panel"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 35.0
+texture = SubResource( 1 )
+expand = true
+stretch_mode = 4
+
+[node name="Control" type="PanelContainer" parent="."]
+margin_left = 38.0
+margin_top = 62.0
+margin_right = 256.0
+margin_bottom = 130.0
+rect_min_size = Vector2( 0, 40 )
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 6
+
+[node name="Label" type="Label" parent="Control"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 215.0
+margin_bottom = 65.0
+custom_fonts/font = ExtResource( 2 )
+text = "Squig:
+A disgusting combination of squid and pig. Its ink will cause cancer if ingested. Rich people keep them as pets."
+align = 1
+autowrap = true
diff --git a/objects/lore/abyss/turchin.tscn b/objects/lore/abyss/turchin.tscn
new file mode 100644
index 0000000..a33a61d
--- /dev/null
+++ b/objects/lore/abyss/turchin.tscn
@@ -0,0 +1,60 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=3]
+[ext_resource path="res://graphics/enemy/turtle.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 33, 24, 12 )
+
+[node name="Lore" type="HBoxContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 1 )
+custom_constants/separation = 0
+
+[node name="Panel" type="PanelContainer" parent="."]
+margin_top = 77.0
+margin_right = 38.0
+margin_bottom = 115.0
+rect_min_size = Vector2( 38, 38 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+
+[node name="TextureRect" type="TextureRect" parent="Panel"]
+material = SubResource( 1 )
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 35.0
+texture = SubResource( 2 )
+expand = true
+stretch_mode = 4
+
+[node name="Control" type="PanelContainer" parent="."]
+margin_left = 38.0
+margin_top = 55.0
+margin_right = 256.0
+margin_bottom = 136.0
+rect_min_size = Vector2( 0, 40 )
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 6
+
+[node name="Label" type="Label" parent="Control"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 215.0
+margin_bottom = 78.0
+custom_fonts/font = ExtResource( 2 )
+text = "Turchin:
+A Chimera made from sea turtle and sea urchin parts. it's very expensive to produce due to the declining sea turtle population."
+align = 1
+autowrap = true
diff --git a/objects/lore/boss/2600.tscn b/objects/lore/boss/2600.tscn
new file mode 100644
index 0000000..64ec36c
--- /dev/null
+++ b/objects/lore/boss/2600.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/2600_lore.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "STG-2600:
+This monsterous mecha is powered by nasty fossil fuels. it's fitted with a mean vulcan and a laser that uses dirty uranium. It's as powerful as 830 jackhammers."
diff --git a/objects/lore/boss/dr_intelli.tscn b/objects/lore/boss/dr_intelli.tscn
new file mode 100644
index 0000000..4a04748
--- /dev/null
+++ b/objects/lore/boss/dr_intelli.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/npc/intelli_idle.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Dr.Intelli:
+born 03/23/2051, sg's boss and head of edizon inc.
+despite working with him, he does not think fondly of fami. he wishes the world revolved around his ideas instead."
diff --git a/objects/lore/boss/fami.tscn b/objects/lore/boss/fami.tscn
new file mode 100644
index 0000000..5c725c9
--- /dev/null
+++ b/objects/lore/boss/fami.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/npc/fami_human.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Fami:
+Born 07/15/2030, This evil trillionaire is hell-bent on owning as much as he can. the world went to shit when he came to power in 2068."
diff --git a/objects/lore/boss/sg_2083.tscn b/objects/lore/boss/sg_2083.tscn
new file mode 100644
index 0000000..cb199cc
--- /dev/null
+++ b/objects/lore/boss/sg_2083.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/2083_lore.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "SG-2083:
+Speccy fixed up the remains of the STG-2600, and converted its nasty fuel into solar energy. piloted by sg, the sg-2083 is humanity's last hope against super famira!"
diff --git a/objects/lore/boss/steel_factory.tscn b/objects/lore/boss/steel_factory.tscn
new file mode 100644
index 0000000..2466485
--- /dev/null
+++ b/objects/lore/boss/steel_factory.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/steel_factory.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Edizon Inc. Steel factory:
+Sg's Workplace. most of the production is achieved through automation. the humans that work there are treated the same way as the machines."
diff --git a/objects/lore/boss/the_scrump.tscn b/objects/lore/boss/the_scrump.tscn
new file mode 100644
index 0000000..52ee4d9
--- /dev/null
+++ b/objects/lore/boss/the_scrump.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/scrump_lore.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 68.0
+margin_bottom = 123.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 52.0
+text = "The Scrump:
+A horrid chimera made to look like the god of a satirical religion from the 30's."
diff --git a/objects/lore/canopy/chipit.tscn b/objects/lore/canopy/chipit.tscn
new file mode 100644
index 0000000..67f67c6
--- /dev/null
+++ b/objects/lore/canopy/chipit.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/jumping_spider.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 13, 12 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Chipit:
+This chimera is a cross between a chipmunk and a cricket. defective units are deep fried and packaged into the popular snack food Chip-Itz."
diff --git a/objects/lore/canopy/sabrespighter.tscn b/objects/lore/canopy/sabrespighter.tscn
new file mode 100644
index 0000000..bcea6e3
--- /dev/null
+++ b/objects/lore/canopy/sabrespighter.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/spider.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 15, 14 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "sabrespighter:
+This beast is a cross between a sabertooth tiger and a quarter-million black widow spiders. They were deployed in shady canopy to poison the water."
diff --git a/objects/lore/canopy/shady_canopy.tscn b/objects/lore/canopy/shady_canopy.tscn
new file mode 100644
index 0000000..796bdfe
--- /dev/null
+++ b/objects/lore/canopy/shady_canopy.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/lore/shady_canopy.png" type="Texture" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Shady Canopy:
+A heavily wooded forest connected to verdant hills. people used to live here to hide from fami, but after he poisoned the water it's become too dangerous."
diff --git a/objects/lore/canopy/skelarcher.tscn b/objects/lore/canopy/skelarcher.tscn
new file mode 100644
index 0000000..9d87e4e
--- /dev/null
+++ b/objects/lore/canopy/skelarcher.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/skelarcher_shoot.png" type="Texture" id=2]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 19, 20 )
+
+[node name="Lore" instance=ExtResource( 3 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Skelarcher:
+The withered remains of an old archer animated by an artificial soul. one of them is made from the remains of sg's friend."
diff --git a/objects/lore/cave.tscn b/objects/lore/cave.tscn
new file mode 100644
index 0000000..38cc02d
--- /dev/null
+++ b/objects/lore/cave.tscn
@@ -0,0 +1,14 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="Control" parent="." index="1"]
+margin_top = 75.0
+margin_bottom = 117.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 39.0
+text = "Blue ray caverns is used as a mine by a corporation that wants to create rust and grime"
diff --git a/objects/lore/cave/blue_ray_cavern.tscn b/objects/lore/cave/blue_ray_cavern.tscn
new file mode 100644
index 0000000..c9f10fa
--- /dev/null
+++ b/objects/lore/cave/blue_ray_cavern.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/blue_ray_cavern.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Blue Ray Cavern:
+the zircon ultima was first found here, during an expedition led by rust inc. it was stumbled upon during a survey for metals."
diff --git a/objects/lore/cave/shedge.tscn b/objects/lore/cave/shedge.tscn
new file mode 100644
index 0000000..6e3a08d
--- /dev/null
+++ b/objects/lore/cave/shedge.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/snail.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 12, 11 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Shedge:
+a combination of a snail and a hedgehog. it may seem slow at first, but the hedgehog parts are responsible for its blinding speed."
diff --git a/objects/lore/cave/the_scrumps_tongue.tscn b/objects/lore/cave/the_scrumps_tongue.tscn
new file mode 100644
index 0000000..1ffe28d
--- /dev/null
+++ b/objects/lore/cave/the_scrumps_tongue.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/enemy/tentacle.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 8, 24 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "The scrump's tongue:
+originally the scrump was meant to have a tongue.for some reason this feature was removed in favor of a synthetic vomit beam."
diff --git a/objects/lore/graveyard/artificial_soul.tscn b/objects/lore/graveyard/artificial_soul.tscn
new file mode 100644
index 0000000..be186c8
--- /dev/null
+++ b/objects/lore/graveyard/artificial_soul.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/artificial_soul_lore.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Artificial Soul:
+A small bit of electronics with an AI \"brain\". originally developed to bring \"life\" to intelli's robotic sweetheart. he later used it to power fami's chimeras."
diff --git a/objects/lore/graveyard/graveyard.tscn b/objects/lore/graveyard/graveyard.tscn
new file mode 100644
index 0000000..0a7fff2
--- /dev/null
+++ b/objects/lore/graveyard/graveyard.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/arlingwood_graveyard.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Arlingwood graveyard:
+a graveyard where old presidents are buried. it's also been a testing ground for fami's chimeras and techromancy."
diff --git a/objects/lore/graveyard/hellarcher.tscn b/objects/lore/graveyard/hellarcher.tscn
new file mode 100644
index 0000000..b74af41
--- /dev/null
+++ b/objects/lore/graveyard/hellarcher.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/enemy/hellarcher_shoot.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 19, 20 )
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 62.0
+margin_bottom = 130.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 65.0
+text = "Hellarcher:
+The withered remains of an old president reanimated with an artificial soul and given horns and a cloak."
diff --git a/objects/lore/graveyard/woeful_soul.tscn b/objects/lore/graveyard/woeful_soul.tscn
new file mode 100644
index 0000000..d86910f
--- /dev/null
+++ b/objects/lore/graveyard/woeful_soul.tscn
@@ -0,0 +1,23 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/falling_block/woeful_soul.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 8, 8 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Woeful soul:
+created as an experiment in emotional manipulation, this human skull is fitted with an artificial soul and is made to look upset to make people feel bad for it."
diff --git a/objects/lore/hills/bioslime.tscn b/objects/lore/hills/bioslime.tscn
new file mode 100644
index 0000000..dcd5935
--- /dev/null
+++ b/objects/lore/hills/bioslime.tscn
@@ -0,0 +1,32 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/pal_slime_purple.png" type="Texture" id=2]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=3]
+[ext_resource path="res://graphics/enemy/slime.png" type="Texture" id=4]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 2 )
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 4 )
+region = Rect2( 0, 0, 13, 12 )
+
+[node name="Lore" instance=ExtResource( 3 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "BioSLime:
+A monster made from discarded biological materials for making chimeras. it is the chicken nugget of the chimera world."
diff --git a/objects/lore/hills/catbat.tscn b/objects/lore/hills/catbat.tscn
new file mode 100644
index 0000000..ae43fbd
--- /dev/null
+++ b/objects/lore/hills/catbat.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/bat.png" type="Texture" id=2]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 2 )
+region = Rect2( 18, 0, 18, 10 )
+
+[node name="Lore" instance=ExtResource( 3 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "CATBAT:
+A Chimera created from vampire bat and panther materials. Fami wants everyone to believe creatures like this always existed. the propaganda isn't working."
diff --git a/objects/lore/hills/eviscerator.tscn b/objects/lore/hills/eviscerator.tscn
new file mode 100644
index 0000000..fe8ca41
--- /dev/null
+++ b/objects/lore/hills/eviscerator.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/enemy/snake.png" type="Texture" id=2]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 13, 16 )
+
+[node name="Lore" instance=ExtResource( 3 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Eviscerator:
+A chimera created by snake and alligator parts, stitched together and turned into a monster.monsters like these have no compassion."
diff --git a/objects/lore/hills/sg.gd b/objects/lore/hills/sg.gd
new file mode 100644
index 0000000..41aa41c
--- /dev/null
+++ b/objects/lore/hills/sg.gd
@@ -0,0 +1,6 @@
+extends HBoxContainer
+
+
+func _ready() -> void:
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $Panel/TextureRect.material.set_shader_param("palette", palette)
diff --git a/objects/lore/hills/sg.tscn b/objects/lore/hills/sg.tscn
new file mode 100644
index 0000000..c133ce9
--- /dev/null
+++ b/objects/lore/hills/sg.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://objects/lore/hills/sg_palette_lore.gd" type="Script" id=3]
+[ext_resource path="res://objects/lore/hills/sg.gd" type="Script" id=4]
+[ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=5]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 2 )]
+script = ExtResource( 4 )
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 5 )
+script = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "SG:
+born 07/15/2061, factory worker turned freedom fighter. despite their frailness they will do anything to
+change the future."
diff --git a/objects/lore/hills/sg_palette_lore.gd b/objects/lore/hills/sg_palette_lore.gd
new file mode 100644
index 0000000..61fabed
--- /dev/null
+++ b/objects/lore/hills/sg_palette_lore.gd
@@ -0,0 +1,5 @@
+extends TextureRect
+
+func _ready():
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ material.set_shader_param("palette", palette)
diff --git a/objects/lore/hills/speccy.tscn b/objects/lore/hills/speccy.tscn
new file mode 100644
index 0000000..737a7f5
--- /dev/null
+++ b/objects/lore/hills/speccy.tscn
@@ -0,0 +1,24 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/npc/speccy.png" type="Texture" id=2]
+
+[sub_resource type="AtlasTexture" id=1]
+atlas = ExtResource( 2 )
+region = Rect2( 3, 0, 20, 24 )
+margin = Rect2( 0, -2, 0, 0 )
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = SubResource( 1 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Speccy:
+born 04/23/2060, sg's british friend. he once had 9 shards of zircon ultima but had to split them into 45 rainbow stars to keep them from fami."
diff --git a/objects/lore/hills/verdant_hills.tscn b/objects/lore/hills/verdant_hills.tscn
new file mode 100644
index 0000000..c2a2d2c
--- /dev/null
+++ b/objects/lore/hills/verdant_hills.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/verdant_hills.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Verdant hills:
+It was once the most peaceful place in virginia, a beatiful stretch of nature that was corrupted by fami's evil deeds."
diff --git a/objects/lore/lab/famis_lab.tscn b/objects/lore/lab/famis_lab.tscn
new file mode 100644
index 0000000..1447444
--- /dev/null
+++ b/objects/lore/lab/famis_lab.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/famis_lab.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Fami's lab:
+The birthplace of all chimeras, fami's office is at the top of the lab. you must put an end to his ceaseless violence!"
diff --git a/objects/lore/lab/scope.tscn b/objects/lore/lab/scope.tscn
new file mode 100644
index 0000000..f8cfbc1
--- /dev/null
+++ b/objects/lore/lab/scope.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/cop/scope_idle.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Officer Scope:
+While not in the highest level of authority, scope is fami's most trusted famicop. they're close friends and seem to share the same weird ideas about the economy."
diff --git a/objects/lore/lab/sheriff.tscn b/objects/lore/lab/sheriff.tscn
new file mode 100644
index 0000000..cdd97d5
--- /dev/null
+++ b/objects/lore/lab/sheriff.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/cop/the_sheriff_idle.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 2 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "\"The sheriff\":
+THe most loyal famicop. He has no beliefs of his own and simply wants to work for whoever is in charge. people joke he is as old as time itself and will never die."
diff --git a/objects/lore/lore.tscn b/objects/lore/lore.tscn
new file mode 100644
index 0000000..b5dbf1b
--- /dev/null
+++ b/objects/lore/lore.tscn
@@ -0,0 +1,47 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=2]
+
+[node name="Lore" type="HBoxContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+theme = ExtResource( 1 )
+custom_constants/separation = 0
+
+[node name="Panel" type="PanelContainer" parent="."]
+margin_top = 77.0
+margin_right = 38.0
+margin_bottom = 115.0
+rect_min_size = Vector2( 38, 38 )
+size_flags_horizontal = 4
+size_flags_vertical = 4
+
+[node name="TextureRect" type="TextureRect" parent="Panel"]
+margin_left = 3.0
+margin_top = 3.0
+margin_right = 35.0
+margin_bottom = 35.0
+expand = true
+stretch_mode = 4
+
+[node name="Control" type="PanelContainer" parent="."]
+margin_left = 38.0
+margin_top = 76.0
+margin_right = 256.0
+margin_bottom = 116.0
+rect_min_size = Vector2( 0, 40 )
+rect_clip_content = true
+size_flags_horizontal = 3
+size_flags_vertical = 6
+
+[node name="Label" type="Label" parent="Control"]
+margin_left = 3.0
+margin_top = 8.0
+margin_right = 215.0
+margin_bottom = 31.0
+custom_fonts/font = ExtResource( 2 )
+text = "Test text
+"
+align = 1
+autowrap = true
diff --git a/objects/lore/mountain/echo_mountain.tscn b/objects/lore/mountain/echo_mountain.tscn
new file mode 100644
index 0000000..6af0e61
--- /dev/null
+++ b/objects/lore/mountain/echo_mountain.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/echo_mountain.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Echo mountain:
+One of the blue ridge mountains designated as a fake monument to the god of a parody religion. people used to drink and do weird drugs here."
diff --git a/objects/lore/mountain/rolling_fiend.tscn b/objects/lore/mountain/rolling_fiend.tscn
new file mode 100644
index 0000000..903388a
--- /dev/null
+++ b/objects/lore/mountain/rolling_fiend.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/enemy/rolling_fiend.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 16, 18 )
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Rolling Fiend:
+Half of an octopus augmented with horse hooves. They are programmed to \"love\" the feeling of bodies under their hooves."
diff --git a/objects/lore/rust/roboturret.tscn b/objects/lore/rust/roboturret.tscn
new file mode 100644
index 0000000..e19545f
--- /dev/null
+++ b/objects/lore/rust/roboturret.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/roboturret_lore.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 62.0
+margin_bottom = 130.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 65.0
+text = "Roboturret:
+A heat seeking turret that murders all who oppose it. It's powered by spray cheese cans."
diff --git a/objects/lore/rust/rolling_saw.tscn b/objects/lore/rust/rolling_saw.tscn
new file mode 100644
index 0000000..420a051
--- /dev/null
+++ b/objects/lore/rust/rolling_saw.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/enemy/sawblade.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = false
+
+[sub_resource type="AtlasTexture" id=2]
+atlas = ExtResource( 3 )
+region = Rect2( 0, 0, 12, 12 )
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = SubResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 68.0
+margin_bottom = 123.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 52.0
+text = "Rolling saw:
+A sharp diamond plated saw,
+rust inc. uses these to slay disobedient workers."
diff --git a/objects/lore/rust/rust_inc.tscn b/objects/lore/rust/rust_inc.tscn
new file mode 100644
index 0000000..1634584
--- /dev/null
+++ b/objects/lore/rust/rust_inc.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/rust_inc.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Rust inc.:
+A factory run by an evil corporation whose only purpose is creating rust and pollution to ruin the wonderful world we once had."
diff --git a/objects/lore/rust/tin.tscn b/objects/lore/rust/tin.tscn
new file mode 100644
index 0000000..b126476
--- /dev/null
+++ b/objects/lore/rust/tin.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/lore/tin_lore.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Tin:
+A security drone installed in grocery stores and workplaces to spy on the working class and take them out if they disobey fami's will."
diff --git a/objects/lore/station/dread_pd.tscn b/objects/lore/station/dread_pd.tscn
new file mode 100644
index 0000000..0eb0306
--- /dev/null
+++ b/objects/lore/station/dread_pd.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=1]
+[ext_resource path="res://graphics/lore/police_station.png" type="Texture" id=2]
+
+[node name="Lore" instance=ExtResource( 1 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+texture = ExtResource( 2 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Dread PD:
+Police station in Dreadericksburg, virginia. there's a metal cop head statue on the side of the building venerating the cruelest cop in virginia."
diff --git a/objects/lore/station/famicop.tscn b/objects/lore/station/famicop.tscn
new file mode 100644
index 0000000..a06dd3e
--- /dev/null
+++ b/objects/lore/station/famicop.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/enemy/cop/cop_shoot.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 55.0
+margin_bottom = 136.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 78.0
+text = "Famicop:
+These bastards are responsible for fami staying in power. Their prime objective is to protect fami's hoard of wealth."
diff --git a/objects/lore/station/msx.tscn b/objects/lore/station/msx.tscn
new file mode 100644
index 0000000..6421c98
--- /dev/null
+++ b/objects/lore/station/msx.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://objects/lore/lore.tscn" type="PackedScene" id=2]
+[ext_resource path="res://graphics/npc/msx_idle.png" type="Texture" id=3]
+
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[node name="Lore" instance=ExtResource( 2 )]
+
+[node name="TextureRect" parent="Panel" index="0"]
+material = SubResource( 1 )
+texture = ExtResource( 3 )
+
+[node name="Control" parent="." index="1"]
+margin_top = 49.0
+margin_bottom = 143.0
+
+[node name="Label" parent="Control" index="0"]
+margin_top = 3.0
+margin_bottom = 91.0
+text = "Ms. X:
+born 10/21/2062, she was locked up for such trivial crimes as shoplifting and marijuana possession. her reliance on drugs causes many issues in her life."
diff --git a/objects/npc/msx.gd b/objects/npc/msx.gd
new file mode 100644
index 0000000..dfbd744
--- /dev/null
+++ b/objects/npc/msx.gd
@@ -0,0 +1,116 @@
+extends KinematicBody2D
+
+export var hatch: NodePath
+
+var velocity = Vector2.ZERO
+var is_moving = false
+var is_holding_shard = true
+var has_respawned = false
+var first_lead = true
+var is_free = false
+onready var death_particles = $DeathSplatter
+onready var sprite = $Sprite
+onready var anims = $AnimationPlayer
+onready var raycast = $RayCast2D
+onready var respawn_raycast = $RespawnRaycast
+onready var shard_position = $Position2D
+onready var start_position = position
+onready var blink_timer = $BlinkTimer
+onready var text_anims = $TextAnim
+const shard = preload("res://objects/collectibles/shard.tscn")
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
+#DIALOGUE
+const here_take_this = preload("res://audio/sounds/msx_here_take_this.wav")
+const come_here = preload("res://audio/sounds/msx_come_here.ogg")
+const help_me = preload("res://audio/sounds/msx_help_me_get_outta_here.ogg")
+const fuck = preload("res://audio/sounds/msx_fuck.ogg")
+const fucking_cop = preload("res://audio/sounds/msx_fucking_cop.ogg")
+const goddammit = preload("res://audio/sounds/msx_goddammit.ogg")
+const motherfucker = preload("res://audio/sounds/msx_motherfucker.ogg")
+const shit = preload("res://audio/sounds/msx_shit.ogg")
+var death_sounds = [
+ Audio.a_msx_die,
+ fuck,
+ shit
+]
+
+func _ready():
+ raycast.add_exception($Hitbox)
+ blink_timer.start(rand_range(5.0,7.0))
+
+func _physics_process(delta):
+ if is_moving: velocity.x = -50
+ #Stop when see something
+ if raycast.is_colliding():
+ #stop behind sg
+ velocity.x = 0
+ if respawn_raycast.is_colliding():
+ #start moving again after respawning when seeing sg
+ if raycast.get_collider() != null:
+ if raycast.get_collider().is_in_group("player_hitbox"):
+ if first_lead == true:
+ Audio.play_sound(help_me,Audio.ac_voice)
+ text_anims.play("help me")
+ first_lead = false
+ is_moving = true
+ velocity.y += 128 * delta
+ velocity = move_and_slide_with_snap(velocity, Vector2.DOWN, Vector2.UP, true)
+ #Anims
+ if velocity.x == 0:
+ if !anims.get_current_animation() == "give" && !anims.get_current_animation() == "respawn" && !anims.get_current_animation() == "blink": anims.play("idle")
+ else:
+ anims.play("walk")
+ #Stop at the end of path and give shard
+ if position.x <= 80:
+ is_moving = false
+ velocity.x = 0
+ if is_holding_shard:
+ anims.play("give")
+
+func spawn_shard():
+ Audio.play_sound(here_take_this,Audio.ac_voice)
+ text_anims.play("here take this")
+ var ShardInstance = shard.instance()
+ ShardInstance.global_position = Vector2(shard_position.global_position.x,shard_position.global_position.y)
+ ShardInstance.number = 1
+ get_owner().add_child(ShardInstance)
+ is_holding_shard = false
+
+func switch_action():
+ Audio.play_sound(come_here,Audio.ac_voice)
+ text_anims.play("come here")
+ is_free = true
+
+func spray_blood():
+ for i in 16:
+ var spray = BloodSpray.instance()
+ spray.pause_mode = PAUSE_MODE_PROCESS
+ Physics2DServer.set_active(true)
+ spray.global_position = global_position
+ spray.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
+ spray.stains_player = false
+ get_parent().add_child(spray)
+
+func die():
+ #Create particles
+ remove_child(death_particles)
+ get_parent().add_child(death_particles)
+ death_particles.global_position = global_position
+ death_particles.emitting = true
+ spray_blood()
+ Audio.play_sound(death_sounds[randi() % death_sounds.size()],Audio.ac_voice)
+ is_moving = false
+ velocity.x = 0
+ position = start_position
+ anims.play("respawn")
+ has_respawned = true
+
+
+func _open_hatch() -> void:
+ get_node(hatch).play("open")
+
+
+func _on_BlinkTimer_timeout():
+ if anims.current_animation != "give":
+ anims.play("blink")
+ blink_timer.start(rand_range(5.0,7.0))
diff --git a/objects/npc/msx.tscn b/objects/npc/msx.tscn
new file mode 100644
index 0000000..1f41dd6
--- /dev/null
+++ b/objects/npc/msx.tscn
@@ -0,0 +1,776 @@
+[gd_scene load_steps=28 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://graphics/npc/msx_respawn.png" type="Texture" id=2]
+[ext_resource path="res://graphics/npc/msx_walk.png" type="Texture" id=3]
+[ext_resource path="res://graphics/npc/msx_blink.png" type="Texture" id=4]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=5]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=6]
+[ext_resource path="res://graphics/npc/msx_idle.png" type="Texture" id=11]
+[ext_resource path="res://scripts/snap_sprite.gd" type="Script" id=12]
+[ext_resource path="res://objects/npc/msx.gd" type="Script" id=13]
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=14]
+[ext_resource path="res://graphics/npc/msx_give.png" type="Texture" id=15]
+
+[sub_resource type="Animation" id=16]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ ExtResource( 15 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 2 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Dialogue/HereTakeThis:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Dialogue/ComeHere:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Dialogue/HelpMe:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Sprite:region_enabled")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Sprite:offset")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Sprite:region_rect")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Rect2( 0, 0, 40, 20 ) ]
+}
+tracks/9/type = "value"
+tracks/9/path = NodePath("CollisionShape2D:disabled")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/10/type = "value"
+tracks/10/path = NodePath("Hitbox/CollisionShape2D2:disabled")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "blink"
+length = 0.7
+step = 0.06
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 4 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 4 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.12, 0.24, 0.54, 0.66 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3, 0 ]
+}
+
+[sub_resource type="Animation" id=19]
+resource_name = "come here"
+length = 4.0
+step = 0.06
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 11 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 1 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Dialogue/ComeHere:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.06, 2.52 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[sub_resource type="Animation" id=15]
+resource_name = "give"
+length = 4.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 15 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 2 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.18, 0.48 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 0 ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath(".")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.18, 1.3, 2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"values": [ {
+"args": [ ],
+"method": "spawn_shard"
+}, {
+"args": [ ],
+"method": "_open_hatch"
+}, {
+"args": [ ],
+"method": "queue_free"
+} ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Sprite:offset")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 1.5, 1.6, 1.8, 2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, -6 ), Vector2( 0, 0 ), Vector2( 0, 10 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("CollisionShape2D:disabled")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 1.5 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Hitbox/CollisionShape2D2:disabled")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 1.5 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="Animation" id=20]
+resource_name = "help me"
+length = 3.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 3 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 4 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Dialogue/ComeHere:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.1 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Dialogue/HelpMe:visible")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0.1, 2.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "idle"
+length = 0.001
+step = 0.06
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 11 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 1 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Dialogue/ComeHere:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.06 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=17]
+resource_name = "respawn"
+length = 0.4
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3, 4, 5, 6, 7 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:texture")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 2 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:hframes")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 8 ]
+}
+
+[sub_resource type="Animation" id=9]
+resource_name = "walk"
+length = 0.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 3 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:hframes")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 4 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Sprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 1, 2, 3 ]
+}
+
+[sub_resource type="ShaderMaterial" id=10]
+resource_local_to_scene = true
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+
+[sub_resource type="RectangleShape2D" id=11]
+extents = Vector2( 2.5, 5 )
+
+[sub_resource type="CapsuleShape2D" id=14]
+radius = 2.5
+height = 5.0
+
+[sub_resource type="Curve" id=13]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[sub_resource type="Animation" id=21]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Dialogue/HelpMe:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Dialogue/HereTakeThis:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Dialogue/ComeHere:visible")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=23]
+resource_name = "come here"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Dialogue/ComeHere:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[sub_resource type="Animation" id=22]
+resource_name = "help me"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Dialogue/HelpMe:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Dialogue/ComeHere:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=24]
+resource_name = "here take this"
+length = 1.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Dialogue/HereTakeThis:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1.5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+
+[node name="MsX" type="KinematicBody2D"]
+script = ExtResource( 13 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+autoplay = "idle"
+anims/RESET = SubResource( 16 )
+anims/blink = SubResource( 18 )
+"anims/come here" = SubResource( 19 )
+anims/give = SubResource( 15 )
+"anims/help me" = SubResource( 20 )
+anims/idle = SubResource( 4 )
+anims/respawn = SubResource( 17 )
+anims/walk = SubResource( 9 )
+
+[node name="Sprite" type="Sprite" parent="."]
+material = SubResource( 10 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 15 )
+hframes = 2
+region_rect = Rect2( 0, 0, 40, 20 )
+script = ExtResource( 12 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox", "msx", "player_hitbox"]]
+position = Vector2( 0, 3 )
+collision_layer = 11
+collision_mask = 33
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="Hitbox"]
+position = Vector2( 0.5, 2 )
+shape = SubResource( 11 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 0.5, 5 )
+shape = SubResource( 14 )
+
+[node name="DeathSplatter" type="CPUParticles2D" parent="."]
+pause_mode = 2
+emitting = false
+amount = 16
+lifetime = 0.3
+one_shot = true
+explosiveness = 0.9
+local_coords = false
+texture = ExtResource( 14 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 13 )
+
+[node name="RayCast2D" type="RayCast2D" parent="."]
+position = Vector2( 0, 1 )
+enabled = true
+cast_to = Vector2( -32, 0 )
+collision_mask = 3
+collide_with_areas = true
+
+[node name="RespawnRaycast" type="RayCast2D" parent="."]
+position = Vector2( -16, 0 )
+enabled = true
+cast_to = Vector2( -56, 0 )
+collision_mask = 8
+collide_with_areas = true
+
+[node name="Position2D" type="Position2D" parent="."]
+position = Vector2( -17, 2 )
+__meta__ = {
+"_gizmo_extents_": 0.0
+}
+
+[node name="BlinkTimer" type="Timer" parent="."]
+
+[node name="TextAnim" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 21 )
+"anims/come here" = SubResource( 23 )
+"anims/help me" = SubResource( 22 )
+"anims/here take this" = SubResource( 24 )
+
+[node name="Dialogue" type="Node2D" parent="."]
+
+[node name="HereTakeThis" type="Label" parent="Dialogue"]
+visible = false
+material = ExtResource( 6 )
+margin_left = -48.0
+margin_top = -22.0
+margin_right = 57.0
+margin_bottom = 1.0
+theme = ExtResource( 5 )
+text = "Here, take this"
+align = 1
+
+[node name="ComeHere" type="Label" parent="Dialogue"]
+visible = false
+material = ExtResource( 6 )
+margin_left = -96.0
+margin_top = -22.0
+margin_right = 9.0
+margin_bottom = -8.0
+theme = ExtResource( 5 )
+text = "Hey, come here!"
+
+[node name="HelpMe" type="Label" parent="Dialogue"]
+visible = false
+material = ExtResource( 6 )
+margin_left = -76.0
+margin_top = -33.0
+margin_right = 8.0
+margin_bottom = -10.0
+theme = ExtResource( 5 )
+text = "Help me get
+outta here!"
+align = 1
+
+[connection signal="timeout" from="BlinkTimer" to="." method="_on_BlinkTimer_timeout"]
diff --git a/objects/npc/speccy.gd b/objects/npc/speccy.gd
new file mode 100644
index 0000000..982782f
--- /dev/null
+++ b/objects/npc/speccy.gd
@@ -0,0 +1,65 @@
+tool
+extends Node2D
+
+
+export(String, DIR) var messages_dir: String setget _set_messages_dir
+export var flip: bool = false setget _set_flip
+#export
+var message: String setget _set_message
+
+
+func _ready() -> void:
+ if Engine.editor_hint:
+ return
+
+ scale.x = 0.0
+ $Message.texture = load("%s/%s.png" % [messages_dir, message])
+
+
+func appear() -> void:
+ if Options.speccy_help:
+ $AnimationPlayer.play("fun")
+
+
+func switch_action() -> void:
+ appear()
+
+
+func _set_messages_dir(value: String) -> void:
+ messages_dir = value
+ property_list_changed_notify()
+
+
+func _set_message(value: String) -> void:
+ message = value
+ if not Engine.editor_hint:
+ return
+ $Message.texture = load("%s/%s.png" % [messages_dir, message])
+
+
+func _set_flip(value: bool) -> void:
+ flip = value
+ $Flipper.scale.x = -1.0 if flip else 1.0
+
+
+func _get_property_list() -> Array:
+ var files: String = ""
+ var dir: Directory = Directory.new()
+ if dir.open(messages_dir) == OK:
+ dir.list_dir_begin(true, true)
+ var file_name: String = dir.get_next()
+ while file_name != "":
+ if not dir.current_is_dir() and file_name.ends_with(".png"):
+ files += "%s," % file_name.trim_suffix(".png")
+ file_name = dir.get_next()
+ files = files.trim_suffix(",")
+ else:
+ push_error("Failed to open dir: %s" % messages_dir)
+ return [
+ {
+ name = "message",
+ type = TYPE_STRING,
+ hint = PROPERTY_HINT_ENUM,
+ hint_string = files,
+ }
+ ]
diff --git a/objects/npc/speccy.tscn b/objects/npc/speccy.tscn
new file mode 100644
index 0000000..3b2f0b6
--- /dev/null
+++ b/objects/npc/speccy.tscn
@@ -0,0 +1,263 @@
+[gd_scene load_steps=13 format=2]
+
+[ext_resource path="res://graphics/npc/speccy.png" type="Texture" id=1]
+[ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=2]
+[ext_resource path="res://graphics/enemy/boss/stg_2600/beam_gradient.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/speccy/over_here.png" type="Texture" id=4]
+[ext_resource path="res://graphics/npc/speccy_talk.png" type="Texture" id=5]
+[ext_resource path="res://graphics/npc/speccy_cool.png" type="Texture" id=6]
+[ext_resource path="res://objects/npc/speccy.gd" type="Script" id=7]
+[ext_resource path="res://audio/sounds/oi_sg.ogg" type="AudioStream" id=8]
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 2 )
+shader_param/cycle_speed = 4.0
+shader_param/gradient = ExtResource( 3 )
+
+[sub_resource type="Animation" id=1]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Flipper/Sprite:scale")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Flipper/Sprite/Overlay:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Message:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Flipper/Sprite:hframes")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 1 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Flipper/Sprite:texture")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath(".:scale")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("OiSG:playing")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("OiSG:stream_paused")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 6 )
+region = Rect2( 72, 0, 24, 24 )
+
+[sub_resource type="Animation" id=2]
+resource_name = "fun"
+length = 4.0
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Flipper/Sprite:scale")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 0.6, 3.3, 3.4, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8, 3.85, 3.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1e-05, 1 ), Vector2( 0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( -0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( 0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( -0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( 1.25, 0.833 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1.25, 0.833 ), Vector2( 1e-05, 1 ), Vector2( -0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( 0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( -0.75, 1 ), Vector2( 1e-05, 1 ), Vector2( 0.75, 1 ), Vector2( 1e-05, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Flipper/Sprite/Overlay:modulate")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.5, 0.6, 3.3, 3.4, 3.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Message:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.8, 0.9, 1, 2.95, 3.05, 3.15 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 1e-05, 1e-05 ), Vector2( 1.0418, 1 ), Vector2( 1, 0.96 ), Vector2( 1, 0.96 ), Vector2( 1.0418, 1 ), Vector2( 1e-05, 1e-05 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Flipper/Sprite:texture")
+tracks/3/interp = 2
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.75, 0.85, 1.4, 1.55, 1.75, 1.9, 2.05, 2.9 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ), ExtResource( 1 ), ExtResource( 5 ), ExtResource( 1 ), ExtResource( 5 ), ExtResource( 1 ), ExtResource( 5 ), ExtResource( 1 ), ExtResource( 6 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Flipper/Sprite:hframes")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 2.9 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ 1, 4 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Flipper/Sprite:frame")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 2.9, 2.95, 3, 3.05 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0, 0, 1, 2, 3 ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Flipper/Sprite/Overlay:texture")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0, 3.3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ ExtResource( 1 ), SubResource( 4 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath(".:scale")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 1, 1 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("OiSG:playing")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0, 0.85, 2.4 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 2,
+"values": [ false, true, false ]
+}
+
+[node name="Speccy" type="Node2D"]
+script = ExtResource( 7 )
+messages_dir = "res://graphics/hud/speccy"
+message = "over_here"
+
+[node name="Flipper" type="Node2D" parent="."]
+
+[node name="Sprite" type="Sprite" parent="Flipper"]
+position = Vector2( -1, -12 )
+texture = ExtResource( 1 )
+offset = Vector2( -1, 0 )
+
+[node name="Overlay" type="Sprite" parent="Flipper/Sprite"]
+modulate = Color( 1, 1, 1, 0 )
+material = SubResource( 3 )
+texture = ExtResource( 1 )
+offset = Vector2( 1, 0 )
+region_rect = Rect2( 1.015, 0, 0, 0 )
+
+[node name="Message" type="Sprite" parent="."]
+position = Vector2( 0, -24 )
+texture = ExtResource( 4 )
+
+[node name="OiSG" type="AudioStreamPlayer" parent="."]
+stream = ExtResource( 8 )
+stream_paused = true
+bus = "sound"
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 1 )
+anims/fun = SubResource( 2 )
diff --git a/objects/player/arrow_projectile.gd b/objects/player/arrow_projectile.gd
index 4e8ea05..8f51b59 100644
--- a/objects/player/arrow_projectile.gd
+++ b/objects/player/arrow_projectile.gd
@@ -1,33 +1,50 @@
extends Node2D
-export var speed = 240.0
+# "block" graphic
+const BlockText := preload("res://objects/hud/blocktext.tscn")
+
+
+# speed to fly at
+export var speed: float = 240.0
# group to kill
-var target_group = "enemy_hitbox"
+export var target_group: String = "enemy_hitbox"
# direction to fly
-var direction = 1.0
+export var direction: float = 1.0
+# whether or not it frees on wall collision
+export var breaks_on_wall: float = true
+
#Edge to check culling, if this edge is offscreen, delete the arrow
-onready var cull_edge = Vector2(5 * direction,0)
-onready var player = get_parent().get_node("Player")
-onready var initial_sector = Game.current_sector
+onready var cull_edge := Vector2(5.0 * direction, 0.0)
+onready var initial_sector: Vector2 = Game.current_sector
+
func _ready():
+ if target_group == "enemy_hitbox":
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ $Sprite.material.set_shader_param("palette", palette)
#Flip depending on direction
scale.x = direction
+
func _physics_process(delta):
#Move in right direction
position.x += speed * direction * delta
#Delete when offscreen
if Game.get_sector(global_position + cull_edge) != initial_sector:
+ _persist_trail()
queue_free()
+
#Wall Collision
func _on_Hitbox_body_entered(body):
- if body is TileMap or body is StaticBody2D:
- _make_sparks()
- queue_free()
+ if breaks_on_wall:
+ if body is TileMap or body is StaticBody2D or body.is_in_group("stop_arrow"):
+ _make_sparks()
+ _persist_trail()
+ queue_free()
+
# kill entity if in target group
func _on_Hitbox_area_entered(area):
@@ -37,33 +54,42 @@ func _on_Hitbox_area_entered(area):
# create block text and return if blocked
if area.is_in_group("blocks_arrow"):
var pos = target.global_position
- Game.instance_node(Game.block_text, pos.x, pos.y, target.get_parent())
+ Game.instance_node(BlockText, pos.x, pos.y, target.get_parent())
_make_sparks()
else:
# kill targeted node
target.die()
#decrease arrows if enemy killed
if target_group == "enemy_hitbox":
- Game.arrows = max(0, Game.arrows - 1) # clamp arrows above 0
+ Game.arrows = max(0, Game.arrows - 1) as int # clamp arrows above 0
+ _persist_trail()
queue_free()
elif area.is_in_group("arrow"):
_make_sparks()
+ _persist_trail()
queue_free()
-func _exit_tree():
- # make sure particles node sticks around until particles decay
- var particles = $DustParticles
- remove_child(particles)
- get_parent().add_child(particles)
- particles.global_position = global_position
- particles.emitting = false
- get_tree().create_timer(particles.lifetime, false).connect("timeout", particles, "queue_free")
+
+func _persist_trail():
+ # don't do this twice to prevent crash
+ if not is_queued_for_deletion():
+ # make particles a sibling so it lives a bit longer than arrow
+ var particles = $DustParticles
+ remove_child(particles)
+ get_parent().add_child(particles)
+ particles.global_position = global_position
+ particles.emitting = false
+ # free particles once they have gone through their lifetime
+ get_tree().create_timer(particles.lifetime, false).connect("timeout", particles, "queue_free")
+
func _make_sparks():
- var particles = $SparkParticles
- remove_child(particles)
- particles.global_position = global_position + particles.position * scale.x
- particles.emitting = true
- get_parent().add_child(particles)
- var timer = get_tree().create_timer(particles.lifetime, false)
- timer.connect("timeout", particles, "queue_free")
+ # don't do this twice to prevent crash
+ if not is_queued_for_deletion():
+ var particles = $SparkParticles
+ remove_child(particles)
+ particles.global_position = global_position + particles.position * scale.x
+ particles.emitting = true
+ get_parent().add_child(particles)
+ var timer = get_tree().create_timer(particles.lifetime, false)
+ timer.connect("timeout", particles, "queue_free")
diff --git a/objects/player/arrow_projectile.tscn b/objects/player/arrow_projectile.tscn
index 54d3f9f..2b5471a 100644
--- a/objects/player/arrow_projectile.tscn
+++ b/objects/player/arrow_projectile.tscn
@@ -1,14 +1,16 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=10 format=2]
-[ext_resource path="res://scripts/1px_border.gdshader" type="Shader" id=1]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=1]
[ext_resource path="res://graphics/player/arrow.png" type="Texture" id=2]
[ext_resource path="res://objects/player/arrow_projectile.gd" type="Script" id=3]
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=4]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=5]
-[sub_resource type="ShaderMaterial" id=1]
+[sub_resource type="ShaderMaterial" id=7]
shader = ExtResource( 1 )
shader_param/border_color = Color( 0, 0, 0, 1 )
-shader_param/border_corners = true
+shader_param/border_corners = false
+shader_param/palette = ExtResource( 5 )
[sub_resource type="Curve" id=3]
_data = [ Vector2( 0, 1 ), 0.0, -0.139481, 0, 0, Vector2( 1, 0 ), -2.82064, 0.0, 0, 0 ]
@@ -20,10 +22,11 @@ extents = Vector2( 5.5, 3.5 )
_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
[node name="ArrowProjectile" type="Node2D"]
+z_index = 1
script = ExtResource( 3 )
[node name="Sprite" type="Sprite" parent="."]
-material = SubResource( 1 )
+material = SubResource( 7 )
z_index = -1
texture = ExtResource( 2 )
@@ -46,6 +49,7 @@ scale_amount_random = 0.25
scale_amount_curve = SubResource( 3 )
[node name="Hitbox" type="Area2D" parent="." groups=["arrow"]]
+collision_mask = 5
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
position = Vector2( -0.5, -0.5 )
diff --git a/objects/player/player.gd b/objects/player/player.gd
index 26eb466..22b8818 100644
--- a/objects/player/player.gd
+++ b/objects/player/player.gd
@@ -1,351 +1,604 @@
extends KinematicBody2D
+# SIGNALS #
+signal died()
+signal teleport_finished()
+
+# CONSTANTS #
const ArrowProjectile = preload("res://objects/player/arrow_projectile.tscn")
+const DeathSplatter = preload("res://objects/player/player_death_particles.tscn")
+const SplashParticles = preload("res://objects/environment/splash/splash_particles.tscn")
+const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
-##CLEAN UP CODE LATER
-##Children
-onready var sprite = $Sprite
-onready var climb_ray = $ClimbRay
-onready var anims = $AnimationPlayer
-onready var sword_sprite = $SwordSprite
-onready var sword_hitbox = $SwordArea
-onready var death_particles = $DeathSplatter
-onready var dust_particles = $DustParticles
-#Map
-onready var map = get_owner()
-##States
-enum State {IDLE,WALK,JUMP,FALL,STUNNED,CLIMB,SWORD,SHOOT,INACTIVE,TRANSPORT}
-var current_state = State.IDLE
-##Runtime
-var axis = Vector2.ZERO #Current direction being held
-var trail_color = Color(0.25,0,1,0.4)
- #Physics
-var velocity = Vector2.ZERO
-var walk_speed = 50
-var gravity = 12
-var jump_pressure = 0
-var jump_force = 150
-var doublejump_force = 122
-var current_ladder = null #Used for checking climbing every frame instead of area entered
-var can_doublejump = true
-var can_move_in_air = false
-var transport_speed = 0.0
-var transport_direction = Vector2.ZERO
- #Positions
-var arrowpos = Vector2(5,3)
-##Preload
+# EXPORTS #
+## whether to be temporarily invulnerable after respawning
+export var use_iframes: bool = false
+## horizontal movement speed
+export var walk_speed: float = 50.0
+## frames until walk speed peak (at 60fps reference)
+export var walk_acceleration_frames: float = 1.0
+## speed to push pushable objects at
+export var push_speed: float = 25.0
+## climbing speed
+export var climb_speed: float = 39.0
+## gravity force
+export var gravity: float = 720.0
+## SG's terminal velocity
+export var max_fall_speed: float = 255.0
+## upward added by jump
+export var jump_force: float = 150.0
+## proportion of remaining force retained when jump is released
+export var jump_release_force: float = 0.25
+## impulse added when double jumping
+export var double_jump_force: float = 122.0
+## if on turn on oxygentimer to kill player
+export var underwater = false
+## old player controls
+export var beta_gameplay = false
-#Set initial respawn point
-func _ready():
+# velocity
+var velocity: Vector2 = Vector2.ZERO
+# current falling speed
+var current_fall_speed: float = 0.0
+# snap vector
+var snap: Vector2 = Vector2.ZERO
+# ladder currently attached to
+var _attached_ladder: Node2D = null
+# whether to skip blood splatter for this death
+var skip_blood: bool = false
+#whether sg has landed before
+var first_land = true
+
+var can_shield = true
+
+
+# NODE REFERENCES #
+onready var state_chart: StateChart = $StateChart
+onready var animation_player: AnimationPlayer = $AnimationPlayer
+onready var graphics: Node2D = $Graphics
+onready var sprite: Sprite = $"%Sprite"
+onready var arrow_position: Position2D = $"%ArrowPosition"
+onready var dust_particles: CPUParticles2D = $"%DustParticles"
+onready var grounded_shape: CollisionShape2D = $"%GroundedShape"
+onready var airborne_shape: CollisionShape2D = $"%AirborneShape"
+onready var ladder_detector: RayCast2D = $"%LadderDetector"
+onready var death_splatter_position: Position2D = $"%DeathSplatterPosition"
+onready var pushable_detector: RayCast2D = $"%PushableDetector"
+onready var oxygen_timer = $OxygenTimer
+onready var low_oxygen_label = $"%LowOxygenLabel"
+onready var edge_detector = $Graphics/EdgeDetector
+onready var body_shape: CollisionShape2D = $"%BodyShape"
+onready var cfox: Sprite = $"%CFox"
+onready var hitbox: Area2D = $"%Hitbox"
+
+# OVERRIDES #
+func _ready() -> void:
+ Game.can_restart = true
+ #set palette
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ sprite.material.set_shader_param("palette", palette)
+ $"%CFox".material.set_shader_param("palette", palette)
+ $"%DissolveParticles".material.set_shader_param("palette", palette)
+ if Game.current_palette == "super_player":
+ $"%Sparkles".visible = true
+
+ # death handling
Game.respawn_point = global_position
+ connect("died", Game, "_on_player_died")
+ # to detect floor on first frame
+ move_and_slide(Vector2(0.0, 1.0), Vector2.UP)
+ # make certain pushable detector will not detect player
+ pushable_detector.add_exception(self)
+ # set up state chart
+ state_chart.initialize()
+ state_chart.set_guard_property("can_respawn", true)
+ state_chart.set_guard_property("use_iframes", use_iframes)
+ state_chart.set_guard_property("red_feather", false)
+ state_chart.set_guard_property("beta_gameplay", beta_gameplay)
+ # state chart debug
+ $StateDebugLayer/StateChartDebug.target = state_chart
+ # set lung size
+ if Game.difficulty == Game.Difficulty.SWEET:
+ oxygen_timer.set_wait_time(25)
+ if Game.difficulty == Game.Difficulty.PUNGENT:
+ oxygen_timer.set_wait_time(15)
+ oxygen_timer.start()
-func _physics_process(delta):
- if current_state == State.INACTIVE:
- return
- axis = Vector2(Input.get_axis("ui_left","ui_right"),Input.get_axis("ui_up","ui_down"))
- #Check ladder
- check_ladder()
- match current_state:
- State.IDLE:
- _process_idle()
- continue
- State.WALK:
- _process_walk()
- continue
- State.IDLE, State.WALK:
- _process_idle_walk()
- continue
- State.JUMP:
- _process_jump()
- continue
- State.FALL:
- _process_fall()
- continue
- State.JUMP, State.FALL:
- _process_jump_fall()
- continue
- State.CLIMB:
- _process_climb()
- continue
- State.SWORD:
- _process_sword()
- continue
- State.SHOOT:
- _process_shoot()
- continue
- State.TRANSPORT:
- _process_transport(delta)
- return
+func _physics_process(delta: float) -> void:
+ # snap sprite
+ sprite.global_position = graphics.global_position.round() + Vector2(0.0, -10.0)
+ # update transition guard properties
+ # whether player can currently shoot an arrow
+ var can_shoot = Game.arrows > 0 and get_tree().get_nodes_in_group("player_arrow").size() == 0
+ state_chart.set_guard_property("can_shoot", can_shoot)
+
+ # check for and propagate input events
+ if Input.is_action_just_pressed("shoot"): # shooting
+ state_chart.send_event("shoot")
+ elif Input.is_action_just_pressed("jump"): # jumping
+ state_chart.send_event("jump")
+ if Input.is_action_pressed("move_down"):
+ state_chart.send_event("duck_pressed")
+ if Input.is_action_just_released("move_down"):
+ state_chart.send_event("duck_released")
+ if Input.is_action_just_pressed("shield") && Game.can_use_shield == true:
+ if can_shield:
+ Audio.play_sound(Audio.a_shield,Audio.ac_die)
+ $ShieldTimer.start()
+ $ShieldCooldown.start()
+ $Shield.visible = true
+ $"%AirborneShape".disabled = true
+ $"%GroundedShape".disabled = true
+ can_shield = false
+
- #Gravity
- if current_state != State.CLIMB:
- velocity.y += gravity
- #Cut y velocity when hitting ceiling
- if is_on_ceiling():
- current_state = State.FALL
- position.y += 1
- velocity.y = 0
- #Apply velocity
- move_and_slide(velocity,Vector2.UP)
-
-func _process_idle():
- if anims.get_current_animation() != "idle": anims.play("idle")
- #Stop
- velocity.x = 0
- #Goto Walk
- if axis.x != 0: current_state = State.WALK
-
-func _process_walk():
- if anims.get_current_animation() != "walk": anims.play("walk")
- #Move
- move(walk_speed,0,true)
- #Goto Idle
- if axis.x == 0: current_state = State.IDLE
- #Push Blocks
- for i in get_slide_count():
- var collision = get_slide_collision(i)
- if collision.get_collider().is_in_group("pushable"):
- collision.get_collider().push(collision.normal)
-func _process_idle_walk():
- can_doublejump = false
- can_move_in_air = false
- velocity.y = 0
- #Goto Fall
- if !is_on_floor(): current_state = State.FALL
- #Goto Jump
- check_jump()
- #Goto Sword
- if Debug.allow_sword && Input.is_action_just_pressed("sword"):
- Game.play_sound(Game.a_sword,Game.ac_jump)
- current_state = State.SWORD
- return
- #Goto Shoot
- check_shoot()
-
-func _process_jump():
- jump_pressure += 1
- #Pressure sensitive jump
- if jump_pressure == 15 or Input.is_action_just_released("jump"):
- velocity.y = -jump_force / 4
- #velocity.y = 0
- current_state = State.FALL
-
-func _process_fall():
- if anims.get_current_animation() != "doublejump": anims.play("jump")
- #Return to idle
- if is_on_floor():
- current_state = State.IDLE
- return
- #Cant move in air
- if !can_move_in_air: velocity.x = 0
-
-func _process_jump_fall():
- check_double_jump()
- move(walk_speed,0,true)
- #Goto Shoot
- check_shoot()
-
-func _process_climb():
- can_move_in_air = true
- can_doublejump = true
- #Graphics
- anims.play("climb")
- anims.set_speed_scale(abs(axis.y))
- #Climb
- position.y += axis.y * 0.65
- #Sound
- if axis.y == -1:
- if Game.ac_climb.get_stream() != Game.a_climb_up: Game.play_sound(Game.a_climb_up,Game.ac_climb)
- if axis.y == 1:
- if Game.ac_climb.get_stream() != Game.a_climb_down: Game.play_sound(Game.a_climb_down,Game.ac_climb)
- if axis.y == 0: Game.ac_climb.set_stream(null)
- #Manual Jump,, only works when holding neutral or away from ladder
- if axis.x != sprite.scale.x && Input.is_action_just_pressed("jump"):
- position.x -= sprite.scale.x * 3
- velocity.y = -jump_force
- anims.set_speed_scale(1)
- current_state = State.FALL
- Game.ac_climb.set_stream(null)
- return
- if climb_ray.get_collider() == null:
- if axis.y == -1:
- #Auto Jump
- velocity.y = -jump_force
- Game.play_sound(Game.a_jump,Game.ac_jump)
- #Auto dismount
- Game.ac_climb.set_stream(null)
- current_state = State.FALL
- return
- #Side dismount
- if axis.x != sprite.scale.x && Input.is_action_just_pressed("shoot"):
- position.x -= sprite.scale.x * 3
- current_state = State.FALL
- anims.set_speed_scale(1)
- Game.ac_climb.set_stream(null)
- return
-
-
-func _process_sword():
- anims.play("stab")
- #Stop
- velocity.x = 0
- sword_sprite.scale.x = sprite.scale.x
- #Move hitbox with flip
- sword_hitbox.position.x = sprite.scale.x * 10
- #Return to idle after animationplayer end anim signal
-
-func _process_shoot():
- #Stop
- velocity.x = 0
- if anims.get_current_animation() == "shoot air":
- #Cancel air shoot animation when grounded
- if is_on_floor():
- current_state = State.IDLE
- return
- move(walk_speed,0,true)
-
-func _process_transport(delta):
- position += transport_direction * transport_speed * delta
-
-func spawn_arrow():
- Game.play_sound(Game.a_shoot,Game.ac_jump)
- var arrow = ArrowProjectile.instance()
- arrow.global_position = Vector2(
- global_position.x + arrowpos.x * sprite.scale.x,
- global_position.y + arrowpos.y
- )
- arrow.direction = sprite.scale.x
- arrow.add_to_group("player_arrow")
- map.add_child(arrow)
-
-func check_jump():
- if Input.is_action_just_pressed("jump"):
- #Detach ladder
- if current_state == State.CLIMB:
- Game.ac_climb.set_stream(null) # stop climb sound
- position.x -= sprite.scale.x * 3
- else:
- dust_particles.restart()
- anims.set_speed_scale(1)
- # Jump
- can_doublejump = true
- can_move_in_air = true
- velocity.y = 0
- jump_pressure = 0
- current_state = State.JUMP
- Game.play_sound(Game.a_jump,Game.ac_jump)
- anims.play("jump")
- velocity.y = -jump_force
- move(walk_speed,0,true)
-
-func check_double_jump():
- if Input.is_action_just_pressed("jump") && can_doublejump:
- Game.play_sound(Game.a_doublejump,Game.ac_jump)
- can_doublejump = false
- velocity.y = -doublejump_force
- anims.play("doublejump")
-
-func check_shoot():
- #Only Shoot if have arrows and there are no arrows onscreen
- if Input.is_action_just_pressed("shoot") && Game.arrows > 0 && get_tree().get_nodes_in_group("player_arrow").size() == 0:
- current_state = State.SHOOT
- if is_on_floor():
- anims.play("shoot grounded")
- else:
- anims.play("shoot air") #Shoot immediately in air
-
-func move(hsp,vsp,flip:bool):
- if is_on_floor() or can_move_in_air:
- velocity.x = hsp * axis.x
- #Flip
- if flip: if sign(axis.x) != 0: sprite.scale.x = axis.x
-
-func check_ladder():
- if climb_ray.get_collider() != null:
- current_ladder = climb_ray.get_collider().get_parent()
- #Stop the velocity
- velocity = Vector2.ZERO
- #Snap to closest side
- if position.x < current_ladder.middle:
- position.x = current_ladder.left_snap.global_position.x
- sprite.scale.x = 1
- else:
- position.x = current_ladder.right_snap.global_position.x
- sprite.scale.x = -1
- #Start Climbing
- current_state = State.CLIMB
- #Move the raycast
- #climb_ray.position.x = 4 * sprite.scale.x
-
-func enter_transport(speed, direction):
- transport_speed = speed
- transport_direction = direction
- current_state = State.TRANSPORT
- can_doublejump = false
- anims.play("doublejump")
-
-func exit_transport():
- current_state = State.FALL
-
-func die():
- Game.ac_climb.set_stream(null) # stop climbing sound
- if current_state == State.INACTIVE:
- return
- var new_particles = death_particles.duplicate()
- get_parent().add_child(new_particles)
- new_particles.global_position = global_position
- new_particles.emitting = true
- sprite.visible = false
- current_state = State.INACTIVE
- position = Game.respawn_point
- Game.lives -= 1
- if Game.lives < 0:
- new_particles.amount = 64
- new_particles.lifetime = 0.45
- new_particles.speed_scale = 1.5
- current_state = State.INACTIVE
- Game.play_sound(Game.a_gover, Game.ac_die)
- var time_tween = get_tree().create_tween()
- time_tween.tween_property(Engine, "time_scale", 0.1, 0.3)
- Game.ac_music.stop()
- yield(time_tween, "finished")
- yield(get_tree().create_timer(1.0 * 0.1), "timeout")
- Game.call_deferred("restart_level")
+ # send relevant events
+ if is_on_floor(): # check on floor status
+ state_chart.send_event("grounded")
else:
- Game.play_sound(Game.a_die, Game.ac_die)
- yield(Game.freeze_frame(0.3), "timeout")
- current_state = State.IDLE
- sprite.visible = true
+ state_chart.send_event("airborne")
+
+ # check if in contact with ladder
+ if ladder_detector.is_colliding():
+ state_chart.send_event("ladder_touched")
+
+ # show oxygen count on low oxygen
+ if underwater:
+ if oxygen_timer.time_left < 5:
+ low_oxygen_label.text = str(floor(oxygen_timer.time_left) + 1)
+ set_underwater_audio(true)
+ else:
+ low_oxygen_label.text = ""
+ set_underwater_audio(false)
+ else:
+ #NOT UNDERWATER
+ low_oxygen_label.text = ""
-func _on_AnimationPlayer_animation_finished(anim_name):
- if current_state == State.INACTIVE:
- return
- #Return to idle after slash
- if anim_name == "stab":
- current_state = State.IDLE
- return
- #Return to idle after grounded shoot
- if anim_name == "shoot grounded":
- current_state = State.IDLE
- return
- #Return to fall or idle after air shoot
- if anim_name == "shoot air":
+
+# HELPER FUNCTIONS #
+## spawns an arrow
+func spawn_arrow() -> void:
+ var arrow = ArrowProjectile.instance()
+ arrow.global_position = arrow_position.global_position
+ arrow.direction = sign(arrow_position.global_position.x - global_position.x)
+ arrow.add_to_group("player_arrow")
+ get_parent().add_child(arrow)
+ Audio.play_sound(Audio.a_shoot, Audio.ac_jump)
+
+func die() -> void:
+ state_chart.send_event("hurt")
+
+func zap() -> void:
+ state_chart.send_event("zapped")
+
+func set_underwater_audio(value):
+ var idx = AudioServer.get_bus_index("Master")
+ AudioServer.set_bus_effect_enabled(idx,0,value)
+ AudioServer.set_bus_effect_enabled(idx,1,value)
+
+func get_stick_input(axis):
+ var inp = Input.get_joy_axis(0,axis)
+ if abs(inp) >= 0.5:
+ return sign(inp)
+ else:
+ return 0
+
+func reset_fall_speed():
+ current_fall_speed = 0
+
+# STATE ENTERS/EXITS #
+func _on_Grounded_state_entered() -> void:
+ # still jump if pressed frame hit ground
+ if Input.is_action_just_pressed("jump"):
+ state_chart.send_event("jump")
+ # toggle hurtbox shapes
+ grounded_shape.disabled = false
+ airborne_shape.disabled = true
+ snap.y = 2.5 # snap when in grounded state
+ velocity.y = 1.0
+ if first_land:
+ first_land = false
+ else:
+ #Landing sound
+ Audio.play_sound(Audio.a_land,Audio.ac_land)
+ #Landing Rumble
+ var intensity = inverse_lerp(0.0, max_fall_speed, current_fall_speed)
+ intensity = min(intensity * 1.1,1.0)
+ Input.start_joy_vibration(0, 1.0, intensity, 0.05)
+
+func _on_Still_state_entered() -> void:
+ animation_player.play("idle")
+
+func _on_Walking_state_entered() -> void:
+ animation_player.play("walk")
+
+func _on_Blinking_state_entered() -> void:
+ if $"%Blinking".active:
+ animation_player.play("blink")
+ var blink_timer = get_tree().create_timer(rand_range(1.0, 2.0), false)
+ blink_timer.connect("timeout", self,"_on_Blinking_state_entered")
+
+func _on_Stimming_state_entered() -> void:
+ animation_player.play("stim")
+
+func _on_Ducking_state_entered():
+ velocity.x = 0
+ animation_player.play("duck")
+
+func _on_Pushing_state_entered() -> void:
+ animation_player.play("push")
+
+func _on_Airborne_state_entered() -> void:
+ grounded_shape.disabled = true
+ airborne_shape.disabled = false
+ snap.y = 0.0 # do not snap when in air
+ velocity.y = 0.0
+
+func _on_NormalJump_state_entered() -> void:
+ velocity.y = -jump_force
+ Audio.play_sound(Audio.a_jump, Audio.ac_jump)
+ animation_player.play("jump")
+ dust_particles.restart()
+
+func _on_NormalJump_state_exited() -> void:
+ # add bit of force proportional to how much of the jump is left
+ if Input.is_action_just_released("jump"):
+ var factor = inverse_lerp(0.0, -jump_force, velocity.y)
+ velocity.y = -jump_force * factor * jump_release_force
+
+func _on_LadderJump_state_entered() -> void:
+ velocity.y = -jump_force
+ Audio.play_sound(Audio.a_jump, Audio.ac_jump)
+ animation_player.play("ladder_jump")
+
+func _on_DoubleJump_state_entered() -> void:
+ velocity.y = -double_jump_force
+ Audio.play_sound(Audio.a_doublejump, Audio.ac_jump)
+ animation_player.play("double_jump")
+
+func _on_CoyoteFalling_state_entered() -> void:
+ global_position.y += 1.0
+ velocity.x = 0.0
+ animation_player.play("fall")
+
+func _on_NormalFalling_state_entered() -> void:
+ animation_player.play("fall")
+
+func _on_ScaredFalling_state_entered() -> void:
+ velocity.x = 0.0
+ animation_player.play("fall_scared")
+
+func _on_Shooting_state_entered() -> void:
+ velocity.x = 0.0
+ animation_player.play("shoot_grounded")
+
+func _on_AirShooting_state_entered() -> void:
+ spawn_arrow()
+ animation_player.play("shoot_airborne")
+
+func _on_Climbing_state_entered() -> void:
+ if ladder_detector.get_collider().is_in_group("ladder"):
+ _attached_ladder = ladder_detector.get_collider()
+ # move a tiny bit up if on ground to detach from falling blocks
if is_on_floor():
- current_state = State.IDLE
- return
- else:
- current_state = State.FALL
- return
+ global_position.y -= get("collision/safe_margin")
+ velocity = Vector2.ZERO
+ snap = Vector2.ZERO
+ var input_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+ var ladder_dir = sign(_attached_ladder.middle - global_position.x)
+ var flip = global_position.y - 1.0 <= _attached_ladder.global_position.y and input_dir == ladder_dir and is_on_floor()
+ if (ladder_dir >= 0.0 != flip or not _attached_ladder.can_climb_right) and _attached_ladder.can_climb_left:
+ global_position.x = _attached_ladder.left_snap
+ graphics.scale.x = 1.0
+ animation_player.play("climb")
+ elif _attached_ladder.can_climb_right:
+ global_position.x = _attached_ladder.right_snap
+ graphics.scale.x = -1.0
+ animation_player.play("climb")
+
+func _on_Climbing_state_exited() -> void:
+ _attached_ladder = null
+ animation_player.playback_speed = 1.0 # restore playback speed
+ Audio.ac_climb.stream = null # stop audio
+
+# all the stuff that happens when they DIE
+func _on_Dead_state_entered() -> void:
+ if Debug.fast_punishment > 0:
+ Engine.time_scale += .05 * Debug.fast_punishment
+ # send signals
+ emit_signal("died")
+ state_chart.send_event("died")
+ Input.start_joy_vibration(0,1,1,0.2)
+ # spawn death particles
+ if not skip_blood:
+ var particles = DeathSplatter.instance()
+ particles.global_position = death_splatter_position.global_position
+ particles.emitting = true
+ get_parent().add_child(particles)
+ for i in 16:
+ var spray = BloodSpray.instance()
+ spray.pause_mode = PAUSE_MODE_PROCESS
+ Physics2DServer.set_active(true)
+ spray.global_position = death_splatter_position.global_position
+ spray.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
+ spray.stains_player = false
+ get_parent().add_child(spray)
+ else:
+ skip_blood = false
+ # fade into the ether
+ graphics.visible = false
+ state_chart.send_event("respawn")
+ #refill oxygen
+ oxygen_timer.start()
+
+func _on_Drowning_state_entered() -> void:
+# state_chart.send_event("died")
+ velocity = Vector2.ZERO
+ animation_player.call_deferred("play", "drown")
+
+func _on_Respawn_state_entered() -> void:
+ global_position = Game.respawn_point
+ graphics.visible = true
+
+func _on_Appearing_state_entered() -> void:
+ global_position = Game.respawn_point
+ animation_player.play("respawn")
+
+func _on_Edge_state_entered():
+ animation_player.play("edge")
+
+func _on_Inactive_state_entered() -> void:
+ velocity = Vector2.ZERO
+ body_shape.disabled = true
+ hitbox.monitorable = false
+ hitbox.monitoring = false
+
+func _on_Inactive_state_exited() -> void:
+ body_shape.disabled = false
+ hitbox.monitorable = true
+ hitbox.monitoring = true
+
+func _on_Teleporting_state_entered() -> void:
+ hitbox.monitorable = false
+ hitbox.monitoring = false
+ velocity = Vector2.ZERO
+ Audio.play_sound(Audio.a_teleport, Audio.ac_jump)
+ animation_player.play("idle")
+ var tween = create_tween()
+ for i in 8:
+ tween.tween_property(sprite, "position:x", 1.0, 0.0333333)
+ tween.tween_property(sprite, "position:x", -1.0, 0.0333333)
+ tween.tween_property(sprite, "position:x", 0.0, 0.0666667)
+ yield(tween, "finished")
+ sprite.visible = false
+ $"%DissolveParticles".emitting = true
+ yield(get_tree().create_timer(1.0, false), "timeout")
+ emit_signal("teleport_finished")
-func _on_SwordArea_area_entered(area):
- if area.is_in_group("enemy_hitbox"):
- var target = area.get_parent()
- # create block text and return if blocked
- if area.is_in_group("blocks_sword"):
- var pos = target.global_position
- Game.instance_node(Game.block_text, pos.x, pos.y, target.get_parent())
+# STATE PROCESSING #
+## when on ground
+func _process_grounded(delta: float) -> void:
+ # make sure is_on_floor detected still
+ velocity.y = 1.0
+ #play edge sprite if hanging of edge
+ if !edge_detector.is_colliding():
+ state_chart.send_event("edge")
+ else:
+ state_chart.send_event("off_edge")
+
+## called when player can move left and rightpass # Repass # Rpass # Replace with function body.eplace with function body.place with function body.
+func _process_horizontal_movement(delta: float) -> void:
+ var input_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+ velocity.x = input_dir * walk_speed
+ if input_dir != 0.0:
+ graphics.scale.x = input_dir
+
+## player movement with acceleration
+func _process_horizontal_movement_grounded(delta: float) -> void:
+ var input_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+# if Input.is_action_pressed("stick_input"): input_dir = get_stick_input(JOY_AXIS_0)
+ if input_dir == 0.0 or input_dir != sign(velocity.x):
+ velocity.x = 0.0
+ var acceleration = lerp(0.0, walk_speed, 1.0 / walk_acceleration_frames) * 60.0
+ velocity.x += input_dir * acceleration * delta
+ velocity.x = clamp(velocity.x, -walk_speed, walk_speed)
+ if input_dir != 0.0:
+ graphics.scale.x = input_dir
+
+## walk/idle state
+func _process_can_walk(delta: float) -> void:
+ if sign(Input.get_axis("move_left", "move_right")) != 0.0 or get_stick_input(JOY_AXIS_0) != 0.0:
+ state_chart.send_event("walk_start")
+ else:
+ state_chart.send_event("walk_stop")
+
+## rubbing up against a wall or pushing an object
+func _process_pushing(delta: float) -> void:
+ if not is_on_wall():
+ state_chart.send_event("push_stop")
+ var input_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+ if input_dir != 0.0:
+ pushable_detector.force_raycast_update()
+ if pushable_detector.is_colliding():
+ var col = pushable_detector.get_collider()
+ if col.is_in_group("pushable"):
+ col.push(input_dir * push_speed)
+ velocity.x = input_dir * push_speed * 2.0
+ else:
+ state_chart.send_event("push_stop")
+
+## climbing on ladders
+func _process_climbing(delta: float) -> void:
+ # climbing movement
+ var input_dir = sign(Input.get_axis("move_up", "move_down") + get_stick_input(JOY_AXIS_1)) # sign() to normalize
+ move_and_slide(Vector2(0.0, input_dir * climb_speed), Vector2.UP) # move
+ animation_player.playback_speed = abs(input_dir) # play/pause animation
+
+ # play sound
+ if input_dir < 0.0:
+ if Audio.ac_climb.stream != Audio.a_climb_up:
+ Audio.play_sound(Audio.a_climb_up, Audio.ac_climb)
+ if Audio.ac_climb.get_playback_position() >= Audio.a_climb_up.get_length():
+ Audio.ac_climb.play()
+ elif input_dir > 0.0:
+ if Audio.ac_climb.stream != Audio.a_climb_down:
+ Audio.play_sound(Audio.a_climb_down, Audio.ac_climb)
+ if Audio.ac_climb.get_playback_position() >= Audio.a_climb_down.get_length():
+ Audio.ac_climb.play()
+ else:
+ Audio.ac_climb.stream = null
+
+ # check if still on ladder
+ ladder_detector.force_raycast_update()
+ var collider = ladder_detector.get_collider()
+ if collider and collider.is_in_group("ladder"):
+ _attached_ladder = collider
+ if Input.is_action_just_pressed("jump"):
+ var horizontal_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+ if sign(_attached_ladder.middle - global_position.x) != horizontal_dir:
+ global_position.x -= graphics.scale.x * 3.0
+ state_chart.send_event("ladder_jump")
+ return
+ elif Input.is_action_just_pressed("shoot"):
+ var horizontal_dir = sign(Input.get_axis("move_left", "move_right") + get_stick_input(JOY_AXIS_0)) # sign() to normalize
+ if sign(_attached_ladder.middle - global_position.x) != horizontal_dir:
+ global_position.x -= graphics.scale.x * 3.0
+ state_chart.send_event("ladder_detach")
+ return
+# # auto-dismount on ground
+# elif Input.is_action_pressed("move_down") and is_on_floor():
+# var horizontal_dir = sign(Input.get_axis("move_left", "move_right"))
+# if sign(_attached_ladder.middle - global_position.x) != horizontal_dir:
+# global_position.x -= graphics.scale.x * 3.0
+# state_chart.send_event("ladder_detach")#
+ elif Input.is_action_just_pressed("move_left") and _attached_ladder.can_climb_left and not beta_gameplay:
+ global_position.x = _attached_ladder.left_snap
+ graphics.scale.x = 1.0
+ elif Input.is_action_just_pressed("move_right") and _attached_ladder.can_climb_right and not beta_gameplay:
+ global_position.x = _attached_ladder.right_snap
+ graphics.scale.x = -1.0
+ else:
+ var ladder_dir = sign(_attached_ladder.middle - global_position.x)
+ if ladder_dir >= 0.0:
+ global_position.x = _attached_ladder.left_snap
+ graphics.scale.x = 1.0
+ else:
+ global_position.x = _attached_ladder.right_snap
+ graphics.scale.x = -1.0
+ else:
+ if input_dir == -1.0:
+ state_chart.send_event("ladder_peak")
return
else:
- target.die()
+ state_chart.send_event("ladder_detach")
+ return
+
+func _process_jump(delta: float) -> void:
+ if velocity.y >= 0.0:
+ state_chart.send_event("jump_peak")
+ if not Input.is_action_pressed("jump"):
+ state_chart.send_event("jump_released")
+
+## called by states SG will fall during
+func _process_gravity(delta: float) -> void:
+ velocity.y = min(velocity.y + gravity * delta, max_fall_speed)
+ current_fall_speed = max(velocity.y,current_fall_speed)
+
+## called after all other physics things
+func _process_movement(delta: float) -> void:
+ # apply velocity and react to collisions
+ velocity.y += get_floor_velocity().y
+ velocity = move_and_slide_with_snap(velocity, snap, Vector2.UP)
+
+ # deal with that STUPID landing exactly on corner bug
+ var col = get_last_slide_collision()
+ if col != null:
+ if col.remainder.y >= 1.0 and col.normal.y == 0.0:
+ position.x += col.normal.x * 0.001
+
+ # check for wall
+ if is_on_wall() and (Input.get_axis("move_left", "move_right") != 0.0 or get_stick_input(JOY_AXIS_0) != 0.0):
+ state_chart.send_event("push_start")
+
+func _process_floating_up(delta: float) -> void:
+ graphics.global_position.y -= 50.0 * delta
+ var sprite_sector = Game.get_sector(Vector2(global_position.x, graphics.global_position.y - 20))
+ if sprite_sector != Game.current_sector:
+ graphics.visible = false
+ graphics.position = Vector2.ZERO
+ emit_signal("died")
+ state_chart.send_event("respawn")
+
+
+# COLLISION CALLBACKS #
+func _on_Hitbox_body_entered(body: Node) -> void:
+ if body.is_in_group("death"):
+ if body.is_in_group("no_blood"):
+ skip_blood = true
+ if body.is_in_group("has_splash"):
+ Game.alternate_death = Audio.a_die_splash
+ var particles = SplashParticles.instance()
+ particles.global_position = death_splatter_position.global_position
+ particles.color = body.splash_color
+ particles.emitting = true
+ get_parent().add_child(particles)
+ if body.is_in_group("death_zap"):
+ Game.alternate_death = Audio.a_die_zap
+ die()
+
+
+func _on_Ducking_event_received(event):
+ if event == "jump":
+ position.y -= 1
+
+
+func _on_OxygenTimer_timeout():
+ if underwater:
+ state_chart.send_event("drown")
+
+#Reset low oxygen effect when leaving level
+func _on_Player_tree_exited():
+ set_underwater_audio(false)
+
+
+func _on_Zapping_state_entered():
+ velocity = Vector2.ZERO
+ Audio.play_sound(Audio.a_die_zap, Audio.ac_die)
+ animation_player.call_deferred("play", "zap")
+
+
+func make_blood():
+ var particles = DeathSplatter.instance()
+ particles.global_position = death_splatter_position.global_position
+ particles.emitting = true
+ get_parent().add_child(particles)
+ for i in 16:
+ var spray = BloodSpray.instance()
+ spray.pause_mode = PAUSE_MODE_PROCESS
+ Physics2DServer.set_active(true)
+ spray.global_position = death_splatter_position.global_position
+ spray.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
+ spray.stains_player = false
+ get_parent().add_child(spray)
+
+
+func _on_Zapping_state_exited():
+ $Graphics/ZapSprite.visible = false
+ emit_signal("died")
+
+
+func _on_ShieldTimer_timeout():
+ $Shield.visible = false
+ $"%AirborneShape".disabled = false
+ $"%GroundedShape".disabled = false
+
+
+func _on_ShieldCooldown_timeout():
+ can_shield = true
+ Audio.play_sound(Audio.a_shield_cooldown,Audio.ac_boss)
+
+
+func _on_BetaFalling_state_entered() -> void:
+ velocity.x = 0.0
diff --git a/objects/player/player.tscn b/objects/player/player.tscn
index 267f8de..a05b632 100644
--- a/objects/player/player.tscn
+++ b/objects/player/player.tscn
@@ -1,424 +1,337 @@
-[gd_scene load_steps=32 format=2]
+[gd_scene load_steps=52 format=2]
[ext_resource path="res://objects/player/player.gd" type="Script" id=1]
-[ext_resource path="res://graphics/player/sg_walk.png" type="Texture" id=2]
-[ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=3]
-[ext_resource path="res://scripts/recolor_border.shader" type="Shader" id=4]
-[ext_resource path="res://graphics/player/jump.png" type="Texture" id=5]
-[ext_resource path="res://graphics/player/pal_purplearmor.png" type="Texture" id=6]
-[ext_resource path="res://graphics/player/sg_climb.png" type="Texture" id=7]
-[ext_resource path="res://graphics/player/pal_sword_red.png" type="Texture" id=8]
-[ext_resource path="res://graphics/player/sg_stab.png" type="Texture" id=9]
-[ext_resource path="res://graphics/player/sg_shoot_grounded.png" type="Texture" id=10]
-[ext_resource path="res://graphics/player/sword_stab.png" type="Texture" id=11]
-[ext_resource path="res://graphics/player/sg_shoot_air.png" type="Texture" id=12]
-[ext_resource path="res://scripts/recolor.tres" type="Shader" id=13]
-[ext_resource path="res://graphics/player/sg_doublejump.png" type="Texture" id=14]
-[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=15]
-[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=16]
+[ext_resource path="res://graphics/player/sg_zap.png" type="Texture" id=2]
+[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=3]
+[ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=4]
+[ext_resource path="res://addons/godot_state_charts/parallel_state.gd" type="Script" id=5]
+[ext_resource path="res://addons/godot_state_charts/state_chart.gd" type="Script" id=6]
+[ext_resource path="res://ui/theme.tres" type="Theme" id=7]
+[ext_resource path="res://addons/godot_state_charts/state_chart_debug.gd" type="Script" id=8]
+[ext_resource path="res://addons/godot_state_charts/compound_state.gd" type="Script" id=9]
+[ext_resource path="res://addons/godot_state_charts/transition.gd" type="Script" id=10]
+[ext_resource path="res://addons/godot_state_charts/atomic_state.gd" type="Script" id=11]
+[ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=12]
+[ext_resource path="res://shaders/electricity.gdshader" type="Shader" id=13]
+[ext_resource path="res://graphics/player/sg.png" type="Texture" id=14]
+[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=15]
+[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=16]
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=18]
+[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=25]
-[sub_resource type="ShaderMaterial" id=38]
-resource_local_to_scene = true
-shader = ExtResource( 4 )
+[sub_resource type="ShaderMaterial" id=1]
+shader = ExtResource( 3 )
shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = true
-shader_param/palette = ExtResource( 6 )
+shader_param/palette = ExtResource( 12 )
-[sub_resource type="ShaderMaterial" id=28]
+[sub_resource type="Curve" id=34]
+_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=32]
shader = ExtResource( 13 )
-shader_param/palette = ExtResource( 8 )
+shader_param/arc_speed = 4.0
+shader_param/arc_fps = 10.0
+shader_param/arc_scale = 8.0
+shader_param/arc_threshold = 0.15
+shader_param/arc_color = Color( 1, 0.93, 0, 1 )
+shader_param/gamma = 2.0
+shader_param/flash_rate = 3.0
+shader_param/flash_intensity = 0.2
+shader_param/background_color = Color( 0, 0, 0, 0 )
-[sub_resource type="RectangleShape2D" id=6]
+[sub_resource type="AtlasTexture" id=28]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 20, 20 )
+
+[sub_resource type="AtlasTexture" id=29]
+atlas = ExtResource( 2 )
+region = Rect2( 20, 0, 20, 20 )
+
+[sub_resource type="SpriteFrames" id=30]
+animations = [ {
+"frames": [ SubResource( 28 ), SubResource( 29 ) ],
+"loop": true,
+"name": "zap",
+"speed": 15.0
+} ]
+
+[sub_resource type="Shader" id=26]
+code = "// Recolor
+shader_type canvas_item;
+
+uniform sampler2D palette : hint_albedo;
+
+void fragment() {
+ vec4 result_color = texture(palette, COLOR.rg);
+ result_color.a = 1.0;
+ COLOR = result_color;
+}"
+
+[sub_resource type="ShaderMaterial" id=27]
+shader = SubResource( 26 )
+shader_param/palette = ExtResource( 12 )
+
+[sub_resource type="Curve" id=13]
+_data = [ Vector2( 0, 1 ), 0.0, -0.0636948, 0, 0, Vector2( 1, 0 ), -3.43886, 0.0, 0, 0 ]
+
+[sub_resource type="ShaderMaterial" id=24]
+shader = ExtResource( 3 )
+shader_param/border_color = Color( 0, 0, 0, 1 )
+shader_param/border_corners = true
+shader_param/palette = ExtResource( 12 )
+
+[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 2.5, 5 )
-[sub_resource type="RectangleShape2D" id=39]
+[sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 2.5, 5 )
-[sub_resource type="Animation" id=29]
-resource_name = "climb"
+[sub_resource type="RectangleShape2D" id=16]
+extents = Vector2( 2.5, 2.5 )
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:texture")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ ExtResource( 14 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Graphics/Sprite:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 0, -10 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Graphics/Sprite:hframes")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 8 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Graphics/Sprite:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Graphics/ZapSprite:visible")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Graphics/ZapSprite:frame")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Graphics/ZapSprite:playing")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "blink"
+length = 0.2
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2 ),
+"transitions": PoolRealArray( 1, 1, 1 ),
+"update": 1,
+"values": [ 96, 97, 96 ]
+}
+
+[sub_resource type="Animation" id=31]
length = 0.3
loop = true
step = 0.15
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("Graphics/Sprite:rotation_degrees")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
"times": PoolRealArray( 0, 0.15 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 7 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ 0.0 ]
+"values": [ 56, 57 ]
}
-[sub_resource type="Animation" id=35]
-resource_name = "doublejump"
-length = 0.3
+[sub_resource type="Animation" id=12]
+resource_name = "double_jump"
+length = 0.32
loop = true
-step = 0.038
+step = 0.04
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("Graphics/Sprite:rotation_degrees")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
-"times": PoolRealArray( 0, 0.038, 0.076, 0.114, 0.152, 0.19, 0.228, 0.266 ),
+"times": PoolRealArray( 0, 0.08, 0.16, 0.24 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 0.0, 90.0, 180.0, 270.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.04, 0.08, 0.12, 0.16, 0.2, 0.24, 0.28 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 14 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0, 0.038, 0.076, 0.114, 0.152, 0.19, 0.228, 0.266, 0.3 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
-"update": 1,
-"values": [ 0.0, 0.0, 90.0, 90.0, 180.0, 180.0, 270.0, 270.0, 360.0 ]
+"values": [ 24, 25, 24, 25, 24, 25, 24, 25 ]
}
-[sub_resource type="Animation" id=30]
-resource_name = "idle"
-length = 0.5
-loop = true
-step = 0.06
+[sub_resource type="Animation" id=23]
+resource_name = "drown"
+length = 10.0
+step = 0.05
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("Graphics/Sprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
+"times": PoolRealArray( 0, 0.05, 0.1, 0.8, 0.85, 0.9, 1.1, 1.15 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ) ]
+"values": [ 112, 113, 114, 115, 116, 117, 118, 119 ]
}
tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
+tracks/1/path = NodePath("Graphics/Sprite:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 3 ) ]
+"times": PoolRealArray( 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.2 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 0, -10 ), Vector2( 0, -10 ) ]
}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
+tracks/2/type = "method"
+tracks/2/path = NodePath("StateChart")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ 0.0 ]
-}
-
-[sub_resource type="Animation" id=31]
-resource_name = "jump"
-length = 0.5
-loop = true
-step = 0.06
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ Rect2( 1, 0, 20, 20 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 5 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ 0.0 ]
-}
-
-[sub_resource type="Animation" id=37]
-resource_name = "shoot air"
-length = 0.5
-step = 0.06
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 12 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 0,
-"values": [ 0.0 ]
-}
-tracks/5/type = "method"
-tracks/5/path = NodePath(".")
-tracks/5/interp = 1
-tracks/5/loop_wrap = true
-tracks/5/imported = false
-tracks/5/enabled = true
-tracks/5/keys = {
-"times": PoolRealArray( 0 ),
+"times": PoolRealArray( 1.3 ),
"transitions": PoolRealArray( 1 ),
"values": [ {
-"args": [ ],
-"method": "spawn_arrow"
+"args": [ "float_up" ],
+"method": "send_event"
} ]
}
-
-[sub_resource type="Animation" id=36]
-resource_name = "shoot grounded"
-length = 0.5
-step = 0.06
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/keys = {
-"times": PoolRealArray( 0, 0.06, 0.12, 0.24, 0.3, 0.36 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
-"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 40, 0, 20, 20 ), Rect2( 60, 0, 20, 20 ), Rect2( 80, 0, 20, 20 ), Rect2( 100, 0, 20, 20 ) ]
-}
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
-tracks/1/interp = 1
-tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
-tracks/1/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 10 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
-}
tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
+tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
@@ -426,54 +339,27 @@ tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ null ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ 0.0 ]
}
-tracks/5/type = "method"
-tracks/5/path = NodePath(".")
-tracks/5/interp = 1
-tracks/5/loop_wrap = true
-tracks/5/imported = false
-tracks/5/enabled = true
-tracks/5/keys = {
-"times": PoolRealArray( 0.24 ),
-"transitions": PoolRealArray( 1 ),
-"values": [ {
-"args": [ ],
-"method": "spawn_arrow"
-} ]
-}
-[sub_resource type="Animation" id=32]
-resource_name = "stab"
-length = 0.3
-step = 0.06
+[sub_resource type="Animation" id=20]
+resource_name = "duck"
+length = 0.001
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("Graphics/Sprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
-"times": PoolRealArray( 0, 0.06 ),
-"transitions": PoolRealArray( 1, 1 ),
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 32, 32 ), Rect2( 32, 0, 32, 32 ) ]
+"values": [ 32 ]
}
tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
@@ -481,64 +367,16 @@ tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 9 ) ]
-}
-tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
-tracks/2/interp = 1
-tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
-tracks/2/keys = {
-"times": PoolRealArray( 0, 0.06 ),
-"transitions": PoolRealArray( 1, 1 ),
-"update": 1,
-"values": [ true, false ]
-}
-tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
-tracks/3/interp = 1
-tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
-tracks/3/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ ExtResource( 11 ) ]
-}
-tracks/4/type = "value"
-tracks/4/path = NodePath("SwordSprite:region_rect")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/keys = {
-"times": PoolRealArray( 0, 0.06 ),
-"transitions": PoolRealArray( 1, 1 ),
-"update": 1,
-"values": [ Rect2( 0, 0, 32, 32 ), Rect2( 32, 0, 32, 32 ) ]
-}
-tracks/5/type = "value"
-tracks/5/path = NodePath("Sprite:rotation_degrees")
-tracks/5/interp = 1
-tracks/5/loop_wrap = true
-tracks/5/imported = false
-tracks/5/enabled = true
-tracks/5/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ 0.0 ]
}
-[sub_resource type="Animation" id=33]
-resource_name = "walk"
+[sub_resource type="Animation" id=22]
+resource_name = "edge"
length = 0.4
loop = true
tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:region_rect")
+tracks/0/path = NodePath("Graphics/Sprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
@@ -547,10 +385,10 @@ tracks/0/keys = {
"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
"transitions": PoolRealArray( 1, 1, 1, 1 ),
"update": 1,
-"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 40, 0, 20, 20 ), Rect2( 60, 0, 20, 20 ) ]
+"values": [ 88, 89, 90, 91 ]
}
tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:texture")
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
@@ -558,11 +396,210 @@ tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=15]
+resource_name = "fall"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
"update": 1,
-"values": [ ExtResource( 2 ) ]
+"values": [ 72 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=14]
+resource_name = "fall_scared"
+length = 0.2
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ 80, 81 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.00238396 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=6]
+resource_name = "idle"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=8]
+resource_name = "jump"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 16 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=21]
+resource_name = "ladder_jump"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=17]
+resource_name = "push"
+length = 0.8
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 64, 65, 66, 67 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=25]
+resource_name = "respawn"
+length = 0.4
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 120, 121, 122, 123, 124, 125, 126, 127 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
}
tracks/2/type = "value"
-tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled")
+tracks/2/path = NodePath("Graphics/Sprite:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
@@ -574,7 +611,7 @@ tracks/2/keys = {
"values": [ true ]
}
tracks/3/type = "value"
-tracks/3/path = NodePath("SwordSprite:texture")
+tracks/3/path = NodePath("Graphics/ZapSprite:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
@@ -583,10 +620,10 @@ tracks/3/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
-"values": [ null ]
+"values": [ false ]
}
tracks/4/type = "value"
-tracks/4/path = NodePath("Sprite:rotation_degrees")
+tracks/4/path = NodePath("Graphics/ZapSprite:frame")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/imported = false
@@ -594,100 +631,331 @@ tracks/4/enabled = true
tracks/4/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Graphics/ZapSprite:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+
+[sub_resource type="Animation" id=11]
+resource_name = "shoot_airborne"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 48 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ 0.0 ]
}
-[sub_resource type="RectangleShape2D" id=34]
-extents = Vector2( 6, 7 )
+[sub_resource type="Animation" id=10]
+resource_name = "shoot_grounded"
+length = 0.25
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.03, 0.06, 0.12, 0.15, 0.18 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 40, 41, 42, 43, 44, 45 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.12 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "spawn_arrow"
+} ]
+}
+tracks/3/type = "method"
+tracks/3/path = NodePath("StateChart")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0.25 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "shoot_end" ],
+"method": "send_event"
+} ]
+}
-[sub_resource type="Curve" id=41]
-_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+[sub_resource type="Animation" id=19]
+resource_name = "stim"
+length = 0.3
+loop = true
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ 104, 105 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
-[sub_resource type="Curve" id=43]
-_data = [ Vector2( 0, 1 ), 0.0, -0.0636948, 0, 0, Vector2( 1, 0 ), -3.43886, 0.0, 0, 0 ]
+[sub_resource type="Animation" id=7]
+resource_name = "walk"
+length = 0.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
+"update": 1,
+"values": [ 8, 9, 10, 11 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
-[node name="Player" type="KinematicBody2D"]
-collision_layer = 2
-collision_mask = 5
+[sub_resource type="Animation" id=33]
+resource_name = "zap"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/path = NodePath("Graphics/Sprite:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Graphics/ZapSprite:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Graphics/ZapSprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ 0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Graphics/ZapSprite:playing")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
+}
+tracks/4/type = "method"
+tracks/4/path = NodePath("StateChart")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ "respawn" ],
+"method": "send_event"
+} ]
+}
+tracks/5/type = "method"
+tracks/5/path = NodePath(".")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0.5 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [ ],
+"method": "make_blood"
+} ]
+}
+
+[sub_resource type="StyleBoxEmpty" id=4]
+
+[node name="Player" type="KinematicBody2D" groups=["player"]]
+collision_layer = 128
+collision_mask = 7
+moving_platform_apply_velocity_on_leave = 2
script = ExtResource( 1 )
+walk_acceleration_frames = 4.0
+gravity = 700.0
+jump_force = 140.0
+double_jump_force = 124.0
-[node name="Trail" type="Node" parent="."]
+[node name="Graphics" type="Node2D" parent="."]
-[node name="Sprite" type="Sprite" parent="."]
-material = SubResource( 38 )
-texture = ExtResource( 3 )
-region_enabled = true
-region_rect = Rect2( 0, 0, 20, 20 )
+[node name="Sprite" type="Sprite" parent="Graphics"]
+unique_name_in_owner = true
+light_mask = 5
+material = SubResource( 1 )
+position = Vector2( 0, -10 )
+texture = ExtResource( 14 )
+offset = Vector2( 0, -6 )
+hframes = 8
+vframes = 20
-[node name="SwordSprite" type="Sprite" parent="."]
-material = SubResource( 28 )
-region_enabled = true
-region_rect = Rect2( 0, 0, 32, 32 )
-
-[node name="Area2D" type="Area2D" parent="." groups=["player"]]
-position = Vector2( 0, 3 )
-collision_layer = 9
-
-[node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
-position = Vector2( 0.5, 2 )
-shape = SubResource( 6 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="." groups=["sword"]]
-position = Vector2( 0.5, 5 )
-shape = SubResource( 39 )
-
-[node name="ClimbRay" type="RayCast2D" parent="."]
-position = Vector2( 0.5, 10 )
-enabled = true
-cast_to = Vector2( 0, -10 )
-collision_mask = 4
-collide_with_areas = true
-collide_with_bodies = false
-
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-anims/climb = SubResource( 29 )
-anims/doublejump = SubResource( 35 )
-anims/idle = SubResource( 30 )
-anims/jump = SubResource( 31 )
-"anims/shoot air" = SubResource( 37 )
-"anims/shoot grounded" = SubResource( 36 )
-anims/stab = SubResource( 32 )
-anims/walk = SubResource( 33 )
-
-[node name="SwordArea" type="Area2D" parent="." groups=["sword"]]
+[node name="Sparkles" type="CPUParticles2D" parent="Graphics/Sprite"]
+unique_name_in_owner = true
visible = false
-
-[node name="SwordHitBox" type="CollisionShape2D" parent="SwordArea"]
-position = Vector2( 0, 3 )
-shape = SubResource( 34 )
-disabled = true
-
-[node name="DeathSplatter" type="CPUParticles2D" parent="."]
-pause_mode = 2
-emitting = false
-amount = 16
-lifetime = 0.3
-one_shot = true
-explosiveness = 0.9
-local_coords = false
-texture = ExtResource( 15 )
+light_mask = 0
+amount = 2
+lifetime = 2.0
+texture = ExtResource( 16 )
emission_shape = 2
-emission_rect_extents = Vector2( 4, 4 )
-direction = Vector2( 0, -1 )
-spread = 180.0
-gravity = Vector2( 0, 50 )
-initial_velocity = 60.0
-initial_velocity_random = 0.9
-damping = 2.0
+emission_rect_extents = Vector2( 4, 10 )
+gravity = Vector2( 0, 0 )
+angular_velocity = 720.0
+angular_velocity_random = 1.0
angle = 720.0
angle_random = 1.0
-scale_amount = 0.5
-scale_amount_random = 1.0
-scale_amount_curve = SubResource( 41 )
+scale_amount_curve = SubResource( 34 )
+color = Color( 1, 0.972549, 0.52549, 1 )
+script = ExtResource( 15 )
-[node name="DustParticles" type="CPUParticles2D" parent="."]
-position = Vector2( 0, 12 )
+[node name="ZapSprite" type="AnimatedSprite" parent="Graphics"]
+visible = false
+material = SubResource( 32 )
+position = Vector2( 0, -10 )
+frames = SubResource( 30 )
+animation = "zap"
+
+[node name="DissolveParticles" type="CPUParticles2D" parent="Graphics"]
+unique_name_in_owner = true
+material = SubResource( 27 )
+position = Vector2( -9.5, -19.5 )
+emitting = false
+amount = 256
+lifetime = 0.8
+one_shot = true
+explosiveness = 1.0
+lifetime_randomness = 0.9
+emission_shape = 3
+emission_points = PoolVector2Array( 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 5, 2, 5, 3, 5, 4, 5, 5, 5, 6, 5, 7, 5, 8, 5, 9, 5, 10, 5, 11, 6, 1, 6, 2, 6, 3, 6, 4, 6, 5, 6, 6, 6, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 6, 16, 7, 0, 7, 1, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 7, 7, 7, 8, 7, 9, 7, 10, 7, 11, 7, 12, 7, 13, 7, 14, 7, 15, 7, 16, 7, 17, 7, 18, 7, 19, 8, 0, 8, 1, 8, 2, 8, 3, 8, 4, 8, 5, 8, 6, 8, 7, 8, 8, 8, 9, 8, 10, 8, 11, 8, 12, 8, 13, 8, 14, 8, 15, 8, 16, 8, 17, 8, 18, 8, 19, 9, 0, 9, 1, 9, 2, 9, 3, 9, 4, 9, 5, 9, 6, 9, 7, 9, 8, 9, 9, 9, 10, 9, 11, 9, 12, 9, 13, 9, 14, 9, 15, 9, 16, 9, 17, 9, 18, 9, 19, 10, 0, 10, 1, 10, 2, 10, 3, 10, 4, 10, 5, 10, 6, 10, 7, 10, 8, 10, 9, 10, 10, 10, 11, 10, 12, 10, 13, 10, 14, 10, 15, 10, 16, 10, 17, 10, 18, 10, 19, 11, 0, 11, 1, 11, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 11, 11, 11, 12, 11, 13, 11, 14, 11, 15, 11, 16, 11, 17, 11, 18, 11, 19, 12, 0, 12, 1, 12, 2, 12, 3, 12, 4, 12, 5, 12, 6, 12, 7, 12, 8, 12, 9, 12, 10, 12, 11, 12, 12, 12, 13, 12, 14, 12, 15, 12, 16, 12, 17, 12, 18, 12, 19, 13, 0, 13, 1, 13, 2, 13, 3, 13, 4, 13, 5, 13, 6, 13, 7, 13, 8, 13, 9, 13, 10, 13, 11, 13, 12, 13, 13, 13, 14, 13, 15, 13, 16, 13, 17, 13, 18, 13, 19, 14, 1, 14, 2, 14, 3, 14, 4, 14, 5, 14, 6, 14, 7, 14, 8, 14, 9, 14, 10, 14, 11, 15, 2, 15, 3, 15, 4, 15, 5, 15, 6, 15, 7, 15, 8, 15, 9, 15, 10, 15, 11 )
+emission_colors = PoolColorArray( 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.372549, 0.623529, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.372549, 1, 1, 0.87451, 0.372549, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.372549, 0.623529, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.623529, 0.623529, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.372549, 0.623529, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.372549, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.121569, 0.372549, 1, 1, 0.121569, 0.623529, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.372549, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.623529, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.623529, 0.623529, 1, 1, 0.623529, 0.121569, 1, 1, 0.623529, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.372549, 1, 1, 0.87451, 0.372549, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.121569, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1, 0.87451, 0.121569, 1, 1 )
+direction = Vector2( 0, -1 )
+spread = 15.0
+gravity = Vector2( 0, 0 )
+initial_velocity = 4.0
+initial_velocity_random = 1.0
+
+[node name="ArrowPosition" type="Position2D" parent="Graphics"]
+unique_name_in_owner = true
+position = Vector2( 5, -7 )
+__meta__ = {
+"_gizmo_extents_": 2.0
+}
+
+[node name="DeathSplatterPosition" type="Position2D" parent="Graphics"]
+unique_name_in_owner = true
+position = Vector2( 0, -10 )
+__meta__ = {
+"_gizmo_extents_": 2.0
+}
+
+[node name="DustParticles" type="CPUParticles2D" parent="Graphics"]
+unique_name_in_owner = true
+position = Vector2( 0, 2 )
z_index = 1
emitting = false
amount = 5
@@ -696,7 +964,7 @@ one_shot = true
explosiveness = 0.9
fract_delta = false
local_coords = false
-texture = ExtResource( 16 )
+texture = ExtResource( 18 )
emission_shape = 2
emission_rect_extents = Vector2( 5, 0 )
direction = Vector2( 0, -1 )
@@ -708,7 +976,623 @@ angle = 720.0
angle_random = 1.0
scale_amount = 0.25
scale_amount_random = 0.5
-scale_amount_curve = SubResource( 43 )
+scale_amount_curve = SubResource( 13 )
+color = Color( 0.956863, 0.92549, 0.831373, 1 )
-[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
-[connection signal="area_entered" from="SwordArea" to="." method="_on_SwordArea_area_entered"]
+[node name="PushableDetector" type="RayCast2D" parent="Graphics"]
+unique_name_in_owner = true
+position = Vector2( 3, -4 )
+cast_to = Vector2( 1, 0 )
+collision_mask = 4
+
+[node name="EdgeDetector" type="RayCast2D" parent="Graphics"]
+position = Vector2( 1, -1 )
+enabled = true
+cast_to = Vector2( 0, 5 )
+collision_mask = 5
+
+[node name="CFox" type="Sprite" parent="Graphics"]
+unique_name_in_owner = true
+visible = false
+material = SubResource( 24 )
+position = Vector2( 0, -10 )
+texture = ExtResource( 4 )
+
+[node name="BodyShape" type="CollisionShape2D" parent="."]
+unique_name_in_owner = true
+position = Vector2( 0.5, -5 )
+shape = SubResource( 2 )
+
+[node name="Hitbox" type="Area2D" parent="." groups=["player_hitbox"]]
+unique_name_in_owner = true
+visible = false
+collision_layer = 11
+collision_mask = 32
+
+[node name="GroundedShape" type="CollisionShape2D" parent="Hitbox"]
+unique_name_in_owner = true
+position = Vector2( 0.5, -5 )
+shape = SubResource( 3 )
+
+[node name="AirborneShape" type="CollisionShape2D" parent="Hitbox"]
+unique_name_in_owner = true
+position = Vector2( 0.5, -7.5 )
+shape = SubResource( 16 )
+
+[node name="LadderDetector" type="RayCast2D" parent="."]
+unique_name_in_owner = true
+position = Vector2( 0.5, -0.5 )
+enabled = true
+cast_to = Vector2( 0, -9.5 )
+collision_mask = 64
+collide_with_areas = true
+collide_with_bodies = false
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 5 )
+anims/blink = SubResource( 18 )
+anims/climb = SubResource( 31 )
+anims/double_jump = SubResource( 12 )
+anims/drown = SubResource( 23 )
+anims/duck = SubResource( 20 )
+anims/edge = SubResource( 22 )
+anims/fall = SubResource( 15 )
+anims/fall_scared = SubResource( 14 )
+anims/idle = SubResource( 6 )
+anims/jump = SubResource( 8 )
+anims/ladder_jump = SubResource( 21 )
+anims/push = SubResource( 17 )
+anims/respawn = SubResource( 25 )
+anims/shoot_airborne = SubResource( 11 )
+anims/shoot_grounded = SubResource( 10 )
+anims/stim = SubResource( 19 )
+anims/walk = SubResource( 7 )
+anims/zap = SubResource( 33 )
+
+[node name="StateChart" type="Node" parent="."]
+script = ExtResource( 6 )
+auto_initialize = false
+
+[node name="Root" type="Node" parent="StateChart"]
+script = ExtResource( 5 )
+__meta__ = {
+"_editor_description_": ""
+}
+
+[node name="Movement" type="Node" parent="StateChart/Root"]
+process_priority = 10
+script = ExtResource( 9 )
+__meta__ = {
+"_editor_description_": "higher process priority so it can do move_and_slide after everything else"
+}
+initial_state = NodePath("Grounded")
+
+[node name="On Drown" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 10 )
+to = NodePath("../Inactive")
+event = "drown"
+
+[node name="On Zapped" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 10 )
+to = NodePath("../Inactive")
+event = "zapped"
+
+[node name="On Died" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 10 )
+to = NodePath("../Appearing")
+event = "died"
+
+[node name="On StartTeleport" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 10 )
+to = NodePath("../Teleporting")
+event = "start_teleport"
+
+[node name="Grounded" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 9 )
+__meta__ = {
+"_editor_description_": "is on the ground"
+}
+initial_state = NodePath("CanWalk")
+
+[node name="On AirborneBeta" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 10 )
+to = NodePath("../../Airborne/Falling/BetaFalling")
+event = "airborne"
+guard_expression = "beta_gameplay"
+
+[node name="On Airborne" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 10 )
+to = NodePath("../../Airborne/Falling/CoyoteFalling")
+event = "airborne"
+
+[node name="On Jump" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter jump state when the jump button is pressed"
+}
+to = NodePath("../../Airborne/Jump/NormalJump")
+event = "jump"
+
+[node name="On Duck" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 10 )
+to = NodePath("../Ducking")
+event = "duck_pressed"
+
+[node name="On LadderTouched" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 10 )
+to = NodePath("../../Climbing")
+event = "ladder_touched"
+
+[node name="CanWalk" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 9 )
+__meta__ = {
+"_editor_description_": "can walk by moving left and right"
+}
+initial_state = NodePath("Still")
+
+[node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 10 )
+to = NodePath("../../Shooting")
+event = "shoot"
+guard_expression = "can_shoot"
+
+[node name="On PushStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 10 )
+to = NodePath("../../Pushing")
+event = "push_start"
+
+[node name="Still" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 11 )
+
+[node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"]
+script = ExtResource( 10 )
+to = NodePath("../../Walking")
+event = "walk_start"
+
+[node name="On Edge" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"]
+script = ExtResource( 10 )
+to = NodePath("../../Edge")
+event = "edge"
+
+[node name="On Timeout" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"]
+script = ExtResource( 10 )
+to = NodePath("../../Blinking")
+delay = 1.0
+
+[node name="Walking" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 11 )
+
+[node name="On WalkStop" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Walking"]
+script = ExtResource( 10 )
+to = NodePath("../../Still")
+event = "walk_stop"
+
+[node name="Blinking" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+unique_name_in_owner = true
+script = ExtResource( 11 )
+
+[node name="On Timeout" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Blinking"]
+script = ExtResource( 10 )
+to = NodePath("../../Stimming")
+delay = 10.0
+
+[node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Blinking"]
+script = ExtResource( 10 )
+to = NodePath("../../Walking")
+event = "walk_start"
+
+[node name="Stimming" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 11 )
+
+[node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Stimming"]
+script = ExtResource( 10 )
+to = NodePath("../../Walking")
+event = "walk_start"
+
+[node name="Edge" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"]
+script = ExtResource( 11 )
+
+[node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Edge"]
+script = ExtResource( 10 )
+to = NodePath("../../Walking")
+event = "walk_start"
+
+[node name="On OffEdge" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Edge"]
+script = ExtResource( 10 )
+to = NodePath("../../Still")
+event = "off_edge"
+
+[node name="Ducking" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 11 )
+
+[node name="On DuckReleased" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"]
+script = ExtResource( 10 )
+to = NodePath("../../CanWalk/Still")
+event = "duck_released"
+
+[node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"]
+script = ExtResource( 10 )
+to = NodePath("../../Shooting")
+event = "shoot"
+guard_expression = "can_shoot"
+
+[node name="On Jump" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter jump state when the jump button is pressed"
+}
+to = NodePath("../../../Airborne/Jump/NormalJump")
+event = "jump"
+
+[node name="Shooting" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 11 )
+consumed_events = [ "jump", "duck_pressed" ]
+
+[node name="On ShootEnd" type="Node" parent="StateChart/Root/Movement/Grounded/Shooting"]
+script = ExtResource( 10 )
+to = NodePath("../../CanWalk")
+event = "shoot_end"
+
+[node name="Pushing" type="Node" parent="StateChart/Root/Movement/Grounded"]
+script = ExtResource( 11 )
+
+[node name="On PushStop" type="Node" parent="StateChart/Root/Movement/Grounded/Pushing"]
+script = ExtResource( 10 )
+to = NodePath("../../CanWalk")
+event = "push_stop"
+
+[node name="Airborne" type="Node" parent="StateChart/Root/Movement"]
+process_priority = 5
+script = ExtResource( 9 )
+__meta__ = {
+"_editor_description_": "SG is in the air and falling DOWN, better think fast!"
+}
+initial_state = NodePath("Falling")
+
+[node name="On Jump If Redfeather" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter double jump state when the jump button is pressed"
+}
+to = NodePath("../Jump/NormalJump")
+event = "jump"
+guard_expression = "red_feather"
+
+[node name="On Grounded" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 10 )
+to = NodePath("../../Grounded")
+event = "grounded"
+
+[node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 10 )
+to = NodePath("../AirShooting")
+event = "shoot"
+guard_expression = "can_shoot"
+
+[node name="On LadderTouched" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 10 )
+to = NodePath("../../Climbing")
+event = "ladder_touched"
+
+[node name="Jump" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 9 )
+initial_state = NodePath("NormalJump")
+
+[node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter double jump state when the jump button is pressed"
+}
+to = NodePath("../../DoubleJump")
+event = "jump"
+
+[node name="On JumpPeak" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"]
+script = ExtResource( 10 )
+to = NodePath("../../Falling/NormalFalling")
+event = "jump_peak"
+
+[node name="NormalJump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"]
+script = ExtResource( 11 )
+
+[node name="On JumpReleased" type="Node" parent="StateChart/Root/Movement/Airborne/Jump/NormalJump"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": ""
+}
+to = NodePath("../../../Falling/NormalFalling")
+event = "jump_released"
+
+[node name="LadderJump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"]
+script = ExtResource( 11 )
+
+[node name="Falling" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 9 )
+initial_state = NodePath("NormalFalling")
+
+[node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter double jump state when the jump button is pressed"
+}
+to = NodePath("../../DoubleJump")
+event = "jump"
+
+[node name="CoyoteFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
+script = ExtResource( 11 )
+
+[node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling"]
+script = ExtResource( 10 )
+__meta__ = {
+"_editor_description_": "enter jump state when the jump button is pressed"
+}
+to = NodePath("../../../Jump/NormalJump")
+event = "jump"
+
+[node name="On CoyoteTimeout" type="Node" parent="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling"]
+script = ExtResource( 10 )
+to = NodePath("../../NormalFalling")
+delay = 0.067
+
+[node name="NormalFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
+script = ExtResource( 11 )
+
+[node name="BetaFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
+script = ExtResource( 11 )
+
+[node name="ScaredFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
+script = ExtResource( 11 )
+
+[node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 11 )
+
+[node name="AirShooting" type="Node" parent="StateChart/Root/Movement/Airborne"]
+script = ExtResource( 11 )
+
+[node name="Climbing" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 11 )
+__meta__ = {
+"_editor_description_": "stuck to ladder"
+}
+
+[node name="On LadderPeak" type="Node" parent="StateChart/Root/Movement/Climbing"]
+script = ExtResource( 10 )
+to = NodePath("../../Airborne/Jump/NormalJump")
+event = "ladder_peak"
+
+[node name="On LadderJump" type="Node" parent="StateChart/Root/Movement/Climbing"]
+script = ExtResource( 10 )
+to = NodePath("../../Airborne/Jump/NormalJump")
+event = "ladder_jump"
+
+[node name="On LadderDetach" type="Node" parent="StateChart/Root/Movement/Climbing"]
+script = ExtResource( 10 )
+to = NodePath("../../Airborne/Falling/NormalFalling")
+event = "ladder_detach"
+
+[node name="Inactive" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 11 )
+__meta__ = {
+"_editor_description_": "player can not move or do anything, immobile"
+}
+
+[node name="On GetReal" type="Node" parent="StateChart/Root/Movement/Inactive"]
+script = ExtResource( 10 )
+to = NodePath("../../Grounded")
+event = "get_real"
+
+[node name="On Appear" type="Node" parent="StateChart/Root/Movement/Inactive"]
+script = ExtResource( 10 )
+to = NodePath("../../Appearing")
+event = "appear"
+
+[node name="On Respawn" type="Node" parent="StateChart/Root/Movement/Inactive"]
+script = ExtResource( 10 )
+to = NodePath("../../Appearing")
+event = "respawn"
+
+[node name="Teleporting" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 11 )
+__meta__ = {
+"_editor_description_": "player can not move or do anything, immobile"
+}
+
+[node name="On GetReal" type="Node" parent="StateChart/Root/Movement/Teleporting"]
+script = ExtResource( 10 )
+to = NodePath("../../Grounded")
+event = "get_real"
+
+[node name="Appearing" type="Node" parent="StateChart/Root/Movement"]
+script = ExtResource( 11 )
+
+[node name="On Delay" type="Node" parent="StateChart/Root/Movement/Appearing"]
+script = ExtResource( 10 )
+to = NodePath("../../Grounded")
+delay = 0.4
+
+[node name="Health" type="Node" parent="StateChart/Root"]
+script = ExtResource( 9 )
+initial_state = NodePath("Vulnerable")
+
+[node name="Vulnerable" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 11 )
+
+[node name="On Hurt" type="Node" parent="StateChart/Root/Health/Vulnerable"]
+script = ExtResource( 10 )
+to = NodePath("../../Dead")
+event = "hurt"
+
+[node name="On Drown" type="Node" parent="StateChart/Root/Health/Vulnerable"]
+script = ExtResource( 10 )
+to = NodePath("../../Drowning")
+event = "drown"
+
+[node name="On BecomeInvulnerable" type="Node" parent="StateChart/Root/Health/Vulnerable"]
+script = ExtResource( 10 )
+to = NodePath("../../Invulnerable")
+event = "become_invulnerable"
+
+[node name="On Zapped" type="Node" parent="StateChart/Root/Health/Vulnerable"]
+script = ExtResource( 10 )
+to = NodePath("../../Zapping")
+event = "zapped"
+
+[node name="Invulnerable" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 11 )
+
+[node name="Respawn" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 11 )
+
+[node name="If Iframes" type="Node" parent="StateChart/Root/Health/Respawn"]
+script = ExtResource( 10 )
+to = NodePath("../../Vulnerable")
+delay = 0.5
+guard_expression = "use_iframes"
+
+[node name="On Timeout" type="Node" parent="StateChart/Root/Health/Respawn"]
+script = ExtResource( 10 )
+to = NodePath("../../Vulnerable")
+guard_expression = "!use_iframes"
+
+[node name="Dead" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 11 )
+
+[node name="On Respawn" type="Node" parent="StateChart/Root/Health/Dead"]
+script = ExtResource( 10 )
+to = NodePath("../../Respawn")
+event = "respawn"
+guard_expression = "can_respawn"
+
+[node name="Drowning" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 9 )
+initial_state = NodePath("DrownStart")
+
+[node name="On Respawn" type="Node" parent="StateChart/Root/Health/Drowning"]
+script = ExtResource( 10 )
+to = NodePath("../../Respawn")
+event = "respawn"
+guard_expression = "can_respawn"
+
+[node name="DrownStart" type="Node" parent="StateChart/Root/Health/Drowning"]
+script = ExtResource( 11 )
+
+[node name="On FloatUp" type="Node" parent="StateChart/Root/Health/Drowning/DrownStart"]
+script = ExtResource( 10 )
+to = NodePath("../../FloatingUp")
+event = "float_up"
+
+[node name="FloatingUp" type="Node" parent="StateChart/Root/Health/Drowning"]
+script = ExtResource( 11 )
+
+[node name="Zapping" type="Node" parent="StateChart/Root/Health"]
+script = ExtResource( 11 )
+
+[node name="On Respawn" type="Node" parent="StateChart/Root/Health/Zapping"]
+script = ExtResource( 10 )
+to = NodePath("../../Respawn")
+event = "respawn"
+guard_expression = "can_respawn"
+
+[node name="StateDebugLayer" type="CanvasLayer" parent="."]
+layer = 128
+
+[node name="StateChartDebug" type="Tree" parent="StateDebugLayer"]
+visible = false
+anchor_left = 1.0
+anchor_right = 1.0
+margin_left = -147.0
+margin_bottom = 137.0
+theme = ExtResource( 7 )
+custom_styles/bg = SubResource( 4 )
+script = ExtResource( 8 )
+
+[node name="OxygenTimer" type="Timer" parent="."]
+wait_time = 20.0
+
+[node name="JumpPeakTimer" type="Timer" parent="."]
+wait_time = 0.2
+
+[node name="LabelLayerHack" type="Node2D" parent="."]
+z_index = 1000
+
+[node name="LowOxygenLabel" type="Label" parent="LabelLayerHack"]
+unique_name_in_owner = true
+material = ExtResource( 25 )
+margin_left = -8.0
+margin_top = -32.0
+margin_right = 8.0
+margin_bottom = -18.0
+theme = ExtResource( 7 )
+align = 1
+
+[node name="ShieldTimer" type="Timer" parent="."]
+wait_time = 0.5
+
+[node name="Shield" type="Polygon2D" parent="."]
+visible = false
+position = Vector2( 1, -1 )
+scale = Vector2( 1.06667, 0.727273 )
+color = Color( 0.0352941, 0.796078, 0.854902, 0.470588 )
+polygon = PoolVector2Array( 0, -29, -8, -14.3333, -1, 4, 7, -14 )
+
+[node name="ShieldCooldown" type="Timer" parent="."]
+wait_time = 2.0
+one_shot = true
+
+[connection signal="tree_exited" from="." to="." method="_on_Player_tree_exited"]
+[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement" to="." method="_process_movement"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded" to="." method="_on_Grounded_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded" to="." method="_process_grounded"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/CanWalk" to="." method="_process_horizontal_movement_grounded"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/CanWalk" to="." method="_process_can_walk"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Still" to="." method="_on_Still_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Walking" to="." method="_on_Walking_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Blinking" to="." method="_on_Blinking_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Stimming" to="." method="_on_Stimming_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Edge" to="." method="_on_Edge_state_entered"]
+[connection signal="event_received" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_event_received"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Shooting" to="." method="_on_Shooting_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_on_Pushing_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_process_pushing"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="reset_fall_speed"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="_on_Airborne_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne" to="." method="_process_gravity"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_horizontal_movement"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_jump"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Jump/NormalJump" to="." method="_on_NormalJump_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Movement/Airborne/Jump/NormalJump" to="." method="_on_NormalJump_state_exited"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Jump/LadderJump" to="." method="_on_LadderJump_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling" to="." method="_on_CoyoteFalling_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling" to="." method="_process_horizontal_movement"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/NormalFalling" to="." method="_on_NormalFalling_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Falling/NormalFalling" to="." method="_process_horizontal_movement"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/BetaFalling" to="." method="_on_NormalFalling_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/BetaFalling" to="." method="_on_BetaFalling_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/ScaredFalling" to="." method="_on_ScaredFalling_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_on_DoubleJump_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="reset_fall_speed"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_process_horizontal_movement"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_on_AirShooting_state_entered"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_process_horizontal_movement"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_exited"]
+[connection signal="state_physics_processing" from="StateChart/Root/Movement/Climbing" to="." method="_process_climbing"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Inactive" to="." method="_on_Inactive_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Movement/Inactive" to="." method="_on_Inactive_state_exited"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Teleporting" to="." method="_on_Inactive_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Teleporting" to="." method="_on_Teleporting_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Movement/Teleporting" to="." method="_on_Inactive_state_exited"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Appearing" to="." method="_on_Inactive_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Movement/Appearing" to="." method="_on_Appearing_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Movement/Appearing" to="." method="_on_Inactive_state_exited"]
+[connection signal="state_entered" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Health/Dead" to="." method="_on_Dead_state_entered"]
+[connection signal="state_entered" from="StateChart/Root/Health/Drowning" to="." method="_on_Drowning_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Health/Drowning" to="." method="_on_Drowning_state_exited"]
+[connection signal="state_physics_processing" from="StateChart/Root/Health/Drowning/FloatingUp" to="." method="_process_floating_up"]
+[connection signal="state_entered" from="StateChart/Root/Health/Zapping" to="." method="_on_Zapping_state_entered"]
+[connection signal="state_exited" from="StateChart/Root/Health/Zapping" to="." method="_on_Zapping_state_exited"]
+[connection signal="timeout" from="OxygenTimer" to="." method="_on_OxygenTimer_timeout"]
+[connection signal="timeout" from="ShieldTimer" to="." method="_on_ShieldTimer_timeout"]
+[connection signal="timeout" from="ShieldCooldown" to="." method="_on_ShieldCooldown_timeout"]
diff --git a/objects/player/player_death_particles.tscn b/objects/player/player_death_particles.tscn
new file mode 100644
index 0000000..5528792
--- /dev/null
+++ b/objects/player/player_death_particles.tscn
@@ -0,0 +1,29 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1]
+
+[sub_resource type="Curve" id=41]
+_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ]
+
+[node name="DeathSplatter" type="CPUParticles2D"]
+pause_mode = 2
+emitting = false
+amount = 16
+lifetime = 0.3
+one_shot = true
+explosiveness = 0.9
+local_coords = false
+texture = ExtResource( 1 )
+emission_shape = 2
+emission_rect_extents = Vector2( 4, 4 )
+direction = Vector2( 0, -1 )
+spread = 180.0
+gravity = Vector2( 0, 50 )
+initial_velocity = 60.0
+initial_velocity_random = 0.9
+damping = 2.0
+angle = 720.0
+angle_random = 1.0
+scale_amount = 0.5
+scale_amount_random = 1.0
+scale_amount_curve = SubResource( 41 )
diff --git a/objects/player/player_stain.gd b/objects/player/player_stain.gd
new file mode 100644
index 0000000..f958696
--- /dev/null
+++ b/objects/player/player_stain.gd
@@ -0,0 +1,18 @@
+extends Light2D
+
+
+export var lifetime: float = 5.0
+
+
+func _ready() -> void:
+ rotation = randf() * TAU
+
+
+func _process(delta: float) -> void:
+ lifetime -= delta
+ if lifetime < 1.0:
+ global_position.y += 4.0 * delta
+ if lifetime < 0.5:
+ scale = Vector2(lifetime * 2.0, lifetime * 2.0)
+ if lifetime <= 0.0:
+ queue_free()
diff --git a/objects/player/player_stain.tscn b/objects/player/player_stain.tscn
new file mode 100644
index 0000000..9c48627
--- /dev/null
+++ b/objects/player/player_stain.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=1]
+[ext_resource path="res://objects/player/player_stain.gd" type="Script" id=2]
+
+[node name="PlayerStain" type="Light2D"]
+texture = ExtResource( 1 )
+mode = 2
+range_item_cull_mask = 4
+script = ExtResource( 2 )
diff --git a/objects/respawn_point.gd b/objects/respawn_point.gd
index b7b5792..63329a0 100644
--- a/objects/respawn_point.gd
+++ b/objects/respawn_point.gd
@@ -4,10 +4,10 @@ export var match_h = false
export var match_v = true
func _on_RespawnPoint_area_entered(area):
- if area.is_in_group("player"):
+ if area.is_in_group("player_hitbox"):
if Game.get_sector(global_position) != Game.get_sector(Game.respawn_point):
var player = area.get_parent()
Game.respawn_point = Vector2(
player.global_position.x if match_h else global_position.x,
- player.global_position.y if match_v else global_position.y - 10
+ player.global_position.y if match_v else global_position.y
)
diff --git a/objects/respawn_point.tscn b/objects/respawn_point.tscn
index 411d84c..7c9be0d 100644
--- a/objects/respawn_point.tscn
+++ b/objects/respawn_point.tscn
@@ -3,9 +3,7 @@
[ext_resource path="res://objects/respawn_point.gd" type="Script" id=1]
[node name="RespawnPoint" type="Area2D"]
-collision_layer = 0
collision_mask = 2
-monitorable = false
script = ExtResource( 1 )
[connection signal="area_entered" from="." to="." method="_on_RespawnPoint_area_entered"]
diff --git a/project.godot b/project.godot
index 45820f4..f9aa96b 100644
--- a/project.godot
+++ b/project.godot
@@ -9,36 +9,127 @@
config_version=4
_global_script_classes=[ {
+"base": "State",
+"class": "AtomicState",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/atomic_state.gd"
+}, {
+"base": "Node2D",
+"class": "BallSnake",
+"language": "GDScript",
+"path": "res://scripts/ball_snake.gd"
+}, {
+"base": "State",
+"class": "CompoundState",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/compound_state.gd"
+}, {
"base": "Resource",
"class": "LevelEntry",
"language": "GDScript",
"path": "res://scripts/level_entry.gd"
+}, {
+"base": "Node",
+"class": "MainMenu",
+"language": "GDScript",
+"path": "res://menus/main_menu.gd"
+}, {
+"base": "ImageTexture",
+"class": "PaletteTexture",
+"language": "GDScript",
+"path": "res://scripts/palette_texture.gd"
+}, {
+"base": "State",
+"class": "ParallelState",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/parallel_state.gd"
+}, {
+"base": "HBoxContainer",
+"class": "RadioButtons",
+"language": "GDScript",
+"path": "res://objects/hud/radio_buttons.gd"
+}, {
+"base": "Node",
+"class": "State",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/state.gd"
+}, {
+"base": "Node",
+"class": "StateChart",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/state_chart.gd"
+}, {
+"base": "Tree",
+"class": "StateChartDebug",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/state_chart_debug.gd"
+}, {
+"base": "Node",
+"class": "Transition",
+"language": "GDScript",
+"path": "res://addons/godot_state_charts/transition.gd"
} ]
_global_script_class_icons={
-"LevelEntry": ""
+"AtomicState": "res://addons/godot_state_charts/atomic_state.svg",
+"BallSnake": "",
+"CompoundState": "res://addons/godot_state_charts/compound_state.svg",
+"LevelEntry": "",
+"MainMenu": "",
+"PaletteTexture": "",
+"ParallelState": "res://addons/godot_state_charts/parallel_state.svg",
+"RadioButtons": "",
+"State": "res://addons/godot_state_charts/state.svg",
+"StateChart": "res://addons/godot_state_charts/state_chart.svg",
+"StateChartDebug": "",
+"Transition": "res://addons/godot_state_charts/transition.svg"
}
[application]
-config/name="Hero Mark 2"
-run/main_scene="res://Main.tscn"
+config/name="Revolution 2083"
+run/main_scene="res://menus/splash_screen.tscn"
+config/use_custom_user_dir=true
+config/custom_user_dir_name="heromark2"
+boot_splash/show_image=false
config/icon="res://icon.png"
+config/windows_native_icon="res://icon.ico"
[autoload]
-Game="*res://game.tscn"
-Debug="*res://objects/debug.tscn"
-LevelData="*res://level_data.tscn"
-Save="*res://scripts/save.gd"
+Border="*res://autoloads/border.tscn"
+Audio="*res://autoloads/audio.tscn"
+Controls="*res://autoloads/controls.gd"
+Options="*res://autoloads/options.gd"
+Save="*res://autoloads/save.gd"
+Game="*res://autoloads/game.gd"
+LevelData="*res://autoloads/level_data.tscn"
+Debug="*res://autoloads/debug.tscn"
+TouchControls="*res://autoloads/touch_controls.tscn"
+SceneManager="*res://autoloads/scene_manager.tscn"
+Console="*res://autoloads/console.tscn"
+Fade="*res://autoloads/fade.tscn"
+StainLayer="*res://autoloads/stain_layer.tscn"
+ScoreBoard="*res://autoloads/scoreboard.gd"
+SpeedrunTimer="*res://autoloads/speedrun_timer.tscn"
+
+[debug]
+
+gdscript/warnings/unused_argument=false
+shapes/collision/shape_color=Color( 0.564706, 0, 0.701961, 0.188235 )
+shapes/collision/contact_color=Color( 0.101961, 1, 0.176471, 0.8 )
+shapes/collision/draw_2d_outlines=false
[display]
window/size/width=256
window/size/height=192
+window/size/test_width=512
+window/size/test_height=384
+window/handheld/orientation="sensor_landscape"
[editor_plugins]
-enabled=PoolStringArray( )
+enabled=PoolStringArray( "res://addons/godot_state_charts/plugin.cfg" )
[global]
@@ -80,11 +171,43 @@ ogg_vorbis={
ui_accept={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777222,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":90,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+ui_select={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_cancel={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":88,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+ui_focus_next={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_focus_prev={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_left={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777231,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+ui_right={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777233,"unicode":0,"echo":false,"script":null)
]
}
ui_up={
@@ -92,6 +215,7 @@ ui_up={
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777232,"unicode":0,"echo":false,"script":null)
]
}
ui_down={
@@ -100,12 +224,29 @@ ui_down={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":4,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":7,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777234,"unicode":0,"echo":false,"script":null)
]
}
+ui_page_up={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_page_down={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_home={
+"deadzone": 0.5,
+"events": [ ]
+}
+ui_end={
+"deadzone": 0.5,
+"events": [ ]
+}
jump={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":90,"unicode":0,"echo":false,"script":null)
]
}
debug_restart={
@@ -116,11 +257,7 @@ debug_restart={
debug_1={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":49,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
-}
-sword={
-"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":10,"pressure":0.0,"pressed":false,"script":null)
]
}
crt={
@@ -135,13 +272,14 @@ debug_move_player={
}
shoot={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":88,"unicode":0,"echo":false,"script":null)
]
}
fullscreen={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
]
}
debug_2={
@@ -162,8 +300,76 @@ debug_testroom={
pause={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":80,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
]
}
+restart={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":9,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+start={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":90,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":88,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":67,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+move_left={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777231,"unicode":0,"echo":false,"script":null)
+ ]
+}
+move_right={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777233,"unicode":0,"echo":false,"script":null)
+ ]
+}
+move_up={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777232,"unicode":0,"echo":false,"script":null)
+ ]
+}
+move_down={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777234,"unicode":0,"echo":false,"script":null)
+ ]
+}
+ui_start={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+shield={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+text_enter={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+
+[input_devices]
+
+pointing/emulate_touch_from_mouse=true
[layer_names]
@@ -172,6 +378,9 @@ pause={
2d_physics/layer_3="dynamic objects"
2d_physics/layer_4="vision"
2d_physics/layer_5="particles"
+2d_physics/layer_6="death"
+2d_physics/layer_7="ladder"
+2d_physics/layer_8="player"
[physics]
@@ -181,4 +390,6 @@ common/enable_pause_aware_picking=true
quality/driver/driver_name="GLES2"
2d/snapping/use_gpu_pixel_snap=true
+vram_compression/import_etc=true
+limits/time/time_rollover_secs=240.0
environment/default_environment="res://default_env.tres"
diff --git a/scripts/ball_snake.gd b/scripts/ball_snake.gd
new file mode 100644
index 0000000..caba971
--- /dev/null
+++ b/scripts/ball_snake.gd
@@ -0,0 +1,29 @@
+tool
+class_name BallSnake
+extends Node2D
+
+
+export var texture: Texture
+export var segments: int = 1
+export var target: NodePath
+export var end_pieces: bool = true
+
+
+func _process(delta: float) -> void:
+ update()
+
+
+func _draw() -> void:
+ var node := get_node(target) as Node2D
+ if node:
+ if end_pieces:
+ draw_texture(texture, texture.get_size() * -0.5)
+ var end_pos := to_local(node.global_position)
+ for i in segments:
+ var weight := 1.0 / float(segments + 1) * float(i + 1)
+ draw_texture(
+ texture,
+ lerp(Vector2.ZERO, end_pos, weight) + texture.get_size() * -0.5
+ )
+ if end_pieces:
+ draw_texture(texture, end_pos + texture.get_size() * -0.5)
diff --git a/scripts/crt.gdshader b/scripts/crt.gdshader
deleted file mode 100644
index 18fc6d8..0000000
--- a/scripts/crt.gdshader
+++ /dev/null
@@ -1,43 +0,0 @@
-shader_type canvas_item;
-
-const float PI = 3.1415926535;
-
-uniform bool enabled = true;
-uniform vec2 resolution;
-uniform vec2 curvature;
-uniform vec2 scanline_opacity;
-uniform float brightness;
-
-vec2 curve_uv(vec2 uv) {
- uv = uv * 2.0 - 1.0;
- vec2 offset = abs(uv.yx) / vec2(curvature.x, curvature.y);
- uv = uv + uv * offset * offset;
- uv = uv * 0.5 + 0.5;
- return uv;
-}
-
-vec3 scanline_intensity(float uv, float res, float opacity) {
- float intensity = sin((uv * res - 0.25) * PI * 2.0);
- intensity = ((0.5 * intensity) + 0.5) * 0.9 + 0.1;
- return vec3(pow(intensity, opacity));
-}
-
-void fragment() {
- if (enabled) {
- vec2 curved_uv = curve_uv(UV);
- vec3 base_color = texture(TEXTURE, curved_uv).rgb;
-
- base_color += vec3(1.0/256.0);
- base_color *= scanline_intensity(curved_uv.x, resolution.x, scanline_opacity.y);
- base_color *= scanline_intensity(curved_uv.y, resolution.y, scanline_opacity.x);
- base_color *= vec3(brightness);
-
- if (curved_uv.x < 0.0 || curved_uv.y < 0.0 || curved_uv.x > 1.0 || curved_uv.y > 1.0) {
- COLOR = vec4(0.0, 0.0, 0.0, 1.0);
- } else {
- COLOR = vec4(base_color, 1.0);
- }
- } else {
- COLOR = texture(TEXTURE, UV);
- }
-}
\ No newline at end of file
diff --git a/scripts/debug.gd b/scripts/debug.gd
deleted file mode 100644
index cd8ce4f..0000000
--- a/scripts/debug.gd
+++ /dev/null
@@ -1,122 +0,0 @@
-extends CanvasLayer
-
-#Console by hazel
-#Const
-const ENTRY_SEQUENCE = ["4", "1", "5"]
-#Export
-export var max_lines: int = 10
-export var opacity: float = 0.5
-#Onready
-onready var console = $Console
-onready var code_label = get_parent().get_node("Main/Control/ViewportContainer/Viewport/CheatLayer/CheatLabel")
-##Runtime
-var lines: int = 0
-var time: float = 0.0
-var n: int = 0
-var debug = false
-var allow_sword = false
-
-# cheat code entry
-var entry_index = 0
-var entry = false
-var code = ""
-
-
-func _ready():
- #Auto do debug when playtesting
- if not OS.is_debug_build():
- console.visible = false
- debug = false
- else:
- console.visible = false
- debug = true
- $Console/Panel.modulate.a = opacity
- console.modulate.a = opacity
-
-func _physics_process(delta):
- #DEBUG
- if debug == true && !entry && !entry_index > 0:
- #Show console
- if Input.is_action_just_pressed("debug_show"):
- console.visible = !console.visible
- #Restart scene
- if Input.is_action_just_pressed("debug_restart"):
- Game.call_deferred("restart_level")
- #Move player to mouse
- if Input.is_action_pressed("debug_move_player"):
- Game.get_map().get_node("Player").position = get_viewport().get_mouse_position()
- Debug.print(get_viewport().get_mouse_position())
- #Test room
- if Input.is_action_just_pressed("debug_testroom"):
- Game.change_map(load("res://maps/test_room.tscn"))
- #Debug 1
- if Input.is_action_just_pressed("debug_1"):
- Game.change_map(load("res://maps/level_select.tscn"))
- #Debug 2
- if Input.is_action_just_pressed("debug_2"):
- Game.freeze_frame(1.0)
-
-func print(text):
- lines += 1
- if lines > 1:
- console.text += "\n"
- if lines > 10:
- var n = console.text.find("\n")
- var t = console.text
- t.erase(0, n+1)
- lines -= 1
- console.text = t + str(text)
- else:
- console.text += str(text)
-
-func _on_visible_toggled(button_pressed):
- if button_pressed:
- console.visible = true
- else:
- console.visible = false
-
-func _input(event):
- if event is InputEventKey && event.is_pressed():
- var character = OS.get_scancode_string(event.scancode)
- if character.length() > 1:
- character = ""
-
- if entry:
- if event.scancode == KEY_ENTER:
- _enter_code()
- entry = false
- code = ""
- elif event.scancode == KEY_BACKSPACE:
- code.erase(code.length() - 1, 1)
- else:
- code += character
- code_label.text = code
- else:
- if character == ENTRY_SEQUENCE[entry_index]:
- entry_index += 1
- if entry_index >= ENTRY_SEQUENCE.size():
- entry = true
- entry_index = 0
- _on_entry()
-
-func _on_entry():
- Game.play_sound(Game.a_star, Game.ac_cheat)
-
-func _enter_code():
- match code:
- "30385":
- for gold in get_tree().get_nodes_in_group("gold"):
- var goldsprite = gold.get_node("AnimatedSprite")
- goldsprite.frames = preload("res://graphics/collectibles/30385_frames.tres")
- goldsprite.position.y -= 2
- #goldsprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_green.png"))
- "1989":
- for enemy in get_tree().get_nodes_in_group("enemy"):
- enemy.die()
- "DGSTEEZY":
- debug = true
- "6DOUBLOONS":
- Debug.print(get_tree().get_nodes_in_group("gold").size())
- "EVILSBANE":
- allow_sword = true
- Input.action_press("sword")
diff --git a/scripts/fix_parallax_background.gd b/scripts/fix_parallax_background.gd
new file mode 100644
index 0000000..401ddfb
--- /dev/null
+++ b/scripts/fix_parallax_background.gd
@@ -0,0 +1,20 @@
+extends ParallaxBackground
+
+func revert_offset(layer: ParallaxLayer) -> void:
+ # Cancel out layer's offset. The layer's position already has
+ # its motion_scale applied.
+ var ofs := scroll_offset - layer.position
+ if not scroll_ignore_camera_zoom:
+ # When attention is given to the camera's zoom, we need to account for it.
+ # We can use viewport's canvas transform scale to which the camera has
+ # already applied its zoom.
+ var canvas_scale = get_viewport().canvas_transform.get_scale()
+ # This is taken from godot source: parallax_background.cpp
+ # I don't know why it works.
+ ofs /= canvas_scale.dot(Vector2(0.5, 0.5))
+ layer.motion_offset = ofs
+
+func _ready() -> void:
+ for layer in get_children():
+ if layer is ParallaxLayer:
+ revert_offset(layer)
diff --git a/scripts/has_splash.gd b/scripts/has_splash.gd
new file mode 100644
index 0000000..11bb980
--- /dev/null
+++ b/scripts/has_splash.gd
@@ -0,0 +1,6 @@
+extends Node
+
+export var splash_color: Color = Color.white
+
+func _init() -> void:
+ add_to_group("has_splash")
diff --git a/scripts/launch_rigid.gd b/scripts/launch_rigid.gd
new file mode 100644
index 0000000..b46acef
--- /dev/null
+++ b/scripts/launch_rigid.gd
@@ -0,0 +1,11 @@
+extends RigidBody2D
+
+#MINUMUM AND MAXIMUM IMPULSE
+export var impulse_min = 100
+export var impulse_max = 300
+
+func _ready():
+#SHOOT OFF AT A RANDOM DIRECTION
+ var impulse_strength = rand_range(impulse_min, impulse_max)
+ var angle = rand_range(-360,360)
+ apply_central_impulse(Vector2(cos(angle), sin(angle)) * impulse_strength)
diff --git a/scripts/level_entry.gd b/scripts/level_entry.gd
index 3b82c14..db1b37c 100644
--- a/scripts/level_entry.gd
+++ b/scripts/level_entry.gd
@@ -2,15 +2,38 @@ tool
class_name LevelEntry
extends Resource
-export var title = "" setget set_title
-export var shard_titles = [
+export var title: String = "" setget set_title
+export var shard_titles: Array = [
"", "", "", "",
"5 Rainbow Stars",
"Collection Bonus",
"Time Bonus",
"Life Bonus"]
-export var save_id = ""
-export (PackedScene) var scene
+export var save_id: String = ""
+export var shards_required_sweet: int = 0
+export var shards_required_salty: int = 0
+export var shards_required_spicy: int = 0
+export var shards_required_pungent: int = 0
+export var boss_required: String = ""
+export var boss: bool = false
+export var has_scoreboard: bool = false
+export var scene: PackedScene
+
+var shards_required: int = 0 setget , _get_shards_required
+
+func _get_shards_required() -> int:
+ if Engine.editor_hint:
+ return shards_required
+ match Game.difficulty:
+ Game.Difficulty.SWEET:
+ return shards_required_sweet
+ Game.Difficulty.SALTY:
+ return shards_required_salty
+ Game.Difficulty.SPICY:
+ return shards_required_spicy
+ Game.Difficulty.PUNGENT:
+ return shards_required_pungent
+ return shards_required
func set_title(value):
title = value
diff --git a/scripts/palette_texture.gd b/scripts/palette_texture.gd
new file mode 100644
index 0000000..e9348b8
--- /dev/null
+++ b/scripts/palette_texture.gd
@@ -0,0 +1,50 @@
+tool
+class_name PaletteTexture
+extends ImageTexture
+
+
+export (Array, Color) var colors := [] setget _set_colors
+export var convert_from: Texture = null setget _convert_from
+
+
+var _data := PoolByteArray()
+
+
+func _init() -> void:
+ colors.resize(16)
+ colors.fill(Color.white)
+ _data.resize(16 * 4)
+ _data.fill(255)
+ _update_image()
+
+
+func _set_colors(new_array: Array) -> void:
+ if new_array.size() == 16:
+ colors = new_array
+ _update_image()
+
+
+func _update_image() -> void:
+ for i in colors.size():
+ var c: Color = colors[i]
+ var j: int = i * 4
+ _data[j] = c.r8
+ _data[j + 1] = c.g8
+ _data[j + 2] = c.b8
+ _data[j + 3] = c.a8
+
+ var image := Image.new()
+ image.create_from_data(4, 4, false, Image.FORMAT_RGBA8, _data)
+ create_from_image(image, 0)
+
+
+func _convert_from(texture: Texture) -> void:
+ if texture != null and texture.get_size() == Vector2(4.0, 4.0):
+ var image := texture.get_data()
+ image.lock()
+ for x in 4:
+ for y in 4:
+ colors[x + (y * 4)] = image.get_pixel(x, y)
+ print(colors[x + (y * 4)])
+ image.unlock()
+ _update_image()
diff --git a/scripts/random_spawner.gd b/scripts/random_spawner.gd
new file mode 100644
index 0000000..01288dc
--- /dev/null
+++ b/scripts/random_spawner.gd
@@ -0,0 +1,25 @@
+tool
+extends Node2D
+
+export (PackedScene) var scene
+export (Rect2) var extents setget _set_extents
+export var delay = 1.0
+
+func _ready():
+ if !Engine.editor_hint:
+ get_tree().create_timer(delay, false).connect("timeout", self, "spawn")
+
+func spawn():
+ var node = scene.instance()
+ node.position.x = rand_range(extents.position.x, extents.end.x)
+ node.position.y = rand_range(extents.position.y, extents.end.y)
+ add_child(node)
+ get_tree().create_timer(delay, false).connect("timeout", self, "spawn")
+
+func _draw():
+ if Engine.editor_hint:
+ draw_rect(extents, Color.thistle, false, 1.0)
+
+func _set_extents(value):
+ extents = value
+ update()
diff --git a/scripts/randomize_particle_start.gd b/scripts/randomize_particle_start.gd
new file mode 100644
index 0000000..f9a8552
--- /dev/null
+++ b/scripts/randomize_particle_start.gd
@@ -0,0 +1,4 @@
+extends CPUParticles2D
+
+func _ready() -> void:
+ preprocess = randf() * lifetime
diff --git a/scripts/recolor_border.shader b/scripts/recolor_border.shader
deleted file mode 100644
index c7480e3..0000000
--- a/scripts/recolor_border.shader
+++ /dev/null
@@ -1,32 +0,0 @@
-shader_type canvas_item;
-
-uniform sampler2D palette : hint_albedo;
-uniform vec4 border_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
-uniform bool border_corners = false;
-
-bool is_border(sampler2D tex, vec2 uv, vec2 pixel_size) {
- float check = texture(tex, uv + vec2(pixel_size.x, 0.0)).a;
- check += texture(tex, uv + vec2(-pixel_size.x, 0.0)).a;
- check += texture(tex, uv + vec2(0.0, pixel_size.y)).a;
- check += texture(tex, uv + vec2(0.0, -pixel_size.y)).a;
-
- if (border_corners) {
- check += texture(tex, uv + pixel_size).a;
- check += texture(tex, uv - pixel_size).a;
- check += texture(tex, uv + vec2(pixel_size.x, -pixel_size.y)).a;
- check += texture(tex, uv + vec2(-pixel_size.x, pixel_size.y)).a;
- }
-
- return check > 0.0;
-}
-
-void fragment() {
- vec4 color = texture(TEXTURE, UV);
-
- if (color.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) {
- COLOR = border_color;
- } else {
- COLOR = texture(palette, color.rg );
- COLOR.a = color.a;
- }
-}
diff --git a/scripts/save.gd b/scripts/save.gd
deleted file mode 100644
index cb04878..0000000
--- a/scripts/save.gd
+++ /dev/null
@@ -1,35 +0,0 @@
-extends Node
-
-var file
-
-func load_file(file_number):
- var new_file = ConfigFile.new()
- new_file.load("user://file%d.pr" % file_number)
- file = new_file
-
-func get_level_data(save_id):
- var shards = []
- shards.resize(8)
- for i in 8:
- shards[i] = file.get_value(save_id, "shard_%d" % i, false)
- return {
- # any% score and time
- score_any = file.get_value(save_id, "score_any", 0),
- time_any = file.get_value(save_id, "time_any", INF),
- # 100% score and time
- score_100 = file.get_value(save_id, "score_100", 0),
- time_100 = file.get_value(save_id, "time_100", INF),
- shards = shards
- }
-
-func set_shard_collected(save_id, index, collected = true):
- file.set_value(save_id, "shard_%d" % index, collected)
-
-func set_score(save_id, score, is_100 = false):
- file.set_value(save_id, "score_100" if is_100 else "score_any", int(score))
-
-func set_time(save_id, time, is_100 = false):
- file.set_value(save_id, "time_100" if is_100 else "time_any", float(time))
-
-func save_file(file_number):
- file.save("user://file%d.pr" % file_number)
diff --git a/scripts/scaling.gd b/scripts/scaling.gd
deleted file mode 100644
index b222174..0000000
--- a/scripts/scaling.gd
+++ /dev/null
@@ -1,44 +0,0 @@
-extends Control
-
-var multiple = 1
-onready var viewport = $ViewportContainer
-onready var border = $TextureRect
-onready var cheat_label = $ViewportContainer/Viewport/
-# SCALE MODE: INTEGER, FIT, FILL
-export var scale_mode = 0
-# INTEGER SCALE SETTINGS
-export var overscale = 0
-onready var root = get_tree().root
-# RESOLUTION
-onready var res = Game.resolution
-onready var half_res = Vector2(res.x/2,res.y/2)
-
-func _ready():
- #SCREEN RESIZE SIGNAL
- get_tree().connect("screen_resized", self, "_on_screen_resized")
- root.set_attach_to_screen_rect(root.get_visible_rect())
- _on_screen_resized()
-
-func _on_screen_resized():
-# VARS
- var window_size = OS.get_window_size()
-# INTEGER SCALE
- if scale_mode == 0:
- # CENTER THE VIEWPORT
- viewport.rect_position.x = (window_size.x / 2) - half_res.x
- viewport.rect_position.y = (window_size.y / 2) - half_res.y
- # DETERMINE WHAT THE HIGHEST INTEGER MULTIPLE IS
- multiple = window_size / res
- multiple = Vector2(floor(multiple.x),floor(multiple.y))
- # SET THE HIGHEST SCALE AXIS TO THE LOWEST TO STAY SQUARE
- if multiple.x < multiple.y: multiple.y = multiple.x
- if multiple.x > multiple.y: multiple.x = multiple.y
- # SCALE THE VIEWPORT (IF OVERSCALE IS ON, SCALE IT BY 1 EXTRA)
- viewport.rect_scale = multiple + Vector2(overscale,overscale)
- #viewport.rect_scale = Vector2(2,2)
-# SCALE TO FIT
- if scale_mode == 1:
- get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_VIEWPORT,SceneTree.STRETCH_ASPECT_KEEP,res,1)
-# BORDER
- border.rect_size = window_size
-
diff --git a/scripts/sg_palette.gd b/scripts/sg_palette.gd
new file mode 100644
index 0000000..f413bc3
--- /dev/null
+++ b/scripts/sg_palette.gd
@@ -0,0 +1,5 @@
+extends Node2D
+
+func _ready():
+ var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette)
+ material.set_shader_param("palette", palette)
diff --git a/scripts/show_button.gd b/scripts/show_button.gd
new file mode 100644
index 0000000..8a67a01
--- /dev/null
+++ b/scripts/show_button.gd
@@ -0,0 +1,22 @@
+extends Control
+
+
+export var action: String
+
+
+onready var keyboard_button: Label = $KeyboardButton
+onready var gamepad_button: TextureRect = $GamepadButton
+
+
+func _process(delta: float) -> void:
+ if SceneManager.last_input_gamepad:
+ keyboard_button.visible = false
+ gamepad_button.visible = true
+ var button = Controls.get_button(action)
+ if button >= 0:
+ gamepad_button.texture.region.position.x = float(button % 8) * 12.0
+ gamepad_button.texture.region.position.y = float(button / 8) * 10.0
+ else:
+ keyboard_button.visible = true
+ gamepad_button.visible = false
+ keyboard_button.text = OS.get_scancode_string(Controls.get_key(action))
diff --git a/scripts/snap_sprite.gd b/scripts/snap_sprite.gd
new file mode 100644
index 0000000..e238cde
--- /dev/null
+++ b/scripts/snap_sprite.gd
@@ -0,0 +1,7 @@
+extends Node2D
+
+onready var base_position = position.round()
+
+func _process(delta):
+ #Round sprite position
+ global_position = get_parent().global_position.round() + base_position
diff --git a/scripts/sprite_ext.gd b/scripts/sprite_ext.gd
new file mode 100644
index 0000000..678f04f
--- /dev/null
+++ b/scripts/sprite_ext.gd
@@ -0,0 +1,43 @@
+extends Sprite
+
+
+## emitted when the stop frame is reached
+signal stopped()
+
+
+## speed at which to animate
+export var fps: float = 0.0
+## frame to stop on when reached
+export var stop_at_frame: int = -1
+## whether to animate back and forth instead of loop
+export var ping_pong: bool = false
+## whether to maintain fixed global rotation
+export var rotation_lock: float = NAN
+
+
+## whether the animation is paused
+var stopped: bool = false
+
+
+var _time: float = 0.0
+
+
+func _process(delta):
+ # rotation lock
+ if not is_nan(rotation_lock):
+ set_deferred("global_rotation_degrees", rotation_lock)
+# global_rotation_degrees = rotation_lock
+ # do not animate if paused
+ if stopped:
+ return
+ # accumulate time and animate
+ _time += abs(fps) * delta
+ if _time >= 1.0:
+ _time -= 1.0
+ # posmod to loop around
+ frame = posmod(frame + int(sign(fps)), hframes * vframes)
+ if frame == stop_at_frame:
+ stopped = true
+ emit_signal("stopped")
+ if ping_pong and frame == 0:
+ fps = -fps
diff --git a/scripts/theme.tres b/scripts/theme.tres
deleted file mode 100644
index e60d6f1..0000000
--- a/scripts/theme.tres
+++ /dev/null
@@ -1,6 +0,0 @@
-[gd_resource type="Theme" load_steps=2 format=2]
-
-[ext_resource path="res://fonts/2ndpuberty..fnt" type="BitmapFont" id=1]
-
-[resource]
-default_font = ExtResource( 1 )
diff --git a/scripts/1px_border.gdshader b/shaders/1px_border.gdshader
similarity index 100%
rename from scripts/1px_border.gdshader
rename to shaders/1px_border.gdshader
diff --git a/shaders/beam_cycle.gdshader b/shaders/beam_cycle.gdshader
new file mode 100644
index 0000000..0e09279
--- /dev/null
+++ b/shaders/beam_cycle.gdshader
@@ -0,0 +1,10 @@
+shader_type canvas_item;
+render_mode blend_add;
+
+uniform float cycle_speed = 1.0;
+uniform sampler2D gradient;
+
+void fragment() {
+ COLOR = texture(TEXTURE, UV);
+ COLOR *= texture(gradient, vec2(fract(TIME) * floor(cycle_speed), 0.0));
+}
\ No newline at end of file
diff --git a/shaders/beam_of_sin.gdshader b/shaders/beam_of_sin.gdshader
new file mode 100644
index 0000000..cca26a4
--- /dev/null
+++ b/shaders/beam_of_sin.gdshader
@@ -0,0 +1,19 @@
+shader_type canvas_item;
+
+const float TAU = 6.28319;
+
+uniform float speed = 1.0;
+uniform float cycle_offset = 0.0;
+uniform float wave_length = 1.0;
+uniform float thickness = 0.05;
+
+float plot(vec2 st, float pct) {
+ return step( pct - thickness, st.x) -
+ step( pct + thickness, st.x);
+}
+
+void fragment() {
+ float sin_time = fract(TIME * floor(speed)) * TAU;
+ float x = sin(UV.y * wave_length + sin_time + cycle_offset)*0.5+0.5;
+ COLOR = COLOR * vec4(1.0, 1.0, 1.0, plot(UV * vec2(1.2, 1.0) + vec2(-0.1, 0.0), x));
+}
\ No newline at end of file
diff --git a/shaders/can_stain.tres b/shaders/can_stain.tres
new file mode 100644
index 0000000..84a2d44
--- /dev/null
+++ b/shaders/can_stain.tres
@@ -0,0 +1,15 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=2]
+
+[sub_resource type="Shader" id=2]
+code = "shader_type canvas_item;
+
+void fragment() {
+ COLOR = texture(TEXTURE, UV);
+ // fucked up lighting change to make blood work perfectly
+ if (AT_LIGHT_PASS) {
+ COLOR = vec4(1.0, 1.0, 1.0, COLOR.a);
+ }
+}"
+
+[resource]
+shader = SubResource( 2 )
diff --git a/shaders/color_noise.gdshader b/shaders/color_noise.gdshader
new file mode 100644
index 0000000..6a2cf4a
--- /dev/null
+++ b/shaders/color_noise.gdshader
@@ -0,0 +1,19 @@
+shader_type canvas_item;
+
+uniform bool animate_noise = false;
+uniform float noise_intensity = 1.0;
+uniform float fps = 60.0;
+
+float random (vec2 uv) {
+ return fract(sin(dot(uv.xy,
+ vec2(12.9898,78.233))) * 43758.5453123);
+}
+
+void fragment() {
+ float time = floor(fract(TIME) * fps);
+ vec2 noise_uv = SCREEN_UV + time * float(animate_noise);
+ float noise = random(noise_uv);
+ noise = mix(1.0 - noise_intensity, 1.0, noise);
+
+ COLOR = vec4(COLOR.rgb * noise, COLOR.a);
+}
\ No newline at end of file
diff --git a/shaders/elecricity_no_blood.tres b/shaders/elecricity_no_blood.tres
new file mode 100644
index 0000000..9fa360f
--- /dev/null
+++ b/shaders/elecricity_no_blood.tres
@@ -0,0 +1,134 @@
+[gd_resource type="Shader" format=2]
+
+[resource]
+code = "shader_type canvas_item;
+
+const float TAU = 6.28319;
+
+uniform float arc_speed = 4.0;
+uniform float arc_fps = 10.0;
+uniform float arc_scale = 8.0;
+uniform float arc_threshold = 0.15;
+uniform vec4 arc_color : hint_color = vec4(1.0, 0.93, 0.0, 1.0);
+uniform float gamma = 2.0;
+uniform float flash_rate = 3.0;
+uniform float flash_intensity = 0.2;
+uniform vec4 background_color : hint_color = vec4(0.0, 0.0, 0.0, 0.0);
+
+// Description : Array and textureless GLSL 2D/3D/4D simplex
+// noise functions.
+// Author : Ian McEwan, Ashima Arts.
+// Maintainer : stegu
+// Lastmod : 20110822 (ijm)
+// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
+// Distributed under the MIT License. See LICENSE file.
+// https://github.com/ashima/webgl-noise
+// https://github.com/stegu/webgl-noise
+//
+
+vec3 mod289_3(vec3 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+vec4 mod289_4(vec4 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+vec4 permute(vec4 x) {
+ return mod289_4(((x * 34.0) + 1.0) * x);
+}
+
+vec4 taylorInvSqrt(vec4 r) {
+ return 2.79284291400159 - 0.85373472095314 * r;
+}
+
+float snoise(vec3 v) {
+ vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
+ vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
+
+ // First corner
+ vec3 i = floor(v + dot(v, vec3(C.y)) );
+ vec3 x0 = v - i + dot(i, vec3(C.x)) ;
+
+ // Other corners
+ vec3 g = step(x0.yzx, x0.xyz);
+ vec3 l = 1.0 - g;
+ vec3 i1 = min( g.xyz, l.zxy );
+ vec3 i2 = max( g.xyz, l.zxy );
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ vec3 x1 = x0 - i1 + vec3(C.x);
+ vec3 x2 = x0 - i2 + vec3(C.y); // 2.0*C.x = 1/3 = C.y
+ vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
+
+ // Permutations
+ i = mod289_3(i);
+ vec4 p = permute( permute( permute(
+ i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
+ + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
+ + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
+
+ // Gradients: 7x7 points over a square, mapped onto an octahedron.
+ // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ float n_ = 0.142857142857; // 1.0/7.0
+ vec3 ns = n_ * D.wyz - D.xzx;
+
+ vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
+
+ vec4 x_ = floor(j * ns.z);
+ vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
+
+ vec4 x = x_ *ns.x + vec4(ns.y);
+ vec4 y = y_ *ns.x + vec4(ns.y);
+ vec4 h = 1.0 - abs(x) - abs(y);
+
+ vec4 b0 = vec4( x.xy, y.xy );
+ vec4 b1 = vec4( x.zw, y.zw );
+
+ //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
+ //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
+ vec4 s0 = floor(b0)*2.0 + 1.0;
+ vec4 s1 = floor(b1)*2.0 + 1.0;
+ vec4 sh = -step(h, vec4(0.0));
+
+ vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
+ vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
+
+ vec3 p0 = vec3(a0.xy,h.x);
+ vec3 p1 = vec3(a0.zw,h.y);
+ vec3 p2 = vec3(a1.xy,h.z);
+ vec3 p3 = vec3(a1.zw,h.w);
+
+ //Normalise gradients
+ vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+ // Mix final noise value
+ vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), vec4(0.0));
+ m = m * m;
+ return 22.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3) ) );
+}
+
+
+void fragment() {
+ vec4 tex_color = texture(TEXTURE, UV);
+ tex_color *= COLOR;
+ tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / (gamma + sin(fract(TIME * floor(flash_rate)) * TAU) * flash_intensity)));
+ tex_color.rgb = mix(tex_color.rgb, background_color.rgb, background_color.a);
+// tex_color.rgb = pow(tex_color.rgb, vec3(0.5 + sin(TIME * 20.0) * 0.1));
+// tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / 2.0));
+// tex_color.rgb += (round(sin(TIME * 20.0) * 4.0)) * 0.25 * 0.05;
+ float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, (floor(TIME) + (floor(fract(TIME) * arc_fps)) / arc_fps) * arc_speed));
+// float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, floor(fract(TIME) * arc_fps) * arc_speed / arc_fps));
+ n = step(abs(n), arc_threshold);
+ COLOR = vec4(mix(tex_color.rgb, arc_color.rgb, n * arc_color.a), tex_color.a);
+// float worley = worley(SCREEN_UV, 128.0, 96.0);
+// vec4 tex_color = texture(TEXTURE, UV);
+// COLOR = vec4(mix(vec3(1.0, 1.0, 0.2), tex_color.rgb, step(worley, 0.5)), tex_color.a);
+}"
diff --git a/shaders/electricity.gdshader b/shaders/electricity.gdshader
new file mode 100644
index 0000000..625d032
--- /dev/null
+++ b/shaders/electricity.gdshader
@@ -0,0 +1,134 @@
+shader_type canvas_item;
+
+const float TAU = 6.28319;
+
+uniform float arc_speed = 4.0;
+uniform float arc_fps = 10.0;
+uniform float arc_scale = 8.0;
+uniform float arc_threshold = 0.15;
+uniform vec4 arc_color : hint_color = vec4(1.0, 0.93, 0.0, 1.0);
+uniform float gamma = 2.0;
+uniform float flash_rate = 3.0;
+uniform float flash_intensity = 0.2;
+uniform vec4 background_color : hint_color = vec4(0.0, 0.0, 0.0, 0.0);
+
+// Description : Array and textureless GLSL 2D/3D/4D simplex
+// noise functions.
+// Author : Ian McEwan, Ashima Arts.
+// Maintainer : stegu
+// Lastmod : 20110822 (ijm)
+// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
+// Distributed under the MIT License. See LICENSE file.
+// https://github.com/ashima/webgl-noise
+// https://github.com/stegu/webgl-noise
+//
+
+vec3 mod289_3(vec3 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+vec4 mod289_4(vec4 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+vec4 permute(vec4 x) {
+ return mod289_4(((x * 34.0) + 1.0) * x);
+}
+
+vec4 taylorInvSqrt(vec4 r) {
+ return 2.79284291400159 - 0.85373472095314 * r;
+}
+
+float snoise(vec3 v) {
+ vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
+ vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
+
+ // First corner
+ vec3 i = floor(v + dot(v, vec3(C.y)) );
+ vec3 x0 = v - i + dot(i, vec3(C.x)) ;
+
+ // Other corners
+ vec3 g = step(x0.yzx, x0.xyz);
+ vec3 l = 1.0 - g;
+ vec3 i1 = min( g.xyz, l.zxy );
+ vec3 i2 = max( g.xyz, l.zxy );
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ vec3 x1 = x0 - i1 + vec3(C.x);
+ vec3 x2 = x0 - i2 + vec3(C.y); // 2.0*C.x = 1/3 = C.y
+ vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
+
+ // Permutations
+ i = mod289_3(i);
+ vec4 p = permute( permute( permute(
+ i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
+ + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
+ + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
+
+ // Gradients: 7x7 points over a square, mapped onto an octahedron.
+ // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ float n_ = 0.142857142857; // 1.0/7.0
+ vec3 ns = n_ * D.wyz - D.xzx;
+
+ vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
+
+ vec4 x_ = floor(j * ns.z);
+ vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
+
+ vec4 x = x_ *ns.x + vec4(ns.y);
+ vec4 y = y_ *ns.x + vec4(ns.y);
+ vec4 h = 1.0 - abs(x) - abs(y);
+
+ vec4 b0 = vec4( x.xy, y.xy );
+ vec4 b1 = vec4( x.zw, y.zw );
+
+ //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
+ //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
+ vec4 s0 = floor(b0)*2.0 + 1.0;
+ vec4 s1 = floor(b1)*2.0 + 1.0;
+ vec4 sh = -step(h, vec4(0.0));
+
+ vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
+ vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
+
+ vec3 p0 = vec3(a0.xy,h.x);
+ vec3 p1 = vec3(a0.zw,h.y);
+ vec3 p2 = vec3(a1.xy,h.z);
+ vec3 p3 = vec3(a1.zw,h.w);
+
+ //Normalise gradients
+ vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+ // Mix final noise value
+ vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), vec4(0.0));
+ m = m * m;
+ return 22.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3) ) );
+}
+
+
+void fragment() {
+ if (AT_LIGHT_PASS) {
+ COLOR = vec4(1.0, 1.0, 1.0, COLOR.a);
+ } else {
+ vec4 tex_color = texture(TEXTURE, UV);
+ tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / (gamma + sin(fract(TIME * floor(flash_rate)) * TAU) * flash_intensity)));
+ tex_color.rgb = mix(tex_color.rgb, background_color.rgb, background_color.a);
+ // tex_color.rgb = pow(tex_color.rgb, vec3(0.5 + sin(TIME * 20.0) * 0.1));
+ // tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / 2.0));
+ // tex_color.rgb += (round(sin(TIME * 20.0) * 4.0)) * 0.25 * 0.05;
+ float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, (floor(TIME) + (floor(fract(TIME) * arc_fps)) / arc_fps) * arc_speed));
+// float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, floor(fract(TIME) * arc_fps) * arc_speed / arc_fps));
+ n = step(abs(n), arc_threshold);
+ COLOR = vec4(mix(tex_color.rgb, arc_color.rgb, n * arc_color.a), tex_color.a);
+ // float worley = worley(SCREEN_UV, 128.0, 96.0);
+ // vec4 tex_color = texture(TEXTURE, UV);
+ // COLOR = vec4(mix(vec3(1.0, 1.0, 0.2), tex_color.rgb, step(worley, 0.5)), tex_color.a);
+ }
+}
\ No newline at end of file
diff --git a/shaders/fade.gdshader b/shaders/fade.gdshader
new file mode 100644
index 0000000..b161fab
--- /dev/null
+++ b/shaders/fade.gdshader
@@ -0,0 +1,44 @@
+shader_type canvas_item;
+
+/*
+MIT License
+
+Copyright (c) 2019 Tomek
+
+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.
+*/
+
+uniform vec4 color : hint_color;
+uniform bool smooth_mode = false;
+uniform bool reverse = false;
+uniform float opacity : hint_range(0, 1);
+
+void fragment() {
+ float alpha = texture(TEXTURE, UV).r;
+ if (reverse) {
+ alpha = clamp(1.0 - alpha, 0.0, 1.0);
+ }
+
+ if (smooth_mode) {
+ alpha = mix(0.0, 1.0, clamp(alpha - 1.0 + opacity * 2.0, 0.0, 1.0));
+ } else {
+ alpha = clamp(ceil(alpha + opacity * 1.00001 - 1.0), 0.0, 1.0);
+ }
+ COLOR = vec4(color.rgb, alpha);
+}
diff --git a/shaders/fire.gdshader b/shaders/fire.gdshader
new file mode 100644
index 0000000..35c2f5f
--- /dev/null
+++ b/shaders/fire.gdshader
@@ -0,0 +1,5 @@
+shader_type canvas_item;
+
+void fragment() {
+ COLOR = texture(TEXTURE, vec2(UV.x + sin(TIME / 2.5 + UV.y*6.0)/30.0,UV.y));
+}
\ No newline at end of file
diff --git a/shaders/lcd.gdshader b/shaders/lcd.gdshader
new file mode 100644
index 0000000..078e9d2
--- /dev/null
+++ b/shaders/lcd.gdshader
@@ -0,0 +1,43 @@
+shader_type canvas_item;
+
+const float PI = 3.1415926535;
+
+uniform bool enabled = true;
+uniform vec2 resolution;
+uniform vec2 curvature;
+uniform vec2 scanline_opacity;
+uniform float brightness;
+
+vec2 curve_uv(vec2 uv) {
+ uv = uv * 2.0 - 1.0;
+ vec2 offset = abs(uv.yx) / vec2(curvature.x, curvature.y);
+ uv = uv + uv * offset * offset;
+ uv = uv * 0.5 + 0.5;
+ return uv;
+}
+
+vec3 scanline_intensity(float uv, float res, float opacity) {
+ float intensity = sin((uv * res - 0.25) * PI * 2.0);
+ intensity = ((0.5 * intensity) + 0.5) * 0.9 + 0.1;
+ return vec3(pow(intensity, opacity));
+}
+
+void fragment() {
+ if (enabled) {
+ vec2 curved_uv = UV;
+ vec3 base_color = texture(TEXTURE, curved_uv).rgb;
+
+ base_color += vec3(1.0/256.0);
+ base_color *= scanline_intensity(curved_uv.x, resolution.x, scanline_opacity.y);
+ base_color *= scanline_intensity(curved_uv.y, resolution.y, scanline_opacity.x);
+ base_color *= vec3(brightness);
+
+ if (curved_uv.x < 0.0 || curved_uv.y < 0.0 || curved_uv.x > 1.0 || curved_uv.y > 1.0) {
+ COLOR = vec4(0.0, 0.0, 0.0, 0.0);
+ } else {
+ COLOR = vec4(base_color, 1.0);
+ }
+ } else {
+ COLOR = texture(TEXTURE, UV);
+ }
+}
\ No newline at end of file
diff --git a/shaders/noise_slow.gdshader b/shaders/noise_slow.gdshader
new file mode 100644
index 0000000..34df731
--- /dev/null
+++ b/shaders/noise_slow.gdshader
@@ -0,0 +1,17 @@
+shader_type canvas_item;
+
+uniform bool animate_noise = false;
+uniform float noise_intensity = 1.0;
+
+float random (vec2 uv) {
+ return fract(sin(dot(uv.xy,
+ vec2(12.9898,78.233))) * 43758.5453123);
+}
+
+void fragment() {
+ vec2 noise_uv = SCREEN_UV + fract(TIME) * float(animate_noise) / 10.0;
+ float noise = random(noise_uv);
+ noise = mix(1.0 - noise_intensity, 1.0, noise);
+
+ COLOR = vec4(COLOR.rgb * noise, COLOR.a);
+}
\ No newline at end of file
diff --git a/scripts/recolor.tres b/shaders/recolor.tres
similarity index 100%
rename from scripts/recolor.tres
rename to shaders/recolor.tres
diff --git a/shaders/recolor_border.shader b/shaders/recolor_border.shader
new file mode 100644
index 0000000..ffde7bb
--- /dev/null
+++ b/shaders/recolor_border.shader
@@ -0,0 +1,35 @@
+shader_type canvas_item;
+
+uniform sampler2D palette : hint_albedo;
+uniform vec4 border_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
+uniform bool border_corners = false;
+
+bool is_border(sampler2D tex, vec2 uv, vec2 pixel_size) {
+ float check = texture(tex, uv + vec2(pixel_size.x, 0.0)).a;
+ check += texture(tex, uv + vec2(-pixel_size.x, 0.0)).a;
+ check += texture(tex, uv + vec2(0.0, pixel_size.y)).a;
+ check += texture(tex, uv + vec2(0.0, -pixel_size.y)).a;
+
+ if (border_corners) {
+ check += texture(tex, uv + pixel_size).a;
+ check += texture(tex, uv - pixel_size).a;
+ check += texture(tex, uv + vec2(pixel_size.x, -pixel_size.y)).a;
+ check += texture(tex, uv + vec2(-pixel_size.x, pixel_size.y)).a;
+ }
+
+ return check > 0.0;
+}
+
+void fragment() {
+ vec4 color = texture(TEXTURE, UV);
+
+ // fucked up lighting change to make blood work perfectly
+ if (AT_LIGHT_PASS) {
+ COLOR = vec4(1.0, 1.0, 1.0, color.a);
+ } else if (color.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) {
+ COLOR = border_color;
+ } else {
+ COLOR = texture(palette, color.rg );
+ COLOR.a = color.a;
+ }
+}
diff --git a/shaders/scale3x.gdshader b/shaders/scale3x.gdshader
new file mode 100644
index 0000000..d429071
--- /dev/null
+++ b/shaders/scale3x.gdshader
@@ -0,0 +1,110 @@
+shader_type canvas_item;
+
+const vec4 background = vec4(1., 1., 1., 0.);
+
+uniform float pixel_scale: hint_range(0.0, 1.0) = 1.0;
+
+float dist(vec4 c1, vec4 c2) {
+ return (c1 == c2) ? 0.0 : abs(c1.r - c2.r) + abs(c1.g - c2.g) + abs(c1.b - c2.b);
+}
+
+bool similar(vec4 c1, vec4 c2, vec4 input) {
+ return (c1 == c2 || (dist(c1, c2) <= dist(input, c2) && dist(c1, c2) <= dist(input, c1)));
+}
+
+bool different(vec4 c1, vec4 c2, vec4 input) {
+ return !similar(c1, c2, input);
+}
+
+// rotsprite 3x enlargement algorithm:
+// suppose we are looking at input pixel cE which is surrounded by 8 other
+// pixels:
+// cA cB cC
+// cD cE cF
+// cG cH cI
+// and for that 1 input pixel cE we want to output 4 pixels oA, oB, oC, and oD:
+// E0 E1 E2
+// E3 E4 E5
+// E6 E7 E8
+vec4 scale3x(sampler2D tex, vec2 uv, vec2 pixel_size) {
+ vec4 cE = texture(tex, uv);
+ cE = cE.a == 0.0 ? background : cE;
+
+ vec4 cD = texture(tex, uv + pixel_size * vec2(-1., .0));
+ cD = cD.a == 0.0 ? background : cD;
+ vec4 cF = texture(tex, uv + pixel_size * vec2(1., .0));
+ cF = cF.a == 0.0 ? background : cF;
+ vec4 cH = texture(tex, uv + pixel_size * vec2(.0, 1.));
+ cH = cH.a == 0.0 ? background : cH;
+ vec4 cB = texture(tex, uv + pixel_size * vec2(.0, -1.));
+ cB = cB.a == 0.0 ? background : cB;
+ vec4 cA = texture(tex, uv + pixel_size * vec2(-1., -1.));
+ cA = cA.a == 0.0 ? background : cA;
+ vec4 cI = texture(tex, uv + pixel_size * vec2(1., 1.));
+ cI = cI.a == 0.0 ? background : cI;
+ vec4 cG = texture(tex, uv + pixel_size * vec2(-1., 1.));
+ cG = cG.a == 0.0 ? background : cG;
+ vec4 cC = texture(tex, uv + pixel_size * vec2(1., -1.));
+ cC = cC.a == 0.0 ? background : cC;
+
+ if (different(cD,cF, cE)
+ && different(cH,cB, cE)
+ && ((similar(cE, cD, cE) || similar(cE, cH, cE) || similar(cE, cF, cE) || similar(cE, cB, cE) ||
+ ((different(cA, cI, cE) || similar(cE, cG, cE) || similar(cE, cC, cE)) &&
+ (different(cG, cC, cE) || similar(cE, cA, cE) || similar(cE, cI, cE))))))
+ {
+ vec2 unit = uv - (floor(uv / pixel_size) * pixel_size);
+ vec2 pixel_3_size = pixel_size / 3.0;
+
+ // E0
+ if (unit.x < pixel_3_size.x && unit.y < pixel_3_size.y) {
+ return similar(cB, cD, cE) ? cB : cE;
+ }
+
+
+ // E1
+ if (unit.x < pixel_3_size.x * 2.0 && unit.y < pixel_3_size.y) {
+ return (similar(cB, cD, cE) && different(cE, cC, cE))
+ || (similar(cB, cF, cE) && different(cE, cA, cE)) ? cB : cE;
+ }
+
+ // E2
+ if (unit.y < pixel_3_size.y) {
+ return similar(cB, cF, cE) ? cB : cE;
+ }
+
+ // E3
+ if (unit.x < pixel_3_size.x && unit.y < pixel_3_size.y * 2.0) {
+ return (similar(cB, cD, cE) && different(cE, cG, cE)
+ || (similar(cH, cD, cE) && different(cE, cA, cE))) ? cD : cE;
+ }
+
+ // E5
+ if (unit.x >= pixel_3_size.x * 2.0 && unit.x < pixel_3_size.x * 3.0 && unit.y < pixel_3_size.y * 2.0) {
+ return (similar(cB, cF, cE) && different(cE, cI, cE))
+ || (similar(cH, cF, cE) && different(cE, cC, cE)) ? cF : cE;
+ }
+
+ // E6
+ if (unit.x < pixel_3_size.x && unit.y >= pixel_3_size.y * 2.0) {
+ return similar(cH, cD, cE) ? cH : cE;
+ }
+
+ // E7
+ if (unit.x < pixel_3_size.x * 2.0 && unit.y >= pixel_3_size.y * 2.0) {
+ return (similar(cH, cD, cE) && different(cE, cI, cE))
+ || (similar(cH, cF, cE) && different(cE, cG, cE)) ? cH : cE;
+ }
+
+ // E8
+ if (unit.y >= pixel_3_size.y * 2.0) {
+ return similar(cH, cF, cE) ? cH : cE;
+ }
+ }
+
+ return cE;
+}
+
+void fragment() {
+ COLOR = scale3x(TEXTURE, UV, TEXTURE_PIXEL_SIZE * pixel_scale);
+}
\ No newline at end of file
diff --git a/shaders/ska_plane.gdshader b/shaders/ska_plane.gdshader
new file mode 100644
index 0000000..668e1f2
--- /dev/null
+++ b/shaders/ska_plane.gdshader
@@ -0,0 +1,31 @@
+shader_type canvas_item;
+render_mode skip_vertex_transform;
+
+uniform vec4 color_1 : hint_color = vec4(1.0, 1.0, 1.0, 1.0);
+uniform vec4 color_2 : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
+uniform vec2 checker_size = vec2(8.0, 8.0);
+uniform vec2 pan_speed = vec2(0.0, 0.0);
+uniform vec2 cycle_speed = vec2(0.0, 0.0);
+uniform vec2 cycle_alternation = vec2(0.0, 0.0);
+uniform mat2 uv_transform = mat2(1.0);
+
+float checker(vec2 uv) {
+ vec2 div_uv = floor((uv) / checker_size);
+ float fmodResult = mod(div_uv.x + div_uv.y, 2.0);
+ return max(sign(fmodResult), 0.0);
+}
+
+void vertex() {
+ UV = VERTEX;
+ VERTEX = (WORLD_MATRIX * (EXTRA_MATRIX * vec4(VERTEX, 0.0, 1.0))).xy;
+}
+
+void fragment() {
+ vec2 uv = uv_transform * (UV - pan_speed * TIME);
+ vec2 alternation = mix(vec2(1.0), vec2(
+ (checker(vec2(uv.y, 0.0)) - 0.5) * 2.0,
+ (checker(vec2(0.0, uv.x)) - 0.5) * 2.0
+ ), cycle_alternation);
+ uv = uv - cycle_speed * alternation * TIME;
+ COLOR = mix(color_1, color_2, checker(uv));
+}
\ No newline at end of file
diff --git a/shaders/water_ripple.gdshader b/shaders/water_ripple.gdshader
new file mode 100644
index 0000000..64fef40
--- /dev/null
+++ b/shaders/water_ripple.gdshader
@@ -0,0 +1,12 @@
+shader_type canvas_item;
+
+uniform float offset = 1.5;
+uniform float speed = 0.5;
+uniform float waves = 2.0;
+uniform float color_amount = 0.2;
+
+void fragment() {
+ vec2 uv = SCREEN_UV;
+ uv.x += floor(sin(TIME * speed - SCREEN_UV.y * waves) * offset) * SCREEN_PIXEL_SIZE.x;
+ COLOR = mix(texture(SCREEN_TEXTURE, uv), COLOR, color_amount);
+}
\ No newline at end of file
diff --git a/shaders/wibble_border.gdshader b/shaders/wibble_border.gdshader
new file mode 100644
index 0000000..1a16ca6
--- /dev/null
+++ b/shaders/wibble_border.gdshader
@@ -0,0 +1,37 @@
+shader_type canvas_item;
+
+uniform vec2 speed = vec2(0.0, 0.0);
+uniform vec2 ammount = vec2(0.0, 0.0);
+uniform vec2 offset = vec2(0.0, 0.0);
+uniform vec2 delay = vec2(0.0, 0.0);
+
+uniform vec4 border_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
+uniform bool border_corners = false;
+
+bool is_border(sampler2D tex, vec2 uv, vec2 pixel_size) {
+ float check = texture(tex, uv + vec2(pixel_size.x, 0.0)).a;
+ check += texture(tex, uv + vec2(-pixel_size.x, 0.0)).a;
+ check += texture(tex, uv + vec2(0.0, pixel_size.y)).a;
+ check += texture(tex, uv + vec2(0.0, -pixel_size.y)).a;
+
+ if (border_corners) {
+ check += texture(tex, uv + pixel_size).a;
+ check += texture(tex, uv - pixel_size).a;
+ check += texture(tex, uv + vec2(pixel_size.x, -pixel_size.y)).a;
+ check += texture(tex, uv + vec2(-pixel_size.x, pixel_size.y)).a;
+ }
+
+ return check > 0.0;
+}
+
+void vertex() {
+ VERTEX += sin(speed * (delay + TIME)) * ammount + offset;
+}
+
+void fragment() {
+ COLOR = texture(TEXTURE, UV);
+
+ if (COLOR.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) {
+ COLOR = border_color;
+ }
+}
\ No newline at end of file
diff --git a/shaders/wibble_wobble.gdshader b/shaders/wibble_wobble.gdshader
new file mode 100644
index 0000000..6bd39f5
--- /dev/null
+++ b/shaders/wibble_wobble.gdshader
@@ -0,0 +1,10 @@
+shader_type canvas_item;
+
+uniform vec2 speed = vec2(0.0, 0.0);
+uniform vec2 ammount = vec2(0.0, 0.0);
+uniform vec2 offset = vec2(0.0, 0.0);
+uniform vec2 delay = vec2(0.0, 0.0);
+
+void vertex() {
+ VERTEX += sin(speed * (delay + TIME)) * ammount + offset;
+}
\ No newline at end of file
diff --git a/tilesets/t_abstract.tres b/tilesets/t_abstract.tres
new file mode 100644
index 0000000..fa4bac4
--- /dev/null
+++ b/tilesets/t_abstract.tres
@@ -0,0 +1,174 @@
+[gd_resource type="TileSet" load_steps=18 format=2]
+
+[ext_resource path="res://graphics/tiles/abstract.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=3]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[resource]
+0/name = "griddy"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 32, 32 )
+0/tile_mode = 1
+0/autotile/bitmask_mode = 1
+0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+0/autotile/icon_coordinate = Vector2( 0, 3 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/autotile/fallback_mode = 0
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 1 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 3 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
diff --git a/tilesets/t_abyss.tres b/tilesets/t_abyss.tres
new file mode 100644
index 0000000..76adf2b
--- /dev/null
+++ b/tilesets/t_abyss.tres
@@ -0,0 +1,323 @@
+[gd_resource type="TileSet" load_steps=24 format=2]
+
+[ext_resource path="res://graphics/tiles/abyss.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/seaweed.tres" type="Texture" id=2]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=3]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 8, 4, 0, 4, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 8, 4, 0, 4, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 8, 4, 0, 4, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 8, 4, 0, 4, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 8, 2, 0, 2, 0, 2, 8, 2 )
+
+[resource]
+0/name = "shale"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 32, 0, 32, 32 )
+0/tile_mode = 1
+0/autotile/bitmask_mode = 1
+0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+0/autotile/icon_coordinate = Vector2( 0, 3 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/autotile/fallback_mode = 0
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 1 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 3 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
+1/name = "limestone"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 0, 24, 32, 8 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 29818896, Vector2( 1, 0 ), 29818928, Vector2( 2, 0 ), 29818936, Vector2( 3, 0 ), 29818904 ]
+1/autotile/icon_coordinate = Vector2( 0, 0 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/autotile/fallback_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 17 )
+1/shape_one_way = false
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+1/z_index = 0
+2/name = "misc"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 0, 0, 32, 8 )
+2/tile_mode = 2
+2/autotile/icon_coordinate = Vector2( 0, 0 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape_one_way = false
+2/shape_one_way_margin = 0.0
+2/shapes = [ ]
+2/z_index = 0
+3/name = "one way"
+3/texture = ExtResource( 1 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 0, 8, 8, 8 )
+3/tile_mode = 2
+3/autotile/icon_coordinate = Vector2( 0, 0 )
+3/autotile/tile_size = Vector2( 8, 8 )
+3/autotile/spacing = 0
+3/autotile/occluder_map = [ ]
+3/autotile/navpoly_map = [ ]
+3/autotile/priority_map = [ ]
+3/autotile/z_index_map = [ ]
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape = SubResource( 21 )
+3/shape_one_way = true
+3/shape_one_way_margin = 1.0
+3/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+3/z_index = 0
+4/name = "cracks"
+4/texture = ExtResource( 1 )
+4/tex_offset = Vector2( 0, 0 )
+4/modulate = Color( 1, 1, 1, 1 )
+4/region = Rect2( 8, 8, 8, 8 )
+4/tile_mode = 2
+4/autotile/icon_coordinate = Vector2( 0, 0 )
+4/autotile/tile_size = Vector2( 8, 8 )
+4/autotile/spacing = 0
+4/autotile/occluder_map = [ ]
+4/autotile/navpoly_map = [ ]
+4/autotile/priority_map = [ ]
+4/autotile/z_index_map = [ ]
+4/occluder_offset = Vector2( 0, 0 )
+4/navigation_offset = Vector2( 0, 0 )
+4/shape_offset = Vector2( 0, 0 )
+4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+4/shape_one_way = false
+4/shape_one_way_margin = 0.0
+4/shapes = [ ]
+4/z_index = 0
+5/name = "seaweed.tres 5"
+5/texture = ExtResource( 2 )
+5/tex_offset = Vector2( 0, 0 )
+5/modulate = Color( 1, 1, 1, 1 )
+5/region = Rect2( 0, 0, 8, 8 )
+5/tile_mode = 0
+5/occluder_offset = Vector2( 0, 0 )
+5/navigation_offset = Vector2( 0, 0 )
+5/shape_offset = Vector2( 0, 0 )
+5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+5/shape_one_way = false
+5/shape_one_way_margin = 0.0
+5/shapes = [ ]
+5/z_index = 0
diff --git a/tilesets/t_canopy.tres b/tilesets/t_canopy.tres
index a9f61a9..95814e5 100644
--- a/tilesets/t_canopy.tres
+++ b/tilesets/t_canopy.tres
@@ -1,6 +1,7 @@
-[gd_resource type="TileSet" load_steps=9 format=2]
+[gd_resource type="TileSet" load_steps=31 format=2]
[ext_resource path="res://graphics/tiles/canopy.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/mushroom_red.tres" type="Texture" id=2]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
@@ -23,12 +24,75 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
[sub_resource type="ConvexPolygonShape2D" id=7]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=27]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=28]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
[resource]
0/name = "canopy.png 0"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
-0/region = Rect2( 0, 0, 32, 40 )
+0/region = Rect2( 0, 0, 32, 24 )
0/tile_mode = 2
0/autotile/icon_coordinate = Vector2( 0, 0 )
0/autotile/tile_size = Vector2( 8, 8 )
@@ -88,3 +152,193 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0
+1/name = "mushroom_red.tres 1"
+1/texture = ExtResource( 2 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 0, 0, 8, 8 )
+1/tile_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape_one_way = false
+1/shape_one_way_margin = 0.0
+1/shapes = [ ]
+1/z_index = 0
+2/name = "logs"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 32, 0, 32, 32 )
+2/tile_mode = 1
+2/autotile/bitmask_mode = 1
+2/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 176, Vector2( 1, 1 ), 406, Vector2( 1, 2 ), 50, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 376, Vector2( 2, 2 ), 61, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 152, Vector2( 3, 1 ), 211, Vector2( 3, 2 ), 26, Vector2( 3, 3 ), 24 ]
+2/autotile/icon_coordinate = Vector2( 0, 3 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/autotile/fallback_mode = 0
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape = SubResource( 8 )
+2/shape_one_way = false
+2/shape_one_way_margin = 1.0
+2/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+2/z_index = 0
+3/name = "ground"
+3/texture = ExtResource( 1 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 0, 24, 24, 16 )
+3/tile_mode = 1
+3/autotile/bitmask_mode = 1
+3/autotile/bitmask_flags = [ Vector2( 0, 0 ), 21299376, Vector2( 0, 1 ), 21299250, Vector2( 1, 0 ), 21299384, Vector2( 1, 1 ), 21299258, Vector2( 2, 0 ), 21299352, Vector2( 2, 1 ), 21299226 ]
+3/autotile/icon_coordinate = Vector2( 1, 0 )
+3/autotile/tile_size = Vector2( 8, 8 )
+3/autotile/spacing = 0
+3/autotile/occluder_map = [ ]
+3/autotile/navpoly_map = [ ]
+3/autotile/priority_map = [ ]
+3/autotile/z_index_map = [ ]
+3/autotile/fallback_mode = 0
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape = SubResource( 23 )
+3/shape_one_way = false
+3/shape_one_way_margin = 1.0
+3/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 27 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 28 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+3/z_index = 0
diff --git a/tilesets/t_cave.tres b/tilesets/t_cave.tres
index c279195..978247f 100644
--- a/tilesets/t_cave.tres
+++ b/tilesets/t_cave.tres
@@ -1,6 +1,7 @@
-[gd_resource type="TileSet" load_steps=6 format=2]
+[gd_resource type="TileSet" load_steps=30 format=2]
[ext_resource path="res://graphics/tiles/cave.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/mushroom_brown.tres" type="Texture" id=2]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
@@ -14,6 +15,75 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
[sub_resource type="ConvexPolygonShape2D" id=4]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+[sub_resource type="ConvexPolygonShape2D" id=27]
+points = PoolVector2Array( 8, 0, 0, 0, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 0, -16, 8, -16, 8, -16, 0, -16 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 0, -16, 8, -16, 8, -16, 0, -16 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 0, 8, 0 )
+
[resource]
0/name = "cave.png 0"
0/texture = ExtResource( 1 )
@@ -59,5 +129,207 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
"one_way_margin": 1.0,
"shape": SubResource( 4 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 27 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0
+1/name = "rock-full"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 32, 0, 32, 32 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+1/autotile/icon_coordinate = Vector2( 0, 3 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/autotile/fallback_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 5 )
+1/shape_one_way = false
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+1/z_index = 0
+2/name = "rock-thin"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 32, 32, 32, 8 )
+2/tile_mode = 1
+2/autotile/bitmask_mode = 1
+2/autotile/bitmask_flags = [ Vector2( 0, 0 ), 29818896, Vector2( 1, 0 ), 29818928, Vector2( 2, 0 ), 29818936, Vector2( 3, 0 ), 29818904 ]
+2/autotile/icon_coordinate = Vector2( 0, 0 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/autotile/fallback_mode = 0
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape = SubResource( 21 )
+2/shape_one_way = false
+2/shape_one_way_margin = 1.0
+2/shapes = [ {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+2/z_index = 0
+3/name = "mushroom_brown.tres 3"
+3/texture = ExtResource( 2 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 0, 0, 8, 8 )
+3/tile_mode = 0
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape_one_way = false
+3/shape_one_way_margin = 0.0
+3/shapes = [ ]
+3/z_index = 0
diff --git a/tilesets/t_death.tres b/tilesets/t_death.tres
index acb188b..eaab6df 100644
--- a/tilesets/t_death.tres
+++ b/tilesets/t_death.tres
@@ -1,8 +1,32 @@
-[gd_resource type="TileSet" load_steps=4 format=2]
+[gd_resource type="TileSet" load_steps=16 format=2]
[ext_resource path="res://graphics/tiles/water.tres" type="Texture" id=1]
[ext_resource path="res://graphics/tiles/spike.png" type="Texture" id=2]
[ext_resource path="res://graphics/tiles/water_bottom.png" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/oil_bottom.png" type="Texture" id=4]
+[ext_resource path="res://graphics/tiles/oil.tres" type="Texture" id=5]
+[ext_resource path="res://graphics/tiles/blood_bottom.png" type="Texture" id=6]
+[ext_resource path="res://graphics/tiles/blood.tres" type="Texture" id=7]
+[ext_resource path="res://graphics/tiles/water_light.tres" type="Texture" id=8]
+[ext_resource path="res://graphics/tiles/water_light_bottom.png" type="Texture" id=9]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 2, 2, 6, 2, 6, 6, 2, 6 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
[resource]
0/name = "water.tres 0"
@@ -36,24 +60,17 @@
1/navigation_offset = Vector2( 0, 0 )
1/shape_offset = Vector2( 0, 0 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 1 )
1/shape_one_way = false
-1/shape_one_way_margin = 0.0
-1/shapes = [ ]
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
1/z_index = 0
-2/name = "spike.png 2"
-2/texture = ExtResource( 2 )
-2/tex_offset = Vector2( 0, 0 )
-2/modulate = Color( 1, 1, 1, 1 )
-2/region = Rect2( 8, 0, 8, 8 )
-2/tile_mode = 0
-2/occluder_offset = Vector2( 0, 0 )
-2/navigation_offset = Vector2( 0, 0 )
-2/shape_offset = Vector2( 0, 0 )
-2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-2/shape_one_way = false
-2/shape_one_way_margin = 0.0
-2/shapes = [ ]
-2/z_index = 0
3/name = "water_bottom.png 3"
3/texture = ExtResource( 3 )
3/tex_offset = Vector2( 0, 0 )
@@ -64,7 +81,182 @@
3/navigation_offset = Vector2( 0, 0 )
3/shape_offset = Vector2( 0, 0 )
3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape = SubResource( 2 )
3/shape_one_way = false
-3/shape_one_way_margin = 0.0
-3/shapes = [ ]
+3/shape_one_way_margin = 1.0
+3/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
3/z_index = 10
+6/name = "oil_bottom.png 6"
+6/texture = ExtResource( 4 )
+6/tex_offset = Vector2( 0, 0 )
+6/modulate = Color( 1, 1, 1, 1 )
+6/region = Rect2( 0, 0, 8, 8 )
+6/tile_mode = 2
+6/autotile/icon_coordinate = Vector2( 0, 0 )
+6/autotile/tile_size = Vector2( 8, 8 )
+6/autotile/spacing = 0
+6/autotile/occluder_map = [ ]
+6/autotile/navpoly_map = [ ]
+6/autotile/priority_map = [ ]
+6/autotile/z_index_map = [ ]
+6/occluder_offset = Vector2( 0, 0 )
+6/navigation_offset = Vector2( 0, 0 )
+6/shape_offset = Vector2( 0, 0 )
+6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+6/shape = SubResource( 5 )
+6/shape_one_way = false
+6/shape_one_way_margin = 1.0
+6/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+6/z_index = 10
+7/name = "oil.tres 7"
+7/texture = ExtResource( 5 )
+7/tex_offset = Vector2( 0, 0 )
+7/modulate = Color( 1, 1, 1, 1 )
+7/region = Rect2( 0, 0, 8, 8 )
+7/tile_mode = 2
+7/autotile/icon_coordinate = Vector2( 0, 0 )
+7/autotile/tile_size = Vector2( 8, 8 )
+7/autotile/spacing = 0
+7/autotile/occluder_map = [ ]
+7/autotile/navpoly_map = [ ]
+7/autotile/priority_map = [ ]
+7/autotile/z_index_map = [ ]
+7/occluder_offset = Vector2( 0, 0 )
+7/navigation_offset = Vector2( 0, 0 )
+7/shape_offset = Vector2( 0, 0 )
+7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+7/shape_one_way = false
+7/shape_one_way_margin = 0.0
+7/shapes = [ ]
+7/z_index = 10
+8/name = "blood.tres 8"
+8/texture = ExtResource( 7 )
+8/tex_offset = Vector2( 0, 0 )
+8/modulate = Color( 1, 1, 1, 1 )
+8/region = Rect2( 0, 0, 8, 8 )
+8/tile_mode = 2
+8/autotile/icon_coordinate = Vector2( 0, 0 )
+8/autotile/tile_size = Vector2( 8, 8 )
+8/autotile/spacing = 0
+8/autotile/occluder_map = [ ]
+8/autotile/navpoly_map = [ ]
+8/autotile/priority_map = [ ]
+8/autotile/z_index_map = [ ]
+8/occluder_offset = Vector2( 0, 0 )
+8/navigation_offset = Vector2( 0, 0 )
+8/shape_offset = Vector2( 0, 0 )
+8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+8/shape_one_way = false
+8/shape_one_way_margin = 0.0
+8/shapes = [ ]
+8/z_index = 10
+9/name = "blood_bottom.png 9"
+9/texture = ExtResource( 6 )
+9/tex_offset = Vector2( 0, 0 )
+9/modulate = Color( 1, 1, 1, 1 )
+9/region = Rect2( 0, 0, 8, 8 )
+9/tile_mode = 2
+9/autotile/icon_coordinate = Vector2( 0, 0 )
+9/autotile/tile_size = Vector2( 8, 8 )
+9/autotile/spacing = 0
+9/autotile/occluder_map = [ ]
+9/autotile/navpoly_map = [ ]
+9/autotile/priority_map = [ ]
+9/autotile/z_index_map = [ ]
+9/occluder_offset = Vector2( 0, 0 )
+9/navigation_offset = Vector2( 0, 0 )
+9/shape_offset = Vector2( 0, 0 )
+9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+9/shape = SubResource( 6 )
+9/shape_one_way = false
+9/shape_one_way_margin = 1.0
+9/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+9/z_index = 10
+10/name = "water_light.tres 10"
+10/texture = ExtResource( 8 )
+10/tex_offset = Vector2( 0, 0 )
+10/modulate = Color( 1, 1, 1, 1 )
+10/region = Rect2( 0, 0, 8, 8 )
+10/tile_mode = 2
+10/autotile/icon_coordinate = Vector2( 0, 0 )
+10/autotile/tile_size = Vector2( 8, 8 )
+10/autotile/spacing = 0
+10/autotile/occluder_map = [ ]
+10/autotile/navpoly_map = [ ]
+10/autotile/priority_map = [ ]
+10/autotile/z_index_map = [ ]
+10/occluder_offset = Vector2( 0, 0 )
+10/navigation_offset = Vector2( 0, 0 )
+10/shape_offset = Vector2( 0, 0 )
+10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+10/shape_one_way = false
+10/shape_one_way_margin = 0.0
+10/shapes = [ ]
+10/z_index = 10
+11/name = "water_light_bottom.png 11"
+11/texture = ExtResource( 9 )
+11/tex_offset = Vector2( 0, 0 )
+11/modulate = Color( 1, 1, 1, 1 )
+11/region = Rect2( 0, 0, 8, 8 )
+11/tile_mode = 2
+11/autotile/icon_coordinate = Vector2( 0, 0 )
+11/autotile/tile_size = Vector2( 8, 8 )
+11/autotile/spacing = 0
+11/autotile/occluder_map = [ ]
+11/autotile/navpoly_map = [ ]
+11/autotile/priority_map = [ ]
+11/autotile/z_index_map = [ ]
+11/occluder_offset = Vector2( 0, 0 )
+11/navigation_offset = Vector2( 0, 0 )
+11/shape_offset = Vector2( 0, 0 )
+11/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+11/shape = SubResource( 7 )
+11/shape_one_way = false
+11/shape_one_way_margin = 1.0
+11/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+11/z_index = 10
+12/name = "spike.png 12"
+12/texture = ExtResource( 2 )
+12/tex_offset = Vector2( 0, 0 )
+12/modulate = Color( 1, 1, 1, 1 )
+12/region = Rect2( 8, 0, 8, 8 )
+12/tile_mode = 0
+12/occluder_offset = Vector2( 0, 0 )
+12/navigation_offset = Vector2( 0, 0 )
+12/shape_offset = Vector2( 0, 0 )
+12/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+12/shape = SubResource( 8 )
+12/shape_one_way = false
+12/shape_one_way_margin = 1.0
+12/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+12/z_index = 0
diff --git a/tilesets/t_grass.tres b/tilesets/t_grass.tres
index 4afaee6..4f434a5 100644
--- a/tilesets/t_grass.tres
+++ b/tilesets/t_grass.tres
@@ -1,6 +1,9 @@
-[gd_resource type="TileSet" load_steps=16 format=2]
+[gd_resource type="TileSet" load_steps=35 format=2]
[ext_resource path="res://graphics/tiles/grass.png" type="Texture" id=1]
+[ext_resource path="res://graphics/tiles/flower_red.tres" type="Texture" id=2]
+[ext_resource path="res://graphics/tiles/flower_blue.tres" type="Texture" id=3]
+[ext_resource path="res://graphics/tiles/flower_pink.tres" type="Texture" id=4]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
@@ -44,8 +47,56 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
[sub_resource type="ConvexPolygonShape2D" id=16]
points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=27]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=28]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=29]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=30]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=31]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=32]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
[resource]
-0/name = "grass.png 0"
+0/name = "old grass"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
@@ -172,7 +223,7 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
1/shape_one_way_margin = 0.0
1/shapes = [ ]
1/z_index = 0
-2/name = "grass.png 2"
+2/name = "flowers"
2/texture = ExtResource( 1 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
@@ -193,3 +244,166 @@ points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
2/shape_one_way_margin = 0.0
2/shapes = [ ]
2/z_index = 0
+3/name = "grass scholar"
+3/texture = ExtResource( 1 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 32, 0, 32, 32 )
+3/tile_mode = 1
+3/autotile/bitmask_mode = 1
+3/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+3/autotile/icon_coordinate = Vector2( 0, 3 )
+3/autotile/tile_size = Vector2( 8, 8 )
+3/autotile/spacing = 0
+3/autotile/occluder_map = [ ]
+3/autotile/navpoly_map = [ ]
+3/autotile/priority_map = [ ]
+3/autotile/z_index_map = [ ]
+3/autotile/fallback_mode = 0
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape = SubResource( 17 )
+3/shape_one_way = false
+3/shape_one_way_margin = 1.0
+3/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 27 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 28 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 29 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 30 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 31 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 32 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+3/z_index = 0
+4/name = "flower_red.tres 4"
+4/texture = ExtResource( 2 )
+4/tex_offset = Vector2( 0, 0 )
+4/modulate = Color( 1, 1, 1, 1 )
+4/region = Rect2( 0, 0, 9, 8 )
+4/tile_mode = 0
+4/occluder_offset = Vector2( 0, 0 )
+4/navigation_offset = Vector2( 0, 0 )
+4/shape_offset = Vector2( 0, 0 )
+4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+4/shape_one_way = false
+4/shape_one_way_margin = 0.0
+4/shapes = [ ]
+4/z_index = 0
+5/name = "flower_pink.tres 5"
+5/texture = ExtResource( 4 )
+5/tex_offset = Vector2( 0, 0 )
+5/modulate = Color( 1, 1, 1, 1 )
+5/region = Rect2( 0, 0, 9, 8 )
+5/tile_mode = 0
+5/occluder_offset = Vector2( 0, 0 )
+5/navigation_offset = Vector2( 0, 0 )
+5/shape_offset = Vector2( 0, 0 )
+5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+5/shape_one_way = false
+5/shape_one_way_margin = 0.0
+5/shapes = [ ]
+5/z_index = 0
+6/name = "flower_blue.tres 6"
+6/texture = ExtResource( 3 )
+6/tex_offset = Vector2( 0, 0 )
+6/modulate = Color( 1, 1, 1, 1 )
+6/region = Rect2( 0, 0, 9, 8 )
+6/tile_mode = 0
+6/occluder_offset = Vector2( 0, 0 )
+6/navigation_offset = Vector2( 0, 0 )
+6/shape_offset = Vector2( 0, 0 )
+6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+6/shape_one_way = false
+6/shape_one_way_margin = 0.0
+6/shapes = [ ]
+6/z_index = 0
diff --git a/tilesets/t_horror.tres b/tilesets/t_horror.tres
new file mode 100644
index 0000000..cf67855
--- /dev/null
+++ b/tilesets/t_horror.tres
@@ -0,0 +1,445 @@
+[gd_resource type="TileSet" load_steps=43 format=2]
+
+[ext_resource path="res://graphics/tiles/horror.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=3]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 8, 6, 2, 6, 2, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 2, 2, 6, 2, 6, 8, 2, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 8, 6, 2, 6, 2, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 8, 6, 2, 6, 2, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 6, 6, 2, 6, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 6, 6, 2, 6, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 6, 6, 0, 6, 0, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 6, 6, 0, 6, 0, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 6, 8, 2, 8, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 6, 6, 0, 6, 0, 2, 6, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 6, 6, 2, 6, 2, 0, 6, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=43]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=27]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=28]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=29]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=30]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=31]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=32]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=33]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=34]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=35]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=36]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=37]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=38]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=39]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=40]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=41]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=42]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[resource]
+0/name = "bones"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 32, 0, 32, 32 )
+0/tile_mode = 1
+0/autotile/bitmask_mode = 1
+0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+0/autotile/icon_coordinate = Vector2( 0, 0 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/autotile/fallback_mode = 0
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 2 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 3 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 43 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
+1/name = "earth"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 32, 32, 32, 32 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+1/autotile/icon_coordinate = Vector2( 0, 0 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/autotile/fallback_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 27 )
+1/shape_one_way = false
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 27 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 28 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 29 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 30 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 31 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 32 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 33 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 34 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 35 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 36 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 37 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 38 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 39 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 40 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 41 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 42 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+1/z_index = 0
+2/name = "misc"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 0, 0, 32, 64 )
+2/tile_mode = 2
+2/autotile/icon_coordinate = Vector2( 0, 0 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape_one_way = false
+2/shape_one_way_margin = 0.0
+2/shapes = [ ]
+2/z_index = 0
diff --git a/tilesets/t_laboratory.tres b/tilesets/t_laboratory.tres
new file mode 100644
index 0000000..1f4092e
--- /dev/null
+++ b/tilesets/t_laboratory.tres
@@ -0,0 +1,468 @@
+[gd_resource type="TileSet" load_steps=40 format=2]
+
+[ext_resource path="res://graphics/tiles/laboratory.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=27]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=28]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=29]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=30]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=31]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=32]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=33]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=34]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=35]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=36]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=37]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=38]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=39]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=40]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=41]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=42]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=43]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=44]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=45]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=46]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=63]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=64]
+points = PoolVector2Array( 8, 2, 0, 2, 0, 2, 8, 2 )
+
+[resource]
+0/name = "beam"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 32, 8 )
+0/tile_mode = 1
+0/autotile/bitmask_mode = 1
+0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 29818896, Vector2( 1, 0 ), 29818928, Vector2( 2, 0 ), 29818936, Vector2( 3, 0 ), 29818904 ]
+0/autotile/icon_coordinate = Vector2( 0, 0 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/autotile/fallback_mode = 0
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 11 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
+1/name = "plate_slats"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 32, 0, 32, 32 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+1/autotile/icon_coordinate = Vector2( 0, 3 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/autotile/fallback_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 15 )
+1/shape_one_way = false
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 27 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 28 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 29 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 30 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+1/z_index = 0
+2/name = "plate_circuits"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 32, 32, 32, 32 )
+2/tile_mode = 1
+2/autotile/bitmask_mode = 1
+2/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+2/autotile/icon_coordinate = Vector2( 0, 3 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/autotile/fallback_mode = 0
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape = SubResource( 31 )
+2/shape_one_way = false
+2/shape_one_way_margin = 1.0
+2/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 31 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 32 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 33 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 34 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 35 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 36 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 37 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 38 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 39 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 40 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 41 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 42 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 43 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 44 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 45 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 46 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+2/z_index = 0
+3/name = "plate_background"
+3/texture = ExtResource( 1 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 0, 32, 32, 32 )
+3/tile_mode = 1
+3/autotile/bitmask_mode = 1
+3/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+3/autotile/icon_coordinate = Vector2( 0, 3 )
+3/autotile/tile_size = Vector2( 8, 8 )
+3/autotile/spacing = 0
+3/autotile/occluder_map = [ ]
+3/autotile/navpoly_map = [ ]
+3/autotile/priority_map = [ ]
+3/autotile/z_index_map = [ ]
+3/autotile/fallback_mode = 0
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape_one_way = false
+3/shape_one_way_margin = 0.0
+3/shapes = [ ]
+3/z_index = -20
+4/name = "misc"
+4/texture = ExtResource( 1 )
+4/tex_offset = Vector2( 0, 0 )
+4/modulate = Color( 1, 1, 1, 1 )
+4/region = Rect2( 0, 8, 32, 24 )
+4/tile_mode = 2
+4/autotile/icon_coordinate = Vector2( 0, 0 )
+4/autotile/tile_size = Vector2( 8, 8 )
+4/autotile/spacing = 0
+4/autotile/occluder_map = [ ]
+4/autotile/navpoly_map = [ ]
+4/autotile/priority_map = [ ]
+4/autotile/z_index_map = [ ]
+4/occluder_offset = Vector2( 0, 0 )
+4/navigation_offset = Vector2( 0, 0 )
+4/shape_offset = Vector2( 0, 0 )
+4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+4/shape = SubResource( 63 )
+4/shape_one_way = false
+4/shape_one_way_margin = 1.0
+4/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 63 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 64 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+4/z_index = 0
diff --git a/tilesets/t_ladders.tres b/tilesets/t_ladders.tres
new file mode 100644
index 0000000..3adc45c
--- /dev/null
+++ b/tilesets/t_ladders.tres
@@ -0,0 +1,49 @@
+[gd_resource type="TileSet" load_steps=2 format=2]
+
+[ext_resource path="res://graphics/tiles/ladders.png" type="Texture" id=1]
+
+[resource]
+0/name = "ladders"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 24, 32 )
+0/tile_mode = 2
+0/autotile/icon_coordinate = Vector2( 0, 0 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape_one_way = false
+0/shape_one_way_margin = 0.0
+0/shapes = [ ]
+0/z_index = 0
+1/name = "spine"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 24, 0, 8, 24 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 23593104, Vector2( 0, 1 ), 23920786, Vector2( 0, 2 ), 2949138 ]
+1/autotile/icon_coordinate = Vector2( 0, 0 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape_one_way = false
+1/shape_one_way_margin = 0.0
+1/shapes = [ ]
+1/z_index = 0
diff --git a/tilesets/t_mountain.tres b/tilesets/t_mountain.tres
new file mode 100644
index 0000000..3382d99
--- /dev/null
+++ b/tilesets/t_mountain.tres
@@ -0,0 +1,218 @@
+[gd_resource type="TileSet" load_steps=17 format=2]
+
+[ext_resource path="res://graphics/tiles/mountain.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=3]
+points = PoolVector2Array( 8, 5, 0, 5, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 8, 5, 0, 5, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 8, 5, 0, 5, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 8, 0, 8, 0, 8, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 8, 2, 0, 2, 0, 2, 8, 2 )
+
+[resource]
+0/name = "grass.png 0"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 32, 32 )
+0/tile_mode = 2
+0/autotile/icon_coordinate = Vector2( 0, 0 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 1 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 3 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
+1/name = "grass.png 1"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 0, 24, 8, 8 )
+1/tile_mode = 2
+1/autotile/icon_coordinate = Vector2( 0, 0 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape_one_way = false
+1/shape_one_way_margin = 0.0
+1/shapes = [ ]
+1/z_index = 0
+2/name = "grass.png 2"
+2/texture = ExtResource( 1 )
+2/tex_offset = Vector2( 0, 0 )
+2/modulate = Color( 1, 1, 1, 1 )
+2/region = Rect2( 0, 32, 32, 8 )
+2/tile_mode = 2
+2/autotile/icon_coordinate = Vector2( 0, 0 )
+2/autotile/tile_size = Vector2( 8, 8 )
+2/autotile/spacing = 0
+2/autotile/occluder_map = [ ]
+2/autotile/navpoly_map = [ ]
+2/autotile/priority_map = [ ]
+2/autotile/z_index_map = [ ]
+2/occluder_offset = Vector2( 0, 0 )
+2/navigation_offset = Vector2( 0, 0 )
+2/shape_offset = Vector2( 0, 0 )
+2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+2/shape_one_way = false
+2/shape_one_way_margin = 0.0
+2/shapes = [ ]
+2/z_index = 0
+3/name = "mountain.png 3"
+3/texture = ExtResource( 1 )
+3/tex_offset = Vector2( 0, 0 )
+3/modulate = Color( 1, 1, 1, 1 )
+3/region = Rect2( 0, 0, 32, 32 )
+3/tile_mode = 0
+3/occluder_offset = Vector2( 0, 0 )
+3/navigation_offset = Vector2( 0, 0 )
+3/shape_offset = Vector2( 0, 0 )
+3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+3/shape_one_way = false
+3/shape_one_way_margin = 0.0
+3/shapes = [ ]
+3/z_index = 0
diff --git a/tilesets/t_rust.tres b/tilesets/t_rust.tres
new file mode 100644
index 0000000..e095af5
--- /dev/null
+++ b/tilesets/t_rust.tres
@@ -0,0 +1,171 @@
+[gd_resource type="TileSet" load_steps=18 format=2]
+
+[ext_resource path="res://graphics/tiles/rust.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=3]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 8, 7, 0, 7, 0, 1, 8, 1 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 0, 1, 8, 1, 8, 7, 0, 7 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 8, 7, 0, 7, 0, 1, 8, 1 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 1, 8, 1, 8, 7, 0, 7 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 8, 7, 0, 7, 0, 1, 8, 1 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 8, 7, 0, 7, 0, 1, 8, 1 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 8, 6, 0, 6, 0, 2, 8, 2 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 7, 8, 1, 8, 1, 1, 7, 1 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 1, 1, 8, 1, 8, 7, 1, 7 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 1, 5, 1, 5, 7, 0, 7 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 8, 7, 3, 7, 3, 1, 8, 1 )
+
+[resource]
+0/name = "rust.png 0"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 32, 40 )
+0/tile_mode = 2
+0/autotile/icon_coordinate = Vector2( 0, 0 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 1 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 3 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 4 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 4 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
diff --git a/tilesets/t_station.tres b/tilesets/t_station.tres
new file mode 100644
index 0000000..8c786ba
--- /dev/null
+++ b/tilesets/t_station.tres
@@ -0,0 +1,277 @@
+[gd_resource type="TileSet" load_steps=27 format=2]
+
+[ext_resource path="res://graphics/tiles/station.png" type="Texture" id=1]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=2]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=4]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 4, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 4, 8, 0, 8, 0, 0, 4, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 8, 8, 4, 8, 4, 3, 8, 3 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 8, 8, 0, 8, 0, 3, 8, 3 )
+
+[sub_resource type="ConvexPolygonShape2D" id=24]
+points = PoolVector2Array( 4, 8, 0, 8, 0, 3, 4, 3 )
+
+[sub_resource type="ConvexPolygonShape2D" id=25]
+points = PoolVector2Array( 8, 8, 4, 8, 4, 0, 8, 0 )
+
+[sub_resource type="ConvexPolygonShape2D" id=26]
+points = PoolVector2Array( 0, 8, 8, 4, 8, 8, 8, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=5]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=6]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=7]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
+
+[resource]
+0/name = "station"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/modulate = Color( 1, 1, 1, 1 )
+0/region = Rect2( 0, 0, 32, 40 )
+0/tile_mode = 2
+0/autotile/icon_coordinate = Vector2( 1, 1 )
+0/autotile/tile_size = Vector2( 8, 8 )
+0/autotile/spacing = 0
+0/autotile/occluder_map = [ ]
+0/autotile/navpoly_map = [ ]
+0/autotile/priority_map = [ ]
+0/autotile/z_index_map = [ ]
+0/occluder_offset = Vector2( 0, 0 )
+0/navigation_offset = Vector2( 0, 0 )
+0/shape_offset = Vector2( 0, 0 )
+0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+0/shape = SubResource( 1 )
+0/shape_one_way = false
+0/shape_one_way_margin = 1.0
+0/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 1 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 2 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 4 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 23 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 24 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 25 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 26 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+0/z_index = 0
+1/name = "concrete"
+1/texture = ExtResource( 1 )
+1/tex_offset = Vector2( 0, 0 )
+1/modulate = Color( 1, 1, 1, 1 )
+1/region = Rect2( 32, 0, 32, 32 )
+1/tile_mode = 1
+1/autotile/bitmask_mode = 1
+1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 16777392, Vector2( 1, 1 ), 17039538, Vector2( 1, 2 ), 262194, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 20971704, Vector2( 2, 1 ), 21299386, Vector2( 2, 2 ), 327738, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 4194456, Vector2( 3, 1 ), 4259994, Vector2( 3, 2 ), 65562, Vector2( 3, 3 ), 24 ]
+1/autotile/icon_coordinate = Vector2( 0, 3 )
+1/autotile/tile_size = Vector2( 8, 8 )
+1/autotile/spacing = 0
+1/autotile/occluder_map = [ ]
+1/autotile/navpoly_map = [ ]
+1/autotile/priority_map = [ ]
+1/autotile/z_index_map = [ ]
+1/autotile/fallback_mode = 0
+1/occluder_offset = Vector2( 0, 0 )
+1/navigation_offset = Vector2( 0, 0 )
+1/shape_offset = Vector2( 0, 0 )
+1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+1/shape = SubResource( 5 )
+1/shape_one_way = false
+1/shape_one_way_margin = 1.0
+1/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 5 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 6 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 8 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 1 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 2 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 0, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 1, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 2, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+}, {
+"autotile_coord": Vector2( 3, 3 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+1/z_index = 0
diff --git a/fonts/2ndPubertyMono.ttf b/ui/2ndPubertyMono.ttf
similarity index 100%
rename from fonts/2ndPubertyMono.ttf
rename to ui/2ndPubertyMono.ttf
diff --git a/ui/2ndpuberty.fnt b/ui/2ndpuberty.fnt
new file mode 100644
index 0000000..fc0407d
--- /dev/null
+++ b/ui/2ndpuberty.fnt
@@ -0,0 +1,102 @@
+info face="2ndPubertyMono" size=16 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,2,1 spacing=-2,0
+common lineHeight=7 base=12 scaleW=512 scaleH=512 pages=1 packed=0
+page id=0 file="2ndpuberty.png"
+chars count=97
+char id=0 x=108 y=20 width=8 height=20 xoffset=0 yoffset=-1 xadvance=6 page=0 chnl=0
+char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
+char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=333 y=0 width=9 height=20 xoffset=2 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=34 x=324 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=35 x=63 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=36 x=18 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=37 x=36 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=38 x=81 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=39 x=360 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=40 x=405 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=41 x=414 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=42 x=99 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=43 x=45 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=44 x=378 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=45 x=27 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=46 x=369 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=47 x=486 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=48 x=315 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=49 x=234 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=50 x=243 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=51 x=252 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=52 x=261 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=53 x=270 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=54 x=279 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=55 x=288 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=56 x=297 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=57 x=306 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=58 x=396 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=59 x=387 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=60 x=459 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=61 x=54 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=62 x=468 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=63 x=351 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=64 x=495 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=65 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=66 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=67 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=68 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=69 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=70 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=71 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=72 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=73 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=74 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=75 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=76 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=77 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=78 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=79 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=80 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=81 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=82 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=83 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=84 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=85 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=86 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=87 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=88 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=89 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=90 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=91 x=423 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=92 x=0 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=93 x=432 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=94 x=9 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=95 x=72 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=96 x=342 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=97 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=98 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=99 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=100 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=101 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=102 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=103 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=104 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=105 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=106 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=107 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=108 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=109 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=110 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=111 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=112 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=113 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=114 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=115 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=116 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=117 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=118 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=119 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=120 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=121 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=122 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=123 x=441 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=124 x=477 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=125 x=450 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=126 x=90 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+kernings count=0
diff --git a/ui/2ndpuberty.png b/ui/2ndpuberty.png
new file mode 100644
index 0000000..e83773b
Binary files /dev/null and b/ui/2ndpuberty.png differ
diff --git a/ui/2ndpuberty.png.import b/ui/2ndpuberty.png.import
new file mode 100644
index 0000000..22c2c9f
--- /dev/null
+++ b/ui/2ndpuberty.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2ndpuberty.png-9e79d2251b681d08f86c9ec889bb7f69.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/2ndpuberty.png"
+dest_files=[ "res://.import/2ndpuberty.png-9e79d2251b681d08f86c9ec889bb7f69.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/fonts/2ndpuberty..tres b/ui/2ndpuberty.tres
similarity index 100%
rename from fonts/2ndpuberty..tres
rename to ui/2ndpuberty.tres
diff --git a/ui/2ndpuberty_compact.fnt b/ui/2ndpuberty_compact.fnt
new file mode 100644
index 0000000..bd19d2e
--- /dev/null
+++ b/ui/2ndpuberty_compact.fnt
@@ -0,0 +1,197 @@
+info face="2ndPuberty" size=10 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=0,0
+common lineHeight=10 base=10 scaleW=112 scaleH=160 pages=1 packed=0
+page id=0 file="2ndpuberty_scholar.png"
+char id=0 x=0 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9786 x=7 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9787 x=14 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9829 x=21 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9830 x=28 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9827 x=35 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9824 x=42 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8226 x=49 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9688 x=56 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9625 x=63 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9689 x=70 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9794 x=77 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9792 x=84 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9834 x=91 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9835 x=98 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9788 x=105 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9658 x=0 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9668 x=7 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8597 x=14 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8252 x=21 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=182 x=28 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=167 x=35 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9644 x=42 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8616 x=49 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8593 x=56 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8595 x=63 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8594 x=70 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8592 x=77 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8735 x=84 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8596 x=91 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9650 x=98 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9660 x=105 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=32 x=0 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=7 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=34 x=14 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=35 x=21 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=36 x=28 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=37 x=35 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=38 x=42 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=39 x=49 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=40 x=56 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=41 x=63 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=42 x=70 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=43 x=77 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=44 x=84 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=45 x=91 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=46 x=98 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=47 x=105 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=48 x=0 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=49 x=7 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=50 x=14 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=51 x=21 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=52 x=28 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=53 x=35 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=54 x=42 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=55 x=49 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=56 x=56 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=57 x=63 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=58 x=70 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=59 x=77 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=60 x=84 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=61 x=91 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=62 x=98 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=63 x=105 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=64 x=0 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=65 x=7 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=66 x=14 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=67 x=21 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=68 x=28 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=69 x=35 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=70 x=42 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=71 x=49 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=72 x=56 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=73 x=63 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=74 x=70 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=75 x=77 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=76 x=84 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=77 x=91 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=78 x=98 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=79 x=105 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=80 x=0 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=81 x=7 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=82 x=14 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=83 x=21 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=84 x=28 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=85 x=35 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=86 x=42 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=87 x=49 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=88 x=56 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=89 x=63 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=90 x=70 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=91 x=77 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=92 x=84 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=93 x=91 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=94 x=98 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=95 x=105 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=96 x=0 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=97 x=7 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=98 x=14 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=99 x=21 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=100 x=28 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=101 x=35 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=102 x=42 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=103 x=49 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=104 x=56 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=105 x=63 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=106 x=70 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=107 x=77 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=108 x=84 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=109 x=91 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=110 x=98 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=111 x=105 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=112 x=0 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=113 x=7 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=114 x=14 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=115 x=21 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=116 x=28 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=117 x=35 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=118 x=42 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=119 x=49 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=120 x=56 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=121 x=63 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=122 x=70 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=123 x=77 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=124 x=84 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=125 x=91 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=126 x=98 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=127 x=105 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=199 x=0 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=252 x=7 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=233 x=14 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=226 x=21 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=228 x=28 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=224 x=35 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=229 x=42 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=231 x=49 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=234 x=56 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=235 x=63 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=232 x=70 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=239 x=77 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=238 x=84 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=236 x=91 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=196 x=98 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=197 x=105 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=201 x=0 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=230 x=7 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=198 x=14 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=244 x=21 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=246 x=28 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=242 x=35 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=251 x=42 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=249 x=49 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=255 x=56 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=214 x=63 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=220 x=70 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=162 x=77 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=163 x=84 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=165 x=91 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8359 x=98 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=402 x=105 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=225 x=0 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=237 x=7 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=243 x=14 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=250 x=21 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=241 x=28 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=209 x=35 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=170 x=42 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=186 x=49 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=191 x=56 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8976 x=63 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=172 x=70 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=189 x=77 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=188 x=84 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=161 x=91 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=171 x=98 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=187 x=105 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9617 x=0 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9618 x=7 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9619 x=14 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9474 x=21 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9508 x=28 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9569 x=35 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9570 x=42 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9558 x=49 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9557 x=56 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9571 x=63 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9553 x=70 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9559 x=77 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9565 x=84 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9564 x=91 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9563 x=98 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9488 x=105 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9492 x=0 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9524 x=7 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
diff --git a/ui/2ndpuberty_no_dropshadow.fnt b/ui/2ndpuberty_no_dropshadow.fnt
new file mode 100644
index 0000000..1b40439
--- /dev/null
+++ b/ui/2ndpuberty_no_dropshadow.fnt
@@ -0,0 +1,102 @@
+info face="2ndPubertyMono" size=16 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,2,1 spacing=-2,0
+common lineHeight=7 base=12 scaleW=512 scaleH=512 pages=1 packed=0
+page id=0 file="2ndpuberty_no_dropshadow.png"
+chars count=97
+char id=0 x=108 y=20 width=8 height=20 xoffset=0 yoffset=-1 xadvance=6 page=0 chnl=0
+char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
+char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=333 y=0 width=9 height=20 xoffset=2 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=34 x=324 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=35 x=63 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=36 x=18 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=37 x=36 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=38 x=81 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=39 x=360 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=40 x=405 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=41 x=414 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=42 x=99 y=20 width=9 height=20 xoffset=1 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=43 x=45 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=44 x=378 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=45 x=27 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=46 x=369 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=47 x=486 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=48 x=315 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=49 x=234 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=50 x=243 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=51 x=252 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=52 x=261 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=53 x=270 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=54 x=279 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=55 x=288 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=56 x=297 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=57 x=306 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=58 x=396 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=59 x=387 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=60 x=459 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=61 x=54 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=62 x=468 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=63 x=351 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=64 x=495 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=65 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=66 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=67 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=68 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=69 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=70 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=71 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=72 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=73 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=74 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=75 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=76 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=77 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=78 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=79 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=80 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=81 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=82 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=83 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=84 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=85 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=86 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=87 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=88 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=89 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=90 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=91 x=423 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=92 x=0 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=93 x=432 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=94 x=9 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=95 x=72 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=96 x=342 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=97 x=0 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=98 x=9 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=99 x=18 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=100 x=27 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=101 x=36 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=102 x=45 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=103 x=54 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=104 x=63 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=105 x=72 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=106 x=81 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=107 x=90 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=108 x=99 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=109 x=108 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=110 x=117 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=111 x=126 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=112 x=135 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=113 x=144 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=114 x=153 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=115 x=162 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=116 x=171 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=117 x=180 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=118 x=189 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=119 x=198 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=120 x=207 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=121 x=216 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=122 x=225 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=123 x=441 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=124 x=477 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=125 x=450 y=0 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+char id=126 x=90 y=20 width=9 height=20 xoffset=0 yoffset=-1 xadvance=7 page=0 chnl=0
+kernings count=0
diff --git a/ui/2ndpuberty_no_dropshadow.png b/ui/2ndpuberty_no_dropshadow.png
new file mode 100644
index 0000000..4a9b44a
Binary files /dev/null and b/ui/2ndpuberty_no_dropshadow.png differ
diff --git a/ui/2ndpuberty_no_dropshadow.png.import b/ui/2ndpuberty_no_dropshadow.png.import
new file mode 100644
index 0000000..a1b2472
--- /dev/null
+++ b/ui/2ndpuberty_no_dropshadow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2ndpuberty_no_dropshadow.png-5715774fcdadbbe232da32637e674577.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/2ndpuberty_no_dropshadow.png"
+dest_files=[ "res://.import/2ndpuberty_no_dropshadow.png-5715774fcdadbbe232da32637e674577.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/2ndpuberty_no_dropshadow.tres b/ui/2ndpuberty_no_dropshadow.tres
new file mode 100644
index 0000000..03a6e01
--- /dev/null
+++ b/ui/2ndpuberty_no_dropshadow.tres
@@ -0,0 +1,6 @@
+[gd_resource type="Theme" load_steps=2 format=2]
+
+[ext_resource path="res://ui/2ndpuberty_scholar_no_dropshadow.fnt" type="BitmapFont" id=1]
+
+[resource]
+default_font = ExtResource( 1 )
diff --git a/ui/2ndpuberty_outline.tres b/ui/2ndpuberty_outline.tres
new file mode 100644
index 0000000..e2d56ae
--- /dev/null
+++ b/ui/2ndpuberty_outline.tres
@@ -0,0 +1,8 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=2]
+
+[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1]
+
+[resource]
+shader = ExtResource( 1 )
+shader_param/border_color = Color( 0.219608, 0.219608, 0.219608, 1 )
+shader_param/border_corners = true
diff --git a/ui/2ndpuberty_scholar.fnt b/ui/2ndpuberty_scholar.fnt
new file mode 100644
index 0000000..bd19d2e
--- /dev/null
+++ b/ui/2ndpuberty_scholar.fnt
@@ -0,0 +1,197 @@
+info face="2ndPuberty" size=10 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=0,0
+common lineHeight=10 base=10 scaleW=112 scaleH=160 pages=1 packed=0
+page id=0 file="2ndpuberty_scholar.png"
+char id=0 x=0 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9786 x=7 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9787 x=14 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9829 x=21 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9830 x=28 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9827 x=35 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9824 x=42 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8226 x=49 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9688 x=56 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9625 x=63 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9689 x=70 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9794 x=77 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9792 x=84 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9834 x=91 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9835 x=98 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9788 x=105 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9658 x=0 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9668 x=7 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8597 x=14 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8252 x=21 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=182 x=28 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=167 x=35 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9644 x=42 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8616 x=49 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8593 x=56 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8595 x=63 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8594 x=70 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8592 x=77 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8735 x=84 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8596 x=91 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9650 x=98 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9660 x=105 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=32 x=0 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=7 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=34 x=14 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=35 x=21 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=36 x=28 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=37 x=35 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=38 x=42 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=39 x=49 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=40 x=56 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=41 x=63 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=42 x=70 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=43 x=77 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=44 x=84 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=45 x=91 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=46 x=98 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=47 x=105 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=48 x=0 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=49 x=7 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=50 x=14 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=51 x=21 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=52 x=28 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=53 x=35 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=54 x=42 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=55 x=49 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=56 x=56 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=57 x=63 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=58 x=70 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=59 x=77 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=60 x=84 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=61 x=91 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=62 x=98 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=63 x=105 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=64 x=0 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=65 x=7 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=66 x=14 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=67 x=21 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=68 x=28 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=69 x=35 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=70 x=42 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=71 x=49 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=72 x=56 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=73 x=63 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=74 x=70 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=75 x=77 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=76 x=84 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=77 x=91 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=78 x=98 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=79 x=105 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=80 x=0 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=81 x=7 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=82 x=14 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=83 x=21 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=84 x=28 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=85 x=35 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=86 x=42 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=87 x=49 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=88 x=56 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=89 x=63 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=90 x=70 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=91 x=77 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=92 x=84 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=93 x=91 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=94 x=98 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=95 x=105 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=96 x=0 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=97 x=7 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=98 x=14 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=99 x=21 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=100 x=28 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=101 x=35 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=102 x=42 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=103 x=49 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=104 x=56 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=105 x=63 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=106 x=70 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=107 x=77 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=108 x=84 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=109 x=91 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=110 x=98 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=111 x=105 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=112 x=0 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=113 x=7 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=114 x=14 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=115 x=21 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=116 x=28 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=117 x=35 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=118 x=42 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=119 x=49 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=120 x=56 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=121 x=63 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=122 x=70 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=123 x=77 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=124 x=84 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=125 x=91 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=126 x=98 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=127 x=105 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=199 x=0 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=252 x=7 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=233 x=14 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=226 x=21 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=228 x=28 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=224 x=35 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=229 x=42 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=231 x=49 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=234 x=56 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=235 x=63 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=232 x=70 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=239 x=77 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=238 x=84 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=236 x=91 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=196 x=98 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=197 x=105 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=201 x=0 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=230 x=7 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=198 x=14 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=244 x=21 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=246 x=28 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=242 x=35 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=251 x=42 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=249 x=49 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=255 x=56 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=214 x=63 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=220 x=70 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=162 x=77 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=163 x=84 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=165 x=91 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8359 x=98 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=402 x=105 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=225 x=0 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=237 x=7 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=243 x=14 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=250 x=21 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=241 x=28 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=209 x=35 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=170 x=42 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=186 x=49 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=191 x=56 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8976 x=63 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=172 x=70 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=189 x=77 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=188 x=84 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=161 x=91 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=171 x=98 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=187 x=105 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9617 x=0 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9618 x=7 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9619 x=14 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9474 x=21 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9508 x=28 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9569 x=35 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9570 x=42 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9558 x=49 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9557 x=56 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9571 x=63 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9553 x=70 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9559 x=77 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9565 x=84 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9564 x=91 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9563 x=98 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9488 x=105 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9492 x=0 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9524 x=7 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
diff --git a/ui/2ndpuberty_scholar.png b/ui/2ndpuberty_scholar.png
new file mode 100644
index 0000000..b25c1bb
Binary files /dev/null and b/ui/2ndpuberty_scholar.png differ
diff --git a/ui/2ndpuberty_scholar.png.import b/ui/2ndpuberty_scholar.png.import
new file mode 100644
index 0000000..896f0e4
--- /dev/null
+++ b/ui/2ndpuberty_scholar.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2ndpuberty_scholar.png-a72ec1cb81eedf4c444998ed199e661b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/2ndpuberty_scholar.png"
+dest_files=[ "res://.import/2ndpuberty_scholar.png-a72ec1cb81eedf4c444998ed199e661b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/2ndpuberty_scholar_no_dropshadow.fnt b/ui/2ndpuberty_scholar_no_dropshadow.fnt
new file mode 100644
index 0000000..8bb45d3
--- /dev/null
+++ b/ui/2ndpuberty_scholar_no_dropshadow.fnt
@@ -0,0 +1,197 @@
+info face="2ndPuberty" size=10 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=0,0
+common lineHeight=10 base=10 scaleW=112 scaleH=160 pages=1 packed=0
+page id=0 file="2ndpuberty_scholar_no_dropshadow.png"
+char id=0 x=0 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9786 x=7 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9787 x=14 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9829 x=21 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9830 x=28 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9827 x=35 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9824 x=42 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8226 x=49 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9688 x=56 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9625 x=63 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9689 x=70 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9794 x=77 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9792 x=84 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9834 x=91 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9835 x=98 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9788 x=105 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9658 x=0 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9668 x=7 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8597 x=14 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8252 x=21 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=182 x=28 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=167 x=35 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9644 x=42 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8616 x=49 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8593 x=56 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8595 x=63 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8594 x=70 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8592 x=77 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8735 x=84 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8596 x=91 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9650 x=98 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9660 x=105 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=32 x=0 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=7 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=34 x=14 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=35 x=21 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=36 x=28 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=37 x=35 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=38 x=42 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=39 x=49 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=40 x=56 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=41 x=63 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=42 x=70 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=43 x=77 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=44 x=84 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=45 x=91 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=46 x=98 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=47 x=105 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=48 x=0 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=49 x=7 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=50 x=14 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=51 x=21 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=52 x=28 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=53 x=35 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=54 x=42 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=55 x=49 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=56 x=56 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=57 x=63 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=58 x=70 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=59 x=77 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=60 x=84 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=61 x=91 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=62 x=98 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=63 x=105 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=64 x=0 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=65 x=7 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=66 x=14 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=67 x=21 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=68 x=28 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=69 x=35 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=70 x=42 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=71 x=49 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=72 x=56 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=73 x=63 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=74 x=70 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=75 x=77 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=76 x=84 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=77 x=91 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=78 x=98 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=79 x=105 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=80 x=0 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=81 x=7 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=82 x=14 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=83 x=21 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=84 x=28 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=85 x=35 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=86 x=42 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=87 x=49 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=88 x=56 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=89 x=63 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=90 x=70 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=91 x=77 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=92 x=84 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=93 x=91 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=94 x=98 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=95 x=105 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=96 x=0 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=97 x=7 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=98 x=14 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=99 x=21 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=100 x=28 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=101 x=35 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=102 x=42 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=103 x=49 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=104 x=56 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=105 x=63 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=106 x=70 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=107 x=77 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=108 x=84 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=109 x=91 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=110 x=98 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=111 x=105 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=112 x=0 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=113 x=7 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=114 x=14 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=115 x=21 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=116 x=28 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=117 x=35 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=118 x=42 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=119 x=49 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=120 x=56 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=121 x=63 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=122 x=70 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=123 x=77 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=124 x=84 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=125 x=91 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=126 x=98 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=127 x=105 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=199 x=0 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=252 x=7 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=233 x=14 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=226 x=21 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=228 x=28 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=224 x=35 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=229 x=42 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=231 x=49 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=234 x=56 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=235 x=63 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=232 x=70 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=239 x=77 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=238 x=84 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=236 x=91 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=196 x=98 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=197 x=105 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=201 x=0 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=230 x=7 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=198 x=14 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=244 x=21 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=246 x=28 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=242 x=35 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=251 x=42 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=249 x=49 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=255 x=56 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=214 x=63 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=220 x=70 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=162 x=77 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=163 x=84 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=165 x=91 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8359 x=98 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=402 x=105 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=225 x=0 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=237 x=7 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=243 x=14 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=250 x=21 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=241 x=28 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=209 x=35 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=170 x=42 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=186 x=49 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=191 x=56 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8976 x=63 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=172 x=70 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=189 x=77 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=188 x=84 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=161 x=91 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=171 x=98 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=187 x=105 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9617 x=0 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9618 x=7 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9619 x=14 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9474 x=21 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9508 x=28 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9569 x=35 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9570 x=42 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9558 x=49 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9557 x=56 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9571 x=63 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9553 x=70 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9559 x=77 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9565 x=84 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9564 x=91 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9563 x=98 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9488 x=105 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9492 x=0 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9524 x=7 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
diff --git a/ui/2ndpuberty_scholar_no_dropshadow.png b/ui/2ndpuberty_scholar_no_dropshadow.png
new file mode 100644
index 0000000..53f506b
Binary files /dev/null and b/ui/2ndpuberty_scholar_no_dropshadow.png differ
diff --git a/ui/2ndpuberty_scholar_no_dropshadow.png.import b/ui/2ndpuberty_scholar_no_dropshadow.png.import
new file mode 100644
index 0000000..1a19c68
--- /dev/null
+++ b/ui/2ndpuberty_scholar_no_dropshadow.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2ndpuberty_scholar_no_dropshadow.png-7c8dec64a2dcb2b934910613b0e96566.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/2ndpuberty_scholar_no_dropshadow.png"
+dest_files=[ "res://.import/2ndpuberty_scholar_no_dropshadow.png-7c8dec64a2dcb2b934910613b0e96566.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/2ndpuberty_scholar_outline.fnt b/ui/2ndpuberty_scholar_outline.fnt
new file mode 100644
index 0000000..38190d6
--- /dev/null
+++ b/ui/2ndpuberty_scholar_outline.fnt
@@ -0,0 +1,197 @@
+info face="2ndPuberty" size=10 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=0,0
+common lineHeight=10 base=10 scaleW=112 scaleH=160 pages=1 packed=0
+page id=0 file="2ndpuberty_scholar_outline.png"
+char id=0 x=0 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9786 x=7 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9787 x=14 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9829 x=21 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9830 x=28 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9827 x=35 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9824 x=42 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8226 x=49 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9688 x=56 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9625 x=63 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9689 x=70 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9794 x=77 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9792 x=84 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9834 x=91 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9835 x=98 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9788 x=105 y=0 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9658 x=0 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9668 x=7 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8597 x=14 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8252 x=21 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=182 x=28 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=167 x=35 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9644 x=42 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8616 x=49 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8593 x=56 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8595 x=63 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8594 x=70 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8592 x=77 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8735 x=84 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8596 x=91 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9650 x=98 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9660 x=105 y=10 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=32 x=0 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=33 x=7 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=34 x=14 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=35 x=21 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=36 x=28 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=37 x=35 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=38 x=42 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=39 x=49 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=40 x=56 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=41 x=63 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=42 x=70 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=43 x=77 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=44 x=84 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=45 x=91 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=46 x=98 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=47 x=105 y=20 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=48 x=0 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=49 x=7 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=50 x=14 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=51 x=21 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=52 x=28 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=53 x=35 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=54 x=42 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=55 x=49 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=56 x=56 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=57 x=63 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=58 x=70 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=59 x=77 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=60 x=84 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=61 x=91 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=62 x=98 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=63 x=105 y=30 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=64 x=0 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=65 x=7 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=66 x=14 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=67 x=21 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=68 x=28 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=69 x=35 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=70 x=42 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=71 x=49 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=72 x=56 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=73 x=63 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=74 x=70 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=75 x=77 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=76 x=84 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=77 x=91 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=78 x=98 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=79 x=105 y=40 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=80 x=0 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=81 x=7 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=82 x=14 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=83 x=21 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=84 x=28 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=85 x=35 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=86 x=42 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=87 x=49 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=88 x=56 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=89 x=63 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=90 x=70 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=91 x=77 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=92 x=84 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=93 x=91 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=94 x=98 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=95 x=105 y=50 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=96 x=0 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=97 x=7 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=98 x=14 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=99 x=21 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=100 x=28 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=101 x=35 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=102 x=42 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=103 x=49 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=104 x=56 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=105 x=63 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=106 x=70 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=107 x=77 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=108 x=84 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=109 x=91 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=110 x=98 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=111 x=105 y=60 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=112 x=0 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=113 x=7 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=114 x=14 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=115 x=21 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=116 x=28 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=117 x=35 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=118 x=42 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=119 x=49 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=120 x=56 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=121 x=63 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=122 x=70 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=123 x=77 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=124 x=84 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=125 x=91 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=126 x=98 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=127 x=105 y=70 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=199 x=0 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=252 x=7 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=233 x=14 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=226 x=21 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=228 x=28 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=224 x=35 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=229 x=42 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=231 x=49 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=234 x=56 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=235 x=63 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=232 x=70 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=239 x=77 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=238 x=84 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=236 x=91 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=196 x=98 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=197 x=105 y=80 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=201 x=0 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=230 x=7 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=198 x=14 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=244 x=21 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=246 x=28 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=242 x=35 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=251 x=42 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=249 x=49 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=255 x=56 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=214 x=63 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=220 x=70 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=162 x=77 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=163 x=84 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=165 x=91 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8359 x=98 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=402 x=105 y=90 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=225 x=0 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=237 x=7 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=243 x=14 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=250 x=21 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=241 x=28 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=209 x=35 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=170 x=42 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=186 x=49 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=191 x=56 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=8976 x=63 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=172 x=70 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=189 x=77 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=188 x=84 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=161 x=91 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=171 x=98 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=187 x=105 y=100 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9617 x=0 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9618 x=7 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9619 x=14 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9474 x=21 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9508 x=28 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9569 x=35 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9570 x=42 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9558 x=49 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9557 x=56 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9571 x=63 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9553 x=70 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9559 x=77 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9565 x=84 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9564 x=91 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9563 x=98 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9488 x=105 y=110 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9492 x=0 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
+char id=9524 x=7 y=120 width=7 height=10 xoffset=0 yoffset=0 xadvance=7 page=0 chnl=0
diff --git a/ui/2ndpuberty_scholar_outline.png b/ui/2ndpuberty_scholar_outline.png
new file mode 100644
index 0000000..edacf10
Binary files /dev/null and b/ui/2ndpuberty_scholar_outline.png differ
diff --git a/ui/2ndpuberty_scholar_outline.png.import b/ui/2ndpuberty_scholar_outline.png.import
new file mode 100644
index 0000000..f9a18cc
--- /dev/null
+++ b/ui/2ndpuberty_scholar_outline.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/2ndpuberty_scholar_outline.png-ba984a285473c720426af8de55ff24d7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/2ndpuberty_scholar_outline.png"
+dest_files=[ "res://.import/2ndpuberty_scholar_outline.png-ba984a285473c720426af8de55ff24d7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/Boba Date.otf b/ui/Boba Date.otf
new file mode 100644
index 0000000..c66647a
Binary files /dev/null and b/ui/Boba Date.otf differ
diff --git a/ui/HooskaiChamferedSquare.ttf b/ui/HooskaiChamferedSquare.ttf
new file mode 100644
index 0000000..2817281
Binary files /dev/null and b/ui/HooskaiChamferedSquare.ttf differ
diff --git a/ui/Kozuka Mincho Std H.otf b/ui/Kozuka Mincho Std H.otf
new file mode 100644
index 0000000..e698a3e
Binary files /dev/null and b/ui/Kozuka Mincho Std H.otf differ
diff --git a/ui/Minimal5x5Monospaced.ttf b/ui/Minimal5x5Monospaced.ttf
new file mode 100644
index 0000000..8ef9fa1
Binary files /dev/null and b/ui/Minimal5x5Monospaced.ttf differ
diff --git a/ui/PressStart2P-Regular.ttf b/ui/PressStart2P-Regular.ttf
new file mode 100644
index 0000000..2442aff
Binary files /dev/null and b/ui/PressStart2P-Regular.ttf differ
diff --git a/ui/arrow_figure_8.tres b/ui/arrow_figure_8.tres
new file mode 100644
index 0000000..f053b52
--- /dev/null
+++ b/ui/arrow_figure_8.tres
@@ -0,0 +1,10 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=2]
+
+[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=1]
+
+[resource]
+shader = ExtResource( 1 )
+shader_param/speed = Vector2( 4, 8 )
+shader_param/ammount = Vector2( 1, 1 )
+shader_param/offset = Vector2( 0, 0 )
+shader_param/delay = Vector2( 0, 0 )
diff --git a/ui/border.png b/ui/border.png
new file mode 100644
index 0000000..87d458a
Binary files /dev/null and b/ui/border.png differ
diff --git a/ui/border.png.import b/ui/border.png.import
new file mode 100644
index 0000000..3a810b9
--- /dev/null
+++ b/ui/border.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/border.png-1616a5cc9a11b0652c0316a2cd685d5e.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/border.png"
+dest_files=[ "res://.import/border.png-1616a5cc9a11b0652c0316a2cd685d5e.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/panel.png b/ui/panel.png
new file mode 100644
index 0000000..af53798
Binary files /dev/null and b/ui/panel.png differ
diff --git a/ui/panel.png.import b/ui/panel.png.import
new file mode 100644
index 0000000..2818487
--- /dev/null
+++ b/ui/panel.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/panel.png-4debde5d1941508c13098c29f52f1bf0.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/panel.png"
+dest_files=[ "res://.import/panel.png-4debde5d1941508c13098c29f52f1bf0.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/ui/theme.tres b/ui/theme.tres
new file mode 100644
index 0000000..60e54f1
--- /dev/null
+++ b/ui/theme.tres
@@ -0,0 +1,68 @@
+[gd_resource type="Theme" load_steps=17 format=2]
+
+[ext_resource path="res://ui/2ndpuberty_scholar.fnt" type="BitmapFont" id=1]
+[ext_resource path="res://graphics/hud/hslider_slider.png" type="Texture" id=2]
+[ext_resource path="res://graphics/hud/hslider_grabber.png" type="Texture" id=3]
+[ext_resource path="res://graphics/hud/hslider_grabber_focused.png" type="Texture" id=4]
+[ext_resource path="res://ui/panel.png" type="Texture" id=5]
+
+[sub_resource type="StyleBoxEmpty" id=3]
+
+[sub_resource type="StyleBoxFlat" id=9]
+content_margin_bottom = 0.0
+bg_color = Color( 0, 0, 0, 0 )
+border_width_bottom = 1
+border_color = Color( 1, 1, 1, 1 )
+expand_margin_bottom = 2.0
+
+[sub_resource type="StyleBoxEmpty" id=8]
+
+[sub_resource type="StyleBoxLine" id=17]
+color = Color( 0.501961, 0.501961, 0.501961, 1 )
+
+[sub_resource type="StyleBoxEmpty" id=4]
+
+[sub_resource type="StyleBoxEmpty" id=10]
+
+[sub_resource type="StyleBoxTexture" id=6]
+texture = ExtResource( 2 )
+region_rect = Rect2( 0, 0, 1, 8 )
+
+[sub_resource type="StyleBoxTexture" id=11]
+texture = ExtResource( 5 )
+region_rect = Rect2( 0, 0, 9, 9 )
+margin_left = 3.0
+margin_right = 3.0
+margin_top = 3.0
+margin_bottom = 3.0
+
+[sub_resource type="StyleBoxEmpty" id=16]
+
+[sub_resource type="StyleBoxEmpty" id=2]
+content_margin_left = 4.0
+content_margin_right = 4.0
+
+[sub_resource type="StyleBoxEmpty" id=18]
+
+[resource]
+default_font = ExtResource( 1 )
+Button/colors/font_color = Color( 0.690196, 0.690196, 0.690196, 1 )
+Button/styles/disabled = SubResource( 3 )
+Button/styles/focus = SubResource( 9 )
+Button/styles/hover = SubResource( 8 )
+Button/styles/normal = SubResource( 3 )
+Button/styles/pressed = SubResource( 3 )
+HSeparator/styles/separator = SubResource( 17 )
+HSlider/icons/grabber = ExtResource( 3 )
+HSlider/icons/grabber_highlight = ExtResource( 4 )
+HSlider/styles/grabber_area = SubResource( 4 )
+HSlider/styles/grabber_area_highlight = SubResource( 10 )
+HSlider/styles/slider = SubResource( 6 )
+Panel/styles/panel = SubResource( 11 )
+PanelContainer/styles/panel = SubResource( 11 )
+TabContainer/colors/font_color_fg = Color( 1, 1, 1, 1 )
+TabContainer/styles/panel = SubResource( 16 )
+TabContainer/styles/tab_bg = SubResource( 2 )
+TabContainer/styles/tab_disabled = SubResource( 2 )
+TabContainer/styles/tab_fg = SubResource( 2 )
+VScrollBar/styles/scroll = SubResource( 18 )