Make fishing challenge scale with catch quality
This commit is contained in:
parent
c806e7ca6f
commit
46df74361a
10 changed files with 128 additions and 32 deletions
|
|
@ -11,6 +11,3 @@ barrier_health_max = 7
|
|||
first_barrier_margin = 0.14
|
||||
final_barrier_margin = 0.1
|
||||
minimum_barrier_spacing = 0.14
|
||||
chase_start_delay = 1.0
|
||||
chase_start_offset = 0.16
|
||||
chase_speed = 0.145
|
||||
|
|
|
|||
|
|
@ -11,6 +11,3 @@ barrier_health_max = 8
|
|||
first_barrier_margin = 0.13
|
||||
final_barrier_margin = 0.09
|
||||
minimum_barrier_spacing = 0.14
|
||||
chase_start_delay = 1.1
|
||||
chase_start_offset = 0.18
|
||||
chase_speed = 0.15
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ extends Node
|
|||
const CatchDifficultyProfileType = preload(
|
||||
"res://fishing/catch_difficulty_profile.gd"
|
||||
)
|
||||
const FishQualityType = preload("res://fish/fish_quality.gd")
|
||||
|
||||
signal encounter_updated(
|
||||
progress: float,
|
||||
|
|
@ -42,6 +43,13 @@ class Barrier:
|
|||
maximum_health = barrier_health
|
||||
|
||||
|
||||
# Fight movement uses one shared baseline. Species and quality difficulty comes
|
||||
# from barrier placement and health, while reel upgrades affect only the
|
||||
# player's progress speed.
|
||||
const CHASE_START_DELAY: float = 0.5
|
||||
const CHASE_START_OFFSET: float = 0.04
|
||||
const CHASE_SPEED: float = 0.07
|
||||
|
||||
@export_category("Accessibility")
|
||||
@export var auto_click_enabled: bool = false
|
||||
@export_range(0.05, 2.0, 0.01) var auto_click_interval: float = 0.20
|
||||
|
|
@ -60,9 +68,8 @@ var _active_barrier_index: int = -1
|
|||
var _reel_input_held: bool = false
|
||||
var _reel_speed: float = 0.0
|
||||
var _click_power: int = 1
|
||||
var _chase_start_delay: float = 0.0
|
||||
var _fish_quality: int = FishQualityType.Tier.BORING
|
||||
var _chase_delay_remaining: float = 0.0
|
||||
var _chase_speed: float = 0.0
|
||||
var _failure_epsilon: float = 0.0001
|
||||
var _auto_click_accumulator: float = 0.0
|
||||
var _rng: RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
|
|
@ -103,6 +110,7 @@ func start_encounter(
|
|||
profile: CatchDifficultyProfileType,
|
||||
reel_speed: float,
|
||||
click_power: int,
|
||||
fish_quality: int = FishQualityType.Tier.BORING,
|
||||
) -> void:
|
||||
reset()
|
||||
if profile == null:
|
||||
|
|
@ -111,10 +119,13 @@ func start_encounter(
|
|||
|
||||
_reel_speed = maxf(reel_speed, 0.0)
|
||||
_click_power = maxi(click_power, 1)
|
||||
_chase_start_delay = maxf(profile.chase_start_delay, 0.0)
|
||||
_chase_delay_remaining = _chase_start_delay
|
||||
chase_progress = -maxf(profile.chase_start_offset, 0.01)
|
||||
_chase_speed = maxf(profile.chase_speed, 0.0)
|
||||
_fish_quality = (
|
||||
fish_quality
|
||||
if FishQualityType.is_valid(fish_quality)
|
||||
else FishQualityType.Tier.BORING
|
||||
)
|
||||
_chase_delay_remaining = CHASE_START_DELAY
|
||||
chase_progress = -CHASE_START_OFFSET
|
||||
_seed_encounter_rng()
|
||||
_generate_barriers(profile)
|
||||
progress = 0.0
|
||||
|
|
@ -127,12 +138,13 @@ func start_authoritative_encounter(
|
|||
reel_speed: float,
|
||||
click_power: int,
|
||||
seed: int,
|
||||
fish_quality: int = FishQualityType.Tier.BORING,
|
||||
) -> void:
|
||||
var previous_test_mode: bool = use_deterministic_test_seed
|
||||
var previous_seed: int = deterministic_test_seed
|
||||
use_deterministic_test_seed = true
|
||||
deterministic_test_seed = seed
|
||||
start_encounter(profile, reel_speed, click_power)
|
||||
start_encounter(profile, reel_speed, click_power, fish_quality)
|
||||
use_deterministic_test_seed = previous_test_mode
|
||||
deterministic_test_seed = previous_seed
|
||||
|
||||
|
|
@ -168,9 +180,8 @@ func reset() -> void:
|
|||
_reel_input_held = false
|
||||
_reel_speed = 0.0
|
||||
_click_power = 1
|
||||
_chase_start_delay = 0.0
|
||||
_fish_quality = FishQualityType.Tier.BORING
|
||||
_chase_delay_remaining = 0.0
|
||||
_chase_speed = 0.0
|
||||
_auto_click_accumulator = 0.0
|
||||
emit_signal(
|
||||
"encounter_updated",
|
||||
|
|
@ -215,7 +226,7 @@ func _update_chase(delta: float) -> void:
|
|||
if active_delta <= 0.0:
|
||||
return
|
||||
chase_progress = minf(
|
||||
chase_progress + _chase_speed * active_delta,
|
||||
chase_progress + CHASE_SPEED * active_delta,
|
||||
1.0
|
||||
)
|
||||
|
||||
|
|
@ -302,7 +313,14 @@ func _generate_barriers(profile: CatchDifficultyProfileType) -> void:
|
|||
+ spacing * float(barrier_index)
|
||||
+ random_offsets[barrier_index] * random_slack
|
||||
)
|
||||
var health: int = _rng.randi_range(health_range.x, health_range.y)
|
||||
var base_health: int = _rng.randi_range(
|
||||
health_range.x,
|
||||
health_range.y,
|
||||
)
|
||||
var health: int = FishQualityType.apply_barrier_health(
|
||||
base_health,
|
||||
_fish_quality,
|
||||
)
|
||||
_barriers.append(Barrier.new(position, health))
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,6 @@ extends Resource
|
|||
@export_range(0.0, 0.45, 0.01) var first_barrier_margin: float = 0.15
|
||||
@export_range(0.0, 0.45, 0.01) var final_barrier_margin: float = 0.10
|
||||
@export_range(0.01, 1.0, 0.01) var minimum_barrier_spacing: float = 0.15
|
||||
@export_range(0.0, 5.0, 0.05) var chase_start_delay: float = 1.0
|
||||
@export_range(0.01, 0.5, 0.01) var chase_start_offset: float = 0.15
|
||||
@export_range(0.0, 2.0, 0.01) var chase_speed: float = 0.14
|
||||
|
||||
|
||||
func get_barrier_count_range() -> Vector2i:
|
||||
|
|
|
|||
|
|
@ -11,6 +11,3 @@ barrier_health_max = 7
|
|||
first_barrier_margin = 0.15
|
||||
final_barrier_margin = 0.1
|
||||
minimum_barrier_spacing = 0.15
|
||||
chase_start_delay = 1.0
|
||||
chase_start_offset = 0.15
|
||||
chase_speed = 0.14
|
||||
|
|
|
|||
|
|
@ -919,6 +919,10 @@ func _activate_bite() -> void:
|
|||
state = FishingState.FIGHTING
|
||||
_state_time_remaining = 0.0
|
||||
_withdrawal_input_held = false
|
||||
_pending_catch = _fish_selector.create_catch(_selected_fish)
|
||||
if _pending_catch == null or not _pending_catch.is_valid():
|
||||
_cancel_attempt()
|
||||
return
|
||||
bite_activated.emit()
|
||||
status_changed.emit("fish on!")
|
||||
_presentation.set_line_mode(FishingPresentationType.LineMode.TAUT)
|
||||
|
|
@ -926,7 +930,8 @@ func _activate_bite() -> void:
|
|||
_catch_controller.start_encounter(
|
||||
_selected_fish.catch_profile,
|
||||
_get_effective_reel_speed(),
|
||||
_get_effective_barrier_damage()
|
||||
_get_effective_barrier_damage(),
|
||||
_pending_catch.quality,
|
||||
)
|
||||
_catch_controller.set_reel_input(
|
||||
Input.is_action_pressed("fish_primary")
|
||||
|
|
@ -993,7 +998,6 @@ func _on_catch_completed() -> void:
|
|||
_cancel_attempt()
|
||||
return
|
||||
|
||||
_pending_catch = _fish_selector.create_catch(_selected_fish)
|
||||
if _pending_catch == null or not _pending_catch.is_valid():
|
||||
_cancel_attempt()
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue