summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-05-23 14:54:48 -0400
committerbd <bdunahu@operationnull.com>2025-05-23 14:54:48 -0400
commitc278c21c5019b2e82651fec10b819c3b29b8ff7d (patch)
tree3806d4f4510e8f64df3ca15da024e905e163da74
parent3e15dfe033217d16e3198f044dd717408553218c (diff)
Add gnome enemy, re-sprite wyvern
-rw-r--r--assets/tilemap.pngbin25276 -> 25287 bytes
-rw-r--r--assets/tilemap.xcfbin225948 -> 226488 bytes
-rw-r--r--resources/game_stats_config.tres14
-rw-r--r--scenes/Main.tscn1
-rw-r--r--scenes/gnome.tscn18
-rw-r--r--scenes/soldier.tscn2
-rw-r--r--scenes/wyvern.tscn2
-rw-r--r--scripts/base_crawler.gd2
-rw-r--r--scripts/game_stats_config.gd15
-rw-r--r--scripts/gnome.gd11
-rw-r--r--scripts/gnome.gd.uid1
-rw-r--r--scripts/morale.gd2
-rw-r--r--scripts/wave_spawner.gd15
13 files changed, 61 insertions, 22 deletions
diff --git a/assets/tilemap.png b/assets/tilemap.png
index 6cf523b..f1ad202 100644
--- a/assets/tilemap.png
+++ b/assets/tilemap.png
Binary files differ
diff --git a/assets/tilemap.xcf b/assets/tilemap.xcf
index 76df246..4a972a8 100644
--- a/assets/tilemap.xcf
+++ b/assets/tilemap.xcf
Binary files differ
diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres
index 1a5d450..5098d3d 100644
--- a/resources/game_stats_config.tres
+++ b/resources/game_stats_config.tres
@@ -6,11 +6,11 @@
script = ExtResource("1_t0c0a")
starting_life = 15
starting_morale = 10
-max_wave = 1
-wave_time = 40.0
-wave_targets = [25, 65]
-warlock_damage = 5.0
-warlock_fire_rate = 1.0
+max_wave = 3
+wave_time = 30.0
+wave_targets = [15, 40, 120]
+warlock_damage = 4.0
+warlock_fire_rate = 1.2
warlock_defender_range = 75.0
warlock_defender_cost = 10
wyvern_damage = 2.0
@@ -26,4 +26,8 @@ soldier_damage = 1.0
soldier_speed = 30.0
soldier_health = 35.0
soldier_worth = 5.0
+gnome_damage = 1.0
+gnome_speed = 90.0
+gnome_health = 8.0
+gnome_worth = 3.0
metadata/_custom_type_script = "uid://dndluiku7wdi8"
diff --git a/scenes/Main.tscn b/scenes/Main.tscn
index f18bbb2..404aafa 100644
--- a/scenes/Main.tscn
+++ b/scenes/Main.tscn
@@ -35,7 +35,6 @@ z_index = 2
script = ExtResource("2_0bbpv")
[node name="Timer" type="Timer" parent="PathSpawner"]
-wait_time = 2.0
autostart = true
[node name="Defenders" type="Node" parent="."]
diff --git a/scenes/gnome.tscn b/scenes/gnome.tscn
new file mode 100644
index 0000000..dbda07e
--- /dev/null
+++ b/scenes/gnome.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=4 format=3 uid="uid://devcq5vsnrrm7"]
+
+[ext_resource type="Script" uid="uid://ctq24sn8yo6me" path="res://scripts/gnome.gd" id="1_2fhd7"]
+[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="2_88agf"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_220eh"]
+radius = 8.06226
+
+[node name="CrawlerGnome" type="CharacterBody2D"]
+script = ExtResource("1_2fhd7")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_220eh")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("2_88agf")
+region_enabled = true
+region_rect = Rect2(416, 144, 16, 16)
diff --git a/scenes/soldier.tscn b/scenes/soldier.tscn
index d95d989..97a6394 100644
--- a/scenes/soldier.tscn
+++ b/scenes/soldier.tscn
@@ -6,7 +6,7 @@
[sub_resource type="CircleShape2D" id="CircleShape2D_220eh"]
radius = 8.06226
-[node name="CrawlerFodder" type="CharacterBody2D"]
+[node name="CrawlerSoldier" type="CharacterBody2D"]
script = ExtResource("1_q2rr1")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
diff --git a/scenes/wyvern.tscn b/scenes/wyvern.tscn
index b2ae554..a369573 100644
--- a/scenes/wyvern.tscn
+++ b/scenes/wyvern.tscn
@@ -17,7 +17,7 @@ shape = SubResource("RectangleShape2D_wu3n4")
disabled = true
[node name="Aim" type="Marker2D" parent="."]
-position = Vector2(7, -0.5)
+position = Vector2(6, 4)
[node name="Tower" type="Area2D" parent="."]
diff --git a/scripts/base_crawler.gd b/scripts/base_crawler.gd
index 3525e97..ffc726c 100644
--- a/scripts/base_crawler.gd
+++ b/scripts/base_crawler.gd
@@ -22,7 +22,7 @@ func _ready() -> void:
func _process(delta):
get_parent().set_progress(get_parent().get_progress() + speed * delta)
- if get_parent().get_progress_ratio() == 1:
+ if get_parent().get_progress_ratio() >= 1:
GameData.subtract_morale(damage)
queue_free()
diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd
index ccbcd16..bc79bdd 100644
--- a/scripts/game_stats_config.gd
+++ b/scripts/game_stats_config.gd
@@ -4,17 +4,17 @@ class_name GameStatsConfig
# game stats
@export var starting_life : int = 15
@export var starting_morale : int = 10
-@export var max_wave : int = 1
# waves
-@export var wave_time : float = 40.0
+@export var max_wave : int = 3
+@export var wave_time : float = 30.0
@export var wave_targets = [
- 25, 65
+ 15, 40, 120
]
# defenders
-@export var warlock_damage : float = 5.0
-@export var warlock_fire_rate : float = 1.0
+@export var warlock_damage : float = 4.0
+@export var warlock_fire_rate : float = 1.2
@export var warlock_defender_range : float = 75.0
@export var warlock_defender_cost : int = 10
@@ -34,3 +34,8 @@ class_name GameStatsConfig
@export var soldier_speed : float = 30.0
@export var soldier_health : float = 35.0
@export var soldier_worth : float = 5.0
+
+@export var gnome_damage : float = 1.0
+@export var gnome_speed : float = 90
+@export var gnome_health : float = 8.0
+@export var gnome_worth : float = 3.0
diff --git a/scripts/gnome.gd b/scripts/gnome.gd
new file mode 100644
index 0000000..308e5fc
--- /dev/null
+++ b/scripts/gnome.gd
@@ -0,0 +1,11 @@
+extends "res://scripts/base_crawler.gd"
+
+var game_stats_config = preload("res://resources/game_stats_config.tres")
+
+func _ready() -> void:
+ damage = game_stats_config.gnome_damage
+ speed = game_stats_config.gnome_speed
+ max_health = game_stats_config.gnome_health
+ worth = game_stats_config.gnome_worth
+
+ super()
diff --git a/scripts/gnome.gd.uid b/scripts/gnome.gd.uid
new file mode 100644
index 0000000..1253706
--- /dev/null
+++ b/scripts/gnome.gd.uid
@@ -0,0 +1 @@
+uid://ctq24sn8yo6me
diff --git a/scripts/morale.gd b/scripts/morale.gd
index d5a8046..613c7f5 100644
--- a/scripts/morale.gd
+++ b/scripts/morale.gd
@@ -4,7 +4,7 @@ func _ready():
GameData.connect("morale_changed", Callable(self, "_on_morale_changed"))
update_label(GameData.get_morale())
-func _on_life_changed(new_morale: int) -> void:
+func _on_morale_changed(new_morale: int) -> void:
update_label(new_morale)
func update_label(new_morale: int) -> void:
diff --git a/scripts/wave_spawner.gd b/scripts/wave_spawner.gd
index eea656f..725f3e1 100644
--- a/scripts/wave_spawner.gd
+++ b/scripts/wave_spawner.gd
@@ -4,6 +4,7 @@ extends Node2D
@onready var game_stats_config = preload("res://resources/game_stats_config.tres")
@onready var fodder_enemy = preload("res://scenes/fodder.tscn")
@onready var soldier_enemy = preload("res://scenes/soldier.tscn")
+@onready var gnome_enemy = preload("res://scenes/gnome.tscn")
@onready var map = get_node("../Map")
@onready var _wave_timer = $Timer
@@ -12,9 +13,11 @@ extends Node2D
func _ready() -> void:
_wave_pool = [
- [fodder_enemy , soldier_enemy],
+ [fodder_enemy, soldier_enemy],
+ [soldier_enemy, fodder_enemy, gnome_enemy],
+ [gnome_enemy, gnome_enemy],
]
- _wave_timer = game_stats_config.wave_time
+ _wave_timer.wait_time = game_stats_config.wave_time
var curve : Curve2D = Curve2D.new()
var points : Array[Vector2i] = map.get_enemy_path()
@@ -32,7 +35,7 @@ func _ready() -> void:
func _on_timer_timeout():
var current_wave : int = GameData.get_current_wave()
# TODO win screen should play instead
- if current_wave > 1:
+ if current_wave > game_stats_config.max_wave:
return
spawn_wave(current_wave)
@@ -41,7 +44,7 @@ func _on_timer_timeout():
func spawn_wave(current_wave):
var selected_crawlers: Array = []
var total_worth : int = 0
- var target_worth : int = game_stats_config.wave_targets[current_wave]
+ var target_worth : int = game_stats_config.wave_targets[current_wave - 1]
while total_worth < target_worth:
var crawler_type = _select_crawler(current_wave)
@@ -58,8 +61,7 @@ func spawn_wave(current_wave):
func _select_crawler(current_wave) -> PackedScene:
var curr_wave_pool = _wave_pool[current_wave - 1]
- print(curr_wave_pool)
- if randi() % 100 < 70:
+ if randi() % 100 < 80:
# spawn fodder
return curr_wave_pool[0]
else:
@@ -68,7 +70,6 @@ func _select_crawler(current_wave) -> PackedScene:
func _spawn_crawler(crawler : PackedScene):
var follow_path : PathFollow2D = PathFollow2D.new()
- follow_path.set_progress(0)
follow_path.rotates = false
follow_path.loop = false
_path.add_child(follow_path)