summaryrefslogtreecommitdiff
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
parent39794265b361c2f259a58d677f9e2e10b64d00af (diff)
Lots of Wyvern balance/effect changes, skittles upgrade
-rw-r--r--assets/tilemap.pngbin25306 -> 25269 bytes
-rw-r--r--assets/tilemap.xcfbin227048 -> 227048 bytes
-rw-r--r--resources/game_stats_config.tres37
-rw-r--r--scenes/wyvern_projectile.tscn45
-rw-r--r--scripts/game_stats_config.gd39
-rw-r--r--scripts/wyvern.gd23
-rw-r--r--scripts/wyvern_projectile.gd11
7 files changed, 110 insertions, 45 deletions
diff --git a/assets/tilemap.png b/assets/tilemap.png
index e7a3a1f..47da7b0 100644
--- a/assets/tilemap.png
+++ b/assets/tilemap.png
Binary files differ
diff --git a/assets/tilemap.xcf b/assets/tilemap.xcf
index 42eb05d..a83c8a3 100644
--- a/assets/tilemap.xcf
+++ b/assets/tilemap.xcf
Binary files differ
diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres
index 5b100fa..f5a735e 100644
--- a/resources/game_stats_config.tres
+++ b/resources/game_stats_config.tres
@@ -22,11 +22,9 @@ defenders = Array[Dictionary]([{
"sprite_idle": Vector2i(29, 1),
"sprite_panel": Vector2i(32, 4),
"upgrades": [{
-"cost": 10,
+"cost": 9999,
"desc": "Phoenix (DMG)",
-"effects": {
-"damage": 9.0
-},
+"effects": {},
"sprite_panel": Vector2i(32, 5)
}, {
"cost": 15,
@@ -46,16 +44,41 @@ defenders = Array[Dictionary]([{
"sprite_panel": Vector2i(35, 5)
}]
}, {
+"chaos_factor": 10,
"cost": 15,
"damage": 1.0,
"damage_tick_rate": 0.25,
"desc": "Wyvern",
-"fire_rate": 1.0,
-"range": 35.0,
+"fire_delay": 1.0,
+"projectile_range": 45.0,
+"range": 40.0,
"sprite_attacking": Vector2i(25, 10),
"sprite_idle": Vector2i(24, 10),
"sprite_panel": Vector2i(28, 11),
-"upgrades": []
+"upgrades": [{
+"cost": 7,
+"desc": "Skittles (SPD)",
+"effects": {
+"fire_delay": 0.1
+},
+"sprite_panel": Vector2i(28, 12)
+}, {
+"cost": 30.0,
+"desc": "Pop Rocks (RNGE)",
+"effects": {
+"chaos_factor": 7.5,
+"damage": 4.0,
+"damage_tick_rate": 0.75,
+"projectile_range": 70.0,
+"range": 55.0
+},
+"sprite_panel": Vector2i(31, 12)
+}, {
+"cost": 9999,
+"desc": "Twizzlers (DUP)",
+"effects": {},
+"sprite_panel": Vector2i(27, 12)
+}]
}, {
"cost": 9999,
"damage": 1.0,
diff --git a/scenes/wyvern_projectile.tscn b/scenes/wyvern_projectile.tscn
index 24e6861..e1bd964 100644
--- a/scenes/wyvern_projectile.tscn
+++ b/scenes/wyvern_projectile.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=7 format=3 uid="uid://b5klvt4gcjnah"]
+[gd_scene load_steps=6 format=3 uid="uid://b5klvt4gcjnah"]
[ext_resource type="Script" uid="uid://brqwmj8ydtipd" path="res://scripts/wyvern_projectile.gd" id="1_4pt1w"]
@@ -6,21 +6,18 @@
radius = 8.0
[sub_resource type="Curve" id="Curve_tajkb"]
-_data = [Vector2(0, 0.966292), 0.0, 0.0, 0, 0, Vector2(0.680328, 0.651685), 0.0, 0.0, 0, 0, Vector2(1, 0.426966), 0.0, 0.0, 0, 0]
-point_count = 3
+_data = [Vector2(0, 0.348315), 0.0, 0.0, 0, 0, Vector2(0.508197, 1), 0.0, 0.0, 0, 0, Vector2(0.795082, 0.808989), 0.0, 0.0, 0, 0, Vector2(1, 0.359551), 0.0, 0.0, 0, 0]
+point_count = 4
[sub_resource type="Gradient" id="Gradient_tajkb"]
-offsets = PackedFloat32Array(0.125, 0.489583, 0.552083, 0.625)
-colors = PackedColorArray(0.996078, 0.133333, 0.172549, 1, 1, 0.772549, 0, 1, 0, 0.784314, 0.321569, 1, 1, 0.717647, 0.321569, 1)
+offsets = PackedFloat32Array(0.125, 0.354167, 0.5625, 0.78125)
+colors = PackedColorArray(0.996078, 0.133333, 0.172549, 1, 1, 0.772549, 0, 1, 0, 0.784314, 0.321569, 1, 1, 0.0666667, 0.321569, 1)
[sub_resource type="Curve" id="Curve_68je7"]
_limits = [-1.0, 1.0, 0.0, 1.0]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.707865), 0.0, 0.0, 0, 0]
point_count = 2
-[sub_resource type="CircleShape2D" id="CircleShape2D_68je7"]
-radius = 5.0
-
[node name="WyvernProjectile" type="CharacterBody2D"]
script = ExtResource("1_4pt1w")
@@ -32,31 +29,35 @@ disabled = true
wait_time = 0.25
autostart = true
-[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
+[node name="Area2D" type="Area2D" parent="."]
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Area2D"]
+position = Vector2(24, 0)
+scale = Vector2(5, 1)
+polygon = PackedVector2Array(-4.8, 0, 3.2, -8, 3.2, 8)
+
+[node name="CPUParticles2D" type="CPUParticles2D" parent="Area2D"]
skew = 0.401426
-amount = 1500
+amount = 1000
lifetime = 0.25
-explosiveness = 0.15
-randomness = 0.86
+speed_scale = 0.3
+explosiveness = 0.3
+lifetime_randomness = 0.85
+fixed_fps = 30
emission_shape = 1
emission_sphere_radius = 2.0
-spread = 17.5
+spread = 0.0
gravity = Vector2(0, 0)
-initial_velocity_max = 300.0
+initial_velocity_max = 200.0
orbit_velocity_min = -0.5
orbit_velocity_max = 0.5
+linear_accel_min = 100.0
+linear_accel_max = 100.0
scale_amount_min = 0.5
-scale_amount_max = 1.5
+scale_amount_max = 4.0
scale_amount_curve = SubResource("Curve_tajkb")
color_ramp = SubResource("Gradient_tajkb")
hue_variation_curve = SubResource("Curve_68je7")
anim_speed_max = 20.0
-[node name="Area2D" type="Area2D" parent="."]
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
-position = Vector2(20, 0)
-scale = Vector2(5, 1)
-shape = SubResource("CircleShape2D_68je7")
-
[connection signal="timeout" from="DamageTick" to="." method="_on_damage_tick_timeout"]
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)