From ab9d1c167e1fa62d576b209edc20c0e87f4e977e Mon Sep 17 00:00:00 2001 From: bd Date: Sun, 25 May 2025 17:16:33 -0400 Subject: Lots of Wyvern balance/effect changes, skittles upgrade --- scripts/game_stats_config.gd | 39 ++++++++++++++++++++++++++++++++++----- scripts/wyvern.gd | 23 ++++++++++++++--------- scripts/wyvern_projectile.gd | 11 +++++++++-- 3 files changed, 57 insertions(+), 16 deletions(-) (limited to 'scripts') diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index f58ec64..8edffd2 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -31,9 +31,8 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} { "desc": "Phoenix (DMG)", "sprite_panel": Vector2i(32, 5), - "cost": 10, + "cost": 9999, "effects": { - "damage": 9.0, }, }, { @@ -60,15 +59,45 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} { "desc": "Wyvern", "damage" : 1.0, - "fire_rate" : 1.0, - "range": 35.0, + "fire_delay" : 1.0, + "range": 40.0, + "projectile_range": 45.0, "sprite_panel": Vector2i(28, 11), "sprite_attacking": Vector2i(25, 10), "sprite_idle": Vector2i(24, 10), "cost": 15, "damage_tick_rate": 0.25, + "chaos_factor": 10, # TODO - "upgrades": [], + "upgrades": [ + { + "desc": "Skittles (SPD)", + "sprite_panel": Vector2i(28, 12), + "cost": 7, + "effects": { + "fire_delay": 0.1 + } + }, + { + "desc": "Pop Rocks (RNGE)", + "sprite_panel": Vector2i(31, 12), + "cost": 30.0, + "effects": { + "damage": 4.0, + "damage_tick_rate": 0.75, + "chaos_factor": 7.5, + "range": 55.0, + "projectile_range": 70.0, + } + }, + { + "desc": "Twizzlers (DUP)", + "sprite_panel": Vector2i(27, 12), + "cost": 9999, + "effects": { + } + }, + ], }, # TODO { diff --git a/scripts/wyvern.gd b/scripts/wyvern.gd index a2822fe..c60aa02 100644 --- a/scripts/wyvern.gd +++ b/scripts/wyvern.gd @@ -10,7 +10,7 @@ func _ready(): reset_tower_range() reset_tower_sprite() -func _process(_delta): +func _process(delta): select_target() if firing: if target == null: @@ -18,21 +18,26 @@ func _process(_delta): firing = false else: $WyvernProjectile.target = target - $WyvernProjectile.move_projectile() + $WyvernProjectile.move_projectile(delta) func _on_tower_body_entered(_body: Node2D) -> void: var old_target : CharacterBody2D = target select_target() if old_target == null && old_target != target: - $FireTimer.start(tower_data["fire_rate"]) + $FireTimer.start(tower_data["fire_delay"]) func _on_fire_timer_timeout(): if (target != null): - var tmp_projectile = projectile.instantiate() - tmp_projectile.target = target - tmp_projectile.projectile_damage = tower_data["damage"] - tmp_projectile.damage_tick_rate = tower_data["damage_tick_rate"] - add_child(tmp_projectile) - tmp_projectile.global_position = $Aim.global_position + var stream : CharacterBody2D = _get_projectile() + add_child(stream) + stream.target = target + stream.global_position = $Aim.global_position firing = true $FireTimer.stop() + +func _get_projectile() -> CharacterBody2D: + var stream = projectile.instantiate() + stream.projectile_damage = tower_data["damage"] + stream.chaos_factor = tower_data["chaos_factor"] + stream.damage_tick_rate = tower_data["damage_tick_rate"] + return stream diff --git a/scripts/wyvern_projectile.gd b/scripts/wyvern_projectile.gd index 7febbe0..973a4d3 100644 --- a/scripts/wyvern_projectile.gd +++ b/scripts/wyvern_projectile.gd @@ -4,6 +4,8 @@ var target var curr = "" var projectile_damage var damage_tick_rate +var chaos_factor : float +var _total_lifetime : float = 0.0 func _on_damage_tick_timeout() -> void: var enemies = $Area2D.get_overlapping_bodies() @@ -11,7 +13,12 @@ func _on_damage_tick_timeout() -> void: if "Crawler" in i.name: i.deal_damage(projectile_damage) -func move_projectile() -> void: +func move_projectile(delta) -> void: + _total_lifetime += delta var pos : Vector2 - pos = target.global_position + var curve_offset = Vector2( + sin(_total_lifetime * 10) * chaos_factor, + cos(_total_lifetime * 10) * chaos_factor, + ) + pos = target.global_position + curve_offset look_at(pos) -- cgit v1.2.3