From 76e36c7c9c373a0fef6be674beb738c27f307b0e Mon Sep 17 00:00:00 2001 From: Artur <2123806@stud.th-mannheim.de> Date: Tue, 2 Jun 2026 17:46:33 +0200 Subject: [PATCH] Changes several hp and damage numbers to get slightly better balance --- scripts/blue_slime.gd | 1 + scripts/fire_slime.gd | 1 + scripts/perk_effects.gd | 36 +++++++++++++++++++++++++----------- scripts/spawn_control.gd | 2 +- scripts/witch.gd | 14 ++++++++------ 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/scripts/blue_slime.gd b/scripts/blue_slime.gd index 944a478..6f1c3cb 100644 --- a/scripts/blue_slime.gd +++ b/scripts/blue_slime.gd @@ -5,6 +5,7 @@ func _ready() -> void: speed = 15.0 max_hp = 25 hp = max_hp + damage = 5 # $Area2D.body_entered.connect(_on_area_2d_body_entered) func _process(delta: float) -> void: diff --git a/scripts/fire_slime.gd b/scripts/fire_slime.gd index 210553a..28424ad 100644 --- a/scripts/fire_slime.gd +++ b/scripts/fire_slime.gd @@ -5,6 +5,7 @@ func _ready() -> void: speed = 15.0 max_hp = 50 hp = max_hp + damage = 10 $Area2D.body_entered.connect(_on_area_2d_body_entered) func _process(delta: float) -> void: diff --git a/scripts/perk_effects.gd b/scripts/perk_effects.gd index ccd2584..caa8584 100644 --- a/scripts/perk_effects.gd +++ b/scripts/perk_effects.gd @@ -16,6 +16,7 @@ var _knife_timer: float = 0.0 var spellbook_scene = preload("res://scenes/spellbook.tscn") var spellbook_count: int = 0 var spellbook_damage: int = 12 +const SPELLBOOK_MAX_DAMAGE: int = 40 var spellbook_speed: float = 1.5 const SPELLBOOK_RADIUS: float = 60.0 var _spellbook_angle: float = 0.0 @@ -68,8 +69,8 @@ func _ready() -> void: var dsh = Perk.new() dsh.name = "Double Shuriken" - dsh.description = "Fire two shurikens at once" - dsh.stats = _stat("Shurikens", "1", "2") + dsh.description = "Fire two more shurikens at once" + dsh.stats = _stat("Shurikens", str(witch.shuriken_count), str(witch.shuriken_count + 2)) dsh.spell = SpellLibrary.SHURIKEN dsh.icon = _icon_shuriken dsh.effect = double_shuriken @@ -84,6 +85,15 @@ func _ready() -> void: faoe.effect = fireball_aoe available_perks.append(faoe) + var fsp = Perk.new() + fsp.name = "Fireball Spread" + fsp.description = "Fireballs target more enemies" + fsp.stats = _stat("Targets", str(witch.fireball_max_targets), str(witch.fireball_max_targets + 3)) + fsp.spell = SpellLibrary.FIREBALL + fsp.icon = _icon_fireball + fsp.effect = fireball_spread + available_perks.append(fsp) + var bexp = Perk.new() bexp.name = "Brew Explosion" bexp.description = "Trigger an explosion on brew" @@ -154,11 +164,14 @@ func laser_retarget(): laser_retarget_enabled = true func double_shuriken(): - witch.shuriken_count = 2 + witch.shuriken_count += 2 func fireball_aoe(): fireball_aoe_enabled = true +func fireball_spread(): + witch.fireball_max_targets += 3 + func brew_explosion(): cauldron.brew_explosion = true @@ -255,16 +268,17 @@ func faster_orbit() -> void: available_perks.append(fo) func book_damage() -> void: - spellbook_damage += 4 + spellbook_damage = min(spellbook_damage + 4, SPELLBOOK_MAX_DAMAGE) for book in _spellbooks: book.damage = spellbook_damage - var bd = Perk.new() - bd.name = "Book Damage" - bd.description = "Books hit harder" - bd.stats = _stat("Damage", str(spellbook_damage), str(spellbook_damage + 4)) - bd.icon = _icon_book - bd.effect = book_damage - available_perks.append(bd) + if spellbook_damage < SPELLBOOK_MAX_DAMAGE: + var bd = Perk.new() + bd.name = "Book Damage" + bd.description = "Books hit harder" + bd.stats = _stat("Damage", str(spellbook_damage), str(min(spellbook_damage + 4, SPELLBOOK_MAX_DAMAGE))) + bd.icon = _icon_book + bd.effect = book_damage + available_perks.append(bd) func _rebuild_spellbooks() -> void: for book in _spellbooks: diff --git a/scripts/spawn_control.gd b/scripts/spawn_control.gd index 762c687..5101aa3 100644 --- a/scripts/spawn_control.gd +++ b/scripts/spawn_control.gd @@ -8,7 +8,7 @@ var elapsed_time: float = 0.0 const STAGES_JSON = "res://data/spawn_stages.json" -const ELITE_HP_MULT := 10 +const ELITE_HP_MULT := 20 const ELITE_SPD_MULT := 0.25 const ELITE_SCALE := 3.0 diff --git a/scripts/witch.gd b/scripts/witch.gd index 1b5be8a..92b57d6 100644 --- a/scripts/witch.gd +++ b/scripts/witch.gd @@ -13,9 +13,10 @@ var shuriken_count = 1 var _fire_sfx = preload("res://assets/music&sfx/sfx/fire.wav") var _laser_sfx = preload("res://assets/music&sfx/sfx/laser.wav") -var max_hp: int = 100 -var current_hp: int = 100 +var max_hp: int = 50 +var current_hp: int = 50 var is_invincible: bool = false +var fireball_max_targets: int = 5 const HP_BAR_WIDTH = 20 const HP_BAR_HEIGHT = 3 @@ -53,9 +54,10 @@ func _on_collect(DropsBase): func shoot_fireballs(): var enemies = get_tree().get_nodes_in_group("enemies") - for enemy in enemies: - if not is_instance_valid(enemy): - continue + enemies = enemies.filter(func(e): return is_instance_valid(e)) + enemies.sort_custom(func(a, b): return global_position.distance_to(a.global_position) < global_position.distance_to(b.global_position)) + var targets = enemies.slice(0, fireball_max_targets) + for enemy in targets: var dir = global_position.direction_to(enemy.global_position) _face_direction(dir) var fb = fireball.instantiate() @@ -126,7 +128,7 @@ func take_damage(amount: int) -> void: get_tree().call_deferred("reload_current_scene") return is_invincible = true - await get_tree().create_timer(1.0).timeout + await get_tree().create_timer(0.5).timeout is_invincible = false func get_nearest_enemy(from: Vector2, filter: Callable = Callable()) -> Node: