From c4f3d4e0f6cae35c020e888be5689181b25342c5 Mon Sep 17 00:00:00 2001 From: bd Date: Thu, 29 May 2025 18:29:15 -0400 Subject: Add the 'knight' crawler, more attempts to balance first waves --- resources/game_stats_config.tres | 40 +++++++++++++++++++++++----------------- scenes/knight.tscn | 15 +++++++++++++++ scripts/game_data.gd | 2 +- scripts/game_stats_config.gd | 39 +++++++++++++++++++++++---------------- scripts/wave_spawner.gd | 2 ++ 5 files changed, 64 insertions(+), 34 deletions(-) create mode 100644 scenes/knight.tscn diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres index f2ade17..375efbd 100644 --- a/resources/game_stats_config.tres +++ b/resources/game_stats_config.tres @@ -4,17 +4,16 @@ [resource] script = ExtResource("1_t0c0a") -starting_life = 40 +starting_life = 15 starting_morale = 10 wave_data = [{ 15: { -"fodder": 5 +"fodder": 4 }, 27: { -"fodder": 8 +"fodder": 5 }, 30: { -"fodder": 1, "soldier": 2 } }, { @@ -29,17 +28,17 @@ wave_data = [{ "soldier": 6 }, 30: { -"fodder": 5 +"fodder": 6 } }, { 7: { -"gnome": 10 +"gnome": 6 }, 14: { -"soldier": 4 +"knight": 4 }, 30: { -"gnome": 6, +"gnome": 4, "soldier": 8 } }] @@ -48,7 +47,7 @@ defenders = Array[Dictionary]([{ "cost": 10, "damage": 4.0, "desc": "Warlock", -"fire_rate": 1.2, +"fire_rate": 1.1, "is_valid": true, "max_projectile_lifetime": 7.5, "projectile_speed": 125, @@ -84,7 +83,7 @@ defenders = Array[Dictionary]([{ }, { "chaos_factor": 10, "cost": 15, -"damage": 1.0, +"damage": 1.5, "damage_tick_rate": 0.25, "desc": "Wyvern", "fire_delay": 1.0, @@ -150,21 +149,28 @@ crawlers = Dictionary[String, Dictionary]({ "health": 10.0, "speed": 40.0, "sprite": Vector2i(25, 4), -"worth": 2.0 +"worth": 1.0 }, "gnome": { "damage": 1.0, -"health": 8.0, -"speed": 90.0, +"health": 20.0, +"speed": 80.0, "sprite": Vector2i(26, 9), "worth": 3.0 }, -"soldier": { +"knight": { "damage": 1.0, -"health": 35.0, -"speed": 30.0, +"health": 55.0, +"speed": 25.0, "sprite": Vector2i(28, 0), -"worth": 5.0 +"worth": 6.0 +}, +"soldier": { +"damage": 1.0, +"health": 25.0, +"speed": 35.0, +"sprite": Vector2i(27, 0), +"worth": 1.0 } }) metadata/_custom_type_script = "uid://dndluiku7wdi8" diff --git a/scenes/knight.tscn b/scenes/knight.tscn new file mode 100644 index 0000000..921e101 --- /dev/null +++ b/scenes/knight.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://dh6732v1ja8yk"] + +[ext_resource type="Script" uid="uid://fyov84nkbjh8" path="res://scripts/knight.gd" id="1_dp28g"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_220eh"] +radius = 8.06226 + +[node name="CrawlerKnight" type="CharacterBody2D"] +script = ExtResource("1_dp28g") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_220eh") + +[node name="Sprite2D" type="Sprite2D" parent="."] +region_rect = Rect2(448, 0, 16, 16) diff --git a/scripts/game_data.gd b/scripts/game_data.gd index cc20c13..8890eff 100644 --- a/scripts/game_data.gd +++ b/scripts/game_data.gd @@ -56,7 +56,7 @@ func start_spawning(): func stop_spawning(): _is_spawning = false - if (_current_wave > game_stats_config.wave_data.size()): + if (_current_wave >= game_stats_config.wave_data.size()): # TODO print("win!") else: diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index 3b19b69..94d2ecc 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -2,26 +2,26 @@ extends Resource class_name GameStatsConfig # game stats -@export var starting_life : int = 20 +@export var starting_life : int = 15 @export var starting_morale : int = 10 # waves @export var wave_data = [ { - 15: {"fodder": 5}, + 15: {"fodder": 4}, 27: {"fodder": 8}, - 30: {"fodder": 1, "soldier": 2}, + 30: {"soldier": 1}, }, { 5: {"fodder": 6}, 10: {"soldier": 2}, 20: {"fodder": 5, "soldier": 6}, - 30: {"fodder": 5}, + 30: {"fodder": 6}, }, { - 7: {"gnome": 10}, - 14: {"soldier": 4}, - 30: {"gnome": 6, "soldier": 8} + 7: {"gnome": 6}, + 14: {"knight": 4}, + 30: {"gnome": 4, "soldier": 8} } ] @@ -32,7 +32,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} "desc": "Warlock", "is_valid": true, "damage" : 4.0, - "fire_rate" : 1.2, + "fire_rate" : 1.1, "range": 75.0, "sprite_panel": Vector2i(32, 4), "sprite_attacking": Vector2i(28, 1), @@ -76,7 +76,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} { "desc": "Wyvern", "is_valid": true, - "damage" : 1.0, + "damage" : 1.5, "fire_delay" : 1.0, "range": 40.0, "projectile_range": 45.0, @@ -153,21 +153,28 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} "damage" : 1.0, "speed" : 40.0, "health": 10.0, - "worth": 2.0, + "worth": 1.0, "sprite": Vector2i(25, 4), }, "soldier": { "damage" : 1.0, - "speed" : 30.0, - "health": 35.0, - "worth": 5.0, - "sprite": Vector2i(28, 0), + "speed" : 35.0, + "health": 25.0, + "worth": 1.0, + "sprite": Vector2i(27, 0), }, "gnome": { "damage": 1.0, - "speed" : 90.0, - "health": 8.0, + "speed" : 80.0, + "health": 20.0, "worth": 3.0, "sprite": Vector2i(26, 9), }, + "knight": { + "damage" : 1.0, + "speed" : 25.0, + "health": 55.0, + "worth": 6.0, + "sprite": Vector2i(28, 0), + }, } diff --git a/scripts/wave_spawner.gd b/scripts/wave_spawner.gd index 653fe92..dfbd265 100644 --- a/scripts/wave_spawner.gd +++ b/scripts/wave_spawner.gd @@ -5,6 +5,7 @@ extends Node2D @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 knight_enemy = preload("res://scenes/gnome.tscn") @onready var map = get_node("../Map") @onready var _path : Path2D @@ -16,6 +17,7 @@ func _ready() -> void: "fodder": fodder_enemy, "soldier": soldier_enemy, "gnome": gnome_enemy, + "knight": knight_enemy, } var curve : Curve2D = Curve2D.new() -- cgit v1.2.3