diff --git a/Viruling.png b/Viruling.png new file mode 100644 index 0000000..2889376 Binary files /dev/null and b/Viruling.png differ diff --git a/icon.svg.import b/Viruling.png.import similarity index 62% rename from icon.svg.import rename to Viruling.png.import index d84e360..44e56ca 100644 --- a/icon.svg.import +++ b/Viruling.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dp6yumdudwpwh" -path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +uid="uid://c6t1kvgqxw41" +path="res://.godot/imported/Viruling.png-5d3cd601c37eed748f0f12753f50a57d.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://icon.svg" -dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] +source_file="res://Viruling.png" +dest_files=["res://.godot/imported/Viruling.png-5d3cd601c37eed748f0f12753f50a57d.ctex"] [params] @@ -32,6 +32,3 @@ process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/BossDeath.wav b/assets/BossDeath.wav new file mode 100644 index 0000000..e28f8df Binary files /dev/null and b/assets/BossDeath.wav differ diff --git a/assets/BossDeath.wav.import b/assets/BossDeath.wav.import new file mode 100644 index 0000000..fae152a --- /dev/null +++ b/assets/BossDeath.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b8ma022qh77r4" +path="res://.godot/imported/BossDeath.wav-fa0a8d6f4ca7fd9b743724f33f88cb7b.sample" + +[deps] + +source_file="res://assets/BossDeath.wav" +dest_files=["res://.godot/imported/BossDeath.wav-fa0a8d6f4ca7fd9b743724f33f88cb7b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/assets/BossHurt.wav b/assets/BossHurt.wav new file mode 100644 index 0000000..d950d0f Binary files /dev/null and b/assets/BossHurt.wav differ diff --git a/assets/BossHurt.wav.import b/assets/BossHurt.wav.import new file mode 100644 index 0000000..a42709c --- /dev/null +++ b/assets/BossHurt.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cnmafa4b6u74p" +path="res://.godot/imported/BossHurt.wav-eaaac76384c014124d3b7e9b32e908ce.sample" + +[deps] + +source_file="res://assets/BossHurt.wav" +dest_files=["res://.godot/imported/BossHurt.wav-eaaac76384c014124d3b7e9b32e908ce.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/assets/BossIntroMusic.wav b/assets/BossIntroMusic.wav new file mode 100644 index 0000000..a95a941 Binary files /dev/null and b/assets/BossIntroMusic.wav differ diff --git a/assets/BossIntroMusic.wav.import b/assets/BossIntroMusic.wav.import new file mode 100644 index 0000000..d56a040 --- /dev/null +++ b/assets/BossIntroMusic.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d37cinthwqhf7" +path="res://.godot/imported/BossIntroMusic.wav-33288472673dc957cd89887e73d90336.sample" + +[deps] + +source_file="res://assets/BossIntroMusic.wav" +dest_files=["res://.godot/imported/BossIntroMusic.wav-33288472673dc957cd89887e73d90336.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/assets/BossMusicLoop.wav b/assets/BossMusicLoop.wav new file mode 100644 index 0000000..12e06bc Binary files /dev/null and b/assets/BossMusicLoop.wav differ diff --git a/assets/BossMusicLoop.wav.import b/assets/BossMusicLoop.wav.import new file mode 100644 index 0000000..bba0a74 --- /dev/null +++ b/assets/BossMusicLoop.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cnp62dnwbxnp8" +path="res://.godot/imported/BossMusicLoop.wav-66cd282f6e4ded0eea46ef96dd3d81e6.sample" + +[deps] + +source_file="res://assets/BossMusicLoop.wav" +dest_files=["res://.godot/imported/BossMusicLoop.wav-66cd282f6e4ded0eea46ef96dd3d81e6.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/assets/PunchVFX.aseprite b/assets/PunchVFX.aseprite new file mode 100644 index 0000000..6419fb6 Binary files /dev/null and b/assets/PunchVFX.aseprite differ diff --git a/assets/PunchVFX.aseprite.import b/assets/PunchVFX.aseprite.import new file mode 100644 index 0000000..825549c --- /dev/null +++ b/assets/PunchVFX.aseprite.import @@ -0,0 +1,14 @@ +[remap] + +importer="aseprite_wizard.plugin.noop" +type="PackedDataContainer" +uid="uid://sg2ms6cssj01" +path="res://.godot/imported/PunchVFX.aseprite-b06de0b1aa18d48e800d94ff6cf92f62.res" + +[deps] + +source_file="res://assets/PunchVFX.aseprite" +dest_files=["res://.godot/imported/PunchVFX.aseprite-b06de0b1aa18d48e800d94ff6cf92f62.res"] + +[params] + diff --git a/assets/SpawnMinions.wav b/assets/SpawnMinions.wav new file mode 100644 index 0000000..0037d5a Binary files /dev/null and b/assets/SpawnMinions.wav differ diff --git a/assets/SpawnMinions.wav.import b/assets/SpawnMinions.wav.import new file mode 100644 index 0000000..0b318d0 --- /dev/null +++ b/assets/SpawnMinions.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cmyg0u83rcuq6" +path="res://.godot/imported/SpawnMinions.wav-48d48c5e4ba8fc0fba518139f80d9bb8.sample" + +[deps] + +source_file="res://assets/SpawnMinions.wav" +dest_files=["res://.godot/imported/SpawnMinions.wav-48d48c5e4ba8fc0fba518139f80d9bb8.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/assets/export/boss-.png b/assets/export/boss-.png new file mode 100644 index 0000000..052ca3c Binary files /dev/null and b/assets/export/boss-.png differ diff --git a/assets/export/boss-.png.import b/assets/export/boss-.png.import new file mode 100644 index 0000000..6633bf9 --- /dev/null +++ b/assets/export/boss-.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cg4nwnugx0q4w" +path="res://.godot/imported/boss-.png-ca4585ea11fab0b8b110355d230efe54.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/export/boss-.png" +dest_files=["res://.godot/imported/boss-.png-ca4585ea11fab0b8b110355d230efe54.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/punch-.png b/assets/export/punch-.png new file mode 100644 index 0000000..1848045 Binary files /dev/null and b/assets/export/punch-.png differ diff --git a/assets/export/punch-.png.import b/assets/export/punch-.png.import new file mode 100644 index 0000000..644873f --- /dev/null +++ b/assets/export/punch-.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv731yjx5v71a" +path="res://.godot/imported/punch-.png-0d4c585a346b088b7f81847a43a045e4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/export/punch-.png" +dest_files=["res://.godot/imported/punch-.png-0d4c585a346b088b7f81847a43a045e4.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/shitpost-.png b/assets/export/shitpost-.png new file mode 100644 index 0000000..7665499 Binary files /dev/null and b/assets/export/shitpost-.png differ diff --git a/assets/export/shitpost-.png.import b/assets/export/shitpost-.png.import new file mode 100644 index 0000000..8ad439a --- /dev/null +++ b/assets/export/shitpost-.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjc73l7m3gdkx" +path="res://.godot/imported/shitpost-.png-a08331b57c20d55e1623d36ac16acbfd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/export/shitpost-.png" +dest_files=["res://.godot/imported/shitpost-.png-a08331b57c20d55e1623d36ac16acbfd.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/eye monster.aseprite b/assets/eye monster.aseprite new file mode 100644 index 0000000..7f6f5bb Binary files /dev/null and b/assets/eye monster.aseprite differ diff --git a/assets/eye monster.aseprite.import b/assets/eye monster.aseprite.import new file mode 100644 index 0000000..a896295 --- /dev/null +++ b/assets/eye monster.aseprite.import @@ -0,0 +1,14 @@ +[remap] + +importer="aseprite_wizard.plugin.noop" +type="PackedDataContainer" +uid="uid://72ry77oxgd4h" +path="res://.godot/imported/eye monster.aseprite-bda5e8f0a21d0890b31ff6bb283fb6bb.res" + +[deps] + +source_file="res://assets/eye monster.aseprite" +dest_files=["res://.godot/imported/eye monster.aseprite-bda5e8f0a21d0890b31ff6bb283fb6bb.res"] + +[params] + diff --git a/assets/weegee.aseprite b/assets/weegee.aseprite new file mode 100644 index 0000000..38ccd05 Binary files /dev/null and b/assets/weegee.aseprite differ diff --git a/assets/weegee.aseprite.import b/assets/weegee.aseprite.import new file mode 100644 index 0000000..b1c3ab9 --- /dev/null +++ b/assets/weegee.aseprite.import @@ -0,0 +1,14 @@ +[remap] + +importer="aseprite_wizard.plugin.noop" +type="PackedDataContainer" +uid="uid://boc2fqbk18m6" +path="res://.godot/imported/weegee.aseprite-3b2165eb9806715fac46d106c4ddf9ee.res" + +[deps] + +source_file="res://assets/weegee.aseprite" +dest_files=["res://.godot/imported/weegee.aseprite-3b2165eb9806715fac46d106c4ddf9ee.res"] + +[params] + diff --git a/components/Crawler.tscn b/components/Crawler.tscn index 89d4958..06dfb7c 100644 --- a/components/Crawler.tscn +++ b/components/Crawler.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=35 format=3 uid="uid://n65kl0jalqdt"] +[gd_scene load_steps=36 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"] +[ext_resource type="AudioStream" uid="uid://dfrc2luquqqlw" path="res://assets/Explode.wav" id="3_qvljj"] [sub_resource type="AtlasTexture" id="AtlasTexture_6iqis"] atlas = ExtResource("1_bdup0") @@ -288,3 +289,24 @@ shape = SubResource("RectangleShape2D_k4vrw") position = Vector2(-42, 1) shape = SubResource("RectangleShape2D_s2a15") debug_color = Color(0.949698, 0.110143, 0.492661, 0.42) + +[node name="ExplosionSFX" type="AudioStreamPlayer2D" parent="."] +position = Vector2(-34, 0) +stream = ExtResource("3_qvljj") +volume_db = 10.0 + +[node name="DeathTimer" type="Timer" parent="."] +wait_time = 1.1 +one_shot = true + +[node name="HurtTimer" type="Timer" parent="."] +wait_time = 0.6 +one_shot = true + +[node name="AttackTimer" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true + +[node name="Recharge" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true diff --git a/components/Player.tscn b/components/Player.tscn index 9100115..a09103a 100644 --- a/components/Player.tscn +++ b/components/Player.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=79 format=3 uid="uid://cjiuycwqqxaxn"] +[gd_scene load_steps=88 format=3 uid="uid://cjiuycwqqxaxn"] [ext_resource type="Script" path="res://scripts/player.gd" id="1_oy25y"] [ext_resource type="Texture2D" uid="uid://d4mjdwhmho5vs" path="res://assets/export/player-Layer 5.png" id="2_g0lnn"] [ext_resource type="AudioStream" uid="uid://cir5d1qi0hcev" path="res://assets/PlayerHurt.wav" id="3_ggoam"] +[ext_resource type="Texture2D" uid="uid://cv731yjx5v71a" path="res://assets/export/punch-.png" id="3_jp05m"] [ext_resource type="AudioStream" uid="uid://du0f57xgcxuxf" path="res://assets/PlayerDeathSound.wav" id="4_8skcp"] [ext_resource type="Texture2D" uid="uid://cliy3s4yykb3k" path="res://assets/export/health-.png" id="5_1x6di"] @@ -612,6 +613,63 @@ size = Vector2(28, 64) [sub_resource type="RectangleShape2D" id="RectangleShape2D_mst3b"] size = Vector2(27, 41) +[sub_resource type="AtlasTexture" id="AtlasTexture_1n7yn"] +atlas = ExtResource("3_jp05m") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dtbdr"] +atlas = ExtResource("3_jp05m") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dhtio"] +atlas = ExtResource("3_jp05m") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t4yk0"] +atlas = ExtResource("3_jp05m") +region = Rect2(0, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1emd7"] +atlas = ExtResource("3_jp05m") +region = Rect2(32, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ccqcb"] +atlas = ExtResource("3_jp05m") +region = Rect2(64, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_g0kbm"] +atlas = ExtResource("3_jp05m") +region = Rect2(0, 64, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_sbboq"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_1n7yn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dtbdr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dhtio") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t4yk0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1emd7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ccqcb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_g0kbm") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] + [sub_resource type="AtlasTexture" id="AtlasTexture_5bnwc"] atlas = ExtResource("5_1x6di") region = Rect2(128, 16, 64, 16) @@ -723,6 +781,24 @@ position = Vector2(29, -3) shape = SubResource("RectangleShape2D_mst3b") debug_color = Color(2.11775e-06, 0.631094, 0.465774, 0.42) +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="PunchHitbox"] +texture_filter = 1 +position = Vector2(26, -6) +sprite_frames = SubResource("SpriteFrames_sbboq") +metadata/_aseprite_wizard_config_ = { +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "punch-", +"only_visible": true, +"slice": "", +"source": "res://assets/PunchVFX.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "4c71a20217ed605bc54873905f5606e3" + [node name="AttackTimer" type="Timer" parent="."] editor_description = " diff --git a/components/the_hive_mind.tscn b/components/the_hive_mind.tscn new file mode 100644 index 0000000..6c90f8e --- /dev/null +++ b/components/the_hive_mind.tscn @@ -0,0 +1,565 @@ +[gd_scene load_steps=54 format=3 uid="uid://dtl5b66gt0vqe"] + +[ext_resource type="Script" path="res://scripts/the_hive_mind.gd" id="1_8hjbo"] +[ext_resource type="Texture2D" uid="uid://cg4nwnugx0q4w" path="res://assets/export/boss-.png" id="2_idpn7"] +[ext_resource type="AudioStream" uid="uid://b8ma022qh77r4" path="res://assets/BossDeath.wav" id="2_k6sr5"] +[ext_resource type="AudioStream" uid="uid://cnmafa4b6u74p" path="res://assets/BossHurt.wav" id="3_3acad"] +[ext_resource type="AudioStream" uid="uid://cmyg0u83rcuq6" path="res://assets/SpawnMinions.wav" id="4_upx6s"] +[ext_resource type="PackedScene" uid="uid://bxbpvgteyfh02" path="res://components/Viruling.tscn" id="6_4pi6j"] +[ext_resource type="PackedScene" uid="uid://n65kl0jalqdt" path="res://components/Crawler.tscn" id="7_l2u1x"] +[ext_resource type="Script" path="res://scripts/killbox.gd" id="8_q47xa"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_bcbj6"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_thjt0"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8j6ir"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hi7ro"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1kt1a"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gw5sd"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hp5j4"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q8y80"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jc8et"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 256, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmo5e"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ghmej"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_llhc7"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4dbfp"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wb3a2"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_he7rf"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ax3cp"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hjg0v"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ag5t"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_06rwn"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ahmxm"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k7jpd"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_88rr7"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 512, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ddbg0"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l3dtv"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6limw"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7wlho"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pmt7a"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iohuh"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4dp48"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 640, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_c5ycb"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v3n5k"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_h3yrt"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m8wg0"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lcu77"] +atlas = ExtResource("2_idpn7") +region = Rect2(512, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vf6fs"] +atlas = ExtResource("2_idpn7") +region = Rect2(640, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v2iwn"] +atlas = ExtResource("2_idpn7") +region = Rect2(768, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a4gbi"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ctccy"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 128, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m552a"] +atlas = ExtResource("2_idpn7") +region = Rect2(0, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q2at8"] +atlas = ExtResource("2_idpn7") +region = Rect2(128, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ek1sc"] +atlas = ExtResource("2_idpn7") +region = Rect2(256, 384, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t1kh1"] +atlas = ExtResource("2_idpn7") +region = Rect2(384, 384, 128, 128) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ok00g"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_bcbj6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_thjt0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8j6ir") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_thjt0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hi7ro") +}], +"loop": true, +"name": &"blink middle", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_1kt1a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gw5sd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hp5j4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q8y80") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jc8et") +}], +"loop": true, +"name": &"blink right", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ghmej") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_llhc7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ghmej") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}], +"loop": true, +"name": &"blinkleft", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dbfp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wb3a2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_he7rf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ax3cp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hjg0v") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ag5t") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_06rwn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ahmxm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k7jpd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_88rr7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ddbg0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l3dtv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6limw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7wlho") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pmt7a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iohuh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4dp48") +}], +"loop": true, +"name": &"death", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_c5ycb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v3n5k") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v3n5k") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_h3yrt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v3n5k") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_h3yrt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m8wg0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lcu77") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vf6fs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v2iwn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vf6fs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vf6fs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vf6fs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v2iwn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a4gbi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ctccy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmo5e") +}], +"loop": true, +"name": &"intro", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_m552a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q2at8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ek1sc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t1kh1") +}], +"loop": true, +"name": &"ow", +"speed": 10.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_qg4uq"] +size = Vector2(92, 85) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_5444k"] +size = Vector2(95, 742) + +[node name="Node2D" type="CharacterBody2D"] +script = ExtResource("1_8hjbo") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +position = Vector2(3, -24) +scale = Vector2(0.859375, 1.01847) +sprite_frames = SubResource("SpriteFrames_ok00g") +animation = &"death" +metadata/_aseprite_wizard_config_ = { +"layer": "", +"o_ex_p": "", +"o_folder": "res://assets/export", +"o_name": "boss-", +"only_visible": true, +"slice": "", +"source": "res://assets/eye monster.aseprite" +} +metadata/_aseprite_wizard_interface_config_ = { +"output_section": true, +"slice_section": true +} +metadata/_aseprite_wizard_source_file_hash_ = "2be594506ac4abc8bc55332b51eee3ab" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(1, -1) +shape = SubResource("RectangleShape2D_qg4uq") + +[node name="BossDeathSFX" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("2_k6sr5") + +[node name="BossHurtSFX" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("3_3acad") + +[node name="SpawnMinionsSFX" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("4_upx6s") + +[node name="Viruling" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(-113, 22) + +[node name="Viruling2" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(-96, -18) + +[node name="Viruling3" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(-60, -57) + +[node name="Viruling4" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(-20, -85) + +[node name="Viruling5" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(28, -85) + +[node name="Viruling6" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(71, -61) + +[node name="Viruling7" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(106, -21) + +[node name="Viruling8" parent="." instance=ExtResource("6_4pi6j")] +position = Vector2(129, 20) + +[node name="Crawler" parent="." instance=ExtResource("7_l2u1x")] +position = Vector2(-56, 10) + +[node name="Crawler2" parent="." instance=ExtResource("7_l2u1x")] +position = Vector2(62, 10) + +[node name="Killzone" type="Area2D" parent="."] +script = ExtResource("8_q47xa") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Killzone"] +position = Vector2(-395.5, -42) +shape = SubResource("RectangleShape2D_5444k") +debug_color = Color(0.48345, 0.580537, 0.241573, 0.42) + +[node name="HurtTimer" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true + +[node name="IntroAnimTimer" type="Timer" parent="."] +wait_time = 2.1 +one_shot = true + +[node name="DeathTimer" type="Timer" parent="."] +wait_time = 4.6 +one_shot = true diff --git a/icon.svg b/icon.svg deleted file mode 100644 index 9d8b7fa..0000000 --- a/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/levels/Credits.tscn b/levels/Credits.tscn new file mode 100644 index 0000000..3aae943 --- /dev/null +++ b/levels/Credits.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=2 format=3 uid="uid://bt2ku416ksp10"] + +[ext_resource type="Texture2D" uid="uid://dhru80es00beu" path="res://levels/Layer 1.png" id="1_kmg23"] + +[node name="Credits" type="ColorRect"] +custom_minimum_size = Vector2(100, 100) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -2.0 +offset_top = -2.0 +offset_right = 2.0 +offset_bottom = 4.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.301961, 0, 0.00392157, 1) + +[node name="TextureRect" type="TextureRect" parent="."] +texture_filter = 1 +layout_mode = 0 +offset_left = 149.0 +offset_top = -8.0 +offset_right = 511.0 +offset_bottom = 105.0 +texture = ExtResource("1_kmg23") +metadata/_aseprite_wizard_config_ = { +"i_mode": 1, +"keep_anim_length": false, +"layer": "Layer 1", +"o_ex_p": "", +"o_folder": "", +"o_name": "", +"only_visible": true, +"player": "", +"slice": "", +"source": "res://assets/claustrophemia.aseprite" +} +metadata/_aseprite_wizard_source_file_hash_ = "784e92f64bd88aac2d53a52103f858ed" +metadata/_aseprite_wizard_interface_config_ = { +"layer_section": true, +"output_section": true, +"slice_section": true +} + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 0 +offset_left = 29.0 +offset_top = 93.0 +offset_right = 607.0 +offset_bottom = 331.0 +text = "Thank you for playing our GMTK Game Jam 2024 Game! We had to on-the-spot learn Godot to produce this, so I hope it is not too dreadful! + +Credits: + Newt: Programming + Alexis: Programming, Music, Dev Art + Lucy Blight: Art + +Trans rights! <3 +" diff --git a/levels/Layer 1.png b/levels/Layer 1.png new file mode 100644 index 0000000..e736685 Binary files /dev/null and b/levels/Layer 1.png differ diff --git a/levels/Layer 1.png.import b/levels/Layer 1.png.import new file mode 100644 index 0000000..95ee93e --- /dev/null +++ b/levels/Layer 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhru80es00beu" +path="res://.godot/imported/Layer 1.png-642cc09a7cb1df4fcf844334e7e8e1b6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://levels/Layer 1.png" +dest_files=["res://.godot/imported/Layer 1.png-642cc09a7cb1df4fcf844334e7e8e1b6.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/levels/claustrophemia.png b/levels/claustrophemia.png new file mode 100644 index 0000000..9ec417f Binary files /dev/null and b/levels/claustrophemia.png differ diff --git a/levels/claustrophemia.png.import b/levels/claustrophemia.png.import new file mode 100644 index 0000000..a4362f4 --- /dev/null +++ b/levels/claustrophemia.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsdwrrhlrdp72" +path="res://.godot/imported/claustrophemia.png-7be057f1f07accab4de7a9180782c768.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://levels/claustrophemia.png" +dest_files=["res://.godot/imported/claustrophemia.png-7be057f1f07accab4de7a9180782c768.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/levels/level1/bos3731.tmp b/levels/level1/bos3731.tmp new file mode 100644 index 0000000..407e815 --- /dev/null +++ b/levels/level1/bos3731.tmp @@ -0,0 +1,132 @@ +[gd_scene load_steps=12 format=3 uid="uid://cvxh2yfe8k664"] + +[ext_resource type="Script" path="res://scripts/boss_stage.gd" id="1_cybs5"] +[ext_resource type="PackedScene" uid="uid://clptnshbcs6cn" path="res://components/Bars.tscn" id="1_ihlt6"] +[ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="2_0o3y0"] +[ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="3_fynww"] +[ext_resource type="PackedScene" uid="uid://bab4ac3s2n0o1" path="res://components/Borders.tscn" id="4_n41rv"] +[ext_resource type="Texture2D" uid="uid://fnp2h8e01hi0" path="res://assets/export/go-.png" id="5_hkn60"] +[ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_dawgr"] +[ext_resource type="PackedScene" uid="uid://dtl5b66gt0vqe" path="res://components/the_hive_mind.tscn" id="8_lv2xv"] +[ext_resource type="AudioStream" uid="uid://d37cinthwqhf7" path="res://assets/BossIntroMusic.wav" id="8_rtuc5"] +[ext_resource type="AudioStream" uid="uid://cnp62dnwbxnp8" path="res://assets/BossMusicLoop.wav" id="9_68bqq"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pla12"] +size = Vector2(488.625, 129.5) + +[node name="BossStage" type="Node2D"] +position = Vector2(345, 240) +script = ExtResource("1_cybs5") +next_stage = "res://levels/Credits.tscn" + +[node name="Bars" parent="." instance=ExtResource("1_ihlt6")] +z_index = 1 +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("2_0o3y0") + +[node name="TheHiveMind" parent="." instance=ExtResource("8_lv2xv")] +position = Vector2(-21, 11) +collision_layer = 32768 +collision_mask = 32768 + +[node name="Player" parent="." instance=ExtResource("3_fynww")] +position = Vector2(-240, 22) + +[node name="Borders" parent="." instance=ExtResource("4_n41rv")] +position = Vector2(-272, -240) + +[node name="GoArrow" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(171, -146) +texture = ExtResource("5_hkn60") +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="Floor" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Floor"] +texture_filter = 1 +position = Vector2(-24.2499, 121.125) +scale = Vector2(0.984663, 0.361805) +texture = ExtResource("7_dawgr") +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(-27.2499, 120.125) +shape = SubResource("RectangleShape2D_pla12") + +[node name="Ceiling" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Ceiling"] +texture_filter = 1 +position = Vector2(-21, -269) +scale = Vector2(1, 0.358333) +texture = ExtResource("7_dawgr") +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="Ceiling"] +position = Vector2(-22.3125, -268) +shape = SubResource("RectangleShape2D_pla12") + +[node name="BossIntroMusic" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("8_rtuc5") + +[node name="BossMusicLoop" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("9_68bqq") diff --git a/levels/level1/bos8D9D.tmp b/levels/level1/bos8D9D.tmp new file mode 100644 index 0000000..24d3831 --- /dev/null +++ b/levels/level1/bos8D9D.tmp @@ -0,0 +1,131 @@ +[gd_scene load_steps=12 format=3 uid="uid://cvxh2yfe8k664"] + +[ext_resource type="Script" path="res://scripts/boss_stage.gd" id="1_cybs5"] +[ext_resource type="PackedScene" uid="uid://clptnshbcs6cn" path="res://components/Bars.tscn" id="1_ihlt6"] +[ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="2_0o3y0"] +[ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="3_fynww"] +[ext_resource type="PackedScene" uid="uid://bab4ac3s2n0o1" path="res://components/Borders.tscn" id="4_n41rv"] +[ext_resource type="Texture2D" uid="uid://fnp2h8e01hi0" path="res://assets/export/go-.png" id="5_hkn60"] +[ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_dawgr"] +[ext_resource type="PackedScene" uid="uid://dtl5b66gt0vqe" path="res://components/the_hive_mind.tscn" id="8_lv2xv"] +[ext_resource type="AudioStream" uid="uid://d37cinthwqhf7" path="res://assets/BossIntroMusic.wav" id="8_rtuc5"] +[ext_resource type="AudioStream" uid="uid://cnp62dnwbxnp8" path="res://assets/BossMusicLoop.wav" id="9_68bqq"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pla12"] +size = Vector2(488.625, 129.5) + +[node name="BossStage" type="Node2D"] +position = Vector2(345, 240) +script = ExtResource("1_cybs5") + +[node name="Bars" parent="." instance=ExtResource("1_ihlt6")] +z_index = 1 +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("2_0o3y0") + +[node name="TheHiveMind" parent="." instance=ExtResource("8_lv2xv")] +position = Vector2(-21, 11) +collision_layer = 32768 +collision_mask = 32768 + +[node name="Player" parent="." instance=ExtResource("3_fynww")] +position = Vector2(-240, 22) + +[node name="Borders" parent="." instance=ExtResource("4_n41rv")] +position = Vector2(-272, -240) + +[node name="GoArrow" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(171, -146) +texture = ExtResource("5_hkn60") +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="Floor" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Floor"] +texture_filter = 1 +position = Vector2(-24.2499, 121.125) +scale = Vector2(0.984663, 0.361805) +texture = ExtResource("7_dawgr") +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(-27.2499, 120.125) +shape = SubResource("RectangleShape2D_pla12") + +[node name="Ceiling" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Ceiling"] +texture_filter = 1 +position = Vector2(-21, -269) +scale = Vector2(1, 0.358333) +texture = ExtResource("7_dawgr") +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="Ceiling"] +position = Vector2(-22.3125, -268) +shape = SubResource("RectangleShape2D_pla12") + +[node name="BossIntroMusic" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("8_rtuc5") + +[node name="BossMusicLoop" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("9_68bqq") diff --git a/levels/level1/boss_stage.tscn b/levels/level1/boss_stage.tscn index 44abcb4..407e815 100644 --- a/levels/level1/boss_stage.tscn +++ b/levels/level1/boss_stage.tscn @@ -1,3 +1,132 @@ -[gd_scene format=3 uid="uid://cvxh2yfe8k664"] +[gd_scene load_steps=12 format=3 uid="uid://cvxh2yfe8k664"] + +[ext_resource type="Script" path="res://scripts/boss_stage.gd" id="1_cybs5"] +[ext_resource type="PackedScene" uid="uid://clptnshbcs6cn" path="res://components/Bars.tscn" id="1_ihlt6"] +[ext_resource type="Texture2D" uid="uid://bynsxkfd4t4cn" path="res://assets/export/stage1.png" id="2_0o3y0"] +[ext_resource type="PackedScene" uid="uid://cjiuycwqqxaxn" path="res://components/Player.tscn" id="3_fynww"] +[ext_resource type="PackedScene" uid="uid://bab4ac3s2n0o1" path="res://components/Borders.tscn" id="4_n41rv"] +[ext_resource type="Texture2D" uid="uid://fnp2h8e01hi0" path="res://assets/export/go-.png" id="5_hkn60"] +[ext_resource type="Texture2D" uid="uid://dailayr5c75eu" path="res://assets/export/top-bottom-.png" id="7_dawgr"] +[ext_resource type="PackedScene" uid="uid://dtl5b66gt0vqe" path="res://components/the_hive_mind.tscn" id="8_lv2xv"] +[ext_resource type="AudioStream" uid="uid://d37cinthwqhf7" path="res://assets/BossIntroMusic.wav" id="8_rtuc5"] +[ext_resource type="AudioStream" uid="uid://cnp62dnwbxnp8" path="res://assets/BossMusicLoop.wav" id="9_68bqq"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pla12"] +size = Vector2(488.625, 129.5) [node name="BossStage" type="Node2D"] +position = Vector2(345, 240) +script = ExtResource("1_cybs5") +next_stage = "res://levels/Credits.tscn" + +[node name="Bars" parent="." instance=ExtResource("1_ihlt6")] +z_index = 1 +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("2_0o3y0") + +[node name="TheHiveMind" parent="." instance=ExtResource("8_lv2xv")] +position = Vector2(-21, 11) +collision_layer = 32768 +collision_mask = 32768 + +[node name="Player" parent="." instance=ExtResource("3_fynww")] +position = Vector2(-240, 22) + +[node name="Borders" parent="." instance=ExtResource("4_n41rv")] +position = Vector2(-272, -240) + +[node name="GoArrow" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(171, -146) +texture = ExtResource("5_hkn60") +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="Floor" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Floor"] +texture_filter = 1 +position = Vector2(-24.2499, 121.125) +scale = Vector2(0.984663, 0.361805) +texture = ExtResource("7_dawgr") +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(-27.2499, 120.125) +shape = SubResource("RectangleShape2D_pla12") + +[node name="Ceiling" type="StaticBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="Ceiling"] +texture_filter = 1 +position = Vector2(-21, -269) +scale = Vector2(1, 0.358333) +texture = ExtResource("7_dawgr") +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="Ceiling"] +position = Vector2(-22.3125, -268) +shape = SubResource("RectangleShape2D_pla12") + +[node name="BossIntroMusic" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("8_rtuc5") + +[node name="BossMusicLoop" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("9_68bqq") diff --git a/levels/level1/stage2.tscn b/levels/level1/stage2.tscn index bd43f2e..bba84d8 100644 --- a/levels/level1/stage2.tscn +++ b/levels/level1/stage2.tscn @@ -37,7 +37,7 @@ scale = Vector2(1.01667, 1) texture = ExtResource("4_d2h5p") [node name="Player" parent="." instance=ExtResource("5_kc5l1")] -position = Vector2(-40, -49) +position = Vector2(-154, -43) [node name="Borders" parent="." instance=ExtResource("6_47554")] position = Vector2(-272, -240) @@ -71,10 +71,10 @@ one_shot = true script = ExtResource("9_2n06p") [node name="Crawler2" parent="Level2Spawner" instance=ExtResource("9_sqnor")] -position = Vector2(-200, -41) +position = Vector2(-306, -39) [node name="Crawler" parent="Level2Spawner" instance=ExtResource("9_sqnor")] -position = Vector2(168, -41) +position = Vector2(307, -42) [node name="Floor" type="StaticBody2D" parent="."] diff --git a/project.godot b/project.godot index 00caad7..397685d 100644 --- a/project.godot +++ b/project.godot @@ -10,13 +10,13 @@ config_version=5 [application] -config/name="claustrophemia" +config/name="CLAUSTROPHEMIA" config/version="0.0.1" run/main_scene="res://MainMenu.tscn" config/features=PackedStringArray("4.3", "Forward Plus") boot_splash/bg_color=Color(0, 0, 0, 1) boot_splash/show_image=false -config/icon="res://icon.svg" +config/icon="res://Viruling.png" [aseprite] diff --git a/scripts/boss_stage.gd b/scripts/boss_stage.gd new file mode 100644 index 0000000..a9cd512 --- /dev/null +++ b/scripts/boss_stage.gd @@ -0,0 +1,55 @@ +extends Node2D + +@export var next_stage: String + +@onready var right_border = $Borders/Right/CollisionShape2D +@onready var right_trigger = $Borders/Right/Trigger +@onready var intro_music = $BossIntroMusic +@onready var music_loop = $BossMusicLoop +@onready var go_arrow = $GoArrow +@onready var blink_timer = $BlinkTimer +@onready var hive_mind = $TheHiveMind + +var go_arrow_blink_on = false +var completed = false +var intro_played = false + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + go_arrow.hide() + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + # ----- Background Music (BG Media) ------ + if !intro_played: + intro_played = true + intro_music.play() + if intro_played and !intro_music.playing and !completed: + if !music_loop.playing: + music_loop.play() + else: + music_loop.stop() + # ---------------------------------------- + + # ------ goeth the arrow bruv ------ + if !completed: + completed = hive_mind.is_complete() + else: + toggle_go_arrow() + right_border.shape = null + right_trigger.body_entered.connect(_on_trigger) + # -------------- waow -------------- + +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 + +func _on_trigger(body: Node) -> void: + if body is Player: + get_tree().change_scene_to_file(next_stage) diff --git a/scripts/crawler.gd b/scripts/crawler.gd index 6f79568..a163302 100644 --- a/scripts/crawler.gd +++ b/scripts/crawler.gd @@ -4,18 +4,29 @@ class_name Crawler extends Entity @onready var sprite = $AnimatedSprite2D @onready var main_collider = $CollisionShape2D @onready var whip = $WhipArea +@onready var speed_mult = 0 +@onready var is_dying = false +@onready var explosion_sfx = $ExplosionSFX +@onready var death_timer = $DeathTimer +@onready var hurting = false +@onready var hurt_timer = $HurtTimer +@onready var attack_timer = $AttackTimer +@onready var recharge_timer = $Recharge ## Crawl towards the player but stay within striking distance and not super close -const HEALTH = 40 +const HEALTH = 45 const SPEED_MULTIPLIER = 50 const ATTACK_DAMAGE = 20 +var death_timer_started = false +var attacking = true + func _init() -> void: super._init(HEALTH, SPEED_MULTIPLIER, ATTACK_DAMAGE) -#func _ready() -> void: - #whip.visible = false +func _ready() -> void: + whip.visible = false func face_player(): var player_position = player.global_position @@ -36,21 +47,66 @@ func _physics_process(delta: float) -> void: var distanceToPlayer = global_position.distance_to(player.global_position) var desiredDistance = 70 - if sprite.flip_h: - desiredDistance -= 69 - face_player() - print(distanceToPlayer) + if health <= 0 and !death_timer_started: + is_dying = true + death_timer_started = true + death_timer.start() - if distanceToPlayer > desiredDistance: - velocity.x = speed - face_player() + if !is_dying: + if !hurting: + if sprite.flip_h: + desiredDistance -= 69 + face_player() + + if distanceToPlayer > desiredDistance: + velocity.x = speed * speed_mult + face_player() + + if not sprite.flip_h: + velocity.x *= -1 + + sprite.play("walk") + else: + if recharge_timer.is_stopped(): + attacking = true + whip.visible = true + whip.connect("body_entered", whip_hit) + attack_timer.start() + + if attacking and !attack_timer.is_stopped(): + velocity.x = 0 + sprite.play("Whip") + elif attacking and attack_timer.is_stopped(): + recharge_timer.start() + whip.visible = false + whip.disconnect("body_entered", whip_hit) + attacking = false + - if not sprite.flip_h: - velocity.x *= -1 + if hurt_timer.is_stopped(): + hurting = false + else: + sprite.play("jump away") - sprite.play("walk") + if speed_mult != 0: + move_and_slide() else: - velocity.x = 0 - sprite.play("Whip") + sprite.play("death") + explosion_sfx.play() + speed_mult = 0 + if death_timer.is_stopped(): + queue_free() - move_and_slide() +func charge() -> void: + speed_mult = 1 + +func hurt_anim(): + hurting = true + hurt_timer.start() + +func whip_hit(node: Node) -> void: + if node is Player: + node.health -= ATTACK_DAMAGE + node.take_knockback(50) + if node.has_method("hurt_anim"): + node.call("hurt_anim") diff --git a/scripts/player.gd b/scripts/player.gd index aa6e67c..054be40 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -12,6 +12,7 @@ class_name Player extends Entity @onready var player_death_sfx = $PlayerDeathSfx @onready var hurt_timer = $HurtTimer @onready var health_bar = $HealthBar +@onready var punch_vfx = $PunchHitbox/AnimatedSprite2D var jumping = false var facing_right = true @@ -103,6 +104,7 @@ func _process(delta: float) -> void: if attack_timer.is_stopped() and Input.is_action_just_pressed("attack"): attack_timer.start() + punch_vfx.play("default") if is_on_floor(): animated_sprite.play("Right" if right_punch else "Left") diff --git a/scripts/stage_2_spawner.gd b/scripts/stage_2_spawner.gd index f1ed8f0..632c3a5 100644 --- a/scripts/stage_2_spawner.gd +++ b/scripts/stage_2_spawner.gd @@ -1,15 +1,21 @@ extends Node2D @onready var complete = false +@onready var wave_1 = [$Crawler, $Crawler2] # Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. - + for crawler in wave_1: + crawler.charge() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - pass + for crawler in wave_1: + if crawler.is_dying: + wave_1.erase(crawler) + + if wave_1 == []: + complete = true func is_complete() -> bool: return complete diff --git a/scripts/the_hive_mind.gd b/scripts/the_hive_mind.gd new file mode 100644 index 0000000..6ce41cd --- /dev/null +++ b/scripts/the_hive_mind.gd @@ -0,0 +1,108 @@ +class_name HiveMind extends Entity + +@onready var wave_1 = [$Viruling, $Viruling2, $Viruling3] +@onready var wave_2 = [$Viruling4, $Viruling5, $Crawler] +@onready var wave_3 = [$Viruling6, $Viruling7, $Viruling8, $Crawler2] +@onready var hurtbox = $CollisionShape2D +@onready var spawn_sfx = $SpawnMinionsSFX +@onready var boss_hurt_sfx = $BossHurtSFX +@onready var boss_death_sfx = $BossDeathSFX +@onready var hurt_timer = $HurtTimer +@onready var death_timer = $DeathTimer +@onready var sprite = $AnimatedSprite2D +@onready var intro_timer = $IntroAnimTimer + +var complete = false +var wave_2_start = false +var wave_3_start = false +var shields_down = false +var hurting = false +var is_dying = false +var is_intro_anim = true + +func _init() -> void: + super._init(100, 0, 0) + +func _ready(): + intro_timer.start() + hurtbox.disabled = true + if !spawn_sfx.playing: + spawn_sfx.play + for enemy in wave_1: + if enemy.has_method("charge"): + enemy.call("charge") + +func _process(delta: float) -> void: + # ----- Make sure no damage taken before shields down ------ + if !shields_down: + health = 100 + # ---------------------------------------------------------- + + # --- Wave death counters ------- + for enemy in wave_1: + if enemy.is_dying: + wave_1.erase(enemy) + for enemy in wave_2: + if enemy.is_dying: + wave_2.erase(enemy) + for enemy in wave_3: + if enemy.is_dying: + wave_3.erase(enemy) + # ------------------------------- + + # ------- Wave start calls ------------------ + if wave_1 == [] and !wave_2_start: + if !spawn_sfx.playing: + spawn_sfx.play() + wave_2_start = true + for enemy in wave_2: + enemy.charge() + hurt_timer.start() + + if wave_1 == [] and wave_2 == [] and !wave_3_start: + if !spawn_sfx.playing: + spawn_sfx.play() + wave_3_start = true + for enemy in wave_3: + enemy.charge() + hurt_timer.start() + + if wave_1 == [] and wave_2 == [] and wave_3 == []: + shields_down = true + hurtbox.disabled = false + if death_timer.is_stopped() and !is_dying: + death_timer.start() + is_dying = true + complete = true + # ----------------------------------------- + + # ------- Anims ---------- + if is_intro_anim and !intro_timer.is_stopped(): + sprite.play("intro") + elif is_intro_anim and intro_timer.is_stopped(): + is_intro_anim = false + elif !is_dying: + if hurt_timer.is_stopped(): + sprite.play("blinkleft") + else: + sprite.play("ow") + else: + sprite.play("death") + if death_timer.is_stopped(): + queue_free() + else: + if !boss_death_sfx.playing: + boss_death_sfx.play() + # ---------------------------------------- + +# The hive mind is static. Don't worry abt this. +func _physics_process(delta: float) -> void: + pass + +func hurt_anim() -> void: + if shields_down and !hurting: + hurting = true + hurt_timer.start() + +func is_complete() -> bool: + return complete