summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project.godot3
-rw-r--r--scenes/L1.tscn2
-rw-r--r--scenes/Main.tscn (renamed from Main.tscn)19
-rw-r--r--scenes/crawlers/soldier.gd6
-rw-r--r--scenes/defenders/warlock.gd37
-rw-r--r--scenes/defenders/warlock.gd.uid1
-rw-r--r--scenes/defenders/warlock.tscn40
-rw-r--r--scenes/defenders/warlock_projectile.gd27
-rw-r--r--scenes/defenders/warlock_projectile.gd.uid1
-rw-r--r--scenes/defenders/warlock_projectile.tscn28
-rw-r--r--scenes/levels/L1.tscn6
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")]