summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-05-25 17:16:33 -0400
committerbd <bdunahu@operationnull.com>2025-05-25 17:16:33 -0400
commitab9d1c167e1fa62d576b209edc20c0e87f4e977e (patch)
treeaf6624c042da0d68bc5596d82bd33cc5486fa6c7 /scripts
parent39794265b361c2f259a58d677f9e2e10b64d00af (diff)
Lots of Wyvern balance/effect changes, skittles upgrade
Diffstat (limited to 'scripts')
-rw-r--r--scripts/game_stats_config.gd39
-rw-r--r--scripts/wyvern.gd23
-rw-r--r--scripts/wyvern_projectile.gd11
3 files changed, 57 insertions, 16 deletions
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)