diff options
author | bd <bdunahu@operationnull.com> | 2025-05-20 14:00:43 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-20 14:00:43 -0400 |
commit | 5daf4cc09c6fb40729607138260cc10acb422477 (patch) | |
tree | e2789eba02b7c109215e63740dfe47304cd4bff7 | |
parent | 142ae6688ff54c91944e61407572cc64a2a9b003 (diff) |
Fix a few bugs, add Warlock tower, enemy health, fire-rate...
-rw-r--r-- | project.godot | 3 | ||||
-rw-r--r-- | scenes/L1.tscn | 2 | ||||
-rw-r--r-- | scenes/Main.tscn (renamed from Main.tscn) | 19 | ||||
-rw-r--r-- | scenes/crawlers/soldier.gd | 6 | ||||
-rw-r--r-- | scenes/defenders/warlock.gd | 37 | ||||
-rw-r--r-- | scenes/defenders/warlock.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/warlock.tscn | 40 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.gd | 27 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.tscn | 28 | ||||
-rw-r--r-- | scenes/levels/L1.tscn | 6 |
11 files changed, 161 insertions, 9 deletions
diff --git a/project.godot b/project.godot index 8dcf514..e1c8696 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="pixel-defense-2" -run/main_scene="uid://b5axbupv3ofi5" +run/main_scene="uid://chwnewu8l45kj" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg" @@ -19,6 +19,7 @@ config/icon="res://icon.svg" window/size/viewport_width=320 window/size/viewport_height=240 +window/size/mode=2 window/stretch/mode="viewport" [rendering] diff --git a/scenes/L1.tscn b/scenes/L1.tscn index 46d359c..5a1bba8 100644 --- a/scenes/L1.tscn +++ b/scenes/L1.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=4 uid="uid://b5axbupv3ofi5"] +[gd_scene load_steps=6 format=4 uid="uid://diyn84ax1s7y8"] [ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="1_crqkg"] [ext_resource type="PackedScene" uid="uid://rp5orgc6ae7j" path="res://scenes/crawlers/soldier.tscn" id="2_vye67"] diff --git a/Main.tscn b/scenes/Main.tscn index 9a40bea..a7af970 100644 --- a/Main.tscn +++ b/scenes/Main.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=5 format=4 uid="uid://5v6e2wimub5w"] +[gd_scene load_steps=6 format=4 uid="uid://chwnewu8l45kj"] [ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="1_rvslj"] -[ext_resource type="Script" uid="uid://i5bjnah05h14" path="res://path_spawner.gd" id="2_uu6xs"] +[ext_resource type="Script" uid="uid://i5bjnah05h14" path="res://path_spawner.gd" id="2_0bbpv"] +[ext_resource type="PackedScene" uid="uid://d27cf3jwfvbqu" path="res://scenes/defenders/warlock.tscn" id="3_0bbpv"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tjuek"] texture = ExtResource("1_rvslj") @@ -1093,9 +1094,21 @@ tile_map_data = PackedByteArray("AAAAAAoAAAAIAAEAAGABAAoAAAAIAAEAAGACAAoAAAAIAAE tile_set = SubResource("TileSet_47enk") [node name="PathSpawner" type="Node2D" parent="."] -script = ExtResource("2_uu6xs") +script = ExtResource("2_0bbpv") [node name="Timer" type="Timer" parent="PathSpawner"] +wait_time = 2.0 autostart = true +[node name="Warlock" parent="PathSpawner" instance=ExtResource("3_0bbpv")] +position = Vector2(248, 40) + +[node name="Defenders" type="Node" parent="."] + +[node name="Warlock" parent="Defenders" instance=ExtResource("3_0bbpv")] +position = Vector2(168, 136) + +[node name="Warlock" parent="." instance=ExtResource("3_0bbpv")] +position = Vector2(88, 88) + [connection signal="timeout" from="PathSpawner/Timer" to="PathSpawner" method="_on_timer_timeout"] diff --git a/scenes/crawlers/soldier.gd b/scenes/crawlers/soldier.gd index 7cf68a2..2db3f60 100644 --- a/scenes/crawlers/soldier.gd +++ b/scenes/crawlers/soldier.gd @@ -1,8 +1,12 @@ extends CharacterBody2D -@export var speed = 30.0 +@export var speed = 50.0 +@export var health = 40 func _process(delta): get_parent().set_progress(get_parent().get_progress() + speed * delta) if get_parent().get_progress_ratio() == 1: queue_free() + + if health <= 0: + queue_free() diff --git a/scenes/defenders/warlock.gd b/scenes/defenders/warlock.gd new file mode 100644 index 0000000..18803be --- /dev/null +++ b/scenes/defenders/warlock.gd @@ -0,0 +1,37 @@ +extends StaticBody2D + +@export var projectile_damage = 5 + +var projectile = preload("res://scenes/defenders/warlock_projectile.tscn") +var path_name + +func select_target(targets): + var tmp = [] + for i in targets: + if "Crawler" in i.name: + tmp.append(i) + + # this is all to select the furthest target on the track + var curr = null + for i in tmp: + if curr == null: + curr = i.get_node("../") + else: + if i.get_parent().get_progress() > curr.get_progress(): + curr = i.get_node("../") + path_name = null if (curr == null) else curr.get_parent().name + +func _on_tower_body_entered(body: Node2D): + if "CrawlerSoldier" in body.name: + select_target(get_node("Tower").get_overlapping_bodies()) + +func _on_tower_body_exited(_body: Node2D): + select_target(get_node("Tower").get_overlapping_bodies()) + +func _on_fire_rate_timeout(): + if (path_name != null): + var tmp_projectile = projectile.instantiate() + tmp_projectile.path_name = path_name + tmp_projectile.projectile_damage = projectile_damage + get_node("ProjectileContainer").call_deferred("add_child", tmp_projectile) + tmp_projectile.global_position = $Aim.global_position diff --git a/scenes/defenders/warlock.gd.uid b/scenes/defenders/warlock.gd.uid new file mode 100644 index 0000000..64a7007 --- /dev/null +++ b/scenes/defenders/warlock.gd.uid @@ -0,0 +1 @@ +uid://dvhqpgw6vhayu diff --git a/scenes/defenders/warlock.tscn b/scenes/defenders/warlock.tscn new file mode 100644 index 0000000..7b097c5 --- /dev/null +++ b/scenes/defenders/warlock.tscn @@ -0,0 +1,40 @@ +[gd_scene load_steps=5 format=3 uid="uid://d27cf3jwfvbqu"] + +[ext_resource type="Script" uid="uid://dvhqpgw6vhayu" path="res://scenes/defenders/warlock.gd" id="1_rpypk"] +[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="1_wu3n4"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wu3n4"] +size = Vector2(16, 16) + +[sub_resource type="CircleShape2D" id="CircleShape2D_rpypk"] +radius = 64.0 + +[node name="Warlock" type="StaticBody2D"] +script = ExtResource("1_rpypk") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_wu3n4") +disabled = true + +[node name="Aim" type="Marker2D" parent="."] +position = Vector2(6, -5) + +[node name="Tower" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Tower"] +shape = SubResource("CircleShape2D_rpypk") + +[node name="ProjectileContainer" type="Node" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_wu3n4") +region_enabled = true +region_rect = Rect2(496, 16, 16, 16) + +[node name="FireRate" type="Timer" parent="."] +wait_time = 0.75 +autostart = true + +[connection signal="body_entered" from="Tower" to="." method="_on_tower_body_entered"] +[connection signal="body_exited" from="Tower" to="." method="_on_tower_body_exited"] +[connection signal="timeout" from="FireRate" to="." method="_on_fire_rate_timeout"] diff --git a/scenes/defenders/warlock_projectile.gd b/scenes/defenders/warlock_projectile.gd new file mode 100644 index 0000000..b46ed29 --- /dev/null +++ b/scenes/defenders/warlock_projectile.gd @@ -0,0 +1,27 @@ +extends CharacterBody2D + +var target +var speed = 300 +var path_name = "" +var projectile_damage + +func _physics_process(_delta: float): + var path_spawner_node = get_tree().get_root().get_node("Main/PathSpawner") + for i in path_spawner_node.get_child_count(): + if path_spawner_node.get_child(i).name == path_name: + target = path_spawner_node.get_child(i).get_child(0).get_child(0) + + # another tower destroyed this target + if !is_instance_valid(target): + queue_free() + else: + target = target.global_position + velocity = global_position.direction_to(target) * speed + look_at(target) + move_and_slide() + + +func _on_area_2d_body_entered(body: Node2D): + if "CrawlerSoldier" in body.name: + body.health -= projectile_damage + queue_free() diff --git a/scenes/defenders/warlock_projectile.gd.uid b/scenes/defenders/warlock_projectile.gd.uid new file mode 100644 index 0000000..3225e3e --- /dev/null +++ b/scenes/defenders/warlock_projectile.gd.uid @@ -0,0 +1 @@ +uid://kolqesiin33p diff --git a/scenes/defenders/warlock_projectile.tscn b/scenes/defenders/warlock_projectile.tscn new file mode 100644 index 0000000..ab71e50 --- /dev/null +++ b/scenes/defenders/warlock_projectile.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=3 uid="uid://bjt768hxqfu5h"] + +[ext_resource type="Script" uid="uid://kolqesiin33p" path="res://scenes/defenders/warlock_projectile.gd" id="1_jonmr"] +[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="2_c7g7q"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_0ilu8"] +radius = 8.0 + +[node name="WarlockBullet" type="CharacterBody2D"] +script = ExtResource("1_jonmr") + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_c7g7q") +region_enabled = true +region_rect = Rect2(432, 320, 16, 16) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +scale = Vector2(0.2, 0.2) +shape = SubResource("CircleShape2D_0ilu8") + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +scale = Vector2(0.3, 0.3) +shape = SubResource("CircleShape2D_0ilu8") + +[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] diff --git a/scenes/levels/L1.tscn b/scenes/levels/L1.tscn index 0f386b6..323ba6f 100644 --- a/scenes/levels/L1.tscn +++ b/scenes/levels/L1.tscn @@ -4,15 +4,15 @@ [sub_resource type="Curve2D" id="Curve2D_tjuek"] _data = { -"points": PackedVector2Array(0, 0, 0, 0, -8, 168, 0, 0, 0, 0, -8, 168, 0, 0, 0, 0, 248, 168, 0, 0, 0, 0, 248, 104, 0, 0, 0, 0, 72, 104, 0, 0, 0, 0, 72, 56, 0, 0, 0, 0, 328, 56) +"points": PackedVector2Array(0, 0, 0, 0, -8, 168, 0, 0, 0, 0, 248, 168, 0, 0, 0, 0, 248, 104, 0, 0, 0, 0, 72, 104, 0, 0, 0, 0, 72, 56, 0, 0, 0, 0, 328, 56) } -point_count = 7 +point_count = 6 [node name="Path2D" type="Path2D"] curve = SubResource("Curve2D_tjuek") [node name="PathFollow2D" type="PathFollow2D" parent="."] -position = Vector2(-8.17969, 168) +position = Vector2(-8, 168) loop = false [node name="CrawlerSoldier" parent="PathFollow2D" instance=ExtResource("1_mao1c")] |