From 296befa1a1e4735b859d87429354eecac600207d Mon Sep 17 00:00:00 2001 From: Voyager Date: Mon, 17 Aug 2026 19:06:54 -0400 Subject: [PATCH] feat: extend barrier power upgrades --- network/network_fishing_protocol.gd | 2 +- progression/player_fishing_upgrades.gd | 18 +++++++++++++--- tests/fish_quality_validation.gd | 30 ++++++++++++++++++++++++-- ui/fishing_shop.gd | 4 +++- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/network/network_fishing_protocol.gd b/network/network_fishing_protocol.gd index 2e9a342..8df59b7 100644 --- a/network/network_fishing_protocol.gd +++ b/network/network_fishing_protocol.gd @@ -5,7 +5,7 @@ const MAX_ID_LENGTH: int = 96 const MAX_EVIDENCE_FISH_IDS: int = 256 const MAX_CAST_DISTANCE: float = 30.0 const MAX_REEL_SPEED: float = 10.0 -const MAX_BARRIER_DAMAGE: int = 100 +const MAX_BARRIER_DAMAGE: int = 128 const INPUT_CHANNEL: int = 3 const SNAPSHOT_CHANNEL: int = 4 const INPUT_RATE: float = 1.0 / 30.0 diff --git a/progression/player_fishing_upgrades.gd b/progression/player_fishing_upgrades.gd index 7bc6abd..e21a31e 100644 --- a/progression/player_fishing_upgrades.gd +++ b/progression/player_fishing_upgrades.gd @@ -6,9 +6,17 @@ const PlayerWalletType = preload("res://economy/player_wallet.gd") signal upgrades_changed(reel_speed_level: int, barrier_power_level: int) const MAX_REEL_SPEED_LEVEL: int = 5 -const MAX_BARRIER_POWER_LEVEL: int = 3 +const MAX_BARRIER_POWER_LEVEL: int = 7 const REEL_SPEED_COSTS: Array[int] = [50, 125, 300, 650, 1250] -const BARRIER_POWER_COSTS: Array[int] = [100, 275, 700] +const BARRIER_POWER_COSTS: Array[int] = [ + 100, + 275, + 700, + 1500, + 3000, + 6000, + 12000, +] var _reel_speed_level: int = 0 var _barrier_power_level: int = 0 @@ -27,7 +35,11 @@ func get_reel_speed_multiplier() -> float: func get_barrier_damage() -> int: - return _barrier_power_level + 1 + return get_barrier_damage_for_level(_barrier_power_level) + + +static func get_barrier_damage_for_level(level: int) -> int: + return 1 << clampi(level, 0, MAX_BARRIER_POWER_LEVEL) func get_next_reel_speed_cost() -> int: diff --git a/tests/fish_quality_validation.gd b/tests/fish_quality_validation.gd index 28224f4..595c17a 100644 --- a/tests/fish_quality_validation.gd +++ b/tests/fish_quality_validation.gd @@ -173,12 +173,22 @@ func _validate_barrier_challenge_curve() -> void: FishQualityType.Tier.SHINY ).y var base_power_clicks: int = ceili(float(shiny_health) / 1.0) + var maximum_barrier_damage: int = ( + PlayerFishingUpgrades.get_barrier_damage_for_level( + PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL + ) + ) var max_power_clicks: int = ceili( float(shiny_health) - / float(PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL + 1) + / float(maximum_barrier_damage) ) assert(base_power_clicks == 400) - assert(max_power_clicks == 100) + assert(maximum_barrier_damage == 128) + assert( + NetworkFishingProtocol.MAX_BARRIER_DAMAGE + == maximum_barrier_damage + ) + assert(max_power_clicks == 4) assert(max_power_clicks < base_power_clicks) @@ -190,6 +200,22 @@ func _validate_fight_pacing_and_reel_upgrades() -> void: var upgrades := PlayerFishingUpgrades.new() assert(is_equal_approx(upgrades.get_reel_speed_multiplier(), 1.0)) + assert( + PlayerFishingUpgrades.BARRIER_POWER_COSTS.size() + == PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL + ) + for barrier_level: int in range( + PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL + 1 + ): + assert(upgrades.restore_levels(0, barrier_level)) + assert(upgrades.get_barrier_damage() == 1 << barrier_level) + if barrier_level < PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL: + assert( + upgrades.get_next_barrier_power_cost() + == PlayerFishingUpgrades.BARRIER_POWER_COSTS[barrier_level] + ) + else: + assert(upgrades.get_next_barrier_power_cost() == -1) assert( upgrades.restore_levels( PlayerFishingUpgrades.MAX_REEL_SPEED_LEVEL, diff --git a/ui/fishing_shop.gd b/ui/fishing_shop.gd index 68827e9..6b6d864 100644 --- a/ui/fishing_shop.gd +++ b/ui/fishing_shop.gd @@ -847,7 +847,9 @@ func _refresh_upgrades() -> void: "%d damage → %d damage" % [ _upgrades.get_barrier_damage(), - barrier_level + 2, + PlayerFishingUpgradesType.get_barrier_damage_for_level( + barrier_level + 1 + ), ] ) _barrier_cost.set_amount(barrier_cost)