From c278c21c5019b2e82651fec10b819c3b29b8ff7d Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 23 May 2025 14:54:48 -0400 Subject: Add gnome enemy, re-sprite wyvern --- assets/tilemap.png | Bin 25276 -> 25287 bytes assets/tilemap.xcf | Bin 225948 -> 226488 bytes resources/game_stats_config.tres | 14 +++++++++----- scenes/Main.tscn | 1 - scenes/gnome.tscn | 18 ++++++++++++++++++ scenes/soldier.tscn | 2 +- scenes/wyvern.tscn | 2 +- scripts/base_crawler.gd | 2 +- scripts/game_stats_config.gd | 15 ++++++++++----- scripts/gnome.gd | 11 +++++++++++ scripts/gnome.gd.uid | 1 + scripts/morale.gd | 2 +- scripts/wave_spawner.gd | 15 ++++++++------- 13 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 scenes/gnome.tscn create mode 100644 scripts/gnome.gd create mode 100644 scripts/gnome.gd.uid diff --git a/assets/tilemap.png b/assets/tilemap.png index 6cf523b..f1ad202 100644 Binary files a/assets/tilemap.png and b/assets/tilemap.png differ diff --git a/assets/tilemap.xcf b/assets/tilemap.xcf index 76df246..4a972a8 100644 Binary files a/assets/tilemap.xcf and b/assets/tilemap.xcf 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) -- cgit v1.2.3