From d3685d4f4b1d020e70f784fa6e97306667afaa4e Mon Sep 17 00:00:00 2001 From: AlexisComix Date: Sun, 18 Aug 2024 16:29:35 +0100 Subject: [PATCH] feat: fixed stage transition, go arrow, proper wave and stage completion stage 1, ready for stage 2 --- assets/crawler_walk.aseprite | Bin 0 -> 19702 bytes assets/crawler_walk.aseprite.import | 14 ++ assets/export/crawler-.png | Bin 0 -> 15135 bytes assets/export/crawler-.png.import | 34 ++++ assets/export/go-.png | Bin 0 -> 706 bytes assets/export/go-.png.import | 34 ++++ components/Crawler.tscn | 291 ++++++++++++++++++++++++++++ levels/level1/boss_stage.tscn | 3 + levels/level1/sta1692.tmp | 134 +++++++++++++ levels/level1/stage1.tscn | 59 +++++- levels/level1/stage2.tscn | 128 +++++++++++- scripts/crawler.gd | 3 + scripts/killbox.gd | 15 ++ scripts/level_1_spawner.gd | 32 +++ scripts/level_2_spawner.gd | 15 ++ scripts/player.gd | 5 +- scripts/stageController.gd | 22 --- scripts/stage_1_controller.gd | 42 ++++ scripts/stage_2.gd | 44 +++++ scripts/viruling.gd | 17 +- 20 files changed, 849 insertions(+), 43 deletions(-) create mode 100644 assets/crawler_walk.aseprite create mode 100644 assets/crawler_walk.aseprite.import create mode 100644 assets/export/crawler-.png create mode 100644 assets/export/crawler-.png.import create mode 100644 assets/export/go-.png create mode 100644 assets/export/go-.png.import create mode 100644 components/Crawler.tscn create mode 100644 levels/level1/boss_stage.tscn create mode 100644 levels/level1/sta1692.tmp create mode 100644 scripts/crawler.gd create mode 100644 scripts/killbox.gd create mode 100644 scripts/level_1_spawner.gd create mode 100644 scripts/level_2_spawner.gd delete mode 100644 scripts/stageController.gd create mode 100644 scripts/stage_1_controller.gd create mode 100644 scripts/stage_2.gd diff --git a/assets/crawler_walk.aseprite b/assets/crawler_walk.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..5c5ca319adb1978b3431aee1175e0146542a3199 GIT binary patch literal 19702 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 G{(k^y6)GP9 literal 0 HcmV?d00001 diff --git a/assets/crawler_walk.aseprite.import b/assets/crawler_walk.aseprite.import new file mode 100644 index 0000000..46d5692 --- /dev/null +++ b/assets/crawler_walk.aseprite.import @@ -0,0 +1,14 @@ +[remap] + +importer="aseprite_wizard.plugin.noop" +type="PackedDataContainer" +uid="uid://2n7hoks84s1p" +path="res://.godot/imported/crawler_walk.aseprite-caf4c5c9e2cdaae93bd51260f88ba162.res" + +[deps] + +source_file="res://assets/crawler_walk.aseprite" +dest_files=["res://.godot/imported/crawler_walk.aseprite-caf4c5c9e2cdaae93bd51260f88ba162.res"] + +[params] + diff --git a/assets/export/crawler-.png b/assets/export/crawler-.png new file mode 100644 index 0000000000000000000000000000000000000000..bbbe4609b92a749a0c823d84dd7b76544a8b6a8b GIT binary patch literal 15135 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 YiQClj?pHPR{4y7l<~021-}X#fBK literal 0 HcmV?d00001 diff --git a/assets/export/crawler-.png.import b/assets/export/crawler-.png.import new file mode 100644 index 0000000..3ac638f --- /dev/null +++ b/assets/export/crawler-.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b447sysxt4rhp" +path="res://.godot/imported/crawler-.png-d39abaa0a487f20b9ee2a51626debbbe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/export/crawler-.png" +dest_files=["res://.godot/imported/crawler-.png-d39abaa0a487f20b9ee2a51626debbbe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/export/go-.png b/assets/export/go-.png new file mode 100644 index 0000000000000000000000000000000000000000..665c8816c54e9b5c185055c89530416a1b11b513 GIT binary patch literal 706 zcmV;z0zLhSP)Px%d`Uz>RCt`_nlX-pFc3vQ8zlO@QBokKpvp1!3|r+4ImT8LNEFG9(nkWZMKlSE zFt+j79<#5C5`_4Fz9+UZ;K->chEq`tuJ?&W1_0NpS|#96*V#VLhtJ*a_1(|okug16 z5OM%GHx0%jbbOVi^0!k_3@MrLVRF$_@TF}RuTN=M7#VPB+r_G@NWlcH0r$QK;AVnk zBa9M2tTh3Un+9V8NVsnNFCj4v#s;_upCZWwt0BONlr%&$fQW5EbOV5=32SGgu81%I zc=niURRuRfi~+#A(S|fZlmWnB6G9llVgSt+xwy1#ury=0ARJ6 zv|&8+Jk&M&Ds$0*B~kaj4`Kj8MsS-Tt_KjRB{=tx5S@UpvYefQbEZLT0)Y4G(`Oot zo8a8nPJKWpC)hGt1PefDxbKmsP>0ng_HVsP(!WAT9H%TdWD=!DOS2R8CA zU{moa!463Hz&7r4XcI8q9F@`lU4;|L4S}U8yRCR2Ap^LD6KtzNpNlD9;sN0a@F|=S zyB`ojJRmRup@b7+4AAuuAL0QA1I|su_7I_~J|=1cVhSgsH9-mDfd~nZBAf_jK&&RG zBZvXgsy@c60aB|zMr**@{eH<+AH$x26skUk)qqs0J|@UKK&p7aa}$&-obZ-_6vP7_ o5|D~;g7thrYT{X-^8u;y3+Z#JvosrWr~m)}07*qoM6N<$g5zW;kN^Mx literal 0 HcmV?d00001 diff --git a/assets/export/go-.png.import b/assets/export/go-.png.import new file mode 100644 index 0000000..baf18ef --- /dev/null +++ b/assets/export/go-.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fnp2h8e01hi0" +path="res://.godot/imported/go-.png-572338eacc1746cd2ee375fe578adec4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/export/go-.png" +dest_files=["res://.godot/imported/go-.png-572338eacc1746cd2ee375fe578adec4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/components/Crawler.tscn b/components/Crawler.tscn new file mode 100644 index 0000000..64ae613 --- /dev/null +++ b/components/Crawler.tscn @@ -0,0 +1,291 @@ +[gd_scene load_steps=35 format=3 uid="uid://n65kl0jalqdt"] + +[ext_resource type="Texture2D" uid="uid://b447sysxt4rhp" path="res://assets/export/crawler-.png" id="1_bdup0"] +[ext_resource type="Script" path="res://scripts/crawler.gd" id="1_dcux3"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_k4vrw"] +size = Vector2(57, 63) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6iqis"] +atlas = ExtResource("1_bdup0") +region = Rect2(0, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hk6n7"] +atlas = ExtResource("1_bdup0") +region = Rect2(128, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i7pjq"] +atlas = ExtResource("1_bdup0") +region = Rect2(256, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0bqgy"] +atlas = ExtResource("1_bdup0") +region = Rect2(384, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_b7rtd"] +atlas = ExtResource("1_bdup0") +region = Rect2(512, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ma61w"] +atlas = ExtResource("1_bdup0") +region = Rect2(640, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gxbrf"] +atlas = ExtResource("1_bdup0") +region = Rect2(0, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jnxq4"] +atlas = ExtResource("1_bdup0") +region = Rect2(128, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_61s2s"] +atlas = ExtResource("1_bdup0") +region = Rect2(256, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4h7cf"] +atlas = ExtResource("1_bdup0") +region = Rect2(384, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4x8lu"] +atlas = ExtResource("1_bdup0") +region = Rect2(512, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3grt7"] +atlas = ExtResource("1_bdup0") +region = Rect2(640, 192, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kw6t0"] +atlas = ExtResource("1_bdup0") +region = Rect2(0, 256, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jc8y7"] +atlas = ExtResource("1_bdup0") +region = Rect2(128, 256, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_bhh5b"] +atlas = ExtResource("1_bdup0") +region = Rect2(256, 256, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2w283"] +atlas = ExtResource("1_bdup0") +region = Rect2(384, 256, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmmn0"] +atlas = ExtResource("1_bdup0") +region = Rect2(512, 256, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5emai"] +atlas = ExtResource("1_bdup0") +region = Rect2(512, 64, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6rkkd"] +atlas = ExtResource("1_bdup0") +region = Rect2(640, 64, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vb5jc"] +atlas = ExtResource("1_bdup0") +region = Rect2(0, 128, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3efcj"] +atlas = ExtResource("1_bdup0") +region = Rect2(128, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_bygap"] +atlas = ExtResource("1_bdup0") +region = Rect2(256, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i5vmv"] +atlas = ExtResource("1_bdup0") +region = Rect2(384, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f1jsj"] +atlas = ExtResource("1_bdup0") +region = Rect2(512, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l74ua"] +atlas = ExtResource("1_bdup0") +region = Rect2(640, 0, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iy6u6"] +atlas = ExtResource("1_bdup0") +region = Rect2(0, 64, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4xmi3"] +atlas = ExtResource("1_bdup0") +region = Rect2(128, 64, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4c0s3"] +atlas = ExtResource("1_bdup0") +region = Rect2(256, 64, 128, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3jc57"] +atlas = ExtResource("1_bdup0") +region = Rect2(384, 64, 128, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_e3bx4"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iqis") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hk6n7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i7pjq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0bqgy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_b7rtd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ma61w") +}], +"loop": true, +"name": &"Whip", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iqis") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gxbrf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jnxq4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_61s2s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4h7cf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4x8lu") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3grt7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kw6t0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jc8y7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_bhh5b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2w283") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmmn0") +}], +"loop": true, +"name": &"death", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iqis") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5emai") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6rkkd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5emai") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vb5jc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5emai") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iqis") +}], +"loop": true, +"name": &"jump away", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iqis") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3efcj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_bygap") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i5vmv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f1jsj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l74ua") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iy6u6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4xmi3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4c0s3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3jc57") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3jc57") +}], +"loop": true, +"name": &"walk", +"speed": 10.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_s2a15"] +size = Vector2(48, 28) + +[node name="Crawler" type="CharacterBody2D"] +script = ExtResource("1_dcux3") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(-3.5, -0.5) +shape = SubResource("RectangleShape2D_k4vrw") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +position = Vector2(-34, 0) +sprite_frames = SubResource("SpriteFrames_e3bx4") +animation = &"Whip" +frame_progress = 0.990945 +metadata/_aseprite_wizard_config_ = { +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "crawler-", +"only_visible": true, +"slice": "", +"source": "res://assets/crawler_walk.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "5428848d159be8aa5f91cd42b4e9cfca" + +[node name="WhipArea" type="Area2D" parent="."] + +[node name="Area2D" type="CollisionShape2D" parent="WhipArea"] +position = Vector2(-42, 2) +shape = SubResource("RectangleShape2D_s2a15") +debug_color = Color(0.949698, 0.110143, 0.492661, 0.42) diff --git a/levels/level1/boss_stage.tscn b/levels/level1/boss_stage.tscn new file mode 100644 index 0000000..44abcb4 --- /dev/null +++ b/levels/level1/boss_stage.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://cvxh2yfe8k664"] + +[node name="BossStage" type="Node2D"] diff --git a/levels/level1/sta1692.tmp b/levels/level1/sta1692.tmp new file mode 100644 index 0000000..9bfbe3b --- /dev/null +++ b/levels/level1/sta1692.tmp @@ -0,0 +1,134 @@ +[gd_scene load_steps=13 format=3 uid="uid://cei5gjgfoginb"] + +[ext_resource type="Script" path="res://scripts/stageController.gd" id="1_m1n7w"] +[ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="2_48003"] +[ext_resource type="AudioStream" uid="uid://ce3soc3run6um" path="res://assets/Level1BGAudio.wav" id="2_qcnna"] +[ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="2_sxo5w"] +[ext_resource type="PackedScene" uid="uid://bab4ac3s2n0o1" path="res://components/Borders.tscn" id="3_04xvl"] +[ext_resource type="PackedScene" uid="uid://bxbpvgteyfh02" path="res://components/Viruling.tscn" id="5_w7lww"] +[ext_resource type="PackedScene" path="res://components/Bars.tscn" id="6_u2jd3"] +[ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_gw1ay"] +[ext_resource type="Script" path="res://scripts/level_1_spawner.gd" id="8_rl47p"] +[ext_resource type="Script" path="res://scripts/killbox.gd" id="10_oh0qe"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_h5wua"] +size = Vector2(492, 101) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wlwhn"] +size = Vector2(46, 359) + +[node name="World" type="Node2D"] +position = Vector2(344, 240) +script = ExtResource("1_m1n7w") +next_stage = "res://levels/level1/stage2.tscn" + +[node name="BGM" type="AudioStreamPlayer2D" parent="."] +position = Vector2(-344, -240) +stream = ExtResource("2_qcnna") + +[node name="Bars" parent="." instance=ExtResource("6_u2jd3")] +offset_left = -344.0 +offset_top = -240.0 +offset_right = -304.0 +offset_bottom = -200.0 + +[node name="Background" type="Sprite2D" parent="."] +position = Vector2(-28, -64) +scale = Vector2(1.01667, 1) +texture = ExtResource("2_48003") + +[node name="Player" parent="." instance=ExtResource("2_sxo5w")] +position = Vector2(-233, -21) + +[node name="Borders" parent="." instance=ExtResource("3_04xvl")] +position = Vector2(-272, -240) + +[node name="Floor" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Floor"] +z_index = 1 +texture_filter = 1 +position = Vector2(-28, -191) +scale = Vector2(1, 0.283333) +texture = ExtResource("7_gw1ay") +flip_v = true +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "top-bottom-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/TopBottom.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "1b764edd2623a4481e3cf82f9aa840f7" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Floor"] +position = Vector2(-28, 69) +shape = SubResource("RectangleShape2D_h5wua") + +[node name="Ceiling" type="StaticBody2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Ceiling"] +position = Vector2(-29, -190) +shape = SubResource("RectangleShape2D_h5wua") + +[node name="Sprite2D" type="Sprite2D" parent="Ceiling"] +z_index = 1 +texture_filter = 1 +position = Vector2(-28.5, 68.25) +scale = Vector2(0.99591, 0.284722) +texture = ExtResource("7_gw1ay") +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "top-bottom-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/TopBottom.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "1b764edd2623a4481e3cf82f9aa840f7" + +[node name="Level1Spawner" type="Node2D" parent="."] +script = ExtResource("8_rl47p") + +[node name="Viruling" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(380, -3) + +[node name="Viruling7" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(721, -27) + +[node name="Viruling6" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(650, -55) + +[node name="Viruling5" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(560, -71) + +[node name="Viruling4" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(382, -85) + +[node name="Viruling3" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(616, -12) + +[node name="Viruling2" parent="Level1Spawner" instance=ExtResource("5_w7lww")] +position = Vector2(504, -39) + +[node name="Killbox" type="Area2D" parent="Level1Spawner"] +script = ExtResource("10_oh0qe") + +[node name="VirulingKillArea" type="CollisionShape2D" parent="Level1Spawner/Killbox"] +position = Vector2(-320, -58.5) +shape = SubResource("RectangleShape2D_wlwhn") diff --git a/levels/level1/stage1.tscn b/levels/level1/stage1.tscn index 894352c..b916769 100644 --- a/levels/level1/stage1.tscn +++ b/levels/level1/stage1.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=10 format=3 uid="uid://cei5gjgfoginb"] +[gd_scene load_steps=14 format=3 uid="uid://cei5gjgfoginb"] -[ext_resource type="Script" path="res://scripts/stageController.gd" id="1_m1n7w"] +[ext_resource type="Script" path="res://scripts/stage_1_controller.gd" id="1_m1n7w"] [ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="2_48003"] [ext_resource type="AudioStream" uid="uid://ce3soc3run6um" path="res://assets/Level1BGAudio.wav" id="2_qcnna"] [ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="2_sxo5w"] @@ -8,10 +8,16 @@ [ext_resource type="PackedScene" uid="uid://bxbpvgteyfh02" path="res://components/Viruling.tscn" id="5_w7lww"] [ext_resource type="PackedScene" path="res://components/Bars.tscn" id="6_u2jd3"] [ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_gw1ay"] +[ext_resource type="Script" path="res://scripts/level_1_spawner.gd" id="8_rl47p"] +[ext_resource type="Script" path="res://scripts/killbox.gd" id="10_oh0qe"] +[ext_resource type="Texture2D" uid="uid://fnp2h8e01hi0" path="res://assets/export/go-.png" id="11_2n86p"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_h5wua"] size = Vector2(492, 101) +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wlwhn"] +size = Vector2(46, 359) + [node name="World" type="Node2D"] position = Vector2(344, 240) script = ExtResource("1_m1n7w") @@ -28,7 +34,7 @@ offset_right = -304.0 offset_bottom = -200.0 [node name="Background" type="Sprite2D" parent="."] -position = Vector2(-28, -64) +position = Vector2(-27, -60) scale = Vector2(1.01667, 1) texture = ExtResource("2_48003") @@ -98,24 +104,57 @@ metadata/_aseprite_wizard_interface_config_ = { metadata/_aseprite_wizard_source_file_hash_ = "1b764edd2623a4481e3cf82f9aa840f7" [node name="Level1Spawner" type="Node2D" parent="."] +script = ExtResource("8_rl47p") [node name="Viruling" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(528, -55) +position = Vector2(380, -3) [node name="Viruling7" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(827, 6) +position = Vector2(721, -27) [node name="Viruling6" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(923, -27) +position = Vector2(650, -55) [node name="Viruling5" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(727, -3) +position = Vector2(560, -71) [node name="Viruling4" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(431, -41) +position = Vector2(382, -85) [node name="Viruling3" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(334, -4) +position = Vector2(616, -12) [node name="Viruling2" parent="Level1Spawner" instance=ExtResource("5_w7lww")] -position = Vector2(627, -33) +position = Vector2(504, -39) + +[node name="Killbox" type="Area2D" parent="Level1Spawner"] +script = ExtResource("10_oh0qe") + +[node name="VirulingKillArea" type="CollisionShape2D" parent="Level1Spawner/Killbox"] +position = Vector2(-320, -58.5) +shape = SubResource("RectangleShape2D_wlwhn") + +[node name="GoArrow" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(174, -50) +texture = ExtResource("11_2n86p") +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "go-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/Go.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "db984f52c5ed02484bd4226782968210" + +[node name="BlinkTimer" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true diff --git a/levels/level1/stage2.tscn b/levels/level1/stage2.tscn index 2c53ff8..b880923 100644 --- a/levels/level1/stage2.tscn +++ b/levels/level1/stage2.tscn @@ -1,6 +1,128 @@ -[gd_scene load_steps=2 format=3 uid="uid://cnpspjqlc7b52"] +[gd_scene load_steps=11 format=3 uid="uid://cnpspjqlc7b52"] -[ext_resource type="Script" path="res://scripts/stageController.gd" id="1_0rodf"] +[ext_resource type="Script" path="res://scripts/stage_2.gd" id="1_pqela"] +[ext_resource type="AudioStream" uid="uid://ce3soc3run6um" path="res://assets/Level1BGAudio.wav" id="2_v7wia"] +[ext_resource type="PackedScene" path="res://components/Bars.tscn" id="3_n5aqu"] +[ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="4_d2h5p"] +[ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="5_kc5l1"] +[ext_resource type="PackedScene" uid="uid://bab4ac3s2n0o1" path="res://components/Borders.tscn" id="6_47554"] +[ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_gl8tg"] +[ext_resource type="Texture2D" uid="uid://fnp2h8e01hi0" path="res://assets/export/go-.png" id="8_usr2a"] +[ext_resource type="Script" path="res://scripts/level_2_spawner.gd" id="9_2n06p"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_a73r6"] +size = Vector2(492, 144.5) [node name="World" type="Node2D"] -script = ExtResource("1_0rodf") +position = Vector2(344, 241) +script = ExtResource("1_pqela") +next_stage = "res://levels/level1/boss_stage.tscn" + +[node name="BGM" type="AudioStreamPlayer2D" parent="."] +position = Vector2(-344, -240) +stream = ExtResource("2_v7wia") + +[node name="Bars" parent="." instance=ExtResource("3_n5aqu")] +offset_left = -344.0 +offset_top = -240.0 +offset_right = -304.0 +offset_bottom = -200.0 +metadata/_edit_use_anchors_ = true + +[node name="Background" type="Sprite2D" parent="."] +position = Vector2(-27, -60) +scale = Vector2(1.01667, 1) +texture = ExtResource("4_d2h5p") + +[node name="Player" parent="." instance=ExtResource("5_kc5l1")] +position = Vector2(-247, -41) + +[node name="Borders" parent="." instance=ExtResource("6_47554")] +position = Vector2(-272, -240) + +[node name="Floor" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Floor"] +z_index = 1 +texture_filter = 1 +position = Vector2(-28, -168.5) +scale = Vector2(1, 0.408333) +texture = ExtResource("7_gl8tg") +flip_v = true +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "top-bottom-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/TopBottom.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "1b764edd2623a4481e3cf82f9aa840f7" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Floor"] +position = Vector2(-28, 69) +shape = SubResource("RectangleShape2D_a73r6") + +[node name="Ceiling" type="StaticBody2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Ceiling"] +position = Vector2(-29, -168.25) +shape = SubResource("RectangleShape2D_a73r6") + +[node name="Sprite2D" type="Sprite2D" parent="Ceiling"] +z_index = 1 +texture_filter = 1 +position = Vector2(-28.5, 57.75) +scale = Vector2(0.99591, 0.343055) +texture = ExtResource("7_gl8tg") +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "top-bottom-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/TopBottom.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "1b764edd2623a4481e3cf82f9aa840f7" + +[node name="GoArrow" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(174, -50) +texture = ExtResource("8_usr2a") +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "go-", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/Go.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "db984f52c5ed02484bd4226782968210" + +[node name="BlinkTimer" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true + +[node name="Level2Spawner" type="Node2D" parent="."] +script = ExtResource("9_2n06p") diff --git a/scripts/crawler.gd b/scripts/crawler.gd new file mode 100644 index 0000000..091376c --- /dev/null +++ b/scripts/crawler.gd @@ -0,0 +1,3 @@ +class_name Crawler extends Entity + +## Crawl towards the player but stay within striking distance and not super close diff --git a/scripts/killbox.gd b/scripts/killbox.gd new file mode 100644 index 0000000..2b2d67b --- /dev/null +++ b/scripts/killbox.gd @@ -0,0 +1,15 @@ +extends Area2D + +@onready var kill_area = $VirulingKillArea + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + body_entered.connect(kill_enemy) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func kill_enemy(node: Node) -> void: + if node is Viruling: + node.is_dying = true diff --git a/scripts/level_1_spawner.gd b/scripts/level_1_spawner.gd new file mode 100644 index 0000000..7733894 --- /dev/null +++ b/scripts/level_1_spawner.gd @@ -0,0 +1,32 @@ +extends Node2D + +@onready var wave_1 = [$Viruling, $Viruling2, $Viruling3] +@onready var wave_2 = [$Viruling4, $Viruling5, $Viruling6, $Viruling7] +var complete = false +var wave_2_start = false + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + for viruling in wave_1: + viruling.charge() + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + for viruling in wave_1: + if viruling.is_dying: + wave_1.erase(viruling) + + for viruling in wave_2: + if viruling.is_dying: + wave_2.erase(viruling) + + if wave_1 == [] and !wave_2_start: + wave_2_start = true + for viruling in wave_2: + viruling.charge() + + if wave_2 == []: + complete = true + +func is_complete() -> bool: + return complete diff --git a/scripts/level_2_spawner.gd b/scripts/level_2_spawner.gd new file mode 100644 index 0000000..f1ed8f0 --- /dev/null +++ b/scripts/level_2_spawner.gd @@ -0,0 +1,15 @@ +extends Node2D + +@onready var complete = false + +# 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 is_complete() -> bool: + return complete diff --git a/scripts/player.gd b/scripts/player.gd index 2c86b1b..92b65a1 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -1,4 +1,4 @@ -extends Entity +class_name Player extends Entity @export var GRAVITY = 30 @export var JUMP_FORCE = 500 @@ -97,8 +97,9 @@ func _process(delta: float) -> void: punch_hitbox.visible = false speed = 0 + # Reset to start on death if death_timer.is_stopped(): - queue_free() + get_tree().change_scene_to_file("res://levels/level1/stage1.tscn") if attack_timer.is_stopped() and Input.is_action_just_pressed("attack"): attack_timer.start() diff --git a/scripts/stageController.gd b/scripts/stageController.gd deleted file mode 100644 index 297ca8c..0000000 --- a/scripts/stageController.gd +++ /dev/null @@ -1,22 +0,0 @@ -extends Node - -@export var next_stage : String; -var completed = false; - -@onready var right_border = $Borders/Right/CollisionShape2D; -@onready var right_trigger = $Borders/Right/Trigger; -@onready var bgm = $BGM - -func _process(delta: float) -> void: - if Input.is_action_just_pressed("trigger_completed"): - completed = true - - if completed: - right_border.shape = null - right_trigger.body_entered.connect(_on_trigger) - - if !bgm.playing: - bgm.play() - -func _on_trigger(body: Node) -> void: - get_tree().change_scene_to_file(next_stage) diff --git a/scripts/stage_1_controller.gd b/scripts/stage_1_controller.gd new file mode 100644 index 0000000..f5a259a --- /dev/null +++ b/scripts/stage_1_controller.gd @@ -0,0 +1,42 @@ +extends Node + +@export var next_stage: String +var completed: bool +var go_arrow_blink_on: bool + +@onready var right_border = $Borders/Right/CollisionShape2D +@onready var right_trigger = $Borders/Right/Trigger +@onready var bgm = $BGM +@onready var spawner = $Level1Spawner +@onready var go_arrow = $GoArrow +@onready var blink_timer = $BlinkTimer + +func _ready() -> void: + completed = false + go_arrow_blink_on = false + go_arrow.hide() + +func _process(delta: float) -> void: + var completed = spawner.is_complete() + + if completed: + toggle_go_arrow() + right_border.shape = null + right_trigger.body_entered.connect(_on_trigger) + + if !bgm.playing: + bgm.play() + +func _on_trigger(body: Node) -> void: + if body is Player: + get_tree().change_scene_to_file(next_stage) + +func toggle_go_arrow() -> void: + if blink_timer.is_stopped(): + blink_timer.start() + if go_arrow_blink_on: + go_arrow.hide() + go_arrow_blink_on = false + else: + go_arrow.show() + go_arrow_blink_on = true diff --git a/scripts/stage_2.gd b/scripts/stage_2.gd new file mode 100644 index 0000000..506d4e4 --- /dev/null +++ b/scripts/stage_2.gd @@ -0,0 +1,44 @@ +extends Node2D + +@export var next_stage: String +var completed: bool +var go_arrow_blink_on: bool + +@onready var right_border = $Borders/Right/CollisionShape2D +@onready var right_trigger = $Borders/Right/Trigger +@onready var bgm = $BGM +@onready var spawner = $Level2Spawner +@onready var go_arrow = $GoArrow +@onready var blink_timer = $BlinkTimer + +#ctrlctrlv +func _ready() -> void: + completed = false + go_arrow_blink_on = false + go_arrow.hide() + +func _process(delta: float) -> void: + ## this wave just a few crawlers + var completed = spawner.is_complete() + + if completed: + toggle_go_arrow() + right_border.shape = null + right_trigger.body_entered.connect(_on_trigger) + + if !bgm.playing: + bgm.play() + +func _on_trigger(body: Node) -> void: + if body is Player: + get_tree().change_scene_to_file(next_stage) + +func toggle_go_arrow() -> void: + if blink_timer.is_stopped(): + blink_timer.start() + if go_arrow_blink_on: + go_arrow.hide() + go_arrow_blink_on = false + else: + go_arrow.show() + go_arrow_blink_on = true diff --git a/scripts/viruling.gd b/scripts/viruling.gd index a24562b..14a6bcf 100644 --- a/scripts/viruling.gd +++ b/scripts/viruling.gd @@ -1,4 +1,4 @@ -extends Entity; +class_name Viruling extends Entity; @onready var animated_sprite = $AnimatedSprite2D @onready var collider = $CollisionShape2D @@ -8,18 +8,19 @@ extends Entity; @onready var death_timer = $DeathTimer @onready var explosion_sfx = $ExplosionSFX var is_dying = false +var attack_speed = 0 -const SPEED_MULTIPLIER = 100 +var speed_multiplier = 100 const INITIAL_HEALTH = 10 const ATTACK_DAMAGE = 10 const ATTACK_KNOCKBACK = 5000 func _init() -> void: - super._init(INITIAL_HEALTH, SPEED_MULTIPLIER, ATTACK_DAMAGE) + super._init(INITIAL_HEALTH, speed_multiplier, ATTACK_DAMAGE) # Called when the node enters the scene tree for the first time. func _ready() -> void: - velocity.x = -speed + velocity.x = attack_speed contact_hitbox.body_entered.connect(body_connect) contact_hitbox.visible = false animated_sprite.play("spin") @@ -29,7 +30,8 @@ func _physics_process(delta: float) -> void: if !is_dying: contact_hitbox.visible = false if contact_hitbox.visible else true super._physics_process(delta) - velocity.x = -speed + velocity.x = attack_speed + velocity.y = 0 # jank move_and_slide() func _process(delta: float) -> void: @@ -43,7 +45,7 @@ func _process(delta: float) -> void: animated_sprite.play("death") explosion_sfx.play() contact_hitbox.visible = false - speed = 0 + speed_multiplier = 0 if death_timer.is_stopped(): queue_free() @@ -55,3 +57,6 @@ func body_connect(node: Node): node.take_knockback(ATTACK_KNOCKBACK) if node.has_method("hurt_anim"): node.call("hurt_anim") + +func charge() -> void: + attack_speed = -speed_multiplier