diff --git a/assets/images/1 Tiles/Tile_01.png b/assets/images/1 Tiles/Tile_01.png new file mode 100644 index 0000000..41489cf Binary files /dev/null and b/assets/images/1 Tiles/Tile_01.png differ diff --git a/assets/images/1 Tiles/Tile_02.png b/assets/images/1 Tiles/Tile_02.png new file mode 100644 index 0000000..c32f254 Binary files /dev/null and b/assets/images/1 Tiles/Tile_02.png differ diff --git a/assets/images/1 Tiles/Tile_03.png b/assets/images/1 Tiles/Tile_03.png new file mode 100644 index 0000000..59c55b9 Binary files /dev/null and b/assets/images/1 Tiles/Tile_03.png differ diff --git a/assets/images/1 Tiles/Tile_04.png b/assets/images/1 Tiles/Tile_04.png new file mode 100644 index 0000000..a7afed3 Binary files /dev/null and b/assets/images/1 Tiles/Tile_04.png differ diff --git a/assets/images/1 Tiles/Tile_05.png b/assets/images/1 Tiles/Tile_05.png new file mode 100644 index 0000000..7456370 Binary files /dev/null and b/assets/images/1 Tiles/Tile_05.png differ diff --git a/assets/images/1 Tiles/Tile_06.png b/assets/images/1 Tiles/Tile_06.png new file mode 100644 index 0000000..b63e17c Binary files /dev/null and b/assets/images/1 Tiles/Tile_06.png differ diff --git a/assets/images/1 Tiles/Tile_07.png b/assets/images/1 Tiles/Tile_07.png new file mode 100644 index 0000000..3a8da52 Binary files /dev/null and b/assets/images/1 Tiles/Tile_07.png differ diff --git a/assets/images/1 Tiles/Tile_08.png b/assets/images/1 Tiles/Tile_08.png new file mode 100644 index 0000000..b459bcd Binary files /dev/null and b/assets/images/1 Tiles/Tile_08.png differ diff --git a/assets/images/1 Tiles/Tile_09.png b/assets/images/1 Tiles/Tile_09.png new file mode 100644 index 0000000..a5fa181 Binary files /dev/null and b/assets/images/1 Tiles/Tile_09.png differ diff --git a/assets/images/1 Tiles/Tile_10.png b/assets/images/1 Tiles/Tile_10.png new file mode 100644 index 0000000..6fcb280 Binary files /dev/null and b/assets/images/1 Tiles/Tile_10.png differ diff --git a/assets/images/1 Tiles/Tile_11.png b/assets/images/1 Tiles/Tile_11.png new file mode 100644 index 0000000..111055a Binary files /dev/null and b/assets/images/1 Tiles/Tile_11.png differ diff --git a/assets/images/1 Tiles/Tile_12.png b/assets/images/1 Tiles/Tile_12.png new file mode 100644 index 0000000..1f7cd82 Binary files /dev/null and b/assets/images/1 Tiles/Tile_12.png differ diff --git a/assets/images/1 Tiles/Tile_13.png b/assets/images/1 Tiles/Tile_13.png new file mode 100644 index 0000000..058b18f Binary files /dev/null and b/assets/images/1 Tiles/Tile_13.png differ diff --git a/assets/images/1 Tiles/Tile_14.png b/assets/images/1 Tiles/Tile_14.png new file mode 100644 index 0000000..186897e Binary files /dev/null and b/assets/images/1 Tiles/Tile_14.png differ diff --git a/assets/images/1 Tiles/Tile_15.png b/assets/images/1 Tiles/Tile_15.png new file mode 100644 index 0000000..27b7cac Binary files /dev/null and b/assets/images/1 Tiles/Tile_15.png differ diff --git a/assets/images/1 Tiles/Tile_16.png b/assets/images/1 Tiles/Tile_16.png new file mode 100644 index 0000000..68f39e1 Binary files /dev/null and b/assets/images/1 Tiles/Tile_16.png differ diff --git a/assets/images/1 Tiles/Tile_17.png b/assets/images/1 Tiles/Tile_17.png new file mode 100644 index 0000000..303598e Binary files /dev/null and b/assets/images/1 Tiles/Tile_17.png differ diff --git a/assets/images/1 Tiles/Tile_18.png b/assets/images/1 Tiles/Tile_18.png new file mode 100644 index 0000000..ffc3a86 Binary files /dev/null and b/assets/images/1 Tiles/Tile_18.png differ diff --git a/assets/images/1 Tiles/Tile_19.png b/assets/images/1 Tiles/Tile_19.png new file mode 100644 index 0000000..f8c7c3d Binary files /dev/null and b/assets/images/1 Tiles/Tile_19.png differ diff --git a/assets/images/1 Tiles/Tile_20.png b/assets/images/1 Tiles/Tile_20.png new file mode 100644 index 0000000..db5fc6a Binary files /dev/null and b/assets/images/1 Tiles/Tile_20.png differ diff --git a/assets/images/1 Tiles/Tile_21.png b/assets/images/1 Tiles/Tile_21.png new file mode 100644 index 0000000..41633bd Binary files /dev/null and b/assets/images/1 Tiles/Tile_21.png differ diff --git a/assets/images/1 Tiles/Tile_22.png b/assets/images/1 Tiles/Tile_22.png new file mode 100644 index 0000000..7951ffc Binary files /dev/null and b/assets/images/1 Tiles/Tile_22.png differ diff --git a/assets/images/1 Tiles/Tile_23.png b/assets/images/1 Tiles/Tile_23.png new file mode 100644 index 0000000..755ee23 Binary files /dev/null and b/assets/images/1 Tiles/Tile_23.png differ diff --git a/assets/images/1 Tiles/Tile_24.png b/assets/images/1 Tiles/Tile_24.png new file mode 100644 index 0000000..64fe43d Binary files /dev/null and b/assets/images/1 Tiles/Tile_24.png differ diff --git a/assets/images/1 Tiles/Tile_25.png b/assets/images/1 Tiles/Tile_25.png new file mode 100644 index 0000000..92da11f Binary files /dev/null and b/assets/images/1 Tiles/Tile_25.png differ diff --git a/assets/images/1 Tiles/Tile_26.png b/assets/images/1 Tiles/Tile_26.png new file mode 100644 index 0000000..a44aa5c Binary files /dev/null and b/assets/images/1 Tiles/Tile_26.png differ diff --git a/assets/images/1 Tiles/Tile_27.png b/assets/images/1 Tiles/Tile_27.png new file mode 100644 index 0000000..1e5c9b5 Binary files /dev/null and b/assets/images/1 Tiles/Tile_27.png differ diff --git a/assets/images/1 Tiles/Tile_28.png b/assets/images/1 Tiles/Tile_28.png new file mode 100644 index 0000000..4a2e4eb Binary files /dev/null and b/assets/images/1 Tiles/Tile_28.png differ diff --git a/assets/images/1 Tiles/Tile_29.png b/assets/images/1 Tiles/Tile_29.png new file mode 100644 index 0000000..b2cdfc7 Binary files /dev/null and b/assets/images/1 Tiles/Tile_29.png differ diff --git a/assets/images/1 Tiles/Tile_30.png b/assets/images/1 Tiles/Tile_30.png new file mode 100644 index 0000000..fa8bc1c Binary files /dev/null and b/assets/images/1 Tiles/Tile_30.png differ diff --git a/assets/images/1 Tiles/Tile_31.png b/assets/images/1 Tiles/Tile_31.png new file mode 100644 index 0000000..bccf198 Binary files /dev/null and b/assets/images/1 Tiles/Tile_31.png differ diff --git a/assets/images/1 Tiles/Tile_32.png b/assets/images/1 Tiles/Tile_32.png new file mode 100644 index 0000000..53780ed Binary files /dev/null and b/assets/images/1 Tiles/Tile_32.png differ diff --git a/assets/images/1 Tiles/Tile_33.png b/assets/images/1 Tiles/Tile_33.png new file mode 100644 index 0000000..fe4e789 Binary files /dev/null and b/assets/images/1 Tiles/Tile_33.png differ diff --git a/assets/images/1 Tiles/Tile_34.png b/assets/images/1 Tiles/Tile_34.png new file mode 100644 index 0000000..ddd30db Binary files /dev/null and b/assets/images/1 Tiles/Tile_34.png differ diff --git a/assets/images/1 Tiles/Tile_35.png b/assets/images/1 Tiles/Tile_35.png new file mode 100644 index 0000000..d662552 Binary files /dev/null and b/assets/images/1 Tiles/Tile_35.png differ diff --git a/assets/images/1 Tiles/Tile_36.png b/assets/images/1 Tiles/Tile_36.png new file mode 100644 index 0000000..2b397a7 Binary files /dev/null and b/assets/images/1 Tiles/Tile_36.png differ diff --git a/assets/images/1 Tiles/Tile_37.png b/assets/images/1 Tiles/Tile_37.png new file mode 100644 index 0000000..dcff3c2 Binary files /dev/null and b/assets/images/1 Tiles/Tile_37.png differ diff --git a/assets/images/1 Tiles/Tile_38.png b/assets/images/1 Tiles/Tile_38.png new file mode 100644 index 0000000..6f921f9 Binary files /dev/null and b/assets/images/1 Tiles/Tile_38.png differ diff --git a/assets/images/1 Tiles/Tile_39.png b/assets/images/1 Tiles/Tile_39.png new file mode 100644 index 0000000..226b0ff Binary files /dev/null and b/assets/images/1 Tiles/Tile_39.png differ diff --git a/assets/images/1 Tiles/Tile_40.png b/assets/images/1 Tiles/Tile_40.png new file mode 100644 index 0000000..b4c0647 Binary files /dev/null and b/assets/images/1 Tiles/Tile_40.png differ diff --git a/assets/images/1 Tiles/Tile_41.png b/assets/images/1 Tiles/Tile_41.png new file mode 100644 index 0000000..98ad911 Binary files /dev/null and b/assets/images/1 Tiles/Tile_41.png differ diff --git a/assets/images/1 Tiles/Tile_42.png b/assets/images/1 Tiles/Tile_42.png new file mode 100644 index 0000000..a4b67ee Binary files /dev/null and b/assets/images/1 Tiles/Tile_42.png differ diff --git a/assets/images/1 Tiles/Tile_43.png b/assets/images/1 Tiles/Tile_43.png new file mode 100644 index 0000000..42de25e Binary files /dev/null and b/assets/images/1 Tiles/Tile_43.png differ diff --git a/assets/images/1 Tiles/Tile_44.png b/assets/images/1 Tiles/Tile_44.png new file mode 100644 index 0000000..4736d8d Binary files /dev/null and b/assets/images/1 Tiles/Tile_44.png differ diff --git a/assets/images/1 Tiles/Tile_45.png b/assets/images/1 Tiles/Tile_45.png new file mode 100644 index 0000000..ceb94c5 Binary files /dev/null and b/assets/images/1 Tiles/Tile_45.png differ diff --git a/assets/images/1 Tiles/Tile_46.png b/assets/images/1 Tiles/Tile_46.png new file mode 100644 index 0000000..c0f3c7e Binary files /dev/null and b/assets/images/1 Tiles/Tile_46.png differ diff --git a/assets/images/1 Tiles/Tile_47.png b/assets/images/1 Tiles/Tile_47.png new file mode 100644 index 0000000..a567d07 Binary files /dev/null and b/assets/images/1 Tiles/Tile_47.png differ diff --git a/assets/images/1 Tiles/Tile_48.png b/assets/images/1 Tiles/Tile_48.png new file mode 100644 index 0000000..ae9b768 Binary files /dev/null and b/assets/images/1 Tiles/Tile_48.png differ diff --git a/assets/images/1 Tiles/Tile_49.png b/assets/images/1 Tiles/Tile_49.png new file mode 100644 index 0000000..9f4abe8 Binary files /dev/null and b/assets/images/1 Tiles/Tile_49.png differ diff --git a/assets/images/1 Tiles/Tile_50.png b/assets/images/1 Tiles/Tile_50.png new file mode 100644 index 0000000..711aac9 Binary files /dev/null and b/assets/images/1 Tiles/Tile_50.png differ diff --git a/assets/images/1 Tiles/Tile_51.png b/assets/images/1 Tiles/Tile_51.png new file mode 100644 index 0000000..1d87e74 Binary files /dev/null and b/assets/images/1 Tiles/Tile_51.png differ diff --git a/assets/images/1 Tiles/Tile_52.png b/assets/images/1 Tiles/Tile_52.png new file mode 100644 index 0000000..55d687e Binary files /dev/null and b/assets/images/1 Tiles/Tile_52.png differ diff --git a/assets/images/1 Tiles/Tile_53.png b/assets/images/1 Tiles/Tile_53.png new file mode 100644 index 0000000..1aee1cb Binary files /dev/null and b/assets/images/1 Tiles/Tile_53.png differ diff --git a/assets/images/1 Tiles/Tile_54.png b/assets/images/1 Tiles/Tile_54.png new file mode 100644 index 0000000..42dc176 Binary files /dev/null and b/assets/images/1 Tiles/Tile_54.png differ diff --git a/assets/images/1 Tiles/Tile_55.png b/assets/images/1 Tiles/Tile_55.png new file mode 100644 index 0000000..5b242b3 Binary files /dev/null and b/assets/images/1 Tiles/Tile_55.png differ diff --git a/assets/images/1 Tiles/Tile_56.png b/assets/images/1 Tiles/Tile_56.png new file mode 100644 index 0000000..60abdff Binary files /dev/null and b/assets/images/1 Tiles/Tile_56.png differ diff --git a/assets/images/1 Tiles/Tile_57.png b/assets/images/1 Tiles/Tile_57.png new file mode 100644 index 0000000..c552ab6 Binary files /dev/null and b/assets/images/1 Tiles/Tile_57.png differ diff --git a/assets/images/1 Tiles/Tile_58.png b/assets/images/1 Tiles/Tile_58.png new file mode 100644 index 0000000..316d472 Binary files /dev/null and b/assets/images/1 Tiles/Tile_58.png differ diff --git a/assets/images/1 Tiles/Tile_59.png b/assets/images/1 Tiles/Tile_59.png new file mode 100644 index 0000000..ef4879f Binary files /dev/null and b/assets/images/1 Tiles/Tile_59.png differ diff --git a/assets/images/1 Tiles/Tile_60.png b/assets/images/1 Tiles/Tile_60.png new file mode 100644 index 0000000..e1d3d8f Binary files /dev/null and b/assets/images/1 Tiles/Tile_60.png differ diff --git a/assets/images/1 Tiles/Tileset.png b/assets/images/1 Tiles/Tileset.png new file mode 100644 index 0000000..8170f00 Binary files /dev/null and b/assets/images/1 Tiles/Tileset.png differ diff --git a/assets/images/Boxes/1.png b/assets/images/Boxes/1.png new file mode 100644 index 0000000..a9c8f38 Binary files /dev/null and b/assets/images/Boxes/1.png differ diff --git a/assets/images/Boxes/2.png b/assets/images/Boxes/2.png new file mode 100644 index 0000000..fcab234 Binary files /dev/null and b/assets/images/Boxes/2.png differ diff --git a/assets/images/Boxes/3.png b/assets/images/Boxes/3.png new file mode 100644 index 0000000..1be31cd Binary files /dev/null and b/assets/images/Boxes/3.png differ diff --git a/assets/images/Boxes/4.png b/assets/images/Boxes/4.png new file mode 100644 index 0000000..b34c8ed Binary files /dev/null and b/assets/images/Boxes/4.png differ diff --git a/assets/images/Boxes/5.png b/assets/images/Boxes/5.png new file mode 100644 index 0000000..1a7ec94 Binary files /dev/null and b/assets/images/Boxes/5.png differ diff --git a/assets/images/Boxes/6.png b/assets/images/Boxes/6.png new file mode 100644 index 0000000..8339b46 Binary files /dev/null and b/assets/images/Boxes/6.png differ diff --git a/assets/images/Grass/1.png b/assets/images/Grass/1.png new file mode 100644 index 0000000..f5795c3 Binary files /dev/null and b/assets/images/Grass/1.png differ diff --git a/assets/images/Grass/10.png b/assets/images/Grass/10.png new file mode 100644 index 0000000..6ce4819 Binary files /dev/null and b/assets/images/Grass/10.png differ diff --git a/assets/images/Grass/2.png b/assets/images/Grass/2.png new file mode 100644 index 0000000..da55fdb Binary files /dev/null and b/assets/images/Grass/2.png differ diff --git a/assets/images/Grass/3.png b/assets/images/Grass/3.png new file mode 100644 index 0000000..73993e6 Binary files /dev/null and b/assets/images/Grass/3.png differ diff --git a/assets/images/Grass/4.png b/assets/images/Grass/4.png new file mode 100644 index 0000000..c3426c7 Binary files /dev/null and b/assets/images/Grass/4.png differ diff --git a/assets/images/Grass/5.png b/assets/images/Grass/5.png new file mode 100644 index 0000000..d5f80f8 Binary files /dev/null and b/assets/images/Grass/5.png differ diff --git a/assets/images/Grass/6.png b/assets/images/Grass/6.png new file mode 100644 index 0000000..ece1ef8 Binary files /dev/null and b/assets/images/Grass/6.png differ diff --git a/assets/images/Grass/7.png b/assets/images/Grass/7.png new file mode 100644 index 0000000..8a29264 Binary files /dev/null and b/assets/images/Grass/7.png differ diff --git a/assets/images/Grass/8.png b/assets/images/Grass/8.png new file mode 100644 index 0000000..5cdb80a Binary files /dev/null and b/assets/images/Grass/8.png differ diff --git a/assets/images/Grass/9.png b/assets/images/Grass/9.png new file mode 100644 index 0000000..da445ee Binary files /dev/null and b/assets/images/Grass/9.png differ diff --git a/assets/images/Ladders/1.png b/assets/images/Ladders/1.png new file mode 100644 index 0000000..34e907f Binary files /dev/null and b/assets/images/Ladders/1.png differ diff --git a/assets/images/Ladders/2.png b/assets/images/Ladders/2.png new file mode 100644 index 0000000..974f499 Binary files /dev/null and b/assets/images/Ladders/2.png differ diff --git a/assets/images/Ladders/3.png b/assets/images/Ladders/3.png new file mode 100644 index 0000000..cb5faf6 Binary files /dev/null and b/assets/images/Ladders/3.png differ diff --git a/assets/images/Ladders/4.png b/assets/images/Ladders/4.png new file mode 100644 index 0000000..98fe7cf Binary files /dev/null and b/assets/images/Ladders/4.png differ diff --git a/assets/images/Ladders/5.png b/assets/images/Ladders/5.png new file mode 100644 index 0000000..b9c6b1d Binary files /dev/null and b/assets/images/Ladders/5.png differ diff --git a/assets/images/Ladders/6.png b/assets/images/Ladders/6.png new file mode 100644 index 0000000..b70a9d5 Binary files /dev/null and b/assets/images/Ladders/6.png differ diff --git a/assets/images/Pointers/1.png b/assets/images/Pointers/1.png new file mode 100644 index 0000000..99a1a00 Binary files /dev/null and b/assets/images/Pointers/1.png differ diff --git a/assets/images/Pointers/2.png b/assets/images/Pointers/2.png new file mode 100644 index 0000000..ef5f603 Binary files /dev/null and b/assets/images/Pointers/2.png differ diff --git a/assets/images/Pointers/3.png b/assets/images/Pointers/3.png new file mode 100644 index 0000000..af6256f Binary files /dev/null and b/assets/images/Pointers/3.png differ diff --git a/assets/images/Pointers/4.png b/assets/images/Pointers/4.png new file mode 100644 index 0000000..60deb80 Binary files /dev/null and b/assets/images/Pointers/4.png differ diff --git a/assets/images/Pointers/5.png b/assets/images/Pointers/5.png new file mode 100644 index 0000000..7a7a8c3 Binary files /dev/null and b/assets/images/Pointers/5.png differ diff --git a/assets/images/Pointers/6.png b/assets/images/Pointers/6.png new file mode 100644 index 0000000..227b123 Binary files /dev/null and b/assets/images/Pointers/6.png differ diff --git a/assets/images/Pointers/7.png b/assets/images/Pointers/7.png new file mode 100644 index 0000000..f7beb70 Binary files /dev/null and b/assets/images/Pointers/7.png differ diff --git a/assets/images/Pointers/8.png b/assets/images/Pointers/8.png new file mode 100644 index 0000000..a1b07ab Binary files /dev/null and b/assets/images/Pointers/8.png differ diff --git a/assets/images/Ridges/1.png b/assets/images/Ridges/1.png new file mode 100644 index 0000000..9e3b3cd Binary files /dev/null and b/assets/images/Ridges/1.png differ diff --git a/assets/images/Ridges/2.png b/assets/images/Ridges/2.png new file mode 100644 index 0000000..d847f25 Binary files /dev/null and b/assets/images/Ridges/2.png differ diff --git a/assets/images/Ridges/3.png b/assets/images/Ridges/3.png new file mode 100644 index 0000000..3d28ee0 Binary files /dev/null and b/assets/images/Ridges/3.png differ diff --git a/assets/images/Ridges/4.png b/assets/images/Ridges/4.png new file mode 100644 index 0000000..5477843 Binary files /dev/null and b/assets/images/Ridges/4.png differ diff --git a/assets/images/Ridges/5.png b/assets/images/Ridges/5.png new file mode 100644 index 0000000..2e59aad Binary files /dev/null and b/assets/images/Ridges/5.png differ diff --git a/assets/images/Ridges/6.png b/assets/images/Ridges/6.png new file mode 100644 index 0000000..9a336e3 Binary files /dev/null and b/assets/images/Ridges/6.png differ diff --git a/assets/images/Stones/1.png b/assets/images/Stones/1.png new file mode 100644 index 0000000..4ea8c80 Binary files /dev/null and b/assets/images/Stones/1.png differ diff --git a/assets/images/Stones/2.png b/assets/images/Stones/2.png new file mode 100644 index 0000000..4eba57c Binary files /dev/null and b/assets/images/Stones/2.png differ diff --git a/assets/images/Stones/3.png b/assets/images/Stones/3.png new file mode 100644 index 0000000..e213cdd Binary files /dev/null and b/assets/images/Stones/3.png differ diff --git a/assets/images/Stones/4.png b/assets/images/Stones/4.png new file mode 100644 index 0000000..c8f468a Binary files /dev/null and b/assets/images/Stones/4.png differ diff --git a/assets/images/Stones/5.png b/assets/images/Stones/5.png new file mode 100644 index 0000000..706d435 Binary files /dev/null and b/assets/images/Stones/5.png differ diff --git a/assets/images/Trees/1.png b/assets/images/Trees/1.png new file mode 100644 index 0000000..ea5f766 Binary files /dev/null and b/assets/images/Trees/1.png differ diff --git a/assets/images/Trees/2.png b/assets/images/Trees/2.png new file mode 100644 index 0000000..f9f296c Binary files /dev/null and b/assets/images/Trees/2.png differ diff --git a/assets/images/Trees/3.png b/assets/images/Trees/3.png new file mode 100644 index 0000000..2f1bed1 Binary files /dev/null and b/assets/images/Trees/3.png differ diff --git a/assets/images/Warrior_1/Attack_1.png b/assets/images/Warrior_1/Attack_1.png new file mode 100644 index 0000000..3b73564 Binary files /dev/null and b/assets/images/Warrior_1/Attack_1.png differ diff --git a/assets/images/Warrior_1/Attack_2.png b/assets/images/Warrior_1/Attack_2.png new file mode 100644 index 0000000..d6931f4 Binary files /dev/null and b/assets/images/Warrior_1/Attack_2.png differ diff --git a/assets/images/Warrior_1/Attack_3.png b/assets/images/Warrior_1/Attack_3.png new file mode 100644 index 0000000..e212bd2 Binary files /dev/null and b/assets/images/Warrior_1/Attack_3.png differ diff --git a/assets/images/Warrior_1/Dead.png b/assets/images/Warrior_1/Dead.png new file mode 100644 index 0000000..5ebaed0 Binary files /dev/null and b/assets/images/Warrior_1/Dead.png differ diff --git a/assets/images/Warrior_1/Hurt.png b/assets/images/Warrior_1/Hurt.png new file mode 100644 index 0000000..53b19ba Binary files /dev/null and b/assets/images/Warrior_1/Hurt.png differ diff --git a/assets/images/Warrior_1/Idle.png b/assets/images/Warrior_1/Idle.png new file mode 100644 index 0000000..8bea9df Binary files /dev/null and b/assets/images/Warrior_1/Idle.png differ diff --git a/assets/images/Warrior_1/Jump.png b/assets/images/Warrior_1/Jump.png new file mode 100644 index 0000000..61efa61 Binary files /dev/null and b/assets/images/Warrior_1/Jump.png differ diff --git a/assets/images/Warrior_1/Run+Attack.png b/assets/images/Warrior_1/Run+Attack.png new file mode 100644 index 0000000..6164bd4 Binary files /dev/null and b/assets/images/Warrior_1/Run+Attack.png differ diff --git a/assets/images/Warrior_1/Run.png b/assets/images/Warrior_1/Run.png new file mode 100644 index 0000000..ed3eb23 Binary files /dev/null and b/assets/images/Warrior_1/Run.png differ diff --git a/assets/images/Warrior_1/Walk.png b/assets/images/Warrior_1/Walk.png new file mode 100644 index 0000000..60d02dd Binary files /dev/null and b/assets/images/Warrior_1/Walk.png differ diff --git a/assets/images/basicSword.spi.png b/assets/images/basicSword.spi.png deleted file mode 100644 index 06f28c6..0000000 Binary files a/assets/images/basicSword.spi.png and /dev/null differ diff --git a/assets/images/characters.png b/assets/images/characters.png deleted file mode 100644 index f6ab67c..0000000 Binary files a/assets/images/characters.png and /dev/null differ diff --git a/assets/images/enemy.png b/assets/images/enemy.png deleted file mode 100644 index fcf44a1..0000000 Binary files a/assets/images/enemy.png and /dev/null differ diff --git a/assets/images/ground.jpg b/assets/images/ground.jpg deleted file mode 100644 index 5783624..0000000 Binary files a/assets/images/ground.jpg and /dev/null differ diff --git a/assets/images/healthPoison.png b/assets/images/healthPoison.png deleted file mode 100644 index 4986af7..0000000 Binary files a/assets/images/healthPoison.png and /dev/null differ diff --git a/assets/images/mpc.png b/assets/images/mpc.png deleted file mode 100644 index ccb6da9..0000000 Binary files a/assets/images/mpc.png and /dev/null differ diff --git a/assets/images/player.jpg b/assets/images/player.jpg deleted file mode 100644 index a0e10a7..0000000 Binary files a/assets/images/player.jpg and /dev/null differ diff --git a/assets/images/stairs.png b/assets/images/stairs.png deleted file mode 100644 index f6fc7a3..0000000 Binary files a/assets/images/stairs.png and /dev/null differ diff --git a/assets/images/wall.png b/assets/images/wall.png deleted file mode 100644 index b09ca94..0000000 Binary files a/assets/images/wall.png and /dev/null differ diff --git a/go.mod b/go.mod index 16a542e..99ff40f 100644 --- a/go.mod +++ b/go.mod @@ -2,12 +2,15 @@ module mountain go 1.26.2 +require ( + github.com/go-gl/mathgl v1.2.0 + github.com/hajimehoshi/ebiten/v2 v2.9.9 +) + require ( github.com/ebitengine/gomobile v0.0.0-20250923094054-ea854a63cce1 // indirect github.com/ebitengine/hideconsole v1.0.0 // indirect github.com/ebitengine/purego v0.9.0 // indirect - github.com/go-gl/mathgl v1.2.0 // indirect - github.com/hajimehoshi/ebiten/v2 v2.9.9 // indirect github.com/jezek/xgb v1.1.1 // indirect golang.org/x/sync v0.17.0 // indirect golang.org/x/sys v0.36.0 // indirect diff --git a/internal/entities/entity.go b/internal/entities/entity.go new file mode 100644 index 0000000..ea1cbaf --- /dev/null +++ b/internal/entities/entity.go @@ -0,0 +1,20 @@ +package entities + +import "github.com/go-gl/mathgl/mgl64" + +// Entity definierar alla bas-objekt i varlden +type Entity interface { +Pos() mgl64.Vec3 +SetPos(pos mgl64.Vec3) +IsBlocking() bool +IsMovable() bool +Move(dx, dy, dz float64) +Damage(amount int) +Pickup() bool +GetHealth() int + +// Ritar ut framkallningen av spriten +// sideView: ifall vi ritar från sidan (vänster) eller uppifrån (höger) +DrawSide(screen interface{}, x, y float64) +DrawTop(screen interface{}, x, y float64) +} diff --git a/internal/entities/tiles.go b/internal/entities/tiles.go new file mode 100644 index 0000000..08f5fc8 --- /dev/null +++ b/internal/entities/tiles.go @@ -0,0 +1,42 @@ +package entities + +import ( +"github.com/go-gl/mathgl/mgl64" +"github.com/hajimehoshi/ebiten/v2" +) + +type Tile struct { +pos mgl64.Vec3 +health int +SideImg *ebiten.Image +TopImg *ebiten.Image +} + +func (t *Tile) Pos() mgl64.Vec3 { return t.pos } +func (t *Tile) SetPos(pos mgl64.Vec3) { t.pos = pos } +func (t *Tile) IsBlocking() bool { return true } +func (t *Tile) IsMovable() bool { return false } +func (t *Tile) Move(dx, dy, dz float64) { +// Not feasible for soil etc. +} +func (t *Tile) Damage(am int) { t.health -= am } +func (t *Tile) Pickup() bool { return false } +func (t *Tile) GetHealth() int { return t.health } + +func (t *Tile) DrawSide(screen interface{}, x, y float64) { +scr := screen.(*ebiten.Image) +if t.SideImg != nil { +op := &ebiten.DrawImageOptions{} +op.GeoM.Translate(x, y) +scr.DrawImage(t.SideImg, op) +} +} + +func (t *Tile) DrawTop(screen interface{}, x, y float64) { +scr := screen.(*ebiten.Image) +if t.TopImg != nil { +op := &ebiten.DrawImageOptions{} +op.GeoM.Translate(x, y) +scr.DrawImage(t.TopImg, op) +} +} diff --git a/internal/entities/world.go b/internal/entities/world.go new file mode 100644 index 0000000..b72e40b --- /dev/null +++ b/internal/entities/world.go @@ -0,0 +1,45 @@ +package entities + +import "github.com/go-gl/mathgl/mgl64" + +const ( +TileSize = 32.0 // Varje block ar 32x32 world units +) + +type World struct { +Width, Height, Depth int +Grid [][][]Entity +} + +func NewWorld(w, h, d int) *World { +grid := make([][][]Entity, w) +for x := 0; x < w; x++ { +grid[x] = make([][]Entity, h) +for y := 0; y < h; y++ { +grid[x][y] = make([]Entity, d) +} +} +return &World{Width: w, Height: h, Depth: d, Grid: grid} +} + +func (w *World) GetEntityAt(x, y, z int) Entity { +if x < 0 || x >= w.Width || y < 0 || y >= w.Height || z < 0 || z >= w.Depth { +return nil +} +return w.Grid[x][y][z] +} + +func (w *World) SetEntityAt(x, y, z int, e Entity) { +if x < 0 || x >= w.Width || y < 0 || y >= w.Height || z < 0 || z >= w.Depth { +return +} +w.Grid[x][y][z] = e +if e != nil { +e.SetPos(mgl64.Vec3{float64(x), float64(y), float64(z)}) +} +} + +// Convert absolute 3D position to Grid index +func ToGridIndex(pos mgl64.Vec3) (int, int, int) { +return int(pos[0]), int(pos[1]), int(pos[2]) +} diff --git a/internal/game/game.go b/internal/game/game.go index 1e7c154..a29400a 100644 --- a/internal/game/game.go +++ b/internal/game/game.go @@ -62,4 +62,4 @@ func (g *Game) ChangeScene(s SceneType) { case ScenePlay: g.currentScene = scenes.NewPlayScene() } -} \ No newline at end of file +} diff --git a/internal/scenes/play.go b/internal/scenes/play.go index 0c99147..0dd9e8f 100644 --- a/internal/scenes/play.go +++ b/internal/scenes/play.go @@ -1,21 +1,24 @@ package scenes import ( + "image" "image/color" _ "image/jpeg" _ "image/png" "log" + "mountain/internal/entities" + "github.com/go-gl/mathgl/mgl64" "github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2/ebitenutil" ) const ( - Gravity = 0.5 - JumpForce = -10.0 - MoveSpeed = 4.0 - FloorHeight = 500.0 + Gravity = 0.5 + JumpForce = -8.0 + MoveSpeed = 4.0 + ViewSize = 380 // 800 width, we have 2 viewports (380 each with 20 padding) ) type Player struct { @@ -23,164 +26,237 @@ type Player struct { Vel mgl64.Vec3 // Hastighet Width, Height float64 // För (AABB) + IsGrounded bool - Sprite *ebiten.Image + // Sprites + SpriteRun *ebiten.Image + SpriteIdle *ebiten.Image + SpriteTop *ebiten.Image + AnimationFrame int + AnimationCounter int + + FacingRight bool } type PlayScene struct { - player Player - groundImg *ebiten.Image - platforms []Platform - isGrounded bool + world *entities.World + player *Player + leftView *ebiten.Image + rightView *ebiten.Image } func NewPlayScene() *PlayScene { - pImg, _, err := ebitenutil.NewImageFromFile("assets/images/player.jpg") + w := entities.NewWorld(10, 10, 10) + + tile12, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_12.png") + tile02, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_02.png") + tile31, _, _ := ebitenutil.NewImageFromFile("assets/images/1 Tiles/Tile_31.png") + + for x := 0; x < 10; x++ { + for z := 0; z < 10; z++ { + // Surface grass + w.SetEntityAt(x, 9, z, &entities.Tile{ + SideImg: tile02, + TopImg: tile31, + }) + // Sub dirt + w.SetEntityAt(x, 8, z, &entities.Tile{ + SideImg: tile12, + TopImg: tile12, + }) + } + } + + pRun, _, err := ebitenutil.NewImageFromFile("assets/images/Warrior_1/Run.png") if err != nil { - log.Println("Kunde inte ladda spelar-sprite:", err) - pImg = ebiten.NewImage(32, 32) + log.Println("Run sprite error:", err) + pRun = ebiten.NewImage(96, 96) + } + pIdle, _, _ := ebitenutil.NewImageFromFile("assets/images/Warrior_1/Idle.png") + if pIdle == nil { + pIdle = pRun } - gImg, _, err := ebitenutil.NewImageFromFile("assets/images/ground.jpg") - if err != nil { - log.Println("Kunde inte ladda mark-sprite:", err) - gImg = ebiten.NewImage(800, 100) - } + pTop := ebiten.NewImage(32, 32) + pTop.Fill(color.RGBA{255, 255, 0, 255}) - wallImg, _, _ := ebitenutil.NewImageFromFile("assets/images/wall.png") - stairImg, _, _ := ebitenutil.NewImageFromFile("assets/images/stairs.png") - - w, h := pImg.Bounds().Dx(), pImg.Bounds().Dy() - - // Skapa en enkel karta med plattformar för att hoppa på - var mapPlatforms []Platform - - if wallImg != nil { - pW := float64(wallImg.Bounds().Dx()) - pH := float64(wallImg.Bounds().Dy()) - mapPlatforms = append(mapPlatforms, Platform{ - Pos: mgl64.Vec3{300.0, 400.0, 0.0}, - Width: pW, - Height: pH, - Sprite: wallImg, - Scale: 0.2, // Skala ner väggen eftersom dina bildfiler (125k/325k) förmodligen är stora - }) - mapPlatforms = append(mapPlatforms, Platform{ - Pos: mgl64.Vec3{450.0, 300.0, 0.0}, - Width: pW, - Height: pH, - Sprite: wallImg, - Scale: 0.2, - }) - } - if stairImg != nil { - sW := float64(stairImg.Bounds().Dx()) - sH := float64(stairImg.Bounds().Dy()) - mapPlatforms = append(mapPlatforms, Platform{ - Pos: mgl64.Vec3{150.0, 480.0, 0.0}, - Width: sW, - Height: sH, - Sprite: stairImg, - Scale: 0.5, - }) + player := &Player{ + Pos: mgl64.Vec3{4.0 * entities.TileSize, 7.0 * entities.TileSize, 4.0 * entities.TileSize}, + Width: 20, + Height: 40, + SpriteRun: pRun, + SpriteIdle: pIdle, + SpriteTop: pTop, + FacingRight: true, } return &PlayScene{ - player: Player{ - Pos: mgl64.Vec3{400.0, 100.0, 0.0}, - Vel: mgl64.Vec3{0, 0, 0}, - Width: float64(w), - Height: float64(h), - Sprite: pImg, - }, - groundImg: gImg, - platforms: mapPlatforms, + world: w, + player: player, + leftView: ebiten.NewImage(ViewSize, ViewSize), + rightView: ebiten.NewImage(ViewSize, ViewSize), } } func (s *PlayScene) Update() error { - // === Input (X axis) === - s.player.Vel[0] = 0 // Återställ rörelse varje frame + p := s.player + + p.Vel[0] = 0 + p.Vel[2] = 0 + isMoving := false if ebiten.IsKeyPressed(ebiten.KeyLeft) || ebiten.IsKeyPressed(ebiten.KeyA) { - s.player.Vel[0] = -MoveSpeed + p.Vel[0] = -MoveSpeed + p.FacingRight = false + isMoving = true } if ebiten.IsKeyPressed(ebiten.KeyRight) || ebiten.IsKeyPressed(ebiten.KeyD) { - s.player.Vel[0] = MoveSpeed + p.Vel[0] = MoveSpeed + p.FacingRight = true + isMoving = true + } + if ebiten.IsKeyPressed(ebiten.KeyUp) || ebiten.IsKeyPressed(ebiten.KeyW) { + p.Vel[2] = -MoveSpeed + isMoving = true + } + if ebiten.IsKeyPressed(ebiten.KeyDown) || ebiten.IsKeyPressed(ebiten.KeyS) { + p.Vel[2] = MoveSpeed + isMoving = true } - // === Hoppa (Y axis) === - if (ebiten.IsKeyPressed(ebiten.KeyUp) || ebiten.IsKeyPressed(ebiten.KeySpace)) && s.isGrounded { - s.player.Vel[1] = JumpForce - s.isGrounded = false + if ebiten.IsKeyPressed(ebiten.KeySpace) && p.IsGrounded { + p.Vel[1] = JumpForce + p.IsGrounded = false } - // === Fysik / Euler integrering === - // 1. Applicera gravitation - if !s.isGrounded { - s.player.Vel[1] += Gravity + if !p.IsGrounded { + p.Vel[1] += Gravity } - // 2. Planera Y förflyttning - nextY := s.player.Pos[1] + s.player.Vel[1] - s.isGrounded = false + nextX := p.Pos[0] + p.Vel[0] + nextY := p.Pos[1] + p.Vel[1] + nextZ := p.Pos[2] + p.Vel[2] - // Kolla om vi landar på en plattform (endast när vi faller) - if s.player.Vel[1] >= 0 { - for _, p := range s.platforms { - if p.CheckCollisionTop(&s.player, nextY) { - nextY = p.Pos[1] - s.player.Height - s.player.Vel[1] = 0 - s.isGrounded = true - break - } + gridY := int((nextY + p.Height) / entities.TileSize) + gridX := int((nextX + p.Width/2) / entities.TileSize) + gridZ := int((nextZ + p.Width/2) / entities.TileSize) + + entY := s.world.GetEntityAt(gridX, gridY, gridZ) + if entY != nil && entY.IsBlocking() && p.Vel[1] >= 0 { + nextY = float64(gridY)*entities.TileSize - p.Height - 0.1 + p.Vel[1] = 0 + p.IsGrounded = true + } else { + p.IsGrounded = false + } + + p.Pos[0] = nextX + p.Pos[1] = nextY + p.Pos[2] = nextZ + + if isMoving { + p.AnimationCounter++ + if p.AnimationCounter > 5 { + p.AnimationFrame = (p.AnimationFrame + 1) % 6 + p.AnimationCounter = 0 } + } else { + p.AnimationFrame = 0 } - // === "Kollision" med golvet (väldigt simpel 2D-kollision för att simulera ytan på the floor på 2D-skärmen) === - if nextY+s.player.Height >= FloorHeight { - nextY = FloorHeight - s.player.Height - s.player.Vel[1] = 0 - s.isGrounded = true - } - - s.player.Pos[0] += s.player.Vel[0] - s.player.Pos[1] = nextY - return nil } func (s *PlayScene) Draw(screen *ebiten.Image) { - // Gör bakgrunden ljusblå (Sky blue) - screen.Fill(color.RGBA{135, 206, 235, 255}) + screen.Fill(color.RGBA{20, 20, 20, 255}) - // === 3D -> 2D Rendering Pipeline (Side View mode) === + s.leftView.Fill(color.RGBA{135, 206, 235, 255}) + s.rightView.Fill(color.RGBA{50, 150, 50, 255}) - // Rita ut marken över hela skärmens bredd (Tiling) - if s.groundImg != nil { - gWidth := float64(s.groundImg.Bounds().Dx()) - if gWidth == 0 { - gWidth = 32 // Undvik division med noll ifall bilden är tom - } - for x := 0.0; x < 800.0; x += gWidth { - gOp := &ebiten.DrawImageOptions{} - gOp.GeoM.Translate(x, FloorHeight) - screen.DrawImage(s.groundImg, gOp) + playerGridZ := int((s.player.Pos[2] + s.player.Width/2) / entities.TileSize) + playerGridY := int((s.player.Pos[1] + s.player.Height/2) / entities.TileSize) + + camX := s.player.Pos[0] - float64(ViewSize)/2.0 + camY := s.player.Pos[1] - float64(ViewSize)/2.0 + camZ := s.player.Pos[2] - float64(ViewSize)/2.0 + + // Vänster vy: Sido-vy (renderar alla X och Y objekt vid spelarens Z) + for x := 0; x < s.world.Width; x++ { + for y := 0; y < s.world.Height; y++ { + ent := s.world.GetEntityAt(x, y, playerGridZ) + if ent != nil { + px := float64(x)*entities.TileSize - camX + py := float64(y)*entities.TileSize - camY + ent.DrawSide(s.leftView, px, py) + } } } - // Lägg ut karta/plattformar - for _, p := range s.platforms { - platOp := &ebiten.DrawImageOptions{} - platOp.GeoM.Scale(p.Scale, p.Scale) - platOp.GeoM.Translate(p.Pos[0], p.Pos[1]) - screen.DrawImage(p.Sprite, platOp) + // Höger vy: Ovan-vy (renderar alla X och Z objekt vid underliggande rad) + viewY := playerGridY + if s.player.IsGrounded { + viewY += 1 } - // Rita Spelaren baserat på dess 3D-kordinater översatta till (X, Y) på 2D-skärmen (vi skippar Z i denna view) - pOp := &ebiten.DrawImageOptions{} - pOp.GeoM.Translate(s.player.Pos[0], s.player.Pos[1]) - screen.DrawImage(s.player.Sprite, pOp) + for x := 0; x < s.world.Width; x++ { + for z := 0; z < s.world.Depth; z++ { + ent := s.world.GetEntityAt(x, viewY, z) + if ent != nil { + px := float64(x)*entities.TileSize - camX + pz := float64(z)*entities.TileSize - camZ + ent.DrawTop(s.rightView, px, pz) + } + } + } - ebitenutil.DebugPrint(screen, "Spelar Scene: SIDOVY. Styr med PILAR och Space.") + s.drawPlayerSide(s.leftView, camX, camY) + s.drawPlayerTop(s.rightView, camX, camZ) + + opL := &ebiten.DrawImageOptions{} + opL.GeoM.Translate(10, 100) + screen.DrawImage(s.leftView, opL) + + opR := &ebiten.DrawImageOptions{} + opR.GeoM.Translate(410, 100) + screen.DrawImage(s.rightView, opR) + + ebitenutil.DebugPrint(screen, "VÄNSTER (Sido vy) HÖGER (Top vy: Slice av din Hojd)") +} + +func (s *PlayScene) drawPlayerSide(screen *ebiten.Image, camX, camY float64) { + p := s.player + + sx := p.AnimationFrame * 96 + srcRect := image.Rect(sx, 0, sx+96, 96) + var activeSprite *ebiten.Image + + if p.Vel[0] != 0 || p.Vel[2] != 0 { // Is moving X or Z + activeSprite = p.SpriteRun + } else { + activeSprite = p.SpriteIdle + } + + subImg := activeSprite.SubImage(srcRect).(*ebiten.Image) + + op := &ebiten.DrawImageOptions{} + if !p.FacingRight { + op.GeoM.Scale(-1, 1) + op.GeoM.Translate(96, 0) + } + + drawX := p.Pos[0] - camX - 38 + drawY := p.Pos[1] - camY - 56 + + op.GeoM.Translate(drawX, drawY) + screen.DrawImage(subImg, op) +} + +func (s *PlayScene) drawPlayerTop(screen *ebiten.Image, camX, camZ float64) { + p := s.player + op := &ebiten.DrawImageOptions{} + + drawX := p.Pos[0] - camX + drawZ := p.Pos[2] - camZ + op.GeoM.Translate(drawX, drawZ) + screen.DrawImage(p.SpriteTop, op) } diff --git a/internal/scenes/play_map.go b/internal/scenes/play_map.go deleted file mode 100644 index 1ac927e..0000000 --- a/internal/scenes/play_map.go +++ /dev/null @@ -1,26 +0,0 @@ -package scenes - -import ( -"github.com/go-gl/mathgl/mgl64" -"github.com/hajimehoshi/ebiten/v2" -) - -type Platform struct { -Pos mgl64.Vec3 -Width float64 -Height float64 -Sprite *ebiten.Image -Scale float64 -} - -// Kolla ifall spelaren nuddar ovansidan av plattformen (Fallande) -func (p *Platform) CheckCollisionTop(player *Player, nextY float64) bool { -// AABB (Axis-Aligned Bounding Box) X-kollision -if player.Pos[0] < p.Pos[0]+(p.Width*p.Scale) && player.Pos[0]+player.Width > p.Pos[0] { -// Kolla om spelaren är på väg ner och "korsar" toppen av plattformen -if player.Pos[1]+player.Height <= p.Pos[1] && nextY+player.Height >= p.Pos[1] { -return true -} -} -return false -} diff --git a/main.go b/main.go index f851ad9..0e6ccdf 100644 --- a/main.go +++ b/main.go @@ -15,4 +15,4 @@ func main() { if err := ebiten.RunGame(g); err != nil { log.Fatal(err) } -} \ No newline at end of file +} diff --git a/mountain b/mountain new file mode 100755 index 0000000..25fcd9e Binary files /dev/null and b/mountain differ diff --git a/plan.md b/plan.md index 3021c84..d77b89a 100644 --- a/plan.md +++ b/plan.md @@ -10,6 +10,9 @@ typ: spel Spelets arkitektur bygger på att helt separera 3D-spellogiken från 2D-rendering. 1. **3D Verklighet:** Varje spelfigur och block har en 3D-vektor (`X`, `Y`, `Z`) samt en storlek (`Width`, `Height`, `Depth`). Fysikmotorn (som bygger på euler-integrering och AABB-kollisioner) körs helt och hållet i denna 3D-värld. Tyngdkraft drar objekt neråt längs Y eller Z axeln. -2. **2D Rendering:** Spelet håller reda på aktuellt "ViewMode" (t.ex. TopDown eller SideView). I renderingen itererar motorn över 3D-objekten och översätter deras 3D-vektorer till `(X, Y)` på skärmen baserat på vald vy. Varje objekt har hänvisningar till olika 2D-sprites (t.ex. en bild fotograferad uppifrån, en från sidan) som sedan ritas med *Ebitengine*. -3. **Spelcykel (Game Loop):** Spelet styrs av en global `Game`-struct med en `Update()` (sköter 3D-fysik, input, state-förändringar) och en `Draw()` (översätter till 2D och ritar) funktion. -4. **States:** Koden är uppdelad i "Scenes" eller "States" (Huvudmeny, Gameplay-läge) för isolerad logik. +2. **2D Rendering (Double Viewport):** Spelet renderas genom två synkroniserade vyportar bredvid varandra, båda med en svart inramning: + - **Vänster vy (Sido-vy):** Visar X- och Y-axeln (bredd och höjd). När spelaren går "inåt" längs Z-axeln ritas en ny rad av kartan ut, med spelaren uppdaterad i centrum. + - **Höger vy (Ovanifrån):** Visar X- och Z-axeln (bredd och djup). När spelaren ändrar höjd (Y-axel, t.ex. genom att hoppa) renderas en ny höjd-slice av världen med spelaren i absoluta mittpunkten. +3. **Kartstruktur:** Världen sparas i grunden som en tre-dimensionell array (`[][][]Entity`), exempelvis motsvarande en 10x10x10 map. Varje block motsvarar 32x32 pixlar i world-space som sedan representeras av specifika sprites ur `assets/images/1 Tiles`. Kartans botten består av solida jordblock som förhindrar spelaren från att falla igenom. +4. **Gemensamt Spelobjekt (Entity):** All logik byggs på ett generiskt `Entity`-interface som besvarar frågor som `IsBlocking()`, `IsMovable()`, `Move()`, `Damage()`, `Pickup()` och `GetHealth()`. Detta gör att karaktärer, pussel och fiender smidigt kan kalla varandras triggers och dela samma kollisionsmekanismer i 3D-kuben. +5. **Animation och Input:** Kontroller och inputs (Gå, Hoppa m.m) knyts till konfigurerbara actions. Karaktärerna använder sprite-sheets där varje "frame" är 96x96 pixlar som bläddras igenom i en specifik timer för att spela upp livliga animationer. Att byta håll innebär att man byter animation state och hastighetsvektor. diff --git a/release/linux/regin_mountain_game b/release/linux/regin_mountain_game new file mode 100755 index 0000000..a07ae9b Binary files /dev/null and b/release/linux/regin_mountain_game differ