diff --git a/assets/graphics/enemies/slime_green.png b/assets/graphics/enemies/slime_green.png new file mode 100644 index 0000000..a21cb6f Binary files /dev/null and b/assets/graphics/enemies/slime_green.png differ diff --git a/assets/graphics/enemies/slime_green.png.import b/assets/graphics/enemies/slime_green.png.import new file mode 100644 index 0000000..74f5067 --- /dev/null +++ b/assets/graphics/enemies/slime_green.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dm5aslppmk2hw" +path="res://.godot/imported/slime_green.png-5261ffd1254c816fe62b35227a9aa11d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/enemies/slime_green.png" +dest_files=["res://.godot/imported/slime_green.png-5261ffd1254c816fe62b35227a9aa11d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/environment/farbackground.png b/assets/graphics/environment/farbackground.png new file mode 100644 index 0000000..76a7b99 Binary files /dev/null and b/assets/graphics/environment/farbackground.png differ diff --git a/assets/graphics/environment/farbackground.png.import b/assets/graphics/environment/farbackground.png.import new file mode 100644 index 0000000..b871d7d --- /dev/null +++ b/assets/graphics/environment/farbackground.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2kn5xekesvey" +path="res://.godot/imported/farbackground.png-19ea571d30a68e2eb713a9cdc7dac764.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/environment/farbackground.png" +dest_files=["res://.godot/imported/farbackground.png-19ea571d30a68e2eb713a9cdc7dac764.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/environment/foreground.png b/assets/graphics/environment/foreground.png new file mode 100644 index 0000000..6c183b9 Binary files /dev/null and b/assets/graphics/environment/foreground.png differ diff --git a/assets/graphics/environment/foreground.png.import b/assets/graphics/environment/foreground.png.import new file mode 100644 index 0000000..3dd3dcc --- /dev/null +++ b/assets/graphics/environment/foreground.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsywyyr0yb4cg" +path="res://.godot/imported/foreground.png-dbbd7dc92b4c96ae99e46b292c2d728f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/environment/foreground.png" +dest_files=["res://.godot/imported/foreground.png-dbbd7dc92b4c96ae99e46b292c2d728f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/environment/midground.png b/assets/graphics/environment/midground.png new file mode 100644 index 0000000..2b697a3 Binary files /dev/null and b/assets/graphics/environment/midground.png differ diff --git a/assets/graphics/environment/midground.png.import b/assets/graphics/environment/midground.png.import new file mode 100644 index 0000000..09d9e09 --- /dev/null +++ b/assets/graphics/environment/midground.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dd47jvi0xusna" +path="res://.godot/imported/midground.png-7df50856e08893ab1487d9520f321193.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/environment/midground.png" +dest_files=["res://.godot/imported/midground.png-7df50856e08893ab1487d9520f321193.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/environment/sky.png b/assets/graphics/environment/sky.png new file mode 100644 index 0000000..6c19bcd Binary files /dev/null and b/assets/graphics/environment/sky.png differ diff --git a/assets/graphics/environment/sky.png.import b/assets/graphics/environment/sky.png.import new file mode 100644 index 0000000..bdc8c25 --- /dev/null +++ b/assets/graphics/environment/sky.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjkp5fjucdfoi" +path="res://.godot/imported/sky.png-87ee3f869f476b86b8c4a0a2c430b158.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/environment/sky.png" +dest_files=["res://.godot/imported/sky.png-87ee3f869f476b86b8c4a0a2c430b158.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/pickups/coin.png b/assets/graphics/pickups/coin.png new file mode 100644 index 0000000..01ae33d Binary files /dev/null and b/assets/graphics/pickups/coin.png differ diff --git a/assets/graphics/pickups/coin.png.import b/assets/graphics/pickups/coin.png.import new file mode 100644 index 0000000..614de19 --- /dev/null +++ b/assets/graphics/pickups/coin.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk4nsr3cbxeal" +path="res://.godot/imported/coin.png-f0b33289d8d72c34d5a0c76da4c0f19c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/pickups/coin.png" +dest_files=["res://.godot/imported/coin.png-f0b33289d8d72c34d5a0c76da4c0f19c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/coin.tscn b/scenes/coin.tscn new file mode 100644 index 0000000..60ef477 --- /dev/null +++ b/scenes/coin.tscn @@ -0,0 +1,113 @@ +[gd_scene format=3 uid="uid://b4811uinm8qcu"] + +[ext_resource type="Script" uid="uid://dhc6762deonm2" path="res://scripts/coin.gd" id="1_i64fm"] +[ext_resource type="Texture2D" uid="uid://dk4nsr3cbxeal" path="res://assets/graphics/pickups/coin.png" id="1_rwqht"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_i64fm"] +atlas = ExtResource("1_rwqht") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_11l1o"] +atlas = ExtResource("1_rwqht") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d14el"] +atlas = ExtResource("1_rwqht") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1ikuy"] +atlas = ExtResource("1_rwqht") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wnlwo"] +atlas = ExtResource("1_rwqht") +region = Rect2(64, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jig8b"] +atlas = ExtResource("1_rwqht") +region = Rect2(80, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmuha"] +atlas = ExtResource("1_rwqht") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kfxoj"] +atlas = ExtResource("1_rwqht") +region = Rect2(112, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jsmju"] +atlas = ExtResource("1_rwqht") +region = Rect2(128, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s0mny"] +atlas = ExtResource("1_rwqht") +region = Rect2(144, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7cc30"] +atlas = ExtResource("1_rwqht") +region = Rect2(160, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rojmm"] +atlas = ExtResource("1_rwqht") +region = Rect2(176, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_mvphy"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_i64fm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_11l1o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d14el") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1ikuy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wnlwo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jig8b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmuha") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kfxoj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jsmju") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s0mny") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7cc30") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rojmm") +}], +"loop": 1, +"name": &"spin", +"speed": 12.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_mvphy"] +radius = 5.0 + +[node name="Coin" type="Area2D" unique_id=613946937] +script = ExtResource("1_i64fm") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=671543793] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_mvphy") +animation = &"spin" +autoplay = "spin" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1014880484] +shape = SubResource("CircleShape2D_mvphy") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/game.tscn b/scenes/game.tscn index cb91f73..f719ddb 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -3,11 +3,17 @@ [ext_resource type="Script" uid="uid://ct51411gsine2" path="res://scripts/gamecontroller.gd" id="1_lnu2h"] [ext_resource type="Script" uid="uid://dv2q4p6jb8h4s" path="res://scripts/scene_manager.gd" id="2_lbhrr"] [ext_resource type="PackedScene" uid="uid://b22qsgmtr231s" path="res://scenes/trigger.tscn" id="2_lnu2h"] +[ext_resource type="Texture2D" uid="uid://cjkp5fjucdfoi" path="res://assets/graphics/environment/sky.png" id="3_0tnpc"] [ext_resource type="PackedScene" uid="uid://5xgx7qarkj3o" path="res://scenes/crate.tscn" id="3_iywne"] [ext_resource type="Texture2D" uid="uid://kyooaow1jeaa" path="res://assets/graphics/terrains/Terrain (32x32).png" id="3_p57ef"] +[ext_resource type="Texture2D" uid="uid://2kn5xekesvey" path="res://assets/graphics/environment/farbackground.png" id="3_vtaks"] [ext_resource type="Texture2D" uid="uid://c8jhlduxe8p77" path="res://assets/graphics/terrains/veg_32x32.png" id="4_gee14"] [ext_resource type="PackedScene" uid="uid://dtegcgc8xcxfg" path="res://scenes/player.tscn" id="4_iywne"] +[ext_resource type="Texture2D" uid="uid://dd47jvi0xusna" path="res://assets/graphics/environment/midground.png" id="4_kvpfn"] [ext_resource type="Texture2D" uid="uid://bu8oc3yypgigw" path="res://assets/graphics/terrains/mushroom_32x64.png" id="5_0tnpc"] +[ext_resource type="Texture2D" uid="uid://dsywyyr0yb4cg" path="res://assets/graphics/environment/foreground.png" id="5_dinhu"] +[ext_resource type="PackedScene" uid="uid://b4811uinm8qcu" path="res://scenes/coin.tscn" id="13_kvuet"] +[ext_resource type="PackedScene" uid="uid://6d5378om23b8" path="res://scenes/slime.tscn" id="14_trtic"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5sy4"] texture = ExtResource("3_p57ef") @@ -401,12 +407,36 @@ size = Vector2(66, 20) [node name="Game" type="Node2D" unique_id=989312165] script = ExtResource("1_lnu2h") +[node name="Parallax2D" type="Parallax2D" parent="." unique_id=1222718260] +repeat_size = Vector2(400, 225) + +[node name="Sprite2D" type="Sprite2D" parent="Parallax2D" unique_id=136019890] +texture = ExtResource("3_0tnpc") +offset = Vector2(200, 112) + +[node name="farbg" type="Parallax2D" parent="." unique_id=415159613] +repeat_size = Vector2(400, 0) + +[node name="Sprite2D" type="Sprite2D" parent="farbg" unique_id=2117193867] +texture_filter = 1 +texture = ExtResource("3_vtaks") +offset = Vector2(200, 350) + +[node name="midground" type="Parallax2D" parent="." unique_id=2019512975] +scroll_scale = Vector2(1.2, 1) +repeat_size = Vector2(400, 0) + +[node name="Sprite2D" type="Sprite2D" parent="midground" unique_id=2080878610] +texture_filter = 1 +texture = ExtResource("4_kvpfn") +offset = Vector2(200, 350) + [node name="SceneManager" type="Node2D" parent="." unique_id=1778809182] script = ExtResource("2_lbhrr") [node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=374407051] texture_filter = 1 -tile_map_data = PackedByteArray("AAASAA0AAAAEAAQAAAAVAA0AAAAAAAQAAAAWAA0AAAABAAQAAAAXAA0AAAABAAQAAAAYAA0AAAAQAAQAAAAYAAwAAAAGAAMAAAAYAAsAAAAAAAAAAAAZAAsAAAABAAAAAAAZAAwAAAABAAIAAAAaAAwAAAACAAIAAAAaAAsAAAACAAAAAAAWAAkAAAACAAQAAAAVAAkAAAAAAAQAAAANABIAAAABAAAAAAAOABIAAAABAAAAAAAPABIAAAABAAAAAAAQABIAAAABAAAAAAARABIAAAABAAAAAAASABIAAAABAAAAAAATABIAAAABAAAAAAAUABIAAAABAAAAAAAVABIAAAABAAAAAAAWABIAAAABAAAAAAAXABIAAAABAAAAAAAYABIAAAABAAAAAAAZABIAAAABAAAAAAAaABIAAAABAAAAAAAbABIAAAAHAAEAAAAbABEAAAAAAAAAAAAcABEAAAACAAAAAAAcABIAAAACAAEAAAANABMAAAAHAAAAAAAOABMAAAAGAAEAAAAPABMAAAAHAAEAAAAQABMAAAAHAAAAAAAQABQAAAAKAAQAAAAPABQAAAAJAAQAAAAOABQAAAABAAIAAAANABQAAAAAAAIAAAARABMAAAAGAAAAAAASABMAAAAGAAAAAAATABMAAAAHAAAAAAASABQAAAAJAAQAAAARABQAAAAJAAQAAAAYABMAAAAGAAAAAAAZABMAAAAGAAAAAAAaABMAAAAGAAAAAAAaABQAAAABAAIAAAAbABMAAAAGAAAAAAAcABMAAAACAAIAAAAbABQAAAACAAIAAAAYABQAAAABAAIAAAAXABMAAAAHAAAAAAAWABMAAAAGAAAAAAAVABMAAAAGAAAAAAAVABQAAAABAAIAAAAUABMAAAAGAAAAAAAUABQAAAAJAAQAAAATABQAAAAKAAQAAAAWABQAAAABAAIAAAAXABQAAAABAAIAAAAZABQAAAABAAIAAAALABMAAAABAAIAAAAMABMAAAABAAIAAAAMABIAAAABAAAAAAALABIAAAABAAAAAAAKABIAAAABAAAAAAAKABMAAAABAAIAAAAJABMAAAAAAAIAAAAJABIAAAAQAAEAAAAIABIAAAAAAAIAAAAIABEAAAAAAAEAAAAJABEAAAACAAEAAAAIABAAAAAAAAEAAAAIAA8AAAAQAAEAAAAJAA8AAAACAAAAAAAJABAAAAACAAEAAAAIAA4AAAACAAAAAAAHAA8AAAAAAAIAAAAHAA4AAAAGAAQAAAAHAA0AAAAQAAMAAAAGAA0AAAAPAAQAAAAGAAwAAAAEAAEAAAAGAAsAAAAPAAMAAAAHAAsAAAABAAQAAAAIAAsAAAABAAQAAAAJAAsAAAAKAAQAAAAKAAsAAAACAAIAAAAKAAoAAAACAAAAAAAJAAoAAAAAAAAAAAANABAAAAACAAQAAAAMABAAAAABAAQAAAALABAAAAAAAAQAAAAVAAwAAQAAAAAAAAAYAAoAAQAAAAAAAAAZAAoAAQAAAAAAAAAIAA0AAQAAAAAAAAAJAAkAAQAAAAAAAAAWAAwAAgAAAAEAAAAWAAsAAgAAAAAAAAAbABAAAgAAAAEAAAAbAA8AAgAAAAAAAAAaABEAAQAAAAAAAAA=") +tile_map_data = PackedByteArray("AAASAA0AAAAEAAAAAAAVAA0AAAAAAAAAAAAWAA0AAAABAAAAAAAXAA0AAAABAAAAAAAYAA0AAAAHAAQAAAAYAAwAAAAGAAMAAAAYAAsAAAAAAAAAAAAZAAsAAAABAAAAAAAZAAwAAAABAAIAAAAaAAwAAAACAAIAAAAaAAsAAAACAAAAAAAWAAkAAAACAAQAAAAVAAkAAAAAAAQAAAANABIAAAABAAAAAAAOABIAAAABAAAAAAAPABIAAAABAAAAAAAQABIAAAABAAAAAAARABIAAAABAAAAAAASABIAAAABAAAAAAATABIAAAABAAAAAAAUABIAAAABAAAAAAAVABIAAAABAAAAAAAWABIAAAABAAAAAAAXABIAAAABAAAAAAAYABIAAAABAAAAAAAZABIAAAABAAAAAAAaABIAAAABAAAAAAAbABIAAAAHAAEAAAAbABEAAAAAAAAAAAAcABEAAAACAAAAAAAcABIAAAACAAEAAAANABMAAAAHAAAAAAAOABMAAAAGAAEAAAAPABMAAAAHAAEAAAAQABMAAAAHAAAAAAAQABQAAAAKAAQAAAAPABQAAAAJAAQAAAAOABQAAAABAAIAAAANABQAAAAAAAIAAAARABMAAAAGAAAAAAASABMAAAAGAAAAAAATABMAAAAHAAAAAAASABQAAAAJAAQAAAARABQAAAAJAAQAAAAYABMAAAAGAAAAAAAZABMAAAAGAAAAAAAaABMAAAAGAAAAAAAaABQAAAABAAIAAAAbABMAAAAGAAAAAAAcABMAAAACAAIAAAAbABQAAAACAAIAAAAYABQAAAABAAIAAAAXABMAAAAHAAAAAAAWABMAAAAGAAAAAAAVABMAAAAGAAAAAAAVABQAAAABAAIAAAAUABMAAAAGAAAAAAAUABQAAAAJAAQAAAATABQAAAAKAAQAAAAWABQAAAABAAIAAAAXABQAAAABAAIAAAAZABQAAAABAAIAAAALABMAAAABAAIAAAAMABMAAAABAAIAAAAMABIAAAABAAAAAAALABIAAAABAAAAAAAKABIAAAABAAAAAAAKABMAAAABAAIAAAAJABMAAAAAAAIAAAAJABIAAAAQAAEAAAAIABIAAAAAAAIAAAAIABEAAAAAAAEAAAAJABEAAAACAAEAAAAIABAAAAAAAAEAAAAIAA8AAAAHAAAAAAAJAA8AAAACAAEAAAAJABAAAAACAAEAAAAIAA4AAAABAAAAAAAHAA8AAAAAAAIAAAAHAA4AAAAGAAQAAAAHAA0AAAAQAAMAAAAGAA0AAAAPAAQAAAAGAAwAAAAEAAEAAAAGAAsAAAAPAAMAAAAHAAsAAAABAAQAAAAIAAsAAAABAAQAAAAJAAsAAAAKAAQAAAAKAAsAAAACAAIAAAAKAAoAAAACAAAAAAAJAAoAAAAAAAAAAAANABAAAAACAAQAAAAMABAAAAABAAQAAAALABAAAAAAAAQAAAAVAAwAAQAAAAAAAAAYAAoAAQAAAAAAAAAZAAoAAQAAAAAAAAAIAA0AAQAAAAAAAAAJAAkAAQAAAAAAAAAWAAwAAgAAAAEAAAAWAAsAAgAAAAAAAAAbABAAAgAAAAEAAAAbAA8AAgAAAAAAAAAaABEAAQAAAAAAAAAYAA4AAAACAAIAAAAXAA4AAAABAAIAAAAWAA4AAAABAAIAAAAVAA4AAAAKAAQAAAAUAA4AAAABAAQAAAATAA4AAAABAAQAAAASAA4AAAAMAAQAAAARAA4AAAABAAQAAAAQAA4AAAABAAQAAAAPAA4AAAABAAQAAAAOAA4AAAABAAQAAAANAA4AAAABAAQAAAAMAA4AAAABAAQAAAALAA4AAAABAAQAAAAKAA4AAAABAAQAAAAJAA4AAAAJAAMAAAA=") tile_set = SubResource("TileSet_mvphy") [node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=1148293182] @@ -416,9 +446,6 @@ metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=1634682333] shape = SubResource("RectangleShape2D_mvphy") -[node name="RigidBody2D" parent="." unique_id=721458511 instance=ExtResource("3_iywne")] -position = Vector2(740, 551) - [node name="Player" parent="." unique_id=735255374 instance=ExtResource("4_iywne")] position = Vector2(594, 390) @@ -438,7 +465,43 @@ position = Vector2(390, 541) position = Vector2(514, 502) effect = "teleport" -[node name="Crate" parent="." unique_id=1367266345 instance=ExtResource("3_iywne")] -position = Vector2(635, 553) +[node name="foreground" type="Parallax2D" parent="." unique_id=246559660] +scroll_scale = Vector2(1.3, 1) +repeat_size = Vector2(400, 0) + +[node name="Sprite2D" type="Sprite2D" parent="foreground" unique_id=1690720392] +texture = ExtResource("5_dinhu") +offset = Vector2(200, 340) + +[node name="Crates" type="Node2D" parent="." unique_id=104104750] + +[node name="Crate" parent="Crates" unique_id=1367266345 instance=ExtResource("3_iywne")] +position = Vector2(365, 431) + +[node name="Crate2" parent="Crates" unique_id=1110392418 instance=ExtResource("3_iywne")] +position = Vector2(480, 430) + +[node name="RigidBody2D" parent="Crates" unique_id=721458511 instance=ExtResource("3_iywne")] +position = Vector2(423, 425) + +[node name="Crate3" parent="Crates" unique_id=201497032 instance=ExtResource("3_iywne")] +position = Vector2(681, 364) +rotation = 0.79584646 + +[node name="Coins" type="Node2D" parent="." unique_id=1387422217] + +[node name="Coin" parent="Coins" unique_id=613946937 instance=ExtResource("13_kvuet")] +position = Vector2(623, 436) + +[node name="Coin2" parent="Coins" unique_id=1750219177 instance=ExtResource("13_kvuet")] +position = Vector2(738, 404) + +[node name="Coin3" parent="Coins" unique_id=2129884856 instance=ExtResource("13_kvuet")] +position = Vector2(518, 435) + +[node name="Enemies" type="Node2D" parent="." unique_id=81054696] + +[node name="Slime" parent="Enemies" unique_id=1316034960 instance=ExtResource("14_trtic")] +position = Vector2(719, 409) [connection signal="areaTriggered" from="Triggers/Trigger" to="." method="_on_trigger"] diff --git a/scenes/slime.tscn b/scenes/slime.tscn new file mode 100644 index 0000000..fb73a05 --- /dev/null +++ b/scenes/slime.tscn @@ -0,0 +1,140 @@ +[gd_scene format=3 uid="uid://6d5378om23b8"] + +[ext_resource type="Texture2D" uid="uid://dm5aslppmk2hw" path="res://assets/graphics/enemies/slime_green.png" id="1_371uh"] +[ext_resource type="Script" uid="uid://bltdu3mbpch5n" path="res://scripts/slime.gd" id="1_p2gj0"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_p2gj0"] +atlas = ExtResource("1_371uh") +region = Rect2(0, 48, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n6pvg"] +atlas = ExtResource("1_371uh") +region = Rect2(24, 48, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pjw23"] +atlas = ExtResource("1_371uh") +region = Rect2(48, 48, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2npkn"] +atlas = ExtResource("1_371uh") +region = Rect2(72, 48, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fd6lc"] +atlas = ExtResource("1_371uh") +region = Rect2(0, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gstla"] +atlas = ExtResource("1_371uh") +region = Rect2(24, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v5wyi"] +atlas = ExtResource("1_371uh") +region = Rect2(48, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0l8pv"] +atlas = ExtResource("1_371uh") +region = Rect2(72, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vnioy"] +atlas = ExtResource("1_371uh") +region = Rect2(0, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2xjuo"] +atlas = ExtResource("1_371uh") +region = Rect2(24, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a02ik"] +atlas = ExtResource("1_371uh") +region = Rect2(48, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pu8ps"] +atlas = ExtResource("1_371uh") +region = Rect2(72, 0, 24, 24) + +[sub_resource type="SpriteFrames" id="SpriteFrames_mvphy"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_p2gj0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n6pvg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pjw23") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2npkn") +}], +"loop": 0, +"name": &"attack", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_fd6lc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gstla") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v5wyi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0l8pv") +}], +"loop": 1, +"name": &"run", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_vnioy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2xjuo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a02ik") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pu8ps") +}], +"loop": 0, +"name": &"spawn", +"speed": 12.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_mvphy"] +radius = 8.0 + +[node name="Slime" type="Area2D" unique_id=1316034960] +script = ExtResource("1_p2gj0") +metadata/_edit_group_ = true + +[node name="SlimeGraphic" type="AnimatedSprite2D" parent="." unique_id=1496988530] +texture_filter = 1 +position = Vector2(0, -4) +sprite_frames = SubResource("SpriteFrames_mvphy") +animation = &"attack" +autoplay = "spawn" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=781957737] +shape = SubResource("CircleShape2D_mvphy") + +[node name="RightCast" type="RayCast2D" parent="." unique_id=963570234] +target_position = Vector2(14, 0) + +[node name="LeftCast" type="RayCast2D" parent="." unique_id=943025983] +target_position = Vector2(-14, 0) + +[node name="RightDownCast" type="RayCast2D" parent="." unique_id=843232243] +position = Vector2(7, 0) +target_position = Vector2(0, 14) + +[node name="LeftDownCast" type="RayCast2D" parent="." unique_id=651691552] +position = Vector2(-7, 0) +target_position = Vector2(0, 14) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="animation_finished" from="SlimeGraphic" to="." method="_on_animation_finished"] diff --git a/scripts/coin.gd b/scripts/coin.gd new file mode 100644 index 0000000..3b8b14a --- /dev/null +++ b/scripts/coin.gd @@ -0,0 +1,16 @@ +class_name Coin extends Area2D + +signal coinCollisionSignal(body, coin) + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + + +func _on_body_entered(body: Node2D) -> void: + coinCollisionSignal.emit(body, self) diff --git a/scripts/coin.gd.uid b/scripts/coin.gd.uid new file mode 100644 index 0000000..a5a2004 --- /dev/null +++ b/scripts/coin.gd.uid @@ -0,0 +1 @@ +uid://dhc6762deonm2 diff --git a/scripts/gamecontroller.gd b/scripts/gamecontroller.gd index c375331..4b455dc 100644 --- a/scripts/gamecontroller.gd +++ b/scripts/gamecontroller.gd @@ -3,6 +3,11 @@ class_name GameController extends Node2D signal teleportSignal(body:RigidBody2D) signal destroySignal(body) +var numberOfCrates = 2 +var totalCoins = 0 +var coinsRemaining = 0 +var coinsCollected = 0 + # Called when the node enters the scene tree for the first time. func _ready() -> void: get_window().grab_focus() @@ -30,3 +35,18 @@ func _on_bullet_hit(body, bullet) -> void: destroySignal.emit(body) destroySignal.emit(bullet) + +func crateTotal(amount)->void: + numberOfCrates = amount + if numberOfCrates<=0: + print("YOU WON!!!") +func coinTotal(amount)->void: + if totalCoins == 0: + totalCoins = amount + coinsRemaining = amount + print("Collected "+str(totalCoins-coinsRemaining)+" of "+str(totalCoins) ) +func coinCollected(body, coin)->void: + if body is Player: + #give them a coin + coinsCollected +=1 + destroySignal.emit(coin) diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index 9a3cc53..993ef1b 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -3,6 +3,8 @@ class_name SceneManager extends Node2D @onready var triggers: Node2D = $"../Triggers" @onready var game: GameController = $".." @onready var player: Player = $"../Player" +@onready var crates: Node2D = $"../Crates" +@onready var coins: Node2D = $"../Coins" #recipe for bullets var bullet = preload("res://scenes/bullet.tscn") @@ -16,13 +18,38 @@ func _ready() -> void: game.teleportSignal.connect(teleport) game.destroySignal.connect(destroy) player.bulletSignal.connect(makeBullet) - + updateCrates() + updateCoins() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass +func updateCrates()->void: + var totalCrates = 0 + # loop through all crates + for obj in crates.get_children(): + if obj is Crate: + #check if the tree exit signal is wired up + if not obj.tree_exited.is_connected(updateCrates): + obj.tree_exited.connect(updateCrates) + totalCrates +=1 + # tell the gamecontroller how many crates + game.crateTotal(totalCrates) + +func updateCoins()->void: + var totalCoins = 0 + #loop through the coins + for obj in coins.get_children(): + if obj is Coin: + if not obj.tree_exited.is_connected(updateCoins): + obj.tree_exited.connect(updateCoins) + if not obj.coinCollisionSignal.is_connected(game.coinCollected): + obj.coinCollisionSignal.connect(game.coinCollected) + totalCoins +=1 + game.coinTotal(totalCoins) + func buildLevel()->void: if triggers: for obj in triggers.get_children(): @@ -68,6 +95,8 @@ func destroy(target)->void: stash(target) if target is Crate: target.queue_free() + if target is Coin: + target.queue_free() func stash(target:Bullet)->void: print("stash a bullet") diff --git a/scripts/slime.gd b/scripts/slime.gd new file mode 100644 index 0000000..6a20492 --- /dev/null +++ b/scripts/slime.gd @@ -0,0 +1,80 @@ +class_name Slime extends Area2D + +@onready var right_cast: RayCast2D = $RightCast +@onready var left_cast: RayCast2D = $LeftCast +@onready var right_down_cast: RayCast2D = $RightDownCast +@onready var left_down_cast: RayCast2D = $LeftDownCast +@onready var slime_graphic: AnimatedSprite2D = $SlimeGraphic + +var speed = 100 +enum FaceDirection {RIGHT, LEFT} +var facing:FaceDirection = FaceDirection.RIGHT +#direction 1 move to right, 0 no movement, -1 to the left +var direction = 1 + +enum EnemyStates {RUN, ATTACK, SPAWN} +var currentEnemyState:EnemyStates = EnemyStates.SPAWN + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + handleMovement(delta) + handleStates() + handleAnimation() + handleCollisions() + +func handleMovement(delta)->void: + position.x += direction*speed*delta + match facing: + FaceDirection.LEFT: + slime_graphic.flip_h = true + FaceDirection.RIGHT: + slime_graphic.flip_h = false + +func handleStates()->void: + match currentEnemyState: + EnemyStates.SPAWN when not direction ==0: + currentEnemyState = EnemyStates.RUN + +func handleAnimation()->void: + match currentEnemyState: + EnemyStates.SPAWN: + slime_graphic.play("spawn") + EnemyStates.RUN: + slime_graphic.play("run") + EnemyStates.ATTACK: + slime_graphic.play("attack") + +func handleCollisions()->void: + if not right_down_cast.is_colliding(): + direction = -1 + facing = FaceDirection.LEFT + if not left_down_cast.is_colliding(): + direction = 1 + facing= FaceDirection.RIGHT + if right_cast.is_colliding() and not right_cast.get_collider() is Player: + direction = -1 + facing = FaceDirection.LEFT + if left_cast.is_colliding() and not left_cast.get_collider() is Player: + direction = 1 + facing= FaceDirection.RIGHT + + + pass +func _on_body_entered(body: Node2D) -> void: + print("Slime Attack!") + + +func _on_animation_finished() -> void: + match currentEnemyState: + EnemyStates.SPAWN: + currentEnemyState = EnemyStates.RUN + direction = 1 + EnemyStates.ATTACK: + currentEnemyState = EnemyStates.RUN + direction = (randi() % 2) *2 -1 diff --git a/scripts/slime.gd.uid b/scripts/slime.gd.uid new file mode 100644 index 0000000..ff2d6ff --- /dev/null +++ b/scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://bltdu3mbpch5n