From 4ea08b1c5f438ab125b17d60e9b935677a3ec008 Mon Sep 17 00:00:00 2001 From: ultrablob Date: Wed, 5 Feb 2025 21:15:12 -0500 Subject: [PATCH 1/4] add eart --- Spawner.gd | 2 +- TrajectoryDisplay.gd | 4 +- Turret.gd | 7 +- eart-bubble.png | Bin 0 -> 1500 bytes eart-bubble.png.import | 34 +++++++ eart-shield-break.png | Bin 0 -> 6935 bytes eart-shield-break.png.import | 34 +++++++ eart-shield.png | Bin 0 -> 2333 bytes eart-shield.png.import | 34 +++++++ eart-shoot.png | Bin 0 -> 17865 bytes eart-shoot.png.import | 34 +++++++ eart.gd | 30 ++++++ eart.png | Bin 0 -> 5807 bytes eart.png.import | 34 +++++++ eart.tres | 12 +++ eart.tscn | 171 +++++++++++++++++++++++++++++++++++ eptagon.tscn | 5 +- ircle.tscn | 3 + main.gd | 4 + main.tscn | 14 +-- player-iamond.tscn | 2 + player-ite.tscn | 4 + player-row.gd | 8 +- player-row.tscn | 4 + project.godot | 5 + shield bullet.tscn | 92 +++++++++++++++++++ shield.gd | 21 +++++ shield.tscn | 127 ++++++++++++++++++++++++++ shield_bullet.gd | 29 ++++++ 29 files changed, 697 insertions(+), 17 deletions(-) create mode 100644 eart-bubble.png create mode 100644 eart-bubble.png.import create mode 100644 eart-shield-break.png create mode 100644 eart-shield-break.png.import create mode 100644 eart-shield.png create mode 100644 eart-shield.png.import create mode 100644 eart-shoot.png create mode 100644 eart-shoot.png.import create mode 100644 eart.gd create mode 100644 eart.png create mode 100644 eart.png.import create mode 100644 eart.tres create mode 100644 eart.tscn create mode 100644 shield bullet.tscn create mode 100644 shield.gd create mode 100644 shield.tscn create mode 100644 shield_bullet.gd diff --git a/Spawner.gd b/Spawner.gd index 66369b5..59af8f7 100644 --- a/Spawner.gd +++ b/Spawner.gd @@ -9,7 +9,7 @@ var wave_count = start_wave func _ready(): if start_wave != 0: - await get_tree().create_timer(5).timeout + await get_tree().create_timer(2).timeout waves = waves.slice(start_wave) spawn_loop() diff --git a/TrajectoryDisplay.gd b/TrajectoryDisplay.gd index 9917c7c..7767f77 100644 --- a/TrajectoryDisplay.gd +++ b/TrajectoryDisplay.gd @@ -9,8 +9,10 @@ func _ready(): func _physics_process(delta): #global_rotation = $"..".linear_velocity.angle() $ShapeCast2D.target_position = to_local($"..".linear_velocity * 1000) - points[1] = to_local($ShapeCast2D.get_collision_point(0)) + + if $ShapeCast2D.get_collider(0) != null and ["Player", "Shield" if target_shield else "None"].has($ShapeCast2D.get_collider(0).name): + points[1] = to_local($ShapeCast2D.get_collision_point(0)) visible = true else: visible = false diff --git a/Turret.gd b/Turret.gd index c9da595..5a8ff93 100644 --- a/Turret.gd +++ b/Turret.gd @@ -3,5 +3,8 @@ extends Node2D var target: Node2D func _process(delta): - if target: - look_at(target.global_position + target.linear_velocity) + if target and is_instance_valid(target): + if target.is_class("RigidBody2D"): + look_at(target.global_position + target.linear_velocity) + else: + look_at(target.global_position) diff --git a/eart-bubble.png b/eart-bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1cf2c2704146bd4bdb0a762bf70fa7360bb258 GIT binary patch literal 1500 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 literal 0 HcmV?d00001 diff --git a/eart-shield-break.png.import b/eart-shield-break.png.import new file mode 100644 index 0000000..9bcd6b1 --- /dev/null +++ b/eart-shield-break.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dysewmpj8nvgx" +path="res://.godot/imported/eart-shield-break.png-3237feb9c3d0823340d07b2ee9703679.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://eart-shield-break.png" +dest_files=["res://.godot/imported/eart-shield-break.png-3237feb9c3d0823340d07b2ee9703679.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/eart-shield.png b/eart-shield.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa1f1607a950322876b41d605f4cbee2debbbc8 GIT binary patch literal 2333 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 literal 0 HcmV?d00001 diff --git a/eart-shoot.png.import b/eart-shoot.png.import new file mode 100644 index 0000000..abc2807 --- /dev/null +++ b/eart-shoot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ckrd5s78myn2" +path="res://.godot/imported/eart-shoot.png-1a3d97f9ee3df5e958c6e421bbc0a007.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://eart-shoot.png" +dest_files=["res://.godot/imported/eart-shoot.png-1a3d97f9ee3df5e958c6e421bbc0a007.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/eart.gd b/eart.gd new file mode 100644 index 0000000..ebffe73 --- /dev/null +++ b/eart.gd @@ -0,0 +1,30 @@ +extends StaticBody2D + +func shoot(): + + $Turret.target = find_target() + + if not $Turret.target: + return + + $Turret/AnimatedSprite2D.play("shoot") + + await $Turret/AnimatedSprite2D.animation_finished + $Turret/Gun.shoot() + + $Turret/AnimatedSprite2D.play("default") + + $Turret.target = find_target() + + $ShootTimer.start(1) + + +func find_target(): + + if len(get_tree().get_nodes_in_group("enemy")) <= 0: + print("Error! nothing to heal") + return null + + var enemies = get_tree().get_nodes_in_group("enemy") + + return enemies[randi_range(0, len(enemies)-1)] diff --git a/eart.png b/eart.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e3ffceb9fa7ba5847bbec7944e790b467e6e63 GIT binary patch literal 5807 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

