diff --git a/GreatSpringGameJam/Content/Content.mgcb b/GreatSpringGameJam/Content/Content.mgcb
index a370f17..b2b0355 100644
--- a/GreatSpringGameJam/Content/Content.mgcb
+++ b/GreatSpringGameJam/Content/Content.mgcb
@@ -65,3 +65,8 @@
/processor:TiledMapProcessor
/build:Maps/Level2.tmx
+#begin Maps/Level3.tmx
+/importer:TiledMapImporter
+/processor:TiledMapProcessor
+/build:Maps/Level3.tmx
+
diff --git a/GreatSpringGameJam/Content/Maps/Level1.tmx b/GreatSpringGameJam/Content/Maps/Level1.tmx
index fb6b3fe..7a9eec7 100644
--- a/GreatSpringGameJam/Content/Maps/Level1.tmx
+++ b/GreatSpringGameJam/Content/Maps/Level1.tmx
@@ -27,16 +27,16 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,1,2,2,3,0,0,0,0,0,0,0,0,1,2,2,2,2,3,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,33,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,116,117,118,119,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,5,18,18,19,0,0,0,0,0,0,0,0,17,18,18,18,18,4,2,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,49,0,0,0,0,0,
-0,0,68,69,70,0,0,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,1,5,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,81,81,0,55,54,0,
-0,0,71,72,73,0,0,100,101,102,103,104,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,17,18,18,18,18,18,18,18,4,2,2,2,2,3,0,0,17,18,4,2,2,2,5,18,18,18,19,39,38,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,4,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,19,0,0,0,0,38,39,0,17,4,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,5,19,0,0,17,4,2,5,18,18,18,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18,
-2,2,2,2,2,2,2,2,2,2,2,2,5,18,4,2,2,2,5,19,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,4,2,2,2,2,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,2,5,18,
-18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,4,2,2,2,2,2,2,5,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-18,18,18,18,18,18,4,2,2,2,2,2,5,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,4,2,2,5,19,0,0,0,17,18,18,18,4,2,2,2,2,2,5,18,18,18,18,
-18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-18,4,2,2,2,5,18,18,18,18,4,2,2,2,2,2,2,5,18,19,0,0,0,17,18,4,2,2,2,2,5,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18,
-18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,17,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18
+0,0,68,69,70,0,0,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,17,18,18,18,18,18,18,18,4,2,2,2,2,3,0,0,1,5,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,81,81,0,55,54,0,
+0,0,71,72,73,0,0,100,101,102,103,104,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,19,39,39,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,9,21,18,18,18,18,18,18,18,18,4,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,19,0,0,0,0,38,39,0,17,4,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,5,19,0,0,0,9,10,21,18,18,18,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18,
+2,2,2,2,2,2,2,2,2,2,2,2,5,18,4,2,2,2,5,19,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,17,18,4,2,2,2,2,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,2,5,18,
+18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,4,2,2,2,2,2,2,5,18,18,19,0,37,0,82,0,17,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+18,18,18,18,18,18,4,2,2,2,2,2,5,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,1,2,2,2,5,18,18,18,18,18,4,2,2,5,19,0,0,0,17,18,18,18,4,2,2,2,2,2,5,18,18,18,18,
+18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,9,21,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+18,4,2,2,2,5,18,18,18,18,4,2,2,2,2,2,2,5,18,19,0,0,0,17,18,4,2,2,2,2,5,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18,
+18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18
@@ -94,14 +94,14 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,6,8,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,0,22,24,0,0,0,0,0,0,0,0,0,0,0,22,24,22,24,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,6,7,7,8,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,6,8,0,0,0,0,0,0,0,0,0,22,23,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,24,22,23,23,24,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,6,7,7,8,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,6,8,0,0,0,0,0,0,0,0,0,22,23,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,24,22,23,23,24,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,22,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,6,7,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,22,23,23,23,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -128,8 +128,8 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,39,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,39,38,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,39,38,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,39,38,39,39,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
diff --git a/GreatSpringGameJam/Content/Maps/Level2.tmx b/GreatSpringGameJam/Content/Maps/Level2.tmx
index c406069..e028259 100644
--- a/GreatSpringGameJam/Content/Maps/Level2.tmx
+++ b/GreatSpringGameJam/Content/Maps/Level2.tmx
@@ -33,10 +33,10 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,0,0,0,0,0,0,17,18,18,18,19,39,0,0,0,0,0,0,0,38,0,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,65,81,0,54,55,0,0,54,0,0,
0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,17,4,2,5,4,2,3,0,0,0,0,39,0,0,17,4,2,5,4,3,0,0,0,0,1,2,2,2,2,2,2,2,5,4,2,2,2,5,18,18,19,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,18,18,19,0,0,0,1,2,2,2,5,18,18,18,18,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,4,2,2,2,5,18,
-18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,17,18,4,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,0,17,18,4,2,2,2,2,2,5,18,18,18,18,18,18,18,4,3,0,0,38,17,18,4,2,2,2,2,2,2,5,18,4,2,2,5,18,18,18,18,18,18,
-18,18,4,2,2,2,2,5,18,4,3,0,0,0,0,37,39,17,18,18,18,18,18,19,0,0,0,17,18,4,2,2,2,2,2,5,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,4,2,2,2,2,2,5,19,0,0,1,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-18,18,18,18,18,4,2,2,5,18,19,0,0,0,1,2,2,5,4,2,2,5,18,19,0,0,0,17,4,2,2,2,5,18,18,18,4,2,2,3,0,17,18,18,4,2,2,2,2,2,5,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,4,2,2,2,2,2,2,2,5,18,18,18,
-18,18,18,18,18,18,18,18,18,18,4,3,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,19,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18
+18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,17,18,4,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,0,9,10,10,21,4,2,2,2,5,18,18,18,18,18,18,18,4,3,0,0,38,17,18,4,2,2,2,2,2,2,5,18,4,2,2,5,18,18,18,18,18,18,
+18,18,4,2,2,2,2,5,18,4,3,0,0,0,0,37,39,17,18,18,18,18,18,19,0,0,0,17,18,4,2,2,2,2,2,5,19,0,0,0,0,0,0,0,17,18,18,18,18,18,18,4,2,2,2,2,2,5,19,0,0,1,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+18,18,18,18,18,4,2,2,5,18,19,0,0,0,1,2,2,5,4,2,2,5,18,19,0,0,0,17,4,2,2,2,5,18,18,18,4,2,2,3,0,0,82,0,17,4,2,2,2,2,5,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,4,2,2,2,2,2,2,2,5,18,18,18,
+18,18,18,18,18,18,18,18,18,18,4,3,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,19,0,1,2,2,5,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18
diff --git a/GreatSpringGameJam/Content/Maps/Level3.tmx b/GreatSpringGameJam/Content/Maps/Level3.tmx
new file mode 100644
index 0000000..ee5372f
--- /dev/null
+++ b/GreatSpringGameJam/Content/Maps/Level3.tmx
@@ -0,0 +1,178 @@
+
+
diff --git a/GreatSpringGameJam/Content/Textures/Stuff.aseprite b/GreatSpringGameJam/Content/Textures/Stuff.aseprite
index 88274dc..4705a0e 100644
Binary files a/GreatSpringGameJam/Content/Textures/Stuff.aseprite and b/GreatSpringGameJam/Content/Textures/Stuff.aseprite differ
diff --git a/GreatSpringGameJam/Content/Textures/Stuff.png b/GreatSpringGameJam/Content/Textures/Stuff.png
index 43baa5c..1310c0a 100644
Binary files a/GreatSpringGameJam/Content/Textures/Stuff.png and b/GreatSpringGameJam/Content/Textures/Stuff.png differ
diff --git a/GreatSpringGameJam/Content/Tilesets/World.aseprite b/GreatSpringGameJam/Content/Tilesets/World.aseprite
index fdae7e4..378f165 100644
Binary files a/GreatSpringGameJam/Content/Tilesets/World.aseprite and b/GreatSpringGameJam/Content/Tilesets/World.aseprite differ
diff --git a/GreatSpringGameJam/Content/Tilesets/World.png b/GreatSpringGameJam/Content/Tilesets/World.png
index 3abffbf..67350d0 100644
Binary files a/GreatSpringGameJam/Content/Tilesets/World.png and b/GreatSpringGameJam/Content/Tilesets/World.png differ
diff --git a/GreatSpringGameJam/Content/Tilesets/World.tsx b/GreatSpringGameJam/Content/Tilesets/World.tsx
index 9185c78..2006b56 100644
--- a/GreatSpringGameJam/Content/Tilesets/World.tsx
+++ b/GreatSpringGameJam/Content/Tilesets/World.tsx
@@ -41,6 +41,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -56,6 +71,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -104,6 +129,12 @@
+
+
+
+
+
+
@@ -128,6 +159,11 @@
+
+
+
+
+
@@ -136,4 +172,9 @@
+
+
+
+
+
diff --git a/GreatSpringGameJam/Entity.cs b/GreatSpringGameJam/Entity.cs
index 51813d6..c42dea7 100644
--- a/GreatSpringGameJam/Entity.cs
+++ b/GreatSpringGameJam/Entity.cs
@@ -37,7 +37,7 @@ namespace GreatSpringGameJam {
this.Position -= normal * penetration;
if (normal.Y > 0) {
onGround = true;
- var below = this.GetTileBelow();
+ var (_, below) = this.GetTileBelow();
if (below != null && below.Properties.GetBool("JumpPad") && velocity.Y > 0) {
velocity.Y = -velocity.Y;
continue;
@@ -54,10 +54,11 @@ namespace GreatSpringGameJam {
this.Position.X += this.Map.Size.X - area.Right;
}
- protected TiledMapTilesetTile GetTileBelow(Vector2? offset = null, string layer = null) {
+ protected (Point, TiledMapTilesetTile) GetTileBelow(Vector2? offset = null, string layer = null) {
var (x, y) = this.Position + (offset ?? new Vector2(0, 0.5F));
- var tile = this.Map.GetTile(layer ?? "Ground", (x + 0.5F).Floor(), (y + 0.5F).Floor());
- return !tile.IsBlank ? this.Map.GetTilesetTile(tile) : null;
+ var pos = new Point((x + 0.5F).Floor(), (y + 0.5F).Floor());
+ var tile = this.Map.GetTile(layer ?? "Ground", pos.X, pos.Y);
+ return !tile.IsBlank ? (pos, this.Map.GetTilesetTile(tile, this.Map.GetTileset(tile))) : default;
}
}
diff --git a/GreatSpringGameJam/GameImpl.cs b/GreatSpringGameJam/GameImpl.cs
index c9b30bf..f4203df 100644
--- a/GreatSpringGameJam/GameImpl.cs
+++ b/GreatSpringGameJam/GameImpl.cs
@@ -6,6 +6,7 @@ using Microsoft.Xna.Framework.Graphics;
using MLEM.Cameras;
using MLEM.Extended.Extensions;
using MLEM.Font;
+using MLEM.Formatting.Codes;
using MLEM.Startup;
using MLEM.Ui;
using MLEM.Ui.Elements;
@@ -39,6 +40,9 @@ namespace GreatSpringGameJam {
this.UiSystem.Style.TextScale = 0.075F;
this.UiSystem.Style.TextColor = ColorHelper.FromHexRgb(0xebd5bd);
this.UiSystem.AutoScaleWithScreen = true;
+ this.UiSystem.TextFormatter.AddImage("Flower", Entity.StuffTexture[0, 1]);
+ this.UiSystem.TextFormatter.AddImage("Gnome", Entity.StuffTexture[1, 1]);
+ this.UiSystem.TextFormatter.AddImage("Snow", Entity.StuffTexture[2, 1]);
this.InputHandler.HandleKeyboardRepeats = false;
this.mapLoader = new ContentManager(this.Services, this.Content.RootDirectory);
@@ -46,7 +50,7 @@ namespace GreatSpringGameJam {
AutoScaleWithScreen = true,
Scale = 4
};
- this.StartLevel(1);
+ this.StartLevel(3);
}
protected override void DoUpdate(GameTime gameTime) {
@@ -75,17 +79,20 @@ namespace GreatSpringGameJam {
// display end of level info
var snowRemoved = this.Map.TotalSnow - this.Map.GetTotalTiles("Snow");
var plantsGrown = this.Map.TotalSeeds - this.Map.GetTotalTiles("Seed");
- // snow removal is less important
- var completion = (snowRemoved / 3F + plantsGrown) / (this.Map.TotalSnow / 3F + this.Map.TotalSeeds);
+ var gnomesCollected = this.Map.TotalGnomes - this.Map.GetTotalTiles("Gnome");
+ // snow removal is less important, gnomes are more important
+ var completion = (snowRemoved / 3F + plantsGrown + gnomesCollected * 10F) / (this.Map.TotalSnow / 3F + this.Map.TotalSeeds + this.Map.TotalGnomes * 10F);
var group = new Group(Anchor.Center, new Vector2(0.5F), false);
this.UiSystem.Add("EndCard", group);
group.AddChild(new Paragraph(Anchor.AutoCenter, 1, "Level Completed!", true) {TextScale = 0.125F});
group.AddChild(new VerticalSpace(15));
yield return new Wait(1);
- group.AddChild(new Paragraph(Anchor.AutoCenter, 1, $"Snow Removed: {snowRemoved} / {this.Map.TotalSnow}", true));
+ group.AddChild(new Paragraph(Anchor.AutoCenter, 1, $" Snow Removed: {snowRemoved} / {this.Map.TotalSnow}", true));
yield return new Wait(1);
- group.AddChild(new Paragraph(Anchor.AutoCenter, 1, $"Plants Watered: {plantsGrown} / {this.Map.TotalSeeds}", true));
+ group.AddChild(new Paragraph(Anchor.AutoCenter, 1, $" Plants Watered: {plantsGrown} / {this.Map.TotalSeeds}", true));
+ yield return new Wait(1);
+ group.AddChild(new Paragraph(Anchor.AutoCenter, 1, $" Gnomes Collected: {gnomesCollected} / {this.Map.TotalGnomes}", true));
yield return new Wait(1);
// display score
diff --git a/GreatSpringGameJam/GreatSpringGameJam.csproj b/GreatSpringGameJam/GreatSpringGameJam.csproj
index 222bb3a..a9982e7 100644
--- a/GreatSpringGameJam/GreatSpringGameJam.csproj
+++ b/GreatSpringGameJam/GreatSpringGameJam.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
diff --git a/GreatSpringGameJam/Map.cs b/GreatSpringGameJam/Map.cs
index 461d4c1..b40825c 100644
--- a/GreatSpringGameJam/Map.cs
+++ b/GreatSpringGameJam/Map.cs
@@ -22,6 +22,7 @@ namespace GreatSpringGameJam {
public readonly TiledMapCollisions Collisions;
public readonly int TotalSnow;
public readonly int TotalSeeds;
+ public readonly int TotalGnomes;
private readonly TiledMap map;
private readonly IndividualTiledMapRenderer renderer;
@@ -33,6 +34,7 @@ namespace GreatSpringGameJam {
this.Collisions = new TiledMapCollisions(this.map);
this.TotalSnow = this.GetTotalTiles("Snow");
this.TotalSeeds = this.GetTotalTiles("Seed");
+ this.TotalGnomes = this.GetTotalTiles("Gnome");
}
public void AddEntity(Entity entity) {
@@ -53,15 +55,23 @@ namespace GreatSpringGameJam {
return this.map.GetTile(layer, x, y);
}
- public void SetTile(string layer, int x, int y, int globalTile) {
+ public void SetTile(string layer, int x, int y, int globalId) {
var index = this.map.GetTileLayerIndex(layer);
- this.map.SetTile(layer, x, y, globalTile);
+ this.map.SetTile(layer, x, y, globalId);
this.renderer.UpdateDrawInfo(index, x, y);
this.Collisions.UpdateCollisionInfo(index, x, y);
}
- public TiledMapTilesetTile GetTilesetTile(TiledMapTile tile) {
- return tile.GetTilesetTile(this.map);
+ public void SetTile(string layer, int x, int y, TiledMapTileset tileset, TiledMapTilesetTile tile) {
+ this.SetTile(layer, x, y, tile.GetGlobalIdentifier(tileset, this.map));
+ }
+
+ public TiledMapTilesetTile GetTilesetTile(TiledMapTile tile, TiledMapTileset tileset) {
+ return tileset.GetTilesetTile(tile, this.map);
+ }
+
+ public TiledMapTileset GetTileset(TiledMapTile tile) {
+ return tile.GetTileset(this.map);
}
public void Draw(GameTime time, SpriteBatch batch, Camera camera) {
@@ -76,6 +86,7 @@ namespace GreatSpringGameJam {
}
// render map etc.
+ this.DrawLayer(batch, "Background", camera);
this.DrawLayer(batch, "Ground", camera);
foreach (var entity in this.entities)
entity.Draw(time, batch);
@@ -91,7 +102,7 @@ namespace GreatSpringGameJam {
foreach (var tile in this.map.GetTiles(x, y)) {
if (tile.IsBlank)
continue;
- var tilesetTile = this.GetTilesetTile(tile);
+ var tilesetTile = this.GetTilesetTile(tile, this.GetTileset(tile));
if (tilesetTile.Properties.GetBool(type))
total++;
}
@@ -101,7 +112,9 @@ namespace GreatSpringGameJam {
}
private void DrawLayer(SpriteBatch batch, string layer, Camera camera) {
- this.renderer.DrawLayer(batch, this.map.GetTileLayerIndex(layer), camera.GetVisibleRectangle().ToExtended());
+ var id = this.map.GetTileLayerIndex(layer);
+ if (id >= 0)
+ this.renderer.DrawLayer(batch, id, camera.GetVisibleRectangle().ToExtended());
}
}
diff --git a/GreatSpringGameJam/Player.cs b/GreatSpringGameJam/Player.cs
index e64052d..c2ade91 100644
--- a/GreatSpringGameJam/Player.cs
+++ b/GreatSpringGameJam/Player.cs
@@ -29,6 +29,7 @@ namespace GreatSpringGameJam {
private bool facingRight;
private HeldItem heldItem;
private float currJumpHeight;
+ private bool climbingVine;
public Player(Map map, Vector2 position) : base(map, position) {
this.animations = new SpriteAnimationGroup();
@@ -41,34 +42,53 @@ namespace GreatSpringGameJam {
base.Update(time);
if (!GameImpl.Instance.IsInCutscene) {
var jumpHeight = 0.15F;
- var tileBelow = this.GetTileBelow();
+ var (_, tileBelow) = this.GetTileBelow();
if (tileBelow != null && tileBelow.Properties.GetBool("JumpPad"))
jumpHeight = 0.25F;
- var tileInside = this.GetTileBelow(Vector2.Zero, "Foreground");
- if (tileInside != null && tileInside.Properties.GetBool("Goal")) {
+ var (_, foregroundInside) = this.GetTileBelow(Vector2.Zero, "Foreground");
+ var ((insideX, insideY), tileInside) = this.GetTileBelow(Vector2.Zero);
+ if (foregroundInside != null && foregroundInside.Properties.GetBool("Goal")) {
GameImpl.Instance.Finish();
return;
}
+ if (tileInside != null && tileInside.Properties.GetBool("Gnome"))
+ this.Map.SetTile("Ground", insideX, insideY, 0);
// input
- var move = 0F;
+ var move = Vector2.Zero;
if (MlemGame.Input.IsAnyDown(Keys.A, Keys.Left)) {
- move -= 0.04F;
+ move.X -= 0.04F;
this.facingRight = false;
}
if (MlemGame.Input.IsAnyDown(Keys.D, Keys.Right)) {
- move += 0.04F;
+ move.X += 0.04F;
this.facingRight = true;
}
- this.walking = move != 0;
- this.velocity.X += move;
- if (MlemGame.Input.IsAnyDown(Keys.Up, Keys.Space)) {
+ // climbing
+ if (tileInside != null && tileInside.Properties.GetBool("Vine")) {
+ if (MlemGame.Input.IsAnyDown(Keys.W, Keys.Up)) {
+ this.climbingVine = true;
+ move.Y -= 0.03F;
+ }
+ if (MlemGame.Input.IsAnyDown(Keys.S, Keys.Down)) {
+ this.climbingVine = true;
+ move.Y += 0.03F;
+ }
+ } else {
+ this.climbingVine = false;
+ }
+
+ this.walking = move != Vector2.Zero;
+ this.velocity += move;
+
+ if (MlemGame.Input.IsDown(Keys.Space)) {
// only start jumping if we just started pressing the buttons
- if (this.onGround && MlemGame.Input.IsAnyPressed(Keys.Up, Keys.Space)) {
+ if ((this.onGround || this.climbingVine) && MlemGame.Input.IsPressed(Keys.Space)) {
this.jumpTime = TimeSpan.FromSeconds(0.3F);
this.currJumpHeight = jumpHeight;
+ this.climbingVine = false;
}
this.jumpTime -= time.ElapsedGameTime;
if (this.jumpTime > TimeSpan.Zero)
@@ -85,10 +105,9 @@ namespace GreatSpringGameJam {
// movement and collisions
this.Position += this.velocity;
this.Collide(() => this.Bounds.ToExtended(), ref this.velocity, ref this.onGround);
- this.velocity *= new Vector2(this.onGround ? 0.5F : 0.6F, 0.95F);
- this.velocity.Y += 0.015F;
-
- // trigger enter
+ this.velocity *= new Vector2(this.onGround ? 0.5F : 0.6F, this.climbingVine ? 0.5F : 0.95F);
+ if (!this.climbingVine)
+ this.velocity.Y += 0.015F;
// item usage
var rot = this.GetHeldRotation();
diff --git a/GreatSpringGameJam/WaterDrop.cs b/GreatSpringGameJam/WaterDrop.cs
index 37f9e34..348515a 100644
--- a/GreatSpringGameJam/WaterDrop.cs
+++ b/GreatSpringGameJam/WaterDrop.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using Coroutine;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using MLEM.Extended.Tiled;
@@ -30,17 +32,36 @@ namespace GreatSpringGameJam {
this.timeToLive -= time.ElapsedGameTime;
if (this.timeToLive <= TimeSpan.Zero) {
- if (this.growsPlants) {
- var (x, y) = this.Position.ToPoint();
- var tile = this.Map.GetTile("Ground", x, y);
- if (!tile.IsBlank) {
- var tilesetTile = this.Map.GetTilesetTile(tile);
- var grown = tilesetTile.Properties.GetInt("GrownVersion");
- if (grown != 0)
- this.Map.SetTile("Ground", x, y, grown + 1);
- }
- }
this.Map.RemoveEntity(this);
+
+ // growing plants
+ if (!this.growsPlants)
+ return;
+ var (x, y) = this.Position.ToPoint();
+ var tile = this.Map.GetTile("Ground", x, y);
+ if (tile.IsBlank)
+ return;
+ var tileset = this.Map.GetTileset(tile);
+ var tilesetTile = this.Map.GetTilesetTile(tile, tileset);
+ var grown = tilesetTile.Properties.GetInt("GrownVersion");
+ if (grown == 0)
+ return;
+ var grownTile = tileset.GetTilesetTile(grown);
+ this.Map.SetTile("Ground", x, y, tileset, grownTile);
+
+ // growing vines
+ if (grownTile.Properties.GetBool("Vine")) {
+ IEnumerable GrowVines() {
+ while (y-- > 0) {
+ yield return new Wait(0.2F);
+ if (this.Map.GetTile("Ground", x, y).GlobalIdentifier != 0)
+ break;
+ this.Map.SetTile("Ground", x, y, tileset, grownTile);
+ }
+ }
+
+ CoroutineHandler.Start(GrowVines());
+ }
}
}