diff options
author | bd <bdunahu@operationnull.com> | 2025-05-25 17:16:33 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-25 17:16:33 -0400 |
commit | ab9d1c167e1fa62d576b209edc20c0e87f4e977e (patch) | |
tree | af6624c042da0d68bc5596d82bd33cc5486fa6c7 | |
parent | 39794265b361c2f259a58d677f9e2e10b64d00af (diff) |
Lots of Wyvern balance/effect changes, skittles upgrade
-rw-r--r-- | assets/tilemap.png | bin | 25306 -> 25269 bytes | |||
-rw-r--r-- | assets/tilemap.xcf | bin | 227048 -> 227048 bytes | |||
-rw-r--r-- | resources/game_stats_config.tres | 37 | ||||
-rw-r--r-- | scenes/wyvern_projectile.tscn | 45 | ||||
-rw-r--r-- | scripts/game_stats_config.gd | 39 | ||||
-rw-r--r-- | scripts/wyvern.gd | 23 | ||||
-rw-r--r-- | scripts/wyvern_projectile.gd | 11 |
7 files changed, 110 insertions, 45 deletions
diff --git a/assets/tilemap.png b/assets/tilemap.png Binary files differindex e7a3a1f..47da7b0 100644 --- a/assets/tilemap.png +++ b/assets/tilemap.png diff --git a/assets/tilemap.xcf b/assets/tilemap.xcf Binary files differindex 42eb05d..a83c8a3 100644 --- a/assets/tilemap.xcf +++ b/assets/tilemap.xcf 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) |