f}DxW7My{-gEVrNZMSM3ek?yBFjmM z@&f7!I_@eq9S&hjOwoUJVd?QQV@knW;h$9Nci-w(m_-5Sj-sJ_$dm68wTYytI2j5f zGJ*Y85r}L@v_}Ue6&Xo@LtZ6C{Lkj?z->m7IH0{g)x4&5FK^^#pVR4?v;b$)sKnA} z-CicR0L+dQexjLRjbF7ce(*Y|kAnB{V$=3qYsTE1rf@kAEg8uf=TN?TfyX&cZkpzA zHVnX9&jPn&DXC$}4jAU6gX5J_-<2fQO9r*b_+jhS>uCZ7FG_so2G`zsxSZ(TSRS3V zouZ6~T#uKWl5o#)@)}p%-mJ=inEFaVqb0dBO5}4FrL2TUUo=U0x0-G30!wOfeCAds zHaRfzN8Ca=8lJaBJGqA1LiRlpH24G=Q}|-d`Ls6f^54BpRG>|6Vvc8VVg_N#ITA*r z54M0(ASy9DwD0ctZVA0+=j)%_3!mS&zS1$MzVR7;PXo+-E%AQTtxlgQyLc$FJUjdb z`@q>A>~fPnR>vQ6GoWVL$S@MNWkK?@Rl}@NRLa6^AS8 z!{)u#G_A_A%ldZ`6SkA8_`>6bF*eB$=N$?}(Ak8B1ZdV@5Kao!VIh`iSa^peR3ge2Tcjt(XR9N0=O52}pko7_jvT=CTi;b`g0 zyq*Ig&$Z#47o$N{&qTeak23Di_rgCUf%L&eR_5`>hJ{JQ!#pi1N&3XvzG0sM0g;BZ zM)frs^P#2>3WP*shi9AL>*2#^P655-lZlW9iQ27%D)biAm%B)s zOvZb|p-x(vQ#;#y+lO0QTd9VV36LLCMCsBaL%q!OIGcS1%Y8U%IrH-zI77Py;HTT+ zGf|cGc6qdP7u-0uA+f?~12Iwn+0)a*h9%rPK0X$J(%@fq_&M+ZA%a<2-HrknW(7v7 z`IgXM5(W)fg`qm0e)BK8n^|yLOd=De1`4DAP%-ruH2++$gwsm-EZ=h>W^J7BJ9|b( zTRZLxdr_lw>!hQf+2gV*N~iA~EG@oem6hv40JZYSynt{8$nD=(V&Iz#Rg@$6zx>(l zd?e(!yECYGaiN*Mn?r!{t$q@JOr80>sm>KTbbI6yK{D2YU2Z=*+9A470PGx#Mx&`m zgsrIzJVUKJ64=f3+R{mH$dqj=(Af|5_FTrC z>UjhWhkh^Nfd{#LcpBL!T|e3D>b`+5Rs>0jx*wks2rFiK515d=udly?NKCo`BAXpv z8AFuJsupAoFRl1g)A02kR@drR)R@%8v^bq()3gJnaz0?~T1kLO+sPWsS|g$#ik%!B z1O*#FiD})U7^0y(M;Od8`#T|OjyejrpQa#@N+?yB)jv^UR>DG(H7|* ztYX6OZ*rEJfM{&nZiQKS_J^~*w%M4~WR>2gKWW8^d=&{Ruwp&YM{h)UV1u?u3A16F zB$x5rot<&HxfU*XS&dkbwk3-VklMKu1H4P>2zw)^s;Gq0pXtF?c@Bc+D*d|;txDW& zLi3f+c1ivm)S*{;6UHcVpSatQl^cI%T9DU^T zeG|5IrJ!g??3P{RWjC$LoJ9|+1qbgJIZNpj1z#g0>4#SZ6~l6=7?>vXahS?V;lrhP zdbCOIhiL7)FwPxW!*_2e0Gh5R=?M^JckzDDQJ=f{dCxp^6Vo0z#gD-P_6FFDJHk81 zU^1rE5|5*!g*iIIcDYZyZu0zpsl+wzigH^Qhd+8d9YX9g)45ygdKel4V#GC=IR2vv R^Q`}vu9gv^Uc>px{{UPm!ixX^ literal 0 HcmV?d00001 diff --git a/eart.png.import b/eart.png.import new file mode 100644 index 0000000..9114d07 --- /dev/null +++ b/eart.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bt6i05dav4ew5" +path="res://.godot/imported/eart.png-2bd558ee91f97d82f4e38d57e7eba5f3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://eart.png" +dest_files=["res://.godot/imported/eart.png-2bd558ee91f97d82f4e38d57e7eba5f3.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/eart.tres b/eart.tres new file mode 100644 index 0000000..886e17f --- /dev/null +++ b/eart.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="WaveEnemy" load_steps=4 format=3 uid="uid://c805aej5v7cvr"] + +[ext_resource type="Script" path="res://wave_enemy.gd" id="1_0iu7m"] +[ext_resource type="PackedScene" uid="uid://cjvg8kxt7u5yk" path="res://eart.tscn" id="1_hy2xe"] +[ext_resource type="SpriteFrames" uid="uid://dh2kuw87g8lsx" path="res://ircle_portal.tres" id="2_nxpif"] + +[resource] +script = ExtResource("1_0iu7m") +enemy = ExtResource("1_hy2xe") +boss = false +portal_texture = ExtResource("2_nxpif") +check_distance = 100 diff --git a/eart.tscn b/eart.tscn new file mode 100644 index 0000000..9d700f2 --- /dev/null +++ b/eart.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=26 format=3 uid="uid://cjvg8kxt7u5yk"] + +[ext_resource type="Script" path="res://eart.gd" id="1_xkxbf"] +[ext_resource type="Script" path="res://Turret.gd" id="3_jlwo0"] +[ext_resource type="Texture2D" uid="uid://bt6i05dav4ew5" path="res://eart.png" id="3_k6o1h"] +[ext_resource type="Texture2D" uid="uid://ckrd5s78myn2" path="res://eart-shoot.png" id="4_ry8nw"] +[ext_resource type="Script" path="res://Gun.gd" id="5_tefa8"] +[ext_resource type="PackedScene" uid="uid://dl02ccyielpnj" path="res://shield bullet.tscn" id="6_cxgsw"] +[ext_resource type="PackedScene" uid="uid://c3s8as813frjc" path="res://shield.tscn" id="7_w0oyy"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_x6kbk"] +atlas = ExtResource("3_k6o1h") +region = Rect2(0, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uavfs"] +atlas = ExtResource("4_ry8nw") +region = Rect2(0, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4kt48"] +atlas = ExtResource("4_ry8nw") +region = Rect2(128, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m4kjs"] +atlas = ExtResource("4_ry8nw") +region = Rect2(256, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_80ps8"] +atlas = ExtResource("4_ry8nw") +region = Rect2(384, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ocyed"] +atlas = ExtResource("4_ry8nw") +region = Rect2(512, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_festk"] +atlas = ExtResource("4_ry8nw") +region = Rect2(640, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7qs7e"] +atlas = ExtResource("4_ry8nw") +region = Rect2(768, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2lsh6"] +atlas = ExtResource("4_ry8nw") +region = Rect2(896, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ude0u"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1024, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_u4tdc"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1152, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dcqkk"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1280, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2ovns"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1408, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n3uow"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1536, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wksfy"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1664, 0, 128, 128) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v8s4u"] +atlas = ExtResource("4_ry8nw") +region = Rect2(1792, 0, 128, 128) + +[sub_resource type="SpriteFrames" id="SpriteFrames_1fj5a"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_x6kbk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_uavfs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4kt48") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m4kjs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_80ps8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ocyed") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_festk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7qs7e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2lsh6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ude0u") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_u4tdc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dcqkk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2ovns") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n3uow") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wksfy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v8s4u") +}], +"loop": false, +"name": &"shoot", +"speed": 12.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_03ifk"] +radius = 44.1475 + +[node name="Eart" type="StaticBody2D" groups=["destructible"]] +script = ExtResource("1_xkxbf") + +[node name="ShootTimer" type="Timer" parent="."] +one_shot = true +autostart = true + +[node name="Turret" type="Node2D" parent="."] +script = ExtResource("3_jlwo0") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Turret"] +position = Vector2(14, 0) +rotation = -1.5708 +sprite_frames = SubResource("SpriteFrames_1fj5a") +animation = &"shoot" +autoplay = "default" + +[node name="Gun" type="Marker2D" parent="Turret"] +position = Vector2(106, 0) +script = ExtResource("5_tefa8") +bullet = ExtResource("6_cxgsw") +bullet_speed = 300 + +[node name="RayCast2D" type="RayCast2D" parent="Turret"] +target_position = Vector2(1000, 0) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_03ifk") + +[node name="Shield" parent="." instance=ExtResource("7_w0oyy")] +scale = Vector2(2, 2) + +[connection signal="timeout" from="ShootTimer" to="." method="shoot"] diff --git a/eptagon.tscn b/eptagon.tscn index 60003de..233b17b 100644 --- a/eptagon.tscn +++ b/eptagon.tscn @@ -33,13 +33,13 @@ animations = [{ }], "loop": true, "name": &"default", -"speed": 5.0 +"speed": 3.0 }] [sub_resource type="CircleShape2D" id="CircleShape2D_03ifk"] radius = 36.0139 -[node name="Eptagon" type="StaticBody2D" groups=["destructible"]] +[node name="Eptagon" type="StaticBody2D" groups=["destructible", "enemy"]] script = ExtResource("1_d0pdl") [node name="Sprite2D" type="Sprite2D" parent="."] @@ -60,7 +60,6 @@ autoplay = "default" position = Vector2(56, 0) script = ExtResource("2_sea5o") bullet = ExtResource("4_cyd7j") -bullet_speed = 750 [node name="Collider" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_03ifk") diff --git a/ircle.tscn b/ircle.tscn index 44da364..c1b9586 100644 --- a/ircle.tscn +++ b/ircle.tscn @@ -155,5 +155,8 @@ shape = SubResource("CircleShape2D_yns8h") [node name="LaserFX" type="AudioStreamPlayer2D" parent="."] stream = ExtResource("5_tkxjf") +[node name="ShieldMarker" type="Marker2D" parent="."] +scale = Vector2(6, 6) + [connection signal="timeout" from="Line2D/VisibleTimer" to="Line2D" method="set_transparent"] [connection signal="timeout" from="Timer" to="." method="fire_laser"] diff --git a/main.gd b/main.gd index c8bf701..88d0c28 100644 --- a/main.gd +++ b/main.gd @@ -3,6 +3,10 @@ var config = ConfigFile.new() # Called when the node enters the scene tree for the first time. func _init(): + + if OS.is_debug_build(): + Engine.set_time_scale(0.25) + if config.load("user://settings.cfg") == OK: var player = load(config.get_value("gameplay", "class", "res://player-row.tscn")).instantiate() player.position = Vector2(1920/2, 1080/2) diff --git a/main.tscn b/main.tscn index 01639cd..0300133 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=116 format=3 uid="uid://bmd4m7lqj4v0x"] +[gd_scene load_steps=117 format=3 uid="uid://bmd4m7lqj4v0x"] [ext_resource type="Script" path="res://main.gd" id="1_3dydx"] [ext_resource type="Script" path="res://Spawner.gd" id="1_ifu8g"] @@ -13,6 +13,7 @@ [ext_resource type="Script" path="res://wave_enemy.gd" id="7_54h7d"] [ext_resource type="Texture2D" uid="uid://cwquv3mq5kk1d" path="res://countdown-spritesheet.png" id="8_e1eub"] [ext_resource type="Resource" uid="uid://dd8me0deake37" path="res://eptagon_enemy.tres" id="9_q67ak"] +[ext_resource type="Resource" uid="uid://c805aej5v7cvr" path="res://eart.tres" id="10_jib8h"] [ext_resource type="AudioStream" uid="uid://dn65uapn0wsok" path="res://impactMetal_002.ogg" id="11_acuni"] [ext_resource type="Script" path="res://CollisionCheck.gd" id="11_ryeyk"] [ext_resource type="FontFile" uid="uid://bnguin7bsyx6e" path="res://Kenney Future.ttf" id="11_s4q6p"] @@ -112,16 +113,16 @@ wait_for_killed = true [sub_resource type="Resource" id="Resource_61v84"] script = ExtResource("4_um0x7") -enemies = Array[ExtResource("7_54h7d")]([ExtResource("9_q67ak")]) -quantities = Array[int]([1]) -spawning_duration = 1.0 +enemies = Array[ExtResource("7_54h7d")]([ExtResource("10_jib8h"), ExtResource("3_xmk5u")]) +quantities = Array[int]([1, 2]) +spawning_duration = 3.0 wait = 5.0 wait_for_killed = true [sub_resource type="Resource" id="Resource_82qld"] script = ExtResource("4_um0x7") -enemies = Array[ExtResource("7_54h7d")]([ExtResource("3_xmk5u"), ExtResource("5_xdrk0"), ExtResource("5_e24vf")]) -quantities = Array[int]([10, 10, 10]) +enemies = Array[ExtResource("7_54h7d")]([ExtResource("3_xmk5u"), ExtResource("5_xdrk0"), ExtResource("5_e24vf"), ExtResource("10_jib8h")]) +quantities = Array[int]([10, 10, 10, 4]) spawning_duration = 20.0 wait = 2.0 wait_for_killed = true @@ -669,6 +670,7 @@ script = ExtResource("1_3dydx") script = ExtResource("1_ifu8g") waves = Array[ExtResource("4_um0x7")]([SubResource("Resource_ur7l5"), SubResource("Resource_kupyp"), SubResource("Resource_o8cet"), SubResource("Resource_0cevq"), SubResource("Resource_eppj0"), SubResource("Resource_rpu1y"), SubResource("Resource_4b1vo"), SubResource("Resource_gg7kj"), SubResource("Resource_fjkob"), SubResource("Resource_5sdy5"), SubResource("Resource_61v84"), SubResource("Resource_82qld"), SubResource("Resource_2j32b")]) wave_label = NodePath("../UI/Wave Count") +start_wave = 8 [node name="Timer" type="Timer" parent="Spawner"] wait_time = 0.1 diff --git a/player-iamond.tscn b/player-iamond.tscn index 44f7e8a..68fbc04 100644 --- a/player-iamond.tscn +++ b/player-iamond.tscn @@ -205,3 +205,5 @@ color_ramp = SubResource("Gradient_urfxb") [node name="CollisionShape2D" type="CollisionShape2D" parent="." index="3"] rotation = -1.5708 shape = SubResource("CapsuleShape2D_bf2qx") + +[node name="ShieldMarker" type="Marker2D" parent="." index="4"] diff --git a/player-ite.tscn b/player-ite.tscn index 7b2a01f..b050b05 100644 --- a/player-ite.tscn +++ b/player-ite.tscn @@ -276,3 +276,7 @@ collision_mask = 3 [node name="LaserFX" type="AudioStreamPlayer2D" parent="." index="5"] stream = ExtResource("9_thl05") bus = &"SFX" + +[node name="ShieldMarker" type="Marker2D" parent="." index="6"] +position = Vector2(10.5, 0) +scale = Vector2(2, 2) diff --git a/player-row.gd b/player-row.gd index 552b047..0707f74 100644 --- a/player-row.gd +++ b/player-row.gd @@ -24,14 +24,14 @@ func _input(event): if num_quares >= max_quares: notifier.notify("All Quares in Use!") return - for child in $"../".get_node("%Ability").get_children(): - if child.value == 0 and not child.animating: - child.value = 100 - break if not $"../CollisionCheck".is_clear(get_global_mouse_position(), 60): $"../CollisionCheck".flash() notifier.notify("Too Close!") return + for child in $"../".get_node("%Ability").get_children(): + if child.value == 0 and not child.animating: + child.value = 100 + num_quares += 1 var new_quare = quare.instantiate() new_quare.position = get_global_mouse_position() diff --git a/player-row.tscn b/player-row.tscn index 6efe91a..6faa3c8 100644 --- a/player-row.tscn +++ b/player-row.tscn @@ -205,3 +205,7 @@ bus = &"SFX" [node name="ExagonFX" type="AudioStreamPlayer2D" parent="." index="4"] stream = ExtResource("4_lwgj5") bus = &"SFX" + +[node name="ShieldMarker" type="Marker2D" parent="." index="5"] +position = Vector2(4, 0) +scale = Vector2(1.5, 1.5) diff --git a/project.godot b/project.godot index 5a3cce2..e13206e 100644 --- a/project.godot +++ b/project.godot @@ -28,6 +28,11 @@ window/vsync/vsync_mode=2 version_control/plugin_name="GitPlugin" version_control/autoload_on_startup=true +[global_group] + +destructible="Destructible Objects" +enemy="Enemies" + [input] up={ diff --git a/shield bullet.tscn b/shield bullet.tscn new file mode 100644 index 0000000..d9542f2 --- /dev/null +++ b/shield bullet.tscn @@ -0,0 +1,92 @@ +[gd_scene load_steps=13 format=3 uid="uid://dl02ccyielpnj"] + +[ext_resource type="Script" path="res://shield_bullet.gd" id="1_dsvm1"] +[ext_resource type="Texture2D" uid="uid://du4hmctktlccq" path="res://eart-bubble.png" id="2_ledl3"] +[ext_resource type="Texture2D" uid="uid://djfjdlri5xdkn" path="res://dotted line.png" id="3_jaepw"] +[ext_resource type="Script" path="res://TrajectoryDisplay.gd" id="4_fyeym"] + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_xnhwp"] +friction = 0.0 +bounce = 1.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_b5cca"] +radius = 13.0 + +[sub_resource type="AtlasTexture" id="AtlasTexture_qjm3j"] +atlas = ExtResource("2_ledl3") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rrdre"] +atlas = ExtResource("2_ledl3") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ghx8d"] +atlas = ExtResource("2_ledl3") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ch73m"] +atlas = ExtResource("2_ledl3") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_pacu6"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_qjm3j") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rrdre") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ghx8d") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ch73m") +}], +"loop": true, +"name": &"default", +"speed": 7.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_13gk7"] +radius = 30.0 + +[node name="Bullet" type="RigidBody2D" groups=["bullet"]] +collision_layer = 2 +physics_material_override = SubResource("PhysicsMaterial_xnhwp") +gravity_scale = 1.66533e-16 +contact_monitor = true +max_contacts_reported = 1 +linear_velocity = Vector2(2.08165e-12, 2.08165e-12) +script = ExtResource("1_dsvm1") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 1) +rotation = -1.5708 +shape = SubResource("CircleShape2D_b5cca") + +[node name="Sprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +position = Vector2(11, -6) +rotation = 1.5708 +sprite_frames = SubResource("SpriteFrames_pacu6") +autoplay = "default" +offset = Vector2(7.05637, 10.7826) + +[node name="TrajectoryDisplay" type="Line2D" parent="."] +visible = false +z_index = -1 +texture_repeat = 2 +position = Vector2(-2, 0) +points = PackedVector2Array(0, 0, 100, 0) +width = 50.0 +default_color = Color(0.909804, 0.717647, 0.337255, 0.529412) +texture = ExtResource("3_jaepw") +texture_mode = 1 +script = ExtResource("4_fyeym") + +[node name="ShapeCast2D" type="ShapeCast2D" parent="TrajectoryDisplay"] +shape = SubResource("CircleShape2D_13gk7") +target_position = Vector2(500, 2.08165e-12) + +[connection signal="body_entered" from="." to="." method="hit"] diff --git a/shield.gd b/shield.gd new file mode 100644 index 0000000..c37ac2a --- /dev/null +++ b/shield.gd @@ -0,0 +1,21 @@ +extends PhysicsBody2D + +#! egregious code + +func find_collisionshape(): + if get_parent().name == "ShieldMarker": + return get_parent().get_parent().get_node("CollisionShape2D") + elif get_parent().has_node("CollisionShape2D"): + return get_parent().get_node("CollisionShape2D") + return null + +func _ready() -> void: + if find_collisionshape(): + print(find_collisionshape().get_parent().name) + find_collisionshape().set_deferred("disabled", true) + #$Collider.set_deferred("disabled", false) + +func destroy(): + if find_collisionshape(): + find_collisionshape().set_deferred("disabled", false) + $AnimatedSprite2D.play("die") diff --git a/shield.tscn b/shield.tscn new file mode 100644 index 0000000..1b8347c --- /dev/null +++ b/shield.tscn @@ -0,0 +1,127 @@ +[gd_scene load_steps=19 format=3 uid="uid://c3s8as813frjc"] + +[ext_resource type="Script" path="res://shield.gd" id="1_ni0ln"] +[ext_resource type="Texture2D" uid="uid://cc3nl13t7c4mj" path="res://eart-shield.png" id="2_2bt8h"] +[ext_resource type="Texture2D" uid="uid://dysewmpj8nvgx" path="res://eart-shield-break.png" id="3_1tta6"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_mcb3o"] +atlas = ExtResource("2_2bt8h") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l8lnp"] +atlas = ExtResource("2_2bt8h") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_so4um"] +atlas = ExtResource("2_2bt8h") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_sel7y"] +atlas = ExtResource("2_2bt8h") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iumxh"] +atlas = ExtResource("2_2bt8h") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jb6hd"] +atlas = ExtResource("2_2bt8h") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5xoy6"] +atlas = ExtResource("2_2bt8h") +region = Rect2(384, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a5ids"] +atlas = ExtResource("3_1tta6") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x2842"] +atlas = ExtResource("3_1tta6") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ckp3b"] +atlas = ExtResource("3_1tta6") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_b6w7a"] +atlas = ExtResource("3_1tta6") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m7ilu"] +atlas = ExtResource("3_1tta6") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_w1mec"] +atlas = ExtResource("3_1tta6") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_gcmwu"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_mcb3o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l8lnp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_so4um") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_sel7y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iumxh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jb6hd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5xoy6") +}], +"loop": true, +"name": &"default", +"speed": 7.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_a5ids") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x2842") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ckp3b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_b6w7a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m7ilu") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_w1mec") +}], +"loop": false, +"name": &"die", +"speed": 7.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_00lvq"] +radius = 25.1794 + +[node name="Shield" type="AnimatableBody2D" groups=["destructible"]] +scale = Vector2(3, 3) +script = ExtResource("1_ni0ln") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_gcmwu") +animation = &"die" +autoplay = "default" + +[node name="Collider" type="CollisionShape2D" parent="."] +position = Vector2(-1, 0) +shape = SubResource("CircleShape2D_00lvq") + +[connection signal="animation_finished" from="AnimatedSprite2D" to="." method="queue_free"] diff --git a/shield_bullet.gd b/shield_bullet.gd new file mode 100644 index 0000000..b76dc5a --- /dev/null +++ b/shield_bullet.gd @@ -0,0 +1,29 @@ +extends RigidBody2D + +@onready var player = $"../Player" + +var shield_scene = preload("res://shield.tscn") + +func _physics_process(delta): + rotation = linear_velocity.angle() + #if linear_velocity.length() < 1100: + # apply_central_force((global_position - player.global_position).normalized() * -200) + +func hit(body): + if body.is_in_group("destructible") and body.name != "Shield": + + var shield = shield_scene.instantiate() + + + if body.has_node("ShieldMarker"): + shield.scale = Vector2.ONE + body.get_node("ShieldMarker").add_child(shield) + else: + body.add_child(shield) + + shield.position = Vector2.ZERO + + queue_free() + + else: + queue_free() From 84ca23f486edbf65fe9d9fe23e63a3949dc5a51e Mon Sep 17 00:00:00 2001 From: Ultrablob Date: Thu, 6 Feb 2025 10:40:18 -0500 Subject: [PATCH 2/4] Added eart --- eart.gd | 2 +- eart.tscn | 1 - main.gd | 2 +- main.tscn | 6 +-- main_menu.tscn | 4 +- player-row.tscn | 1 - player-shield.gd | 4 ++ player-shield.tscn | 125 +++++++++++++++++++++++++++++++++++++++++++++ player.gd | 7 ++- project.godot | 30 +++++------ shield bullet.tscn | 2 +- shield.gd | 4 +- shield.tscn | 5 +- shield_bullet.gd | 18 ++++++- tar.tscn | 2 +- 15 files changed, 180 insertions(+), 33 deletions(-) create mode 100644 player-shield.gd create mode 100644 player-shield.tscn diff --git a/eart.gd b/eart.gd index ebffe73..7ebf226 100644 --- a/eart.gd +++ b/eart.gd @@ -16,7 +16,7 @@ func shoot(): $Turret.target = find_target() - $ShootTimer.start(1) + #$ShootTimer.start(1) func find_target(): diff --git a/eart.tscn b/eart.tscn index 9d700f2..6541a8f 100644 --- a/eart.tscn +++ b/eart.tscn @@ -140,7 +140,6 @@ radius = 44.1475 script = ExtResource("1_xkxbf") [node name="ShootTimer" type="Timer" parent="."] -one_shot = true autostart = true [node name="Turret" type="Node2D" parent="."] diff --git a/main.gd b/main.gd index 88d0c28..7baf6c7 100644 --- a/main.gd +++ b/main.gd @@ -5,7 +5,7 @@ var config = ConfigFile.new() func _init(): if OS.is_debug_build(): - Engine.set_time_scale(0.25) + Engine.set_time_scale(1) if config.load("user://settings.cfg") == OK: var player = load(config.get_value("gameplay", "class", "res://player-row.tscn")).instantiate() diff --git a/main.tscn b/main.tscn index 0300133..1e45ebb 100644 --- a/main.tscn +++ b/main.tscn @@ -12,12 +12,12 @@ [ext_resource type="Texture2D" uid="uid://yvrhlh04k8w1" path="res://background space.png" id="6_yg4g1"] [ext_resource type="Script" path="res://wave_enemy.gd" id="7_54h7d"] [ext_resource type="Texture2D" uid="uid://cwquv3mq5kk1d" path="res://countdown-spritesheet.png" id="8_e1eub"] -[ext_resource type="Resource" uid="uid://dd8me0deake37" path="res://eptagon_enemy.tres" id="9_q67ak"] +[ext_resource type="Resource" uid="uid://ba01r62bwm6av" path="res://eptagon_enemy.tres" id="9_q67ak"] [ext_resource type="Resource" uid="uid://c805aej5v7cvr" path="res://eart.tres" id="10_jib8h"] [ext_resource type="AudioStream" uid="uid://dn65uapn0wsok" path="res://impactMetal_002.ogg" id="11_acuni"] [ext_resource type="Script" path="res://CollisionCheck.gd" id="11_ryeyk"] [ext_resource type="FontFile" uid="uid://bnguin7bsyx6e" path="res://Kenney Future.ttf" id="11_s4q6p"] -[ext_resource type="Texture2D" uid="uid://bvpoajwx0yw3y" path="res://Circle.png" id="13_318fy"] +[ext_resource type="Texture2D" uid="uid://cso5ufbf7u7oj" path="res://Circle.png" id="13_318fy"] [ext_resource type="Script" path="res://Notification.gd" id="13_lkv81"] [ext_resource type="Script" path="res://Stopwatch.gd" id="13_xhnp2"] [ext_resource type="Script" path="res://Leaderboard.gd" id="14_v1elq"] @@ -670,7 +670,7 @@ script = ExtResource("1_3dydx") script = ExtResource("1_ifu8g") waves = Array[ExtResource("4_um0x7")]([SubResource("Resource_ur7l5"), SubResource("Resource_kupyp"), SubResource("Resource_o8cet"), SubResource("Resource_0cevq"), SubResource("Resource_eppj0"), SubResource("Resource_rpu1y"), SubResource("Resource_4b1vo"), SubResource("Resource_gg7kj"), SubResource("Resource_fjkob"), SubResource("Resource_5sdy5"), SubResource("Resource_61v84"), SubResource("Resource_82qld"), SubResource("Resource_2j32b")]) wave_label = NodePath("../UI/Wave Count") -start_wave = 8 +start_wave = 10 [node name="Timer" type="Timer" parent="Spawner"] wait_time = 0.1 diff --git a/main_menu.tscn b/main_menu.tscn index 37e837c..c0e6a86 100644 --- a/main_menu.tscn +++ b/main_menu.tscn @@ -161,9 +161,9 @@ text = "Movement " layout_mode = 2 theme_override_fonts/font = ExtResource("4_ybv7t") theme_override_font_sizes/font_size = 54 -selected = 0 item_count = 2 popup/item_0/text = "Relative" +popup/item_0/id = 0 popup/item_1/text = "Absolute" popup/item_1/id = 1 @@ -179,9 +179,9 @@ text = "CLASS" layout_mode = 2 theme_override_fonts/font = ExtResource("4_ybv7t") theme_override_font_sizes/font_size = 54 -selected = 0 item_count = 3 popup/item_0/text = "Row" +popup/item_0/id = 0 popup/item_1/text = "Ite" popup/item_1/id = 1 popup/item_2/text = "Iamond" diff --git a/player-row.tscn b/player-row.tscn index 6faa3c8..ef435b8 100644 --- a/player-row.tscn +++ b/player-row.tscn @@ -207,5 +207,4 @@ stream = ExtResource("4_lwgj5") bus = &"SFX" [node name="ShieldMarker" type="Marker2D" parent="." index="5"] -position = Vector2(4, 0) scale = Vector2(1.5, 1.5) diff --git a/player-shield.gd b/player-shield.gd new file mode 100644 index 0000000..dd0c732 --- /dev/null +++ b/player-shield.gd @@ -0,0 +1,4 @@ +extends CollisionShape2D + +func destroy(): + $AnimatedSprite2D.play("die") diff --git a/player-shield.tscn b/player-shield.tscn new file mode 100644 index 0000000..6746af2 --- /dev/null +++ b/player-shield.tscn @@ -0,0 +1,125 @@ +[gd_scene load_steps=19 format=3 uid="uid://b11jmnjkk6ibm"] + +[ext_resource type="Script" path="res://player-shield.gd" id="1_wq4q6"] +[ext_resource type="Texture2D" uid="uid://cc3nl13t7c4mj" path="res://eart-shield.png" id="2_iu5tn"] +[ext_resource type="Texture2D" uid="uid://dysewmpj8nvgx" path="res://eart-shield-break.png" id="3_yw3j3"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_0lade"] +radius = 24.3425 + +[sub_resource type="AtlasTexture" id="AtlasTexture_mcb3o"] +atlas = ExtResource("2_iu5tn") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l8lnp"] +atlas = ExtResource("2_iu5tn") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_so4um"] +atlas = ExtResource("2_iu5tn") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_sel7y"] +atlas = ExtResource("2_iu5tn") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iumxh"] +atlas = ExtResource("2_iu5tn") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jb6hd"] +atlas = ExtResource("2_iu5tn") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5xoy6"] +atlas = ExtResource("2_iu5tn") +region = Rect2(384, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a5ids"] +atlas = ExtResource("3_yw3j3") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x2842"] +atlas = ExtResource("3_yw3j3") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ckp3b"] +atlas = ExtResource("3_yw3j3") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_b6w7a"] +atlas = ExtResource("3_yw3j3") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m7ilu"] +atlas = ExtResource("3_yw3j3") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_w1mec"] +atlas = ExtResource("3_yw3j3") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_gcmwu"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_mcb3o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l8lnp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_so4um") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_sel7y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iumxh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jb6hd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5xoy6") +}], +"loop": true, +"name": &"default", +"speed": 7.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_a5ids") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x2842") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ckp3b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_b6w7a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m7ilu") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_w1mec") +}], +"loop": false, +"name": &"die", +"speed": 7.0 +}] + +[node name="Shield" type="CollisionShape2D" groups=["destructible"]] +scale = Vector2(3, 3) +shape = SubResource("CircleShape2D_0lade") +script = ExtResource("1_wq4q6") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_gcmwu") +autoplay = "default" +frame = 4 +frame_progress = 0.495833 + +[connection signal="animation_finished" from="AnimatedSprite2D" to="." method="queue_free"] diff --git a/player.gd b/player.gd index edd0bbf..3785928 100644 --- a/player.gd +++ b/player.gd @@ -27,10 +27,10 @@ func _physics_process(delta): return var move_input = Input.get_axis("down", "up") var side_input = Input.get_axis("right", "left") - if move_input > 0 and not moving: + if move_input != 0 or side_input != 0: moving = true update_animation() - elif move_input <= 0 and moving: + else: moving = false update_animation() @@ -40,6 +40,9 @@ func _physics_process(delta): apply_central_force(transform.y * side_input * speed / -2 + transform.x * move_input * speed * linear_damp) func destroy(): + if has_node("Shield"): + $Shield.destroy() + return $DeathFX.play() get_tree().paused = true $"../GameOver".visible = true diff --git a/project.godot b/project.godot index e13206e..b38e186 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="Countdown" run/main_scene="res://main_menu.tscn" -config/features=PackedStringArray("4.3", "GL Compatibility") +config/features=PackedStringArray("4.2", "GL Compatibility") run/max_fps=60 config/icon="res://icon.svg" @@ -37,58 +37,58 @@ enemy="Enemies" up={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) ] } down={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) ] } left={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) ] } right={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) ] } restart={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null) ] } jump={ "deadzone": 0.5, "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(130, 40),"global_position":Vector2(138, 120),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null) ] } quare={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null) ] } exagon={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null) ] } quit={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) ] } shoot={ "deadzone": 0.5, "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(91, 32),"global_position":Vector2(99, 112),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null) ] } diff --git a/shield bullet.tscn b/shield bullet.tscn index d9542f2..4e82d6f 100644 --- a/shield bullet.tscn +++ b/shield bullet.tscn @@ -55,8 +55,8 @@ radius = 30.0 collision_layer = 2 physics_material_override = SubResource("PhysicsMaterial_xnhwp") gravity_scale = 1.66533e-16 -contact_monitor = true max_contacts_reported = 1 +contact_monitor = true linear_velocity = Vector2(2.08165e-12, 2.08165e-12) script = ExtResource("1_dsvm1") diff --git a/shield.gd b/shield.gd index c37ac2a..12a1ee6 100644 --- a/shield.gd +++ b/shield.gd @@ -1,4 +1,4 @@ -extends PhysicsBody2D +extends Node2D #! egregious code @@ -13,7 +13,7 @@ func _ready() -> void: if find_collisionshape(): print(find_collisionshape().get_parent().name) find_collisionshape().set_deferred("disabled", true) - #$Collider.set_deferred("disabled", false) + $Collider.set_deferred("disabled", false) func destroy(): if find_collisionshape(): diff --git a/shield.tscn b/shield.tscn index 1b8347c..9524d4d 100644 --- a/shield.tscn +++ b/shield.tscn @@ -111,8 +111,8 @@ animations = [{ [sub_resource type="CircleShape2D" id="CircleShape2D_00lvq"] radius = 25.1794 -[node name="Shield" type="AnimatableBody2D" groups=["destructible"]] -scale = Vector2(3, 3) +[node name="Shield" type="StaticBody2D" groups=["destructible"]] +scale = Vector2(3.5, 3.5) script = ExtResource("1_ni0ln") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] @@ -123,5 +123,6 @@ autoplay = "default" [node name="Collider" type="CollisionShape2D" parent="."] position = Vector2(-1, 0) shape = SubResource("CircleShape2D_00lvq") +disabled = true [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="queue_free"] diff --git a/shield_bullet.gd b/shield_bullet.gd index b76dc5a..a315d78 100644 --- a/shield_bullet.gd +++ b/shield_bullet.gd @@ -3,6 +3,7 @@ extends RigidBody2D @onready var player = $"../Player" var shield_scene = preload("res://shield.tscn") +var player_shield = preload("res://player-shield.tscn") func _physics_process(delta): rotation = linear_velocity.angle() @@ -14,8 +15,23 @@ func hit(body): var shield = shield_scene.instantiate() + if body.has_node("Shield"): + queue_free() + return - if body.has_node("ShieldMarker"): + if body.name == "Player": + shield = player_shield.instantiate() + var marker = body.get_node("ShieldMarker") + + shield.position = marker.position + shield.scale = marker.scale + + body.add_child(shield) + + elif body.has_node("ShieldMarker"): + if body.get_node("ShieldMarker").has_node("Shield"): + queue_free() + return shield.scale = Vector2.ONE body.get_node("ShieldMarker").add_child(shield) else: diff --git a/tar.tscn b/tar.tscn index 4044f7a..d5593c0 100644 --- a/tar.tscn +++ b/tar.tscn @@ -467,8 +467,8 @@ animations = [{ position = Vector2(386, 292) gravity_scale = 1.66533e-16 freeze = true -contact_monitor = true max_contacts_reported = 5 +contact_monitor = true linear_damp = 2.0 script = ExtResource("1_7s3by") From a1a01711ecb1f9e474a039c19f1134fd33192f41 Mon Sep 17 00:00:00 2001 From: Ultrablob Date: Thu, 6 Feb 2025 13:13:17 -0500 Subject: [PATCH 3/4] minor changes --- shield.gd | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 shield.gd diff --git a/shield.gd b/shield.gd deleted file mode 100644 index 12a1ee6..0000000 --- a/shield.gd +++ /dev/null @@ -1,21 +0,0 @@ -extends Node2D - -#! egregious code - -func find_collisionshape(): - if get_parent().name == "ShieldMarker": - return get_parent().get_parent().get_node("CollisionShape2D") - elif get_parent().has_node("CollisionShape2D"): - return get_parent().get_node("CollisionShape2D") - return null - -func _ready() -> void: - if find_collisionshape(): - print(find_collisionshape().get_parent().name) - find_collisionshape().set_deferred("disabled", true) - $Collider.set_deferred("disabled", false) - -func destroy(): - if find_collisionshape(): - find_collisionshape().set_deferred("disabled", false) - $AnimatedSprite2D.play("die") From f0c26f6c10aa93fb796bf7287fcbdf9a27e1406c Mon Sep 17 00:00:00 2001 From: Ultrablob Date: Thu, 6 Feb 2025 13:13:44 -0500 Subject: [PATCH 4/4] change stuff --- bullet.tscn | 2 +- entagon.tscn | 2 +- main.tscn | 5 ++--- main_menu.tscn | 4 +--- tar.tscn | 2 +- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/bullet.tscn b/bullet.tscn index 45568ea..2398538 100644 --- a/bullet.tscn +++ b/bullet.tscn @@ -55,8 +55,8 @@ radius = 30.0 collision_layer = 2 physics_material_override = SubResource("PhysicsMaterial_xnhwp") gravity_scale = 1.66533e-16 -max_contacts_reported = 1 contact_monitor = true +max_contacts_reported = 1 linear_velocity = Vector2(2.08165e-12, 2.08165e-12) script = ExtResource("1_3q13i") diff --git a/entagon.tscn b/entagon.tscn index 8106dd9..4d15de3 100644 --- a/entagon.tscn +++ b/entagon.tscn @@ -65,8 +65,8 @@ radius = 30.0 collision_mask = 0 physics_material_override = SubResource("PhysicsMaterial_odemo") gravity_scale = 1.66533e-16 -max_contacts_reported = 2 contact_monitor = true +max_contacts_reported = 2 linear_damp = 3.0 angular_velocity = 0.174533 script = ExtResource("1_726g8") diff --git a/main.tscn b/main.tscn index 1e45ebb..f39d532 100644 --- a/main.tscn +++ b/main.tscn @@ -13,7 +13,7 @@ [ext_resource type="Script" path="res://wave_enemy.gd" id="7_54h7d"] [ext_resource type="Texture2D" uid="uid://cwquv3mq5kk1d" path="res://countdown-spritesheet.png" id="8_e1eub"] [ext_resource type="Resource" uid="uid://ba01r62bwm6av" path="res://eptagon_enemy.tres" id="9_q67ak"] -[ext_resource type="Resource" uid="uid://c805aej5v7cvr" path="res://eart.tres" id="10_jib8h"] +[ext_resource type="Resource" path="res://eart.tres" id="10_jib8h"] [ext_resource type="AudioStream" uid="uid://dn65uapn0wsok" path="res://impactMetal_002.ogg" id="11_acuni"] [ext_resource type="Script" path="res://CollisionCheck.gd" id="11_ryeyk"] [ext_resource type="FontFile" uid="uid://bnguin7bsyx6e" path="res://Kenney Future.ttf" id="11_s4q6p"] @@ -129,7 +129,7 @@ wait_for_killed = true [sub_resource type="Resource" id="Resource_2j32b"] script = ExtResource("4_um0x7") -enemies = Array[ExtResource("7_54h7d")]([ExtResource("5_e24vf"), ExtResource("9_q67ak")]) +enemies = Array[ExtResource("7_54h7d")]([ExtResource("5_xdrk0"), ExtResource("9_q67ak")]) quantities = Array[int]([2, 2]) spawning_duration = 10.0 wait = 3.0 @@ -670,7 +670,6 @@ script = ExtResource("1_3dydx") script = ExtResource("1_ifu8g") waves = Array[ExtResource("4_um0x7")]([SubResource("Resource_ur7l5"), SubResource("Resource_kupyp"), SubResource("Resource_o8cet"), SubResource("Resource_0cevq"), SubResource("Resource_eppj0"), SubResource("Resource_rpu1y"), SubResource("Resource_4b1vo"), SubResource("Resource_gg7kj"), SubResource("Resource_fjkob"), SubResource("Resource_5sdy5"), SubResource("Resource_61v84"), SubResource("Resource_82qld"), SubResource("Resource_2j32b")]) wave_label = NodePath("../UI/Wave Count") -start_wave = 10 [node name="Timer" type="Timer" parent="Spawner"] wait_time = 0.1 diff --git a/main_menu.tscn b/main_menu.tscn index c0e6a86..7e447e5 100644 --- a/main_menu.tscn +++ b/main_menu.tscn @@ -163,7 +163,6 @@ theme_override_fonts/font = ExtResource("4_ybv7t") theme_override_font_sizes/font_size = 54 item_count = 2 popup/item_0/text = "Relative" -popup/item_0/id = 0 popup/item_1/text = "Absolute" popup/item_1/id = 1 @@ -181,7 +180,6 @@ theme_override_fonts/font = ExtResource("4_ybv7t") theme_override_font_sizes/font_size = 54 item_count = 3 popup/item_0/text = "Row" -popup/item_0/id = 0 popup/item_1/text = "Ite" popup/item_1/id = 1 popup/item_2/text = "Iamond" @@ -325,8 +323,8 @@ bus = &"Music" [connection signal="pressed" from="Layout/Play" to="." method="play"] [connection signal="pressed" from="Layout/Settings" to="Settings Panel" method="show"] [connection signal="pressed" from="Layout/Tutorial" to="Tutorial Text" method="show"] -[connection signal="pressed" from="Settings Panel/Close" to="Settings Panel" method="save"] [connection signal="pressed" from="Settings Panel/Close" to="Settings Panel" method="hide"] +[connection signal="pressed" from="Settings Panel/Close" to="Settings Panel" method="save"] [connection signal="text_changed" from="Settings Panel/Menu/Username" to="Settings Panel" method="check_valid"] [connection signal="text_changed" from="Settings Panel/Menu/Username" to="Settings Panel/Menu/Username" method="check"] [connection signal="value_changed" from="Settings Panel/Menu/MusicVolume" to="Settings Panel/Menu/MusicVolume" method="_on_value_changed"] diff --git a/tar.tscn b/tar.tscn index d5593c0..4044f7a 100644 --- a/tar.tscn +++ b/tar.tscn @@ -467,8 +467,8 @@ animations = [{ position = Vector2(386, 292) gravity_scale = 1.66533e-16 freeze = true -max_contacts_reported = 5 contact_monitor = true +max_contacts_reported = 5 linear_damp = 2.0 script = ExtResource("1_7s3by")