diff --git a/economy/fishing_shop_stock.gd b/economy/fishing_shop_stock.gd index 3d5e867..4cbf863 100644 --- a/economy/fishing_shop_stock.gd +++ b/economy/fishing_shop_stock.gd @@ -5,14 +5,17 @@ const ItemCatalogType = preload("res://items/item_catalog.gd") const ItemDataType = preload("res://items/item_data.gd") const PlayerBagType = preload("res://inventory/player_bag.gd") const PlayerWalletType = preload("res://economy/player_wallet.gd") +const WORM_MAX_STACK: int = 10 const ITEM_PRICES: Dictionary[StringName, int] = { + &"worms": 1, &"coffee": 20, &"energy_drink": 35, &"snack": 30, &"fish_finder": 60, } const ITEM_ORDER: Array[StringName] = [ + &"worms", &"coffee", &"energy_drink", &"snack", @@ -28,6 +31,16 @@ static func get_stock_item_ids() -> Array[StringName]: return ITEM_ORDER.duplicate() +static func get_purchase_quantity(item_id: StringName, owned: int) -> int: + if item_id == &"worms": + return maxi(WORM_MAX_STACK - owned, 0) + return 1 + + +static func is_bait_topoff(item_id: StringName) -> bool: + return item_id == &"worms" + + static func purchase_one( item_id: StringName, wallet: PlayerWalletType, @@ -42,9 +55,9 @@ static func purchase_one( price < 0 or item == null or not item.is_valid() - or item.category != ItemDataType.Category.CONSUMABLE + or (item.category != ItemDataType.Category.CONSUMABLE and not is_bait_topoff(item_id)) or not item.stackable - or not item.usable + or (not item.usable and not is_bait_topoff(item_id)) or not bag.can_add_item(item_id, 1) or not wallet.can_afford(price) ): diff --git a/fish/fish_catch.gd b/fish/fish_catch.gd index 5edc9c4..a0d3738 100644 --- a/fish/fish_catch.gd +++ b/fish/fish_catch.gd @@ -127,7 +127,7 @@ static func from_save_dict( 0.0, MAX_SAFE_WEIGHT_LB ) - var loaded_scale: float = _read_safe_float( + var _loaded_scale: float = _read_safe_float( data["display_scale"], 0.0, MAX_SAFE_DISPLAY_SCALE @@ -141,7 +141,7 @@ static func from_save_dict( or loaded_sale_value < 0 or not FishQualityType.is_valid(loaded_quality) or loaded_weight <= 0.0 - or loaded_scale <= 0.0 + or _loaded_scale <= 0.0 or typeof(loaded_favorite) != TYPE_BOOL ): return null @@ -152,7 +152,12 @@ static func from_save_dict( fish_catch.catch_id = loaded_catch_id fish_catch.catch_sequence = loaded_sequence fish_catch.weight_lb = loaded_weight - fish_catch.display_scale = loaded_scale + # Recompute presentation size from authoritative weight. This keeps saves + # written before the weight-based sizing rule from retaining oversized + # per-species display values. + fish_catch.display_scale = resolved_fish.get_display_scale_for_weight( + loaded_weight + ) fish_catch.quality = loaded_quality fish_catch.sale_value = loaded_sale_value fish_catch.is_favorited = bool(loaded_favorite) @@ -180,7 +185,7 @@ static func from_network_dict( var loaded_weight: float = _read_safe_float( data.get("weight_lb"), 0.0, MAX_SAFE_WEIGHT_LB ) - var loaded_scale: float = _read_safe_float( + var _loaded_scale: float = _read_safe_float( data.get("display_scale"), 0.0, MAX_SAFE_DISPLAY_SCALE ) var loaded_value: int = _read_safe_integer( @@ -196,7 +201,7 @@ static func from_network_dict( or loaded_id.length() > 160 or loaded_fish_id != resolved_fish.id or loaded_weight <= 0.0 - or loaded_scale <= 0.0 + or _loaded_scale <= 0.0 or loaded_value < 0 or not FishQualityType.is_valid(loaded_quality) ): @@ -207,7 +212,9 @@ static func from_network_dict( fish_catch.catch_id = loaded_id fish_catch.catch_sequence = 0 fish_catch.weight_lb = loaded_weight - fish_catch.display_scale = loaded_scale + fish_catch.display_scale = resolved_fish.get_display_scale_for_weight( + loaded_weight + ) fish_catch.quality = loaded_quality fish_catch.sale_value = loaded_value fish_catch.is_favorited = false diff --git a/fish/fish_data.gd b/fish/fish_data.gd index fd327b1..2bb99af 100644 --- a/fish/fish_data.gd +++ b/fish/fish_data.gd @@ -1,6 +1,16 @@ class_name FishData extends Resource +# Fish are displayed by their physical weight, rather than by per-species +# texture or resource dimensions. A cube-root curve approximates the way a +# fish's linear dimensions grow with mass while keeping large catches readable +# beside the player. +const DISPLAY_REFERENCE_WEIGHT_LB: float = 1.0 +const DISPLAY_REFERENCE_SCALE: float = 0.85 +const DISPLAY_WEIGHT_EXPONENT: float = 0.33333334 +const DISPLAY_MIN_SCALE: float = 0.45 +const DISPLAY_MAX_SCALE: float = 3.0 + const CatchDifficultyProfileType = preload( "res://fishing/catch_difficulty_profile.gd" ) @@ -24,6 +34,8 @@ var allowed_water_types: int = WaterType.ALL_FISHABLE_MASK @export var availability: FishAvailabilityType @export_range(0.01, 1000.0, 0.01) var weight_min_lb: float = 0.5 @export_range(0.01, 1000.0, 0.01) var weight_max_lb: float = 1.0 +# Retained in resource files for compatibility with existing authored data; +# runtime presentation is derived from absolute weight below. @export_range(0.01, 20.0, 0.01) var display_scale_min: float = 0.8 @export_range(0.01, 20.0, 0.01) var display_scale_max: float = 1.2 @export_range(0.01, 10.0, 0.01) var display_scale_curve: float = 1.0 @@ -69,23 +81,26 @@ func get_maximum_weight() -> float: return maxf(weight_max_lb, get_minimum_weight()) -func get_display_scale_for_weight(weight_lb: float) -> float: +func get_weight_percentile(weight_lb: float) -> float: var minimum_weight: float = get_minimum_weight() var maximum_weight: float = get_maximum_weight() - var normalized_weight: float = 0.0 - if maximum_weight > minimum_weight: - normalized_weight = inverse_lerp( - minimum_weight, - maximum_weight, - weight_lb - ) - normalized_weight = pow( - clampf(normalized_weight, 0.0, 1.0), - maxf(display_scale_curve, 0.01) + if maximum_weight <= minimum_weight: + return 0.0 + return clampf( + inverse_lerp(minimum_weight, maximum_weight, weight_lb), + 0.0, + 1.0, ) - var minimum_scale: float = maxf(display_scale_min, 0.01) - var maximum_scale: float = maxf(display_scale_max, minimum_scale) - return lerpf(minimum_scale, maximum_scale, normalized_weight) + + +func get_display_scale_for_weight(weight_lb: float) -> float: + var safe_weight_lb: float = maxf(weight_lb, 0.01) + var weight_ratio: float = safe_weight_lb / DISPLAY_REFERENCE_WEIGHT_LB + var weight_scale: float = DISPLAY_REFERENCE_SCALE * pow( + weight_ratio, + DISPLAY_WEIGHT_EXPONENT, + ) + return clampf(weight_scale, DISPLAY_MIN_SCALE, DISPLAY_MAX_SCALE) func get_sale_value_for_weight(weight_lb: float) -> int: diff --git a/fish/fish_quality.gd b/fish/fish_quality.gd index d43039b..0559679 100644 --- a/fish/fish_quality.gd +++ b/fish/fish_quality.gd @@ -15,11 +15,20 @@ const ALL_TIERS_MASK: int = (1 << TIER_COUNT) - 1 # Starting distribution. Equipment and tackle can supply per-tier # multipliers later without changing catch serialization or tier identity. const BASE_ROLL_WEIGHTS: Array[float] = [40.0, 32.0, 18.0, 8.0, 2.0] +const WORM_ROLL_WEIGHTS: Array[float] = [80.0, 10.0, 5.0, 4.0, 1.0] const SALE_MULTIPLIERS: Array[float] = [1.0, 1.1, 1.25, 1.5, 2.0] -# Provisional challenge curve. Fish profiles continue to own their baseline -# barrier health; quality scales that authored baseline before player upgrades -# apply damage. This keeps future rods, bait, and lures on one shared seam. +# Legacy profile multiplier retained for serialized/profile compatibility. +# New encounters use the weighted quality/rarity/weight bands below. const BARRIER_HEALTH_MULTIPLIERS: Array[float] = [1.0, 1.25, 1.6, 2.2, 3.25] +# Barrier health is weighted 70% by quality, 20% by rarity, and 10% by the +# catch's position in its authored weight range. The upper bounds define the +# intended per-barrier challenge bands; a small seeded variance keeps barriers +# from feeling identical without crossing those bands. +const BARRIER_QUALITY_WEIGHT: float = 0.70 +const BARRIER_RARITY_WEIGHT: float = 0.20 +const BARRIER_WEIGHT_WEIGHT: float = 0.10 +const BARRIER_HEALTH_MINIMUMS: Array[int] = [1, 10, 50, 100, 200] +const BARRIER_HEALTH_MAXIMUMS: Array[int] = [9, 50, 100, 200, 400] const DISPLAY_NAMES: PackedStringArray = [ "boring", "average", @@ -74,6 +83,32 @@ static func apply_barrier_health(base_health: int, quality: int) -> int: ) +static func barrier_health_for_catch( + quality: int, + rarity: int, + weight_percentile: float, + variance: float = 1.0, +) -> int: + var safe_quality: int = ( + quality if is_valid(quality) else Tier.BORING + ) + var safe_rarity: float = clampf(float(rarity) / 4.0, 0.0, 1.0) + var safe_weight: float = clampf(weight_percentile, 0.0, 1.0) + var weighted_health: float = float(BARRIER_HEALTH_MAXIMUMS[safe_quality]) * ( + BARRIER_QUALITY_WEIGHT + + BARRIER_RARITY_WEIGHT * safe_rarity + + BARRIER_WEIGHT_WEIGHT * safe_weight + ) + var varied_health: int = roundi( + weighted_health * clampf(variance, 0.8, 1.2) + ) + return clampi( + varied_health, + BARRIER_HEALTH_MINIMUMS[safe_quality], + BARRIER_HEALTH_MAXIMUMS[safe_quality], + ) + + static func roll( rng: RandomNumberGenerator, weight_multipliers: Array[float] = [], @@ -100,6 +135,21 @@ static func roll( return Tier.SHINY +static func roll_weights_for_bait(active_bait_tags: Array[StringName]) -> Array[float]: + var weights: Array[float] = [] + if active_bait_tags.is_empty(): + weights.assign([2.5, 0.0, 0.0, 0.0, 0.0]) + else: + weights.assign([ + WORM_ROLL_WEIGHTS[0] / BASE_ROLL_WEIGHTS[0], + WORM_ROLL_WEIGHTS[1] / BASE_ROLL_WEIGHTS[1], + WORM_ROLL_WEIGHTS[2] / BASE_ROLL_WEIGHTS[2], + WORM_ROLL_WEIGHTS[3] / BASE_ROLL_WEIGHTS[3], + WORM_ROLL_WEIGHTS[4] / BASE_ROLL_WEIGHTS[4], + ]) + return weights + + static func qualified_name(fish_name: String, quality: int) -> String: return "%s %s" % [display_name(quality), fish_name] diff --git a/fish/fish_selector.gd b/fish/fish_selector.gd index 8ed9a2a..17c3ff7 100644 --- a/fish/fish_selector.gd +++ b/fish/fish_selector.gd @@ -14,6 +14,7 @@ var quality_weight_multipliers: Array[float] = [] var use_deterministic_test_seed: bool = false var deterministic_test_seed: int = 24680 var selection_seed: int = 0 +var _active_bait_tags: Array[StringName] = [] var _rng := RandomNumberGenerator.new() @@ -34,8 +35,12 @@ func select_fish( ) -> FishDataType: if pool == null or context == null or collection_log == null: return null - - var eligible_fish: Array[FishDataType] = [] + _active_bait_tags = context.active_bait_tags.duplicate() + var all_fish: Array[FishDataType] = [] + var all_weights: Array[float] = [] + var rarity_fish: Array[FishDataType] = [] + var rarity_weights: Array[float] = [] + var selected_rarity: int = _roll_rarity(context) var weights: Array[float] = [] var total_weight: float = 0.0 for fish: FishDataType in pool.candidates: @@ -46,17 +51,23 @@ func select_fish( if fish.availability != null and not fish.availability.is_available(context): continue var final_weight: float = fish.base_catch_weight - if fish.availability != null: - final_weight *= fish.availability.get_bait_weight_multiplier(context) + # Species-specific preferred bait is deprecated. Bait now controls + # quality and rarity bands globally; required tags remain authoritative. if not collection_log.has_discovered(fish.id): final_weight *= maxf(undiscovered_weight_multiplier, 0.0) if fish.rarity >= 0 and fish.rarity < rarity_weight_multipliers.size(): final_weight *= maxf(rarity_weight_multipliers[fish.rarity], 0.0) if final_weight <= 0.0: continue - eligible_fish.append(fish) - weights.append(final_weight) - total_weight += final_weight + all_fish.append(fish) + all_weights.append(final_weight) + if int(fish.rarity) == selected_rarity: + rarity_fish.append(fish) + rarity_weights.append(final_weight) + var eligible_fish: Array[FishDataType] = rarity_fish if not rarity_fish.is_empty() else all_fish + weights = rarity_weights if not rarity_weights.is_empty() else all_weights + for weight: float in weights: + total_weight += weight if eligible_fish.is_empty() or total_weight <= 0.0: return null @@ -69,7 +80,27 @@ func select_fish( return eligible_fish.back() -func create_catch(fish: FishDataType) -> FishCatchType: +func _roll_rarity(context: FishingContextType) -> int: + var weights: Array[float] = [100.0, 0.0, 0.0, 0.0, 0.0] + if not context.active_bait_tags.is_empty(): + weights = [80.0, 10.0, 5.0, 4.0, 1.0] + for index: int in range(weights.size()): + if index < rarity_weight_multipliers.size(): + weights[index] *= maxf(rarity_weight_multipliers[index], 0.0) + var total: float = 0.0 + for weight: float in weights: + total += weight + if total <= 0.0: + return FishDataType.Rarity.COMMON + var roll: float = _rng.randf() * total + for index: int in range(weights.size()): + roll -= weights[index] + if roll <= 0.0: + return index + return FishDataType.Rarity.LEGENDARY + + +func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> FishCatchType: if fish == null or not fish.is_selectable(): return null var caught_fish := FishCatchType.new() @@ -83,9 +114,13 @@ func create_catch(fish: FishDataType) -> FishCatchType: caught_fish.display_scale = fish.get_display_scale_for_weight( caught_fish.weight_lb ) + var effective_bait: Array[StringName] = bait_tags if not bait_tags.is_empty() else _active_bait_tags + var quality_multipliers: Array[float] = FishQualityType.roll_weights_for_bait(effective_bait) + for quality: int in range(mini(quality_multipliers.size(), quality_weight_multipliers.size())): + quality_multipliers[quality] *= maxf(quality_weight_multipliers[quality], 0.0) caught_fish.quality = FishQualityType.roll( _rng, - quality_weight_multipliers, + quality_multipliers, ) caught_fish.sale_value = FishQualityType.apply_sale_value( fish.get_sale_value_for_weight(caught_fish.weight_lb), diff --git a/fish/pools/fish_catalog.tres b/fish/pools/fish_catalog.tres index d646449..73609c8 100644 --- a/fish/pools/fish_catalog.tres +++ b/fish/pools/fish_catalog.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" load_steps=21 format=3] +[gd_resource type="Resource" load_steps=55 format=3] [ext_resource type="Script" path="res://fish/fish_pool.gd" id="1_pool"] [ext_resource type="Resource" path="res://fish/species/bluegill/bluegill.tres" id="2_bluegill"] @@ -20,7 +20,41 @@ [ext_resource type="Resource" path="res://fish/species/salmon_coho/salmon_coho.tres" id="18_salmon_coho"] [ext_resource type="Resource" path="res://fish/species/salmon_pink/salmon_pink.tres" id="19_salmon_pink"] [ext_resource type="Resource" path="res://fish/species/salmon_sockeye/salmon_sockeye.tres" id="20_salmon_sockeye"] +[ext_resource type="Resource" path="res://fish/species/anchovy_european/anchovy_european.tres" id="21_anchovy_european"] +[ext_resource type="Resource" path="res://fish/species/anchovy_northern/anchovy_northern.tres" id="22_anchovy_northern"] +[ext_resource type="Resource" path="res://fish/species/chub_european/chub_european.tres" id="23_chub_european"] +[ext_resource type="Resource" path="res://fish/species/chub_flame/chub_flame.tres" id="24_chub_flame"] +[ext_resource type="Resource" path="res://fish/species/chub_lake/chub_lake.tres" id="25_chub_lake"] +[ext_resource type="Resource" path="res://fish/species/goldfish/goldfish.tres" id="26_goldfish"] +[ext_resource type="Resource" path="res://fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres" id="27_goldfish_bubbleeye"] +[ext_resource type="Resource" path="res://fish/species/grouper_gulf/grouper_gulf.tres" id="28_grouper_gulf"] +[ext_resource type="Resource" path="res://fish/species/grouper_red/grouper_red.tres" id="29_grouper_red"] +[ext_resource type="Resource" path="res://fish/species/mackerel_atlantic/mackerel_atlantic.tres" id="30_mackerel_atlantic"] +[ext_resource type="Resource" path="res://fish/species/mackerel_cero/mackerel_cero.tres" id="31_mackerel_cero"] +[ext_resource type="Resource" path="res://fish/species/mackerel_chub/mackerel_chub.tres" id="32_mackerel_chub"] +[ext_resource type="Resource" path="res://fish/species/mackerel_king/mackerel_king.tres" id="33_mackerel_king"] +[ext_resource type="Resource" path="res://fish/species/mackerel_spanish/mackerel_spanish.tres" id="34_mackerel_spanish"] +[ext_resource type="Resource" path="res://fish/species/marlin_black/marlin_black.tres" id="35_marlin_black"] +[ext_resource type="Resource" path="res://fish/species/marlin_blue/marlin_blue.tres" id="36_marlin_blue"] +[ext_resource type="Resource" path="res://fish/species/marlin_white/marlin_white.tres" id="37_marlin_white"] +[ext_resource type="Resource" path="res://fish/species/pomfret_black/pomfret_black.tres" id="38_pomfret_black"] +[ext_resource type="Resource" path="res://fish/species/pomfret_chinese/pomfret_chinese.tres" id="39_pomfret_chinese"] +[ext_resource type="Resource" path="res://fish/species/pomfret_golden/pomfret_golden.tres" id="40_pomfret_golden"] +[ext_resource type="Resource" path="res://fish/species/pomfret_white/pomfret_white.tres" id="41_pomfret_white"] +[ext_resource type="Resource" path="res://fish/species/sailfish/sailfish.tres" id="42_sailfish"] +[ext_resource type="Resource" path="res://fish/species/sauger/sauger.tres" id="43_sauger"] +[ext_resource type="Resource" path="res://fish/species/saugeye/saugeye.tres" id="44_saugeye"] +[ext_resource type="Resource" path="res://fish/species/snapper_lane/snapper_lane.tres" id="45_snapper_lane"] +[ext_resource type="Resource" path="res://fish/species/snapper_mangrove/snapper_mangrove.tres" id="46_snapper_mangrove"] +[ext_resource type="Resource" path="res://fish/species/snapper_mutton/snapper_mutton.tres" id="47_snapper_mutton"] +[ext_resource type="Resource" path="res://fish/species/snapper_red/snapper_red.tres" id="48_snapper_red"] +[ext_resource type="Resource" path="res://fish/species/swordfish/swordfish.tres" id="49_swordfish"] +[ext_resource type="Resource" path="res://fish/species/trout_cutthroat/trout_cutthroat.tres" id="50_trout_cutthroat"] +[ext_resource type="Resource" path="res://fish/species/trout_golden/trout_golden.tres" id="51_trout_golden"] +[ext_resource type="Resource" path="res://fish/species/trout_rainbow/trout_rainbow.tres" id="52_trout_rainbow"] +[ext_resource type="Resource" path="res://fish/species/trout_steelhead/trout_steelhead.tres" id="53_trout_steelhead"] +[ext_resource type="Resource" path="res://fish/species/walleye/walleye.tres" id="54_walleye"] [resource] script = ExtResource("1_pool") -candidates = [ExtResource("2_bluegill"), ExtResource("3_bass"), ExtResource("4_carp"), ExtResource("5_sunfish"), ExtResource("6_catfish_blue"), ExtResource("7_catfish_channel"), ExtResource("8_catfish_flathead"), ExtResource("9_catfish_white"), ExtResource("10_tuna_albacore"), ExtResource("11_tuna_bigeye"), ExtResource("12_tuna_bluefin"), ExtResource("13_tuna_skipjack"), ExtResource("14_tuna_yellowfin"), ExtResource("15_goby_round"), ExtResource("16_salmon_atlantic"), ExtResource("17_salmon_chum"), ExtResource("18_salmon_coho"), ExtResource("19_salmon_pink"), ExtResource("20_salmon_sockeye")] +candidates = [ExtResource("2_bluegill"), ExtResource("3_bass"), ExtResource("4_carp"), ExtResource("5_sunfish"), ExtResource("6_catfish_blue"), ExtResource("7_catfish_channel"), ExtResource("8_catfish_flathead"), ExtResource("9_catfish_white"), ExtResource("10_tuna_albacore"), ExtResource("11_tuna_bigeye"), ExtResource("12_tuna_bluefin"), ExtResource("13_tuna_skipjack"), ExtResource("14_tuna_yellowfin"), ExtResource("15_goby_round"), ExtResource("16_salmon_atlantic"), ExtResource("17_salmon_chum"), ExtResource("18_salmon_coho"), ExtResource("19_salmon_pink"), ExtResource("20_salmon_sockeye"), ExtResource("21_anchovy_european"), ExtResource("22_anchovy_northern"), ExtResource("23_chub_european"), ExtResource("24_chub_flame"), ExtResource("25_chub_lake"), ExtResource("26_goldfish"), ExtResource("27_goldfish_bubbleeye"), ExtResource("28_grouper_gulf"), ExtResource("29_grouper_red"), ExtResource("30_mackerel_atlantic"), ExtResource("31_mackerel_cero"), ExtResource("32_mackerel_chub"), ExtResource("33_mackerel_king"), ExtResource("34_mackerel_spanish"), ExtResource("35_marlin_black"), ExtResource("36_marlin_blue"), ExtResource("37_marlin_white"), ExtResource("38_pomfret_black"), ExtResource("39_pomfret_chinese"), ExtResource("40_pomfret_golden"), ExtResource("41_pomfret_white"), ExtResource("42_sailfish"), ExtResource("43_sauger"), ExtResource("44_saugeye"), ExtResource("45_snapper_lane"), ExtResource("46_snapper_mangrove"), ExtResource("47_snapper_mutton"), ExtResource("48_snapper_red"), ExtResource("49_swordfish"), ExtResource("50_trout_cutthroat"), ExtResource("51_trout_golden"), ExtResource("52_trout_rainbow"), ExtResource("53_trout_steelhead"), ExtResource("54_walleye")] diff --git a/fish/pools/starter_ocean_pool.tres b/fish/pools/starter_ocean_pool.tres index 8772d68..1e47a2b 100644 --- a/fish/pools/starter_ocean_pool.tres +++ b/fish/pools/starter_ocean_pool.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" load_steps=14 format=3] +[gd_resource type="Resource" load_steps=36 format=3] [ext_resource type="Script" path="res://fish/fish_pool.gd" id="1_pool"] [ext_resource type="Resource" path="res://fish/species/bass/bass.tres" id="2_bass"] @@ -13,7 +13,29 @@ [ext_resource type="Resource" path="res://fish/species/salmon_coho/salmon_coho.tres" id="11_salmon_coho"] [ext_resource type="Resource" path="res://fish/species/salmon_pink/salmon_pink.tres" id="12_salmon_pink"] [ext_resource type="Resource" path="res://fish/species/salmon_sockeye/salmon_sockeye.tres" id="13_salmon_sockeye"] +[ext_resource type="Resource" path="res://fish/species/anchovy_european/anchovy_european.tres" id="14_anchovy_european"] +[ext_resource type="Resource" path="res://fish/species/anchovy_northern/anchovy_northern.tres" id="15_anchovy_northern"] +[ext_resource type="Resource" path="res://fish/species/grouper_gulf/grouper_gulf.tres" id="16_grouper_gulf"] +[ext_resource type="Resource" path="res://fish/species/grouper_red/grouper_red.tres" id="17_grouper_red"] +[ext_resource type="Resource" path="res://fish/species/mackerel_atlantic/mackerel_atlantic.tres" id="18_mackerel_atlantic"] +[ext_resource type="Resource" path="res://fish/species/mackerel_cero/mackerel_cero.tres" id="19_mackerel_cero"] +[ext_resource type="Resource" path="res://fish/species/mackerel_chub/mackerel_chub.tres" id="20_mackerel_chub"] +[ext_resource type="Resource" path="res://fish/species/mackerel_king/mackerel_king.tres" id="21_mackerel_king"] +[ext_resource type="Resource" path="res://fish/species/mackerel_spanish/mackerel_spanish.tres" id="22_mackerel_spanish"] +[ext_resource type="Resource" path="res://fish/species/marlin_black/marlin_black.tres" id="23_marlin_black"] +[ext_resource type="Resource" path="res://fish/species/marlin_blue/marlin_blue.tres" id="24_marlin_blue"] +[ext_resource type="Resource" path="res://fish/species/marlin_white/marlin_white.tres" id="25_marlin_white"] +[ext_resource type="Resource" path="res://fish/species/pomfret_black/pomfret_black.tres" id="26_pomfret_black"] +[ext_resource type="Resource" path="res://fish/species/pomfret_chinese/pomfret_chinese.tres" id="27_pomfret_chinese"] +[ext_resource type="Resource" path="res://fish/species/pomfret_golden/pomfret_golden.tres" id="28_pomfret_golden"] +[ext_resource type="Resource" path="res://fish/species/pomfret_white/pomfret_white.tres" id="29_pomfret_white"] +[ext_resource type="Resource" path="res://fish/species/sailfish/sailfish.tres" id="30_sailfish"] +[ext_resource type="Resource" path="res://fish/species/snapper_lane/snapper_lane.tres" id="31_snapper_lane"] +[ext_resource type="Resource" path="res://fish/species/snapper_mangrove/snapper_mangrove.tres" id="32_snapper_mangrove"] +[ext_resource type="Resource" path="res://fish/species/snapper_mutton/snapper_mutton.tres" id="33_snapper_mutton"] +[ext_resource type="Resource" path="res://fish/species/snapper_red/snapper_red.tres" id="34_snapper_red"] +[ext_resource type="Resource" path="res://fish/species/swordfish/swordfish.tres" id="35_swordfish"] [resource] script = ExtResource("1_pool") -candidates = [ExtResource("2_bass"), ExtResource("3_sunfish"), ExtResource("4_tuna_albacore"), ExtResource("5_tuna_bigeye"), ExtResource("6_tuna_bluefin"), ExtResource("7_tuna_skipjack"), ExtResource("8_tuna_yellowfin"), ExtResource("9_salmon_atlantic"), ExtResource("10_salmon_chum"), ExtResource("11_salmon_coho"), ExtResource("12_salmon_pink"), ExtResource("13_salmon_sockeye")] +candidates = [ExtResource("2_bass"), ExtResource("3_sunfish"), ExtResource("4_tuna_albacore"), ExtResource("5_tuna_bigeye"), ExtResource("6_tuna_bluefin"), ExtResource("7_tuna_skipjack"), ExtResource("8_tuna_yellowfin"), ExtResource("9_salmon_atlantic"), ExtResource("10_salmon_chum"), ExtResource("11_salmon_coho"), ExtResource("12_salmon_pink"), ExtResource("13_salmon_sockeye"), ExtResource("14_anchovy_european"), ExtResource("15_anchovy_northern"), ExtResource("16_grouper_gulf"), ExtResource("17_grouper_red"), ExtResource("18_mackerel_atlantic"), ExtResource("19_mackerel_cero"), ExtResource("20_mackerel_chub"), ExtResource("21_mackerel_king"), ExtResource("22_mackerel_spanish"), ExtResource("23_marlin_black"), ExtResource("24_marlin_blue"), ExtResource("25_marlin_white"), ExtResource("26_pomfret_black"), ExtResource("27_pomfret_chinese"), ExtResource("28_pomfret_golden"), ExtResource("29_pomfret_white"), ExtResource("30_sailfish"), ExtResource("31_snapper_lane"), ExtResource("32_snapper_mangrove"), ExtResource("33_snapper_mutton"), ExtResource("34_snapper_red"), ExtResource("35_swordfish")] diff --git a/fish/pools/starter_pond_pool.tres b/fish/pools/starter_pond_pool.tres index 276aaa5..de1a327 100644 --- a/fish/pools/starter_pond_pool.tres +++ b/fish/pools/starter_pond_pool.tres @@ -1,14 +1,26 @@ -[gd_resource type="Resource" load_steps=9 format=3] +[gd_resource type="Resource" load_steps=21 format=3] [ext_resource type="Script" path="res://fish/fish_pool.gd" id="1_pool"] [ext_resource type="Resource" path="res://fish/species/bluegill/bluegill.tres" id="2_bluegill"] -[ext_resource type="Resource" path="res://fish/species/carp/carp.tres" id="4_carp"] -[ext_resource type="Resource" path="res://fish/species/catfish_blue/catfish_blue.tres" id="6_catfish_blue"] -[ext_resource type="Resource" path="res://fish/species/catfish_channel/catfish_channel.tres" id="7_catfish_channel"] -[ext_resource type="Resource" path="res://fish/species/catfish_flathead/catfish_flathead.tres" id="8_catfish_flathead"] -[ext_resource type="Resource" path="res://fish/species/catfish_white/catfish_white.tres" id="9_catfish_white"] -[ext_resource type="Resource" path="res://fish/species/goby_round/goby_round.tres" id="10_goby_round"] +[ext_resource type="Resource" path="res://fish/species/carp/carp.tres" id="3_carp"] +[ext_resource type="Resource" path="res://fish/species/catfish_blue/catfish_blue.tres" id="4_catfish_blue"] +[ext_resource type="Resource" path="res://fish/species/catfish_channel/catfish_channel.tres" id="5_catfish_channel"] +[ext_resource type="Resource" path="res://fish/species/catfish_flathead/catfish_flathead.tres" id="6_catfish_flathead"] +[ext_resource type="Resource" path="res://fish/species/catfish_white/catfish_white.tres" id="7_catfish_white"] +[ext_resource type="Resource" path="res://fish/species/goby_round/goby_round.tres" id="8_goby_round"] +[ext_resource type="Resource" path="res://fish/species/chub_european/chub_european.tres" id="9_chub_european"] +[ext_resource type="Resource" path="res://fish/species/chub_flame/chub_flame.tres" id="10_chub_flame"] +[ext_resource type="Resource" path="res://fish/species/chub_lake/chub_lake.tres" id="11_chub_lake"] +[ext_resource type="Resource" path="res://fish/species/goldfish/goldfish.tres" id="12_goldfish"] +[ext_resource type="Resource" path="res://fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres" id="13_goldfish_bubbleeye"] +[ext_resource type="Resource" path="res://fish/species/sauger/sauger.tres" id="14_sauger"] +[ext_resource type="Resource" path="res://fish/species/saugeye/saugeye.tres" id="15_saugeye"] +[ext_resource type="Resource" path="res://fish/species/trout_cutthroat/trout_cutthroat.tres" id="16_trout_cutthroat"] +[ext_resource type="Resource" path="res://fish/species/trout_golden/trout_golden.tres" id="17_trout_golden"] +[ext_resource type="Resource" path="res://fish/species/trout_rainbow/trout_rainbow.tres" id="18_trout_rainbow"] +[ext_resource type="Resource" path="res://fish/species/trout_steelhead/trout_steelhead.tres" id="19_trout_steelhead"] +[ext_resource type="Resource" path="res://fish/species/walleye/walleye.tres" id="20_walleye"] [resource] script = ExtResource("1_pool") -candidates = [ExtResource("2_bluegill"), ExtResource("4_carp"), ExtResource("6_catfish_blue"), ExtResource("7_catfish_channel"), ExtResource("8_catfish_flathead"), ExtResource("9_catfish_white"), ExtResource("10_goby_round")] +candidates = [ExtResource("2_bluegill"), ExtResource("3_carp"), ExtResource("4_catfish_blue"), ExtResource("5_catfish_channel"), ExtResource("6_catfish_flathead"), ExtResource("7_catfish_white"), ExtResource("8_goby_round"), ExtResource("9_chub_european"), ExtResource("10_chub_flame"), ExtResource("11_chub_lake"), ExtResource("12_goldfish"), ExtResource("13_goldfish_bubbleeye"), ExtResource("14_sauger"), ExtResource("15_saugeye"), ExtResource("16_trout_cutthroat"), ExtResource("17_trout_golden"), ExtResource("18_trout_rainbow"), ExtResource("19_trout_steelhead"), ExtResource("20_walleye")] diff --git a/fish/species/anchovy_european/anchovy_european.tres b/fish/species/anchovy_european/anchovy_european.tres new file mode 100644 index 0000000..7df7b18 --- /dev/null +++ b/fish/species/anchovy_european/anchovy_european.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/anchovy_european/fish_anchovy_european.png" id="4_texture"] + +[sub_resource type="Resource" id="AnchovyEuropeanAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"anchovy_european" +display_name = "european anchovy" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("AnchovyEuropeanAvailability") +weight_min_lb = 0.05 +weight_max_lb = 0.25 +display_scale_min = 0.85 +display_scale_max = 1.0 +display_scale_curve = 0.9 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/anchovy_european/fish_anchovy_european.png b/fish/species/anchovy_european/fish_anchovy_european.png new file mode 100644 index 0000000..44742f8 Binary files /dev/null and b/fish/species/anchovy_european/fish_anchovy_european.png differ diff --git a/fish/species/anchovy_european/fish_anchovy_european.png.import b/fish/species/anchovy_european/fish_anchovy_european.png.import new file mode 100644 index 0000000..c4fd63a --- /dev/null +++ b/fish/species/anchovy_european/fish_anchovy_european.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://debgohfsg4ec7" +path="res://.godot/imported/fish_anchovy_european.png-67d070da34e29a3123fed0030af0d694.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/anchovy_european/fish_anchovy_european.png" +dest_files=["res://.godot/imported/fish_anchovy_european.png-67d070da34e29a3123fed0030af0d694.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/anchovy_northern/anchovy_northern.tres b/fish/species/anchovy_northern/anchovy_northern.tres new file mode 100644 index 0000000..edd6d28 --- /dev/null +++ b/fish/species/anchovy_northern/anchovy_northern.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/anchovy_northern/fish_anchovy_northern.png" id="4_texture"] + +[sub_resource type="Resource" id="AnchovyNorthernAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"anchovy_northern" +display_name = "northern anchovy" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("AnchovyNorthernAvailability") +weight_min_lb = 0.05 +weight_max_lb = 0.35 +display_scale_min = 0.85 +display_scale_max = 1.0 +display_scale_curve = 0.9 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/anchovy_northern/fish_anchovy_northern.png b/fish/species/anchovy_northern/fish_anchovy_northern.png new file mode 100644 index 0000000..20bacd8 Binary files /dev/null and b/fish/species/anchovy_northern/fish_anchovy_northern.png differ diff --git a/fish/species/anchovy_northern/fish_anchovy_northern.png.import b/fish/species/anchovy_northern/fish_anchovy_northern.png.import new file mode 100644 index 0000000..68ae1ea --- /dev/null +++ b/fish/species/anchovy_northern/fish_anchovy_northern.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://6sikqc8eivta" +path="res://.godot/imported/fish_anchovy_northern.png-b1d3cbc1c8208168c212589a431f1227.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/anchovy_northern/fish_anchovy_northern.png" +dest_files=["res://.godot/imported/fish_anchovy_northern.png-b1d3cbc1c8208168c212589a431f1227.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/chub_european/chub_european.tres b/fish/species/chub_european/chub_european.tres new file mode 100644 index 0000000..73b1a5d --- /dev/null +++ b/fish/species/chub_european/chub_european.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/chub_european/fish_chub_european.png" id="4_texture"] + +[sub_resource type="Resource" id="ChubEuropeanAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"chub_european" +display_name = "european chub" +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 0.55 +catch_profile = ExtResource("2_profile") +availability = SubResource("ChubEuropeanAvailability") +weight_min_lb = 0.2 +weight_max_lb = 6.0 +display_scale_min = 0.85 +display_scale_max = 1.2 +display_scale_curve = 0.9 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/chub_european/fish_chub_european.png b/fish/species/chub_european/fish_chub_european.png new file mode 100644 index 0000000..03ed536 Binary files /dev/null and b/fish/species/chub_european/fish_chub_european.png differ diff --git a/fish/species/chub_european/fish_chub_european.png.import b/fish/species/chub_european/fish_chub_european.png.import new file mode 100644 index 0000000..0c241b0 --- /dev/null +++ b/fish/species/chub_european/fish_chub_european.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c04wtbyslmpll" +path="res://.godot/imported/fish_chub_european.png-da2784298a62b1d90038dacb4cf25e35.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/chub_european/fish_chub_european.png" +dest_files=["res://.godot/imported/fish_chub_european.png-da2784298a62b1d90038dacb4cf25e35.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/chub_flame/chub_flame.tres b/fish/species/chub_flame/chub_flame.tres new file mode 100644 index 0000000..976a007 --- /dev/null +++ b/fish/species/chub_flame/chub_flame.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/chub_flame/fish_chub_flame.png" id="4_texture"] + +[sub_resource type="Resource" id="ChubFlameAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"chub_flame" +display_name = "flame chub" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.4 +catch_profile = ExtResource("2_profile") +availability = SubResource("ChubFlameAvailability") +weight_min_lb = 0.05 +weight_max_lb = 0.15 +display_scale_min = 0.85 +display_scale_max = 1.1 +display_scale_curve = 0.9 +sell_value_min = 3 +sell_value_max = 6 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/chub_flame/fish_chub_flame.png b/fish/species/chub_flame/fish_chub_flame.png new file mode 100644 index 0000000..98c67e3 Binary files /dev/null and b/fish/species/chub_flame/fish_chub_flame.png differ diff --git a/fish/species/chub_flame/fish_chub_flame.png.import b/fish/species/chub_flame/fish_chub_flame.png.import new file mode 100644 index 0000000..8cad0d9 --- /dev/null +++ b/fish/species/chub_flame/fish_chub_flame.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bla6pc21imxsi" +path="res://.godot/imported/fish_chub_flame.png-9c7780910f16d333d5109ee4e80aa8fb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/chub_flame/fish_chub_flame.png" +dest_files=["res://.godot/imported/fish_chub_flame.png-9c7780910f16d333d5109ee4e80aa8fb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/chub_lake/chub_lake.tres b/fish/species/chub_lake/chub_lake.tres new file mode 100644 index 0000000..b610f95 --- /dev/null +++ b/fish/species/chub_lake/chub_lake.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/chub_lake/fish_chub_lake.png" id="4_texture"] + +[sub_resource type="Resource" id="ChubLakeAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"chub_lake" +display_name = "lake chub" +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 0.55 +catch_profile = ExtResource("2_profile") +availability = SubResource("ChubLakeAvailability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +display_scale_min = 0.85 +display_scale_max = 1.0 +display_scale_curve = 0.9 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/chub_lake/fish_chub_lake.png b/fish/species/chub_lake/fish_chub_lake.png new file mode 100644 index 0000000..73101f6 Binary files /dev/null and b/fish/species/chub_lake/fish_chub_lake.png differ diff --git a/fish/species/chub_lake/fish_chub_lake.png.import b/fish/species/chub_lake/fish_chub_lake.png.import new file mode 100644 index 0000000..1be73f0 --- /dev/null +++ b/fish/species/chub_lake/fish_chub_lake.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://w8cjrpnv350h" +path="res://.godot/imported/fish_chub_lake.png-cbb7f27fe4a21820691bbb9c3b9bd3e9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/chub_lake/fish_chub_lake.png" +dest_files=["res://.godot/imported/fish_chub_lake.png-cbb7f27fe4a21820691bbb9c3b9bd3e9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/goldfish/fish_goldfish.png b/fish/species/goldfish/fish_goldfish.png new file mode 100644 index 0000000..7ca035b Binary files /dev/null and b/fish/species/goldfish/fish_goldfish.png differ diff --git a/fish/species/goldfish/fish_goldfish.png.import b/fish/species/goldfish/fish_goldfish.png.import new file mode 100644 index 0000000..4d9a960 --- /dev/null +++ b/fish/species/goldfish/fish_goldfish.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6uth7aob03kg" +path="res://.godot/imported/fish_goldfish.png-567cddb5ae1fc7839cc6dbc80a9a23f3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/goldfish/fish_goldfish.png" +dest_files=["res://.godot/imported/fish_goldfish.png-567cddb5ae1fc7839cc6dbc80a9a23f3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/goldfish/goldfish.tres b/fish/species/goldfish/goldfish.tres new file mode 100644 index 0000000..c2d5d09 --- /dev/null +++ b/fish/species/goldfish/goldfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/goldfish/fish_goldfish.png" id="4_texture"] + +[sub_resource type="Resource" id="GoldfishAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"goldfish" +display_name = "goldfish" +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 0.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("GoldfishAvailability") +weight_min_lb = 0.1 +weight_max_lb = 4.0 +display_scale_min = 0.85 +display_scale_max = 1.1 +display_scale_curve = 0.9 +sell_value_min = 1 +sell_value_max = 3 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png b/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png new file mode 100644 index 0000000..b621e16 Binary files /dev/null and b/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png differ diff --git a/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png.import b/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png.import new file mode 100644 index 0000000..1344959 --- /dev/null +++ b/fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brjjnxr6n7olr" +path="res://.godot/imported/fish_goldfish_bubbleeye.png-a8dcb7e4fb9c7a1beebe2852d2d38d80.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png" +dest_files=["res://.godot/imported/fish_goldfish_bubbleeye.png-a8dcb7e4fb9c7a1beebe2852d2d38d80.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres b/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres new file mode 100644 index 0000000..d5425a0 --- /dev/null +++ b/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png" id="4_texture"] + +[sub_resource type="Resource" id="GoldfishBubbleeyeAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"goldfish_bubbleeye" +display_name = "bubble-eye goldfish" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("GoldfishBubbleeyeAvailability") +weight_min_lb = 0.1 +weight_max_lb = 0.35 +display_scale_min = 0.85 +display_scale_max = 1.0 +display_scale_curve = 0.9 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/grouper_gulf/fish_grouper_gulf.png b/fish/species/grouper_gulf/fish_grouper_gulf.png new file mode 100644 index 0000000..e74ea10 Binary files /dev/null and b/fish/species/grouper_gulf/fish_grouper_gulf.png differ diff --git a/fish/species/grouper_gulf/fish_grouper_gulf.png.import b/fish/species/grouper_gulf/fish_grouper_gulf.png.import new file mode 100644 index 0000000..c14f066 --- /dev/null +++ b/fish/species/grouper_gulf/fish_grouper_gulf.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ctu8xd5or7v3h" +path="res://.godot/imported/fish_grouper_gulf.png-8313134ee6830c8e9208b9e3cf5c5333.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/grouper_gulf/fish_grouper_gulf.png" +dest_files=["res://.godot/imported/fish_grouper_gulf.png-8313134ee6830c8e9208b9e3cf5c5333.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/grouper_gulf/grouper_gulf.tres b/fish/species/grouper_gulf/grouper_gulf.tres new file mode 100644 index 0000000..17caf23 --- /dev/null +++ b/fish/species/grouper_gulf/grouper_gulf.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/grouper_gulf/fish_grouper_gulf.png" id="4_texture"] + +[sub_resource type="Resource" id="GrouperGulfAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"grouper_gulf" +display_name = "gulf grouper" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("GrouperGulfAvailability") +weight_min_lb = 2 +weight_max_lb = 40 +display_scale_min = 0.85 +display_scale_max = 1.8 +display_scale_curve = 0.9 +sell_value_min = 10 +sell_value_max = 24 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/grouper_red/fish_grouper_red.png b/fish/species/grouper_red/fish_grouper_red.png new file mode 100644 index 0000000..33b5481 Binary files /dev/null and b/fish/species/grouper_red/fish_grouper_red.png differ diff --git a/fish/species/grouper_red/fish_grouper_red.png.import b/fish/species/grouper_red/fish_grouper_red.png.import new file mode 100644 index 0000000..bd8eac9 --- /dev/null +++ b/fish/species/grouper_red/fish_grouper_red.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jjcc78tffxhb" +path="res://.godot/imported/fish_grouper_red.png-6056013819bdaaeb55a98fa0f9d8ca75.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/grouper_red/fish_grouper_red.png" +dest_files=["res://.godot/imported/fish_grouper_red.png-6056013819bdaaeb55a98fa0f9d8ca75.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/grouper_red/grouper_red.tres b/fish/species/grouper_red/grouper_red.tres new file mode 100644 index 0000000..d7d8f02 --- /dev/null +++ b/fish/species/grouper_red/grouper_red.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/grouper_red/fish_grouper_red.png" id="4_texture"] + +[sub_resource type="Resource" id="GrouperRedAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"grouper_red" +display_name = "red grouper" +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("GrouperRedAvailability") +weight_min_lb = 2 +weight_max_lb = 30 +display_scale_min = 0.85 +display_scale_max = 2.0 +display_scale_curve = 0.9 +sell_value_min = 16 +sell_value_max = 36 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png b/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png new file mode 100644 index 0000000..67a2410 Binary files /dev/null and b/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png differ diff --git a/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png.import b/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png.import new file mode 100644 index 0000000..424fcda --- /dev/null +++ b/fish/species/mackerel_atlantic/fish_mackerel_atlantic.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://breyc8fqq8lq3" +path="res://.godot/imported/fish_mackerel_atlantic.png-51809cdfc48d2f0c69100567067a64e8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/mackerel_atlantic/fish_mackerel_atlantic.png" +dest_files=["res://.godot/imported/fish_mackerel_atlantic.png-51809cdfc48d2f0c69100567067a64e8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/mackerel_atlantic/mackerel_atlantic.tres b/fish/species/mackerel_atlantic/mackerel_atlantic.tres new file mode 100644 index 0000000..8b6ecaf --- /dev/null +++ b/fish/species/mackerel_atlantic/mackerel_atlantic.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/mackerel_atlantic/fish_mackerel_atlantic.png" id="4_texture"] + +[sub_resource type="Resource" id="MackerelAtlanticAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"mackerel_atlantic" +display_name = "atlantic mackerel" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("MackerelAtlanticAvailability") +weight_min_lb = 0.5 +weight_max_lb = 5 +display_scale_min = 0.85 +display_scale_max = 1.4 +display_scale_curve = 0.9 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/mackerel_cero/fish_mackerel_cero.png b/fish/species/mackerel_cero/fish_mackerel_cero.png new file mode 100644 index 0000000..82cb340 Binary files /dev/null and b/fish/species/mackerel_cero/fish_mackerel_cero.png differ diff --git a/fish/species/mackerel_cero/fish_mackerel_cero.png.import b/fish/species/mackerel_cero/fish_mackerel_cero.png.import new file mode 100644 index 0000000..131c8fc --- /dev/null +++ b/fish/species/mackerel_cero/fish_mackerel_cero.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://g8qanq47g1b8" +path="res://.godot/imported/fish_mackerel_cero.png-8da33920501446c8e4d87a07f02f0710.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/mackerel_cero/fish_mackerel_cero.png" +dest_files=["res://.godot/imported/fish_mackerel_cero.png-8da33920501446c8e4d87a07f02f0710.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/mackerel_cero/mackerel_cero.tres b/fish/species/mackerel_cero/mackerel_cero.tres new file mode 100644 index 0000000..304af5a --- /dev/null +++ b/fish/species/mackerel_cero/mackerel_cero.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/mackerel_cero/fish_mackerel_cero.png" id="4_texture"] + +[sub_resource type="Resource" id="MackerelCeroAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"mackerel_cero" +display_name = "cero mackerel" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("MackerelCeroAvailability") +weight_min_lb = 1 +weight_max_lb = 15 +display_scale_min = 0.85 +display_scale_max = 1.5 +display_scale_curve = 0.9 +sell_value_min = 7 +sell_value_max = 15 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/mackerel_chub/fish_mackerel_chub.png b/fish/species/mackerel_chub/fish_mackerel_chub.png new file mode 100644 index 0000000..c0687ff Binary files /dev/null and b/fish/species/mackerel_chub/fish_mackerel_chub.png differ diff --git a/fish/species/mackerel_chub/fish_mackerel_chub.png.import b/fish/species/mackerel_chub/fish_mackerel_chub.png.import new file mode 100644 index 0000000..d6be52b --- /dev/null +++ b/fish/species/mackerel_chub/fish_mackerel_chub.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7q2t02oo2bcp" +path="res://.godot/imported/fish_mackerel_chub.png-16a10a6e686dbb920ba5ae98c9dd10a8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/mackerel_chub/fish_mackerel_chub.png" +dest_files=["res://.godot/imported/fish_mackerel_chub.png-16a10a6e686dbb920ba5ae98c9dd10a8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/mackerel_chub/mackerel_chub.tres b/fish/species/mackerel_chub/mackerel_chub.tres new file mode 100644 index 0000000..90c2746 --- /dev/null +++ b/fish/species/mackerel_chub/mackerel_chub.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/mackerel_chub/fish_mackerel_chub.png" id="4_texture"] + +[sub_resource type="Resource" id="MackerelChubAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"mackerel_chub" +display_name = "chub mackerel" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("MackerelChubAvailability") +weight_min_lb = 0.5 +weight_max_lb = 4 +display_scale_min = 0.85 +display_scale_max = 1.4 +display_scale_curve = 0.9 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/mackerel_king/fish_mackerel_king.png b/fish/species/mackerel_king/fish_mackerel_king.png new file mode 100644 index 0000000..01fd603 Binary files /dev/null and b/fish/species/mackerel_king/fish_mackerel_king.png differ diff --git a/fish/species/mackerel_king/fish_mackerel_king.png.import b/fish/species/mackerel_king/fish_mackerel_king.png.import new file mode 100644 index 0000000..213307a --- /dev/null +++ b/fish/species/mackerel_king/fish_mackerel_king.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2fag3xemyx5s" +path="res://.godot/imported/fish_mackerel_king.png-6cd4b6aef031a72436383f7e75f54cc9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/mackerel_king/fish_mackerel_king.png" +dest_files=["res://.godot/imported/fish_mackerel_king.png-6cd4b6aef031a72436383f7e75f54cc9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/mackerel_king/mackerel_king.tres b/fish/species/mackerel_king/mackerel_king.tres new file mode 100644 index 0000000..df9f8f3 --- /dev/null +++ b/fish/species/mackerel_king/mackerel_king.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/mackerel_king/fish_mackerel_king.png" id="4_texture"] + +[sub_resource type="Resource" id="MackerelKingAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"mackerel_king" +display_name = "king mackerel" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("MackerelKingAvailability") +weight_min_lb = 3 +weight_max_lb = 40 +display_scale_min = 0.85 +display_scale_max = 1.8 +display_scale_curve = 0.9 +sell_value_min = 10 +sell_value_max = 24 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/mackerel_spanish/fish_mackerel_spanish.png b/fish/species/mackerel_spanish/fish_mackerel_spanish.png new file mode 100644 index 0000000..2a97bed Binary files /dev/null and b/fish/species/mackerel_spanish/fish_mackerel_spanish.png differ diff --git a/fish/species/mackerel_spanish/fish_mackerel_spanish.png.import b/fish/species/mackerel_spanish/fish_mackerel_spanish.png.import new file mode 100644 index 0000000..00d8314 --- /dev/null +++ b/fish/species/mackerel_spanish/fish_mackerel_spanish.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy2hmpenpkee2" +path="res://.godot/imported/fish_mackerel_spanish.png-14336b47fbd7fc1f1bcf0ce301b2b130.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/mackerel_spanish/fish_mackerel_spanish.png" +dest_files=["res://.godot/imported/fish_mackerel_spanish.png-14336b47fbd7fc1f1bcf0ce301b2b130.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/mackerel_spanish/mackerel_spanish.tres b/fish/species/mackerel_spanish/mackerel_spanish.tres new file mode 100644 index 0000000..e93d082 --- /dev/null +++ b/fish/species/mackerel_spanish/mackerel_spanish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/mackerel_spanish/fish_mackerel_spanish.png" id="4_texture"] + +[sub_resource type="Resource" id="MackerelSpanishAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"mackerel_spanish" +display_name = "spanish mackerel" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("MackerelSpanishAvailability") +weight_min_lb = 1 +weight_max_lb = 15 +display_scale_min = 0.85 +display_scale_max = 1.6 +display_scale_curve = 0.9 +sell_value_min = 8 +sell_value_max = 18 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/marlin_black/fish_marlin_black.png b/fish/species/marlin_black/fish_marlin_black.png new file mode 100644 index 0000000..6cbcccd Binary files /dev/null and b/fish/species/marlin_black/fish_marlin_black.png differ diff --git a/fish/species/marlin_black/fish_marlin_black.png.import b/fish/species/marlin_black/fish_marlin_black.png.import new file mode 100644 index 0000000..429803e --- /dev/null +++ b/fish/species/marlin_black/fish_marlin_black.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkdctr2o52vrb" +path="res://.godot/imported/fish_marlin_black.png-8e8b83d60a3f56d5d14f9e7c3ce2a9f9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/marlin_black/fish_marlin_black.png" +dest_files=["res://.godot/imported/fish_marlin_black.png-8e8b83d60a3f56d5d14f9e7c3ce2a9f9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/marlin_black/marlin_black.tres b/fish/species/marlin_black/marlin_black.tres new file mode 100644 index 0000000..f76b8e3 --- /dev/null +++ b/fish/species/marlin_black/marlin_black.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/marlin_black/fish_marlin_black.png" id="4_texture"] + +[sub_resource type="Resource" id="MarlinBlackAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"marlin_black" +display_name = "black marlin" +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.08 +catch_profile = ExtResource("2_profile") +availability = SubResource("MarlinBlackAvailability") +weight_min_lb = 80 +weight_max_lb = 700 +display_scale_min = 0.85 +display_scale_max = 2.8 +display_scale_curve = 0.9 +sell_value_min = 45 +sell_value_max = 90 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/marlin_blue/fish_marlin_blue.png b/fish/species/marlin_blue/fish_marlin_blue.png new file mode 100644 index 0000000..7df059f Binary files /dev/null and b/fish/species/marlin_blue/fish_marlin_blue.png differ diff --git a/fish/species/marlin_blue/fish_marlin_blue.png.import b/fish/species/marlin_blue/fish_marlin_blue.png.import new file mode 100644 index 0000000..73053d8 --- /dev/null +++ b/fish/species/marlin_blue/fish_marlin_blue.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://de35fjoytbomu" +path="res://.godot/imported/fish_marlin_blue.png-268aff4aa2760732f42f94b881681364.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/marlin_blue/fish_marlin_blue.png" +dest_files=["res://.godot/imported/fish_marlin_blue.png-268aff4aa2760732f42f94b881681364.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/marlin_blue/marlin_blue.tres b/fish/species/marlin_blue/marlin_blue.tres new file mode 100644 index 0000000..214587b --- /dev/null +++ b/fish/species/marlin_blue/marlin_blue.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/marlin_blue/fish_marlin_blue.png" id="4_texture"] + +[sub_resource type="Resource" id="MarlinBlueAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"marlin_blue" +display_name = "blue marlin" +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.05 +catch_profile = ExtResource("2_profile") +availability = SubResource("MarlinBlueAvailability") +weight_min_lb = 100 +weight_max_lb = 1000 +display_scale_min = 0.85 +display_scale_max = 3.0 +display_scale_curve = 0.9 +sell_value_min = 60 +sell_value_max = 120 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/marlin_white/fish_marlin_white.png b/fish/species/marlin_white/fish_marlin_white.png new file mode 100644 index 0000000..76fb780 Binary files /dev/null and b/fish/species/marlin_white/fish_marlin_white.png differ diff --git a/fish/species/marlin_white/fish_marlin_white.png.import b/fish/species/marlin_white/fish_marlin_white.png.import new file mode 100644 index 0000000..1ec83d0 --- /dev/null +++ b/fish/species/marlin_white/fish_marlin_white.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdvy4ujx2htcy" +path="res://.godot/imported/fish_marlin_white.png-a5c5fec8891d945d6565d5097e312c31.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/marlin_white/fish_marlin_white.png" +dest_files=["res://.godot/imported/fish_marlin_white.png-a5c5fec8891d945d6565d5097e312c31.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/marlin_white/marlin_white.tres b/fish/species/marlin_white/marlin_white.tres new file mode 100644 index 0000000..a4aada5 --- /dev/null +++ b/fish/species/marlin_white/marlin_white.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/marlin_white/fish_marlin_white.png" id="4_texture"] + +[sub_resource type="Resource" id="MarlinWhiteAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"marlin_white" +display_name = "white marlin" +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("MarlinWhiteAvailability") +weight_min_lb = 30 +weight_max_lb = 180 +display_scale_min = 0.85 +display_scale_max = 2.5 +display_scale_curve = 0.9 +sell_value_min = 35 +sell_value_max = 70 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/pomfret_black/fish_pomfret_black.png b/fish/species/pomfret_black/fish_pomfret_black.png new file mode 100644 index 0000000..14ae878 Binary files /dev/null and b/fish/species/pomfret_black/fish_pomfret_black.png differ diff --git a/fish/species/pomfret_black/fish_pomfret_black.png.import b/fish/species/pomfret_black/fish_pomfret_black.png.import new file mode 100644 index 0000000..c8748a8 --- /dev/null +++ b/fish/species/pomfret_black/fish_pomfret_black.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ch3y6xdo22j1o" +path="res://.godot/imported/fish_pomfret_black.png-f757c46fb76cb4f9eee68c3143813d3f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/pomfret_black/fish_pomfret_black.png" +dest_files=["res://.godot/imported/fish_pomfret_black.png-f757c46fb76cb4f9eee68c3143813d3f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/pomfret_black/pomfret_black.tres b/fish/species/pomfret_black/pomfret_black.tres new file mode 100644 index 0000000..c483306 --- /dev/null +++ b/fish/species/pomfret_black/pomfret_black.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/pomfret_black/fish_pomfret_black.png" id="4_texture"] + +[sub_resource type="Resource" id="PomfretBlackAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"pomfret_black" +display_name = "black pomfret" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("PomfretBlackAvailability") +weight_min_lb = 1 +weight_max_lb = 15 +display_scale_min = 0.85 +display_scale_max = 1.8 +display_scale_curve = 0.9 +sell_value_min = 8 +sell_value_max = 18 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/pomfret_chinese/fish_pomfret_chinese.png b/fish/species/pomfret_chinese/fish_pomfret_chinese.png new file mode 100644 index 0000000..a7bb55e Binary files /dev/null and b/fish/species/pomfret_chinese/fish_pomfret_chinese.png differ diff --git a/fish/species/pomfret_chinese/fish_pomfret_chinese.png.import b/fish/species/pomfret_chinese/fish_pomfret_chinese.png.import new file mode 100644 index 0000000..cdf2c5b --- /dev/null +++ b/fish/species/pomfret_chinese/fish_pomfret_chinese.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cijr0gseldncc" +path="res://.godot/imported/fish_pomfret_chinese.png-a68ccb2e407266ab98980bb3087760ad.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/pomfret_chinese/fish_pomfret_chinese.png" +dest_files=["res://.godot/imported/fish_pomfret_chinese.png-a68ccb2e407266ab98980bb3087760ad.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/pomfret_chinese/pomfret_chinese.tres b/fish/species/pomfret_chinese/pomfret_chinese.tres new file mode 100644 index 0000000..1517438 --- /dev/null +++ b/fish/species/pomfret_chinese/pomfret_chinese.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/pomfret_chinese/fish_pomfret_chinese.png" id="4_texture"] + +[sub_resource type="Resource" id="PomfretChineseAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"pomfret_chinese" +display_name = "chinese pomfret" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("PomfretChineseAvailability") +weight_min_lb = 1 +weight_max_lb = 20 +display_scale_min = 0.85 +display_scale_max = 1.9 +display_scale_curve = 0.9 +sell_value_min = 9 +sell_value_max = 20 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/pomfret_golden/fish_pomfret_golden.png b/fish/species/pomfret_golden/fish_pomfret_golden.png new file mode 100644 index 0000000..a844b87 Binary files /dev/null and b/fish/species/pomfret_golden/fish_pomfret_golden.png differ diff --git a/fish/species/pomfret_golden/fish_pomfret_golden.png.import b/fish/species/pomfret_golden/fish_pomfret_golden.png.import new file mode 100644 index 0000000..bd77922 --- /dev/null +++ b/fish/species/pomfret_golden/fish_pomfret_golden.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7rjv7k60bv7q" +path="res://.godot/imported/fish_pomfret_golden.png-932aebb2b7e0fef891368bcd8e2ca1c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/pomfret_golden/fish_pomfret_golden.png" +dest_files=["res://.godot/imported/fish_pomfret_golden.png-932aebb2b7e0fef891368bcd8e2ca1c7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/pomfret_golden/pomfret_golden.tres b/fish/species/pomfret_golden/pomfret_golden.tres new file mode 100644 index 0000000..203210e --- /dev/null +++ b/fish/species/pomfret_golden/pomfret_golden.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/pomfret_golden/fish_pomfret_golden.png" id="4_texture"] + +[sub_resource type="Resource" id="PomfretGoldenAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"pomfret_golden" +display_name = "golden pomfret" +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.18 +catch_profile = ExtResource("2_profile") +availability = SubResource("PomfretGoldenAvailability") +weight_min_lb = 2 +weight_max_lb = 25 +display_scale_min = 0.85 +display_scale_max = 2.1 +display_scale_curve = 0.9 +sell_value_min = 14 +sell_value_max = 30 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/pomfret_white/fish_pomfret_white.png b/fish/species/pomfret_white/fish_pomfret_white.png new file mode 100644 index 0000000..0f2d426 Binary files /dev/null and b/fish/species/pomfret_white/fish_pomfret_white.png differ diff --git a/fish/species/pomfret_white/fish_pomfret_white.png.import b/fish/species/pomfret_white/fish_pomfret_white.png.import new file mode 100644 index 0000000..b3da3f2 --- /dev/null +++ b/fish/species/pomfret_white/fish_pomfret_white.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3fr0x4e1nfe0" +path="res://.godot/imported/fish_pomfret_white.png-10c529e20d581d581fc12328c7d152fe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/pomfret_white/fish_pomfret_white.png" +dest_files=["res://.godot/imported/fish_pomfret_white.png-10c529e20d581d581fc12328c7d152fe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/pomfret_white/pomfret_white.tres b/fish/species/pomfret_white/pomfret_white.tres new file mode 100644 index 0000000..1687c15 --- /dev/null +++ b/fish/species/pomfret_white/pomfret_white.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/pomfret_white/fish_pomfret_white.png" id="4_texture"] + +[sub_resource type="Resource" id="PomfretWhiteAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"pomfret_white" +display_name = "white pomfret" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.45 +catch_profile = ExtResource("2_profile") +availability = SubResource("PomfretWhiteAvailability") +weight_min_lb = 0.5 +weight_max_lb = 10 +display_scale_min = 0.85 +display_scale_max = 1.6 +display_scale_curve = 0.9 +sell_value_min = 5 +sell_value_max = 12 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/sailfish/fish_sailfish.png b/fish/species/sailfish/fish_sailfish.png new file mode 100644 index 0000000..e359a3e Binary files /dev/null and b/fish/species/sailfish/fish_sailfish.png differ diff --git a/fish/species/sailfish/fish_sailfish.png.import b/fish/species/sailfish/fish_sailfish.png.import new file mode 100644 index 0000000..ee25011 --- /dev/null +++ b/fish/species/sailfish/fish_sailfish.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8rlcnfqx8or0" +path="res://.godot/imported/fish_sailfish.png-cc20ed43042eb2d6867954aa1a1772da.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/sailfish/fish_sailfish.png" +dest_files=["res://.godot/imported/fish_sailfish.png-cc20ed43042eb2d6867954aa1a1772da.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/sailfish/sailfish.tres b/fish/species/sailfish/sailfish.tres new file mode 100644 index 0000000..f90415d --- /dev/null +++ b/fish/species/sailfish/sailfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/sailfish/fish_sailfish.png" id="4_texture"] + +[sub_resource type="Resource" id="SailfishAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"sailfish" +display_name = "sailfish" +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("SailfishAvailability") +weight_min_lb = 30 +weight_max_lb = 200 +display_scale_min = 0.85 +display_scale_max = 2.6 +display_scale_curve = 0.9 +sell_value_min = 38 +sell_value_max = 78 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/sauger/fish_sauger.png b/fish/species/sauger/fish_sauger.png new file mode 100644 index 0000000..c4e2763 Binary files /dev/null and b/fish/species/sauger/fish_sauger.png differ diff --git a/fish/species/sauger/fish_sauger.png.import b/fish/species/sauger/fish_sauger.png.import new file mode 100644 index 0000000..02110fe --- /dev/null +++ b/fish/species/sauger/fish_sauger.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8k7qkk4juciy" +path="res://.godot/imported/fish_sauger.png-9b3abc6f8648ebbd51a56abeedbb4826.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/sauger/fish_sauger.png" +dest_files=["res://.godot/imported/fish_sauger.png-9b3abc6f8648ebbd51a56abeedbb4826.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/sauger/sauger.tres b/fish/species/sauger/sauger.tres new file mode 100644 index 0000000..07c7fec --- /dev/null +++ b/fish/species/sauger/sauger.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/sauger/fish_sauger.png" id="4_texture"] + +[sub_resource type="Resource" id="SaugerAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"sauger" +display_name = "sauger" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("SaugerAvailability") +weight_min_lb = 0.5 +weight_max_lb = 8 +display_scale_min = 0.85 +display_scale_max = 1.4 +display_scale_curve = 0.9 +sell_value_min = 6 +sell_value_max = 12 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/saugeye/fish_saugeye.png b/fish/species/saugeye/fish_saugeye.png new file mode 100644 index 0000000..0674902 Binary files /dev/null and b/fish/species/saugeye/fish_saugeye.png differ diff --git a/fish/species/saugeye/fish_saugeye.png.import b/fish/species/saugeye/fish_saugeye.png.import new file mode 100644 index 0000000..6011e7b --- /dev/null +++ b/fish/species/saugeye/fish_saugeye.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lom25y0eqcw3" +path="res://.godot/imported/fish_saugeye.png-638130dc7e3f534cf48d3da80fc2c3df.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/saugeye/fish_saugeye.png" +dest_files=["res://.godot/imported/fish_saugeye.png-638130dc7e3f534cf48d3da80fc2c3df.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/saugeye/saugeye.tres b/fish/species/saugeye/saugeye.tres new file mode 100644 index 0000000..fc5e0f9 --- /dev/null +++ b/fish/species/saugeye/saugeye.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/saugeye/fish_saugeye.png" id="4_texture"] + +[sub_resource type="Resource" id="SaugeyeAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"saugeye" +display_name = "saugeye" +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("SaugeyeAvailability") +weight_min_lb = 0.5 +weight_max_lb = 12 +display_scale_min = 0.85 +display_scale_max = 1.6 +display_scale_curve = 0.9 +sell_value_min = 9 +sell_value_max = 18 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/snapper_lane/fish_snapper_lane.png b/fish/species/snapper_lane/fish_snapper_lane.png new file mode 100644 index 0000000..afedbc3 Binary files /dev/null and b/fish/species/snapper_lane/fish_snapper_lane.png differ diff --git a/fish/species/snapper_lane/fish_snapper_lane.png.import b/fish/species/snapper_lane/fish_snapper_lane.png.import new file mode 100644 index 0000000..323b6a0 --- /dev/null +++ b/fish/species/snapper_lane/fish_snapper_lane.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3d8s30bxq4tp" +path="res://.godot/imported/fish_snapper_lane.png-e491c67d8214edb53b8a2005c274c743.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/snapper_lane/fish_snapper_lane.png" +dest_files=["res://.godot/imported/fish_snapper_lane.png-e491c67d8214edb53b8a2005c274c743.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/snapper_lane/snapper_lane.tres b/fish/species/snapper_lane/snapper_lane.tres new file mode 100644 index 0000000..448d973 --- /dev/null +++ b/fish/species/snapper_lane/snapper_lane.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/snapper_lane/fish_snapper_lane.png" id="4_texture"] + +[sub_resource type="Resource" id="SnapperLaneAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"snapper_lane" +display_name = "lane snapper" +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 0.45 +catch_profile = ExtResource("2_profile") +availability = SubResource("SnapperLaneAvailability") +weight_min_lb = 0.5 +weight_max_lb = 5 +display_scale_min = 0.85 +display_scale_max = 1.5 +display_scale_curve = 0.9 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/snapper_mangrove/fish_snapper_mangrove.png b/fish/species/snapper_mangrove/fish_snapper_mangrove.png new file mode 100644 index 0000000..758ee16 Binary files /dev/null and b/fish/species/snapper_mangrove/fish_snapper_mangrove.png differ diff --git a/fish/species/snapper_mangrove/fish_snapper_mangrove.png.import b/fish/species/snapper_mangrove/fish_snapper_mangrove.png.import new file mode 100644 index 0000000..7567a29 --- /dev/null +++ b/fish/species/snapper_mangrove/fish_snapper_mangrove.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://v34sdv1v7c2x" +path="res://.godot/imported/fish_snapper_mangrove.png-fb4a657d3596495207f499095e50e416.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/snapper_mangrove/fish_snapper_mangrove.png" +dest_files=["res://.godot/imported/fish_snapper_mangrove.png-fb4a657d3596495207f499095e50e416.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/snapper_mangrove/snapper_mangrove.tres b/fish/species/snapper_mangrove/snapper_mangrove.tres new file mode 100644 index 0000000..976f3ac --- /dev/null +++ b/fish/species/snapper_mangrove/snapper_mangrove.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/snapper_mangrove/fish_snapper_mangrove.png" id="4_texture"] + +[sub_resource type="Resource" id="SnapperMangroveAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"snapper_mangrove" +display_name = "mangrove snapper" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("SnapperMangroveAvailability") +weight_min_lb = 0.5 +weight_max_lb = 12 +display_scale_min = 0.85 +display_scale_max = 1.7 +display_scale_curve = 0.9 +sell_value_min = 7 +sell_value_max = 16 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/snapper_mutton/fish_snapper_mutton.png b/fish/species/snapper_mutton/fish_snapper_mutton.png new file mode 100644 index 0000000..f8de3ff Binary files /dev/null and b/fish/species/snapper_mutton/fish_snapper_mutton.png differ diff --git a/fish/species/snapper_mutton/fish_snapper_mutton.png.import b/fish/species/snapper_mutton/fish_snapper_mutton.png.import new file mode 100644 index 0000000..cc283b6 --- /dev/null +++ b/fish/species/snapper_mutton/fish_snapper_mutton.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cawvpo8aysw5i" +path="res://.godot/imported/fish_snapper_mutton.png-c83ebfec373a81cf6c3f34599406aad6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/snapper_mutton/fish_snapper_mutton.png" +dest_files=["res://.godot/imported/fish_snapper_mutton.png-c83ebfec373a81cf6c3f34599406aad6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/snapper_mutton/snapper_mutton.tres b/fish/species/snapper_mutton/snapper_mutton.tres new file mode 100644 index 0000000..0791c4a --- /dev/null +++ b/fish/species/snapper_mutton/snapper_mutton.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/snapper_mutton/fish_snapper_mutton.png" id="4_texture"] + +[sub_resource type="Resource" id="SnapperMuttonAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"snapper_mutton" +display_name = "mutton snapper" +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("SnapperMuttonAvailability") +weight_min_lb = 2 +weight_max_lb = 30 +display_scale_min = 0.85 +display_scale_max = 1.9 +display_scale_curve = 0.9 +sell_value_min = 12 +sell_value_max = 28 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/snapper_red/fish_snapper_red.png b/fish/species/snapper_red/fish_snapper_red.png new file mode 100644 index 0000000..435a95e Binary files /dev/null and b/fish/species/snapper_red/fish_snapper_red.png differ diff --git a/fish/species/snapper_red/fish_snapper_red.png.import b/fish/species/snapper_red/fish_snapper_red.png.import new file mode 100644 index 0000000..6412dfc --- /dev/null +++ b/fish/species/snapper_red/fish_snapper_red.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ei5scljuqklk" +path="res://.godot/imported/fish_snapper_red.png-b66be0003a9d62c443a185008180dd96.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/snapper_red/fish_snapper_red.png" +dest_files=["res://.godot/imported/fish_snapper_red.png-b66be0003a9d62c443a185008180dd96.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/snapper_red/snapper_red.tres b/fish/species/snapper_red/snapper_red.tres new file mode 100644 index 0000000..259a278 --- /dev/null +++ b/fish/species/snapper_red/snapper_red.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/snapper_red/fish_snapper_red.png" id="4_texture"] + +[sub_resource type="Resource" id="SnapperRedAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"snapper_red" +display_name = "red snapper" +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("SnapperRedAvailability") +weight_min_lb = 1 +weight_max_lb = 25 +display_scale_min = 0.85 +display_scale_max = 1.7 +display_scale_curve = 0.9 +sell_value_min = 8 +sell_value_max = 19 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/swordfish/fish_swordfish.png b/fish/species/swordfish/fish_swordfish.png new file mode 100644 index 0000000..a43d703 Binary files /dev/null and b/fish/species/swordfish/fish_swordfish.png differ diff --git a/fish/species/swordfish/fish_swordfish.png.import b/fish/species/swordfish/fish_swordfish.png.import new file mode 100644 index 0000000..4979773 --- /dev/null +++ b/fish/species/swordfish/fish_swordfish.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cs1qmm4galac4" +path="res://.godot/imported/fish_swordfish.png-c82f3cdc508ed13c9ec1a5b28b6eb830.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/swordfish/fish_swordfish.png" +dest_files=["res://.godot/imported/fish_swordfish.png-c82f3cdc508ed13c9ec1a5b28b6eb830.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/swordfish/swordfish.tres b/fish/species/swordfish/swordfish.tres new file mode 100644 index 0000000..d4ace6b --- /dev/null +++ b/fish/species/swordfish/swordfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/swordfish/fish_swordfish.png" id="4_texture"] + +[sub_resource type="Resource" id="SwordfishAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"ocean"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"swordfish" +display_name = "swordfish" +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.06 +catch_profile = ExtResource("2_profile") +availability = SubResource("SwordfishAvailability") +weight_min_lb = 50 +weight_max_lb = 1000 +display_scale_min = 0.85 +display_scale_max = 3.0 +display_scale_curve = 0.9 +sell_value_min = 55 +sell_value_max = 110 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/trout_cutthroat/fish_trout_cutthroat.png b/fish/species/trout_cutthroat/fish_trout_cutthroat.png new file mode 100644 index 0000000..9e45417 Binary files /dev/null and b/fish/species/trout_cutthroat/fish_trout_cutthroat.png differ diff --git a/fish/species/trout_cutthroat/fish_trout_cutthroat.png.import b/fish/species/trout_cutthroat/fish_trout_cutthroat.png.import new file mode 100644 index 0000000..90a255e --- /dev/null +++ b/fish/species/trout_cutthroat/fish_trout_cutthroat.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nowggrl8wmr" +path="res://.godot/imported/fish_trout_cutthroat.png-a27813936c24b235f8eea97a7a7dfdc0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/trout_cutthroat/fish_trout_cutthroat.png" +dest_files=["res://.godot/imported/fish_trout_cutthroat.png-a27813936c24b235f8eea97a7a7dfdc0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/trout_cutthroat/trout_cutthroat.tres b/fish/species/trout_cutthroat/trout_cutthroat.tres new file mode 100644 index 0000000..605ba3e --- /dev/null +++ b/fish/species/trout_cutthroat/trout_cutthroat.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/trout_cutthroat/fish_trout_cutthroat.png" id="4_texture"] + +[sub_resource type="Resource" id="TroutCutthroatAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"trout_cutthroat" +display_name = "cutthroat trout" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.4 +catch_profile = ExtResource("2_profile") +availability = SubResource("TroutCutthroatAvailability") +weight_min_lb = 0.25 +weight_max_lb = 10 +display_scale_min = 0.85 +display_scale_max = 1.4 +display_scale_curve = 0.9 +sell_value_min = 5 +sell_value_max = 12 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/trout_golden/fish_trout_golden.png b/fish/species/trout_golden/fish_trout_golden.png new file mode 100644 index 0000000..209b82d Binary files /dev/null and b/fish/species/trout_golden/fish_trout_golden.png differ diff --git a/fish/species/trout_golden/fish_trout_golden.png.import b/fish/species/trout_golden/fish_trout_golden.png.import new file mode 100644 index 0000000..bdff181 --- /dev/null +++ b/fish/species/trout_golden/fish_trout_golden.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b64w3kwf3wins" +path="res://.godot/imported/fish_trout_golden.png-00b8999ee94694397caec57987d8241d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/trout_golden/fish_trout_golden.png" +dest_files=["res://.godot/imported/fish_trout_golden.png-00b8999ee94694397caec57987d8241d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/trout_golden/trout_golden.tres b/fish/species/trout_golden/trout_golden.tres new file mode 100644 index 0000000..d5347b8 --- /dev/null +++ b/fish/species/trout_golden/trout_golden.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/trout_golden/fish_trout_golden.png" id="4_texture"] + +[sub_resource type="Resource" id="TroutGoldenAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"trout_golden" +display_name = "golden trout" +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("TroutGoldenAvailability") +weight_min_lb = 0.2 +weight_max_lb = 3 +display_scale_min = 0.85 +display_scale_max = 1.2 +display_scale_curve = 0.9 +sell_value_min = 8 +sell_value_max = 16 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/trout_rainbow/fish_trout_rainbow.png b/fish/species/trout_rainbow/fish_trout_rainbow.png new file mode 100644 index 0000000..ff6fd06 Binary files /dev/null and b/fish/species/trout_rainbow/fish_trout_rainbow.png differ diff --git a/fish/species/trout_rainbow/fish_trout_rainbow.png.import b/fish/species/trout_rainbow/fish_trout_rainbow.png.import new file mode 100644 index 0000000..fd8eafe --- /dev/null +++ b/fish/species/trout_rainbow/fish_trout_rainbow.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mfxehkoxea21" +path="res://.godot/imported/fish_trout_rainbow.png-e58603ff0df9519b81e6b0d0da55998c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/trout_rainbow/fish_trout_rainbow.png" +dest_files=["res://.godot/imported/fish_trout_rainbow.png-e58603ff0df9519b81e6b0d0da55998c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/trout_rainbow/trout_rainbow.tres b/fish/species/trout_rainbow/trout_rainbow.tres new file mode 100644 index 0000000..f5d1bb4 --- /dev/null +++ b/fish/species/trout_rainbow/trout_rainbow.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/trout_rainbow/fish_trout_rainbow.png" id="4_texture"] + +[sub_resource type="Resource" id="TroutRainbowAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"trout_rainbow" +display_name = "rainbow trout" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.45 +catch_profile = ExtResource("2_profile") +availability = SubResource("TroutRainbowAvailability") +weight_min_lb = 0.5 +weight_max_lb = 20 +display_scale_min = 0.85 +display_scale_max = 1.4 +display_scale_curve = 0.9 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/trout_steelhead/fish_trout_steelhead.png b/fish/species/trout_steelhead/fish_trout_steelhead.png new file mode 100644 index 0000000..b2600e0 Binary files /dev/null and b/fish/species/trout_steelhead/fish_trout_steelhead.png differ diff --git a/fish/species/trout_steelhead/fish_trout_steelhead.png.import b/fish/species/trout_steelhead/fish_trout_steelhead.png.import new file mode 100644 index 0000000..3b3200e --- /dev/null +++ b/fish/species/trout_steelhead/fish_trout_steelhead.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cabbpc55sf2gw" +path="res://.godot/imported/fish_trout_steelhead.png-10d14e8a4754db88ccdaf7ffe4e4d9fe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/trout_steelhead/fish_trout_steelhead.png" +dest_files=["res://.godot/imported/fish_trout_steelhead.png-10d14e8a4754db88ccdaf7ffe4e4d9fe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/trout_steelhead/trout_steelhead.tres b/fish/species/trout_steelhead/trout_steelhead.tres new file mode 100644 index 0000000..51cb758 --- /dev/null +++ b/fish/species/trout_steelhead/trout_steelhead.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/trout_steelhead/fish_trout_steelhead.png" id="4_texture"] + +[sub_resource type="Resource" id="TroutSteelheadAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"trout_steelhead" +display_name = "steelhead trout" +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("TroutSteelheadAvailability") +weight_min_lb = 2 +weight_max_lb = 35 +display_scale_min = 0.85 +display_scale_max = 1.8 +display_scale_curve = 0.9 +sell_value_min = 10 +sell_value_max = 20 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fish/species/walleye/fish_walleye.png b/fish/species/walleye/fish_walleye.png new file mode 100644 index 0000000..ed3eb96 Binary files /dev/null and b/fish/species/walleye/fish_walleye.png differ diff --git a/fish/species/walleye/fish_walleye.png.import b/fish/species/walleye/fish_walleye.png.import new file mode 100644 index 0000000..21e025e --- /dev/null +++ b/fish/species/walleye/fish_walleye.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c10j6jv6fv32r" +path="res://.godot/imported/fish_walleye.png-48ef5c2e01ff8de0726161700ea41c43.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://fish/species/walleye/fish_walleye.png" +dest_files=["res://.godot/imported/fish_walleye.png-48ef5c2e01ff8de0726161700ea41c43.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/fish/species/walleye/walleye.tres b/fish/species/walleye/walleye.tres new file mode 100644 index 0000000..5a64198 --- /dev/null +++ b/fish/species/walleye/walleye.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" format=3] + +[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] +[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] +[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability_script"] +[ext_resource type="Texture2D" path="res://fish/species/walleye/fish_walleye.png" id="4_texture"] + +[sub_resource type="Resource" id="WalleyeAvailability"] +script = ExtResource("3_availability_script") +allowed_location_tags = Array[StringName]([&"starter_pond"]) + +[resource] +script = ExtResource("1_fish_data") +id = &"walleye" +display_name = "walleye" +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.4 +catch_profile = ExtResource("2_profile") +availability = SubResource("WalleyeAvailability") +weight_min_lb = 0.5 +weight_max_lb = 15 +display_scale_min = 0.85 +display_scale_max = 1.7 +display_scale_curve = 0.9 +sell_value_min = 7 +sell_value_max = 15 +sell_value_curve = 0.9 +display_texture = ExtResource("4_texture") diff --git a/fishing/catch_controller.gd b/fishing/catch_controller.gd index 2015dc5..e051561 100644 --- a/fishing/catch_controller.gd +++ b/fishing/catch_controller.gd @@ -69,6 +69,8 @@ var _reel_input_held: bool = false var _reel_speed: float = 0.0 var _click_power: int = 1 var _fish_quality: int = FishQualityType.Tier.BORING +var _fish_rarity: int = 0 +var _fish_weight_percentile: float = 0.0 var _chase_delay_remaining: float = 0.0 var _failure_epsilon: float = 0.0001 var _auto_click_accumulator: float = 0.0 @@ -111,6 +113,8 @@ func start_encounter( reel_speed: float, click_power: int, fish_quality: int = FishQualityType.Tier.BORING, + fish_rarity: int = 0, + fish_weight_percentile: float = 0.0, ) -> void: reset() if profile == null: @@ -124,6 +128,8 @@ func start_encounter( if FishQualityType.is_valid(fish_quality) else FishQualityType.Tier.BORING ) + _fish_rarity = clampi(fish_rarity, 0, 4) + _fish_weight_percentile = clampf(fish_weight_percentile, 0.0, 1.0) _chase_delay_remaining = CHASE_START_DELAY chase_progress = -CHASE_START_OFFSET _seed_encounter_rng() @@ -139,12 +145,21 @@ func start_authoritative_encounter( click_power: int, seed: int, fish_quality: int = FishQualityType.Tier.BORING, + fish_rarity: int = 0, + fish_weight_percentile: float = 0.0, ) -> 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, fish_quality) + start_encounter( + profile, + reel_speed, + click_power, + fish_quality, + fish_rarity, + fish_weight_percentile, + ) use_deterministic_test_seed = previous_test_mode deterministic_test_seed = previous_seed @@ -289,7 +304,6 @@ func _seed_encounter_rng() -> void: func _generate_barriers(profile: CatchDifficultyProfileType) -> void: var count_range: Vector2i = profile.get_barrier_count_range() - var health_range: Vector2i = profile.get_barrier_health_range() var interval: Vector2 = profile.get_generation_interval() var spacing: float = maxf(profile.minimum_barrier_spacing, 0.01) var available_distance: float = maxf(interval.y - interval.x, 0.0) @@ -313,13 +327,11 @@ func _generate_barriers(profile: CatchDifficultyProfileType) -> void: + spacing * float(barrier_index) + random_offsets[barrier_index] * random_slack ) - var base_health: int = _rng.randi_range( - health_range.x, - health_range.y, - ) - var health: int = FishQualityType.apply_barrier_health( - base_health, + var health: int = FishQualityType.barrier_health_for_catch( _fish_quality, + _fish_rarity, + _fish_weight_percentile, + _rng.randf_range(0.9, 1.1), ) _barriers.append(Barrier.new(position, health)) diff --git a/fishing/fishing_spot.gd b/fishing/fishing_spot.gd index abe479c..8062de5 100644 --- a/fishing/fishing_spot.gd +++ b/fishing/fishing_spot.gd @@ -95,7 +95,7 @@ enum FishingState { @export_range(0.01, 0.5, 0.01) var solid_bobber_clearance: float = 0.13 @export_category("Withdrawal") -@export_range(0.1, 20.0, 0.1) var withdrawal_rate: float = 4.9 +@export_range(0.1, 20.0, 0.1) var withdrawal_rate: float = 2.45 @export_range(0.1, 10.0, 0.1) var withdrawal_cancel_distance: float = 1.0 @export_range(0.0, 1.0, 0.01) var withdrawal_surface_clearance: float = 0.4 @@ -787,6 +787,7 @@ func _on_cast_completed() -> void: if _selected_fish == null: _cleanup_attempt("nothing is biting here.", &"invalid") return + _consume_active_bait() state = FishingState.WAITING_FOR_BITE _state_time_remaining = roll_bite_wait_time() * ( @@ -808,6 +809,13 @@ func _on_cast_completed() -> void: status_changed.emit("waiting for a bite...") +func _consume_active_bait() -> void: + if _active_player == null or _active_player.active_bait_id.is_empty(): + return + if _local_bag == null or not _local_bag.remove_item(_active_player.active_bait_id, 1): + _active_player.unequip_bait() + + func roll_bite_wait_time() -> float: var bucket: float = _bite_rng.randf() if bucket < BITE_QUICK_PROBABILITY: @@ -960,6 +968,8 @@ func _activate_bite() -> void: _get_effective_reel_speed(), _get_effective_barrier_damage(), _pending_catch.quality, + int(_pending_catch.fish.rarity), + _pending_catch.fish.get_weight_percentile(_pending_catch.weight_lb), ) _catch_controller.set_reel_input( Input.is_action_pressed("fish_primary") @@ -1368,7 +1378,7 @@ func _build_fishing_context( context.location_tags = region.location_tags.duplicate() context.water_type = region.water_type context.active_event_tags = context_event_tags.duplicate() - context.active_bait_tags = context_bait_tags.duplicate() + context.active_bait_tags = _get_active_bait_tags() if _world_time != null: context.is_night = _world_time.is_night_period() context.is_day_night_transition = _world_time.is_transition() @@ -1384,6 +1394,16 @@ func build_network_context( return _build_fishing_context(region) +func _get_active_bait_tags() -> Array[StringName]: + if _local_player == null or _item_catalog == null: + return [] + var bait_id: StringName = _local_player.active_bait_id + if bait_id.is_empty() or _local_bag == null or not _local_bag.owns_item(bait_id): + return [] + var item: ItemDataType = _item_catalog.get_item_by_id(bait_id) + return item.bait_tags.duplicate() if item != null and item.is_bait() else [] + + func _build_network_evidence() -> Dictionary: var rarity_multipliers: Array[float] = [] for rarity: int in range(FishDataType.Rarity.size()): @@ -1394,6 +1414,7 @@ func _build_network_evidence() -> Dictionary: discovered_ids.append(str(fish_id)) var item: ItemDataType = _get_active_item() return { + "bait_id": str(_active_player.active_bait_id), "rod_id": str(item.item_id) if item != null else "", "reel_speed": _active_player.reel_speed * ( _fishing_upgrades.get_reel_speed_multiplier() diff --git a/items/catalog/item_catalog.tres b/items/catalog/item_catalog.tres index 20f4bd1..95f130e 100644 --- a/items/catalog/item_catalog.tres +++ b/items/catalog/item_catalog.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="ItemCatalog" load_steps=9 format=3] +[gd_resource type="Resource" script_class="ItemCatalog" load_steps=10 format=3] [ext_resource type="Script" path="res://items/item_catalog.gd" id="1_script"] [ext_resource type="Resource" path="res://items/catalog/basic_fishing_rod.tres" id="2_rod"] @@ -8,7 +8,8 @@ [ext_resource type="Resource" path="res://items/catalog/fish_finder.tres" id="6_finder"] [ext_resource type="Resource" path="res://items/catalog/cooler_expansion.tres" id="7_cooler"] [ext_resource type="Resource" path="res://items/catalog/art_kit.tres" id="8_art_kit"] +[ext_resource type="Resource" path="res://items/catalog/worms.tres" id="9_worms"] [resource] script = ExtResource("1_script") -items = [ExtResource("2_rod"), ExtResource("3_coffee"), ExtResource("4_energy"), ExtResource("5_snack"), ExtResource("6_finder"), ExtResource("7_cooler"), ExtResource("8_art_kit")] +items = [ExtResource("2_rod"), ExtResource("3_coffee"), ExtResource("4_energy"), ExtResource("5_snack"), ExtResource("6_finder"), ExtResource("7_cooler"), ExtResource("8_art_kit"), ExtResource("9_worms")] diff --git a/items/catalog/worms.tres b/items/catalog/worms.tres new file mode 100644 index 0000000..32827f6 --- /dev/null +++ b/items/catalog/worms.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ItemData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/item_data.gd" id="1"] + +[resource] +script = ExtResource("1") +item_id = &"worms" +display_name = "worms" +description = "common bait. fills your tacklebox at the fishing shop." +category = 2 +bait_tags = Array[StringName]([&"worm"]) +stackable = true +max_stack = 10 +hotbar_allowed = false diff --git a/items/item_data.gd b/items/item_data.gd index f556fec..9ba078e 100644 --- a/items/item_data.gd +++ b/items/item_data.gd @@ -16,6 +16,7 @@ enum Category { @export var display_name: String @export_multiline var description: String @export var category: Category = Category.UTILITY +@export var bait_tags: Array[StringName] = [] @export var icon: Texture2D @export var stackable: bool = false @export_range(1, 999, 1) var max_stack: int = 1 @@ -35,3 +36,7 @@ func is_valid() -> bool: func get_category_name() -> String: return Category.keys()[category].to_lower() + + +func is_bait() -> bool: + return category == Category.BAIT and not bait_tags.is_empty() diff --git a/network/network_fish_showcase_service.gd b/network/network_fish_showcase_service.gd index 822d2e8..4908e4f 100644 --- a/network/network_fish_showcase_service.gd +++ b/network/network_fish_showcase_service.gd @@ -168,14 +168,9 @@ func _state_matches_catalog(data: Dictionary) -> bool: if fish == null or not fish.is_selectable(): return false var weight_lb: float = float(data["weight_lb"]) - var display_scale: float = float(data["display_scale"]) return ( weight_lb >= fish.get_minimum_weight() and weight_lb <= fish.get_maximum_weight() - and is_equal_approx( - display_scale, - fish.get_display_scale_for_weight(weight_lb), - ) ) @@ -190,7 +185,11 @@ func _apply_state(data: Dictionary) -> void: var fish: FishDataType = _fish_catalog.get_fish_by_id( StringName(str(data["fish_id"])) ) - avatar.set_held_fish(fish, float(data["display_scale"]), true) + avatar.set_held_fish( + fish, + fish.get_display_scale_for_weight(float(data["weight_lb"])), + true, + ) func _on_selected_assignment_changed( diff --git a/network/network_fishing_attempt.gd b/network/network_fishing_attempt.gd index c48bab5..7ad71ae 100644 --- a/network/network_fishing_attempt.gd +++ b/network/network_fishing_attempt.gd @@ -21,6 +21,7 @@ var origin: Vector3 var target: Vector3 var bobber_position: Vector3 var fish_id: StringName +var bait_tags: Array[StringName] = [] var encounter_seed: int = 0 var bite_time_remaining: float = 0.0 var withdrawal_progress: float = 0.0 diff --git a/network/network_fishing_protocol.gd b/network/network_fishing_protocol.gd index e5e6720..547b255 100644 --- a/network/network_fishing_protocol.gd +++ b/network/network_fishing_protocol.gd @@ -53,6 +53,8 @@ static func validate_cast_request(data: Variant) -> String: or typeof(payload["capacity_available"]) != TYPE_BOOL ): return "Malformed fishing request." + if payload.has("bait_id") and typeof(payload["bait_id"]) not in [TYPE_STRING, TYPE_STRING_NAME]: + return "Malformed fishing request." var request_id: String = payload["request_id"] var session_id: String = payload["session_id"] var origin: Array = payload["origin"] diff --git a/network/network_fishing_service.gd b/network/network_fishing_service.gd index 18b68bc..a15b929 100644 --- a/network/network_fishing_service.gd +++ b/network/network_fishing_service.gd @@ -14,6 +14,7 @@ const PlayerExperienceType = preload( const RemotePresentationType = preload( "res://fishing/remote_fishing_presentation.gd" ) +const ItemDataType = preload("res://items/item_data.gd") const MAX_LEDGER_ENTRIES_PER_PEER: int = 64 const CAST_ORIGIN_TOLERANCE: float = 2.5 @@ -109,6 +110,7 @@ func request_local_cast( "rarity_multipliers": evidence.get("rarity_multipliers", []), "discovered_fish_ids": evidence.get("discovered_fish_ids", []), "capacity_available": bool(evidence.get("capacity_available", false)), + "bait_id": str(evidence.get("bait_id", "")), } if _session.is_host(): _handle_cast_request(_session.get_local_peer_id(), data) @@ -292,6 +294,11 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: ): _record_and_reject(peer_id, request_id, "Nothing is biting here.") return + var bait_id: StringName = StringName(str(data.get("bait_id", ""))) + var avatar_bag: PlayerBag = avatar.bag + if not bait_id.is_empty() and (avatar_bag == null or not avatar_bag.remove_item(bait_id, 1)): + _record_and_reject(peer_id, request_id, "No bait available.") + return var attempt := NetworkFishingAttempt.new() attempt.owner_peer_id = peer_id attempt.request_id = request_id @@ -302,6 +309,7 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: attempt.target = authoritative_target attempt.bobber_position = authoritative_target attempt.fish_id = selected_fish.id + attempt.bait_tags = _bait_tags_for_request(data) attempt.reel_speed = float(data["reel_speed"]) * ( effects.get_reel_multiplier() if effects != null else 1.0 ) @@ -413,6 +421,7 @@ func _select_authoritative_fish( ) selector.begin_roll() var context: FishingContextType = _fishing_spot.build_network_context(region) + context.active_bait_tags = _bait_tags_for_request(data) var selected_fish := selector.select_fish( region.fish_pool, context, evidence_log ) @@ -420,6 +429,14 @@ func _select_authoritative_fish( return selected_fish +func _bait_tags_for_request(data: Dictionary) -> Array[StringName]: + var bait_id: StringName = StringName(str(data.get("bait_id", ""))) + if bait_id.is_empty() or _item_catalog == null: + return [] + var bait: ItemDataType = _item_catalog.get_item_by_id(bait_id) + return bait.bait_tags.duplicate() if bait != null and bait.is_bait() else [] + + func _start_bite(attempt: NetworkFishingAttempt) -> void: if attempt.phase != NetworkFishingAttempt.Phase.WAITING_FOR_BITE: return @@ -433,7 +450,7 @@ func _start_bite(attempt: NetworkFishingAttempt) -> void: selector.use_deterministic_test_seed = true selector.deterministic_test_seed = attempt.encounter_seed ^ 0x5F3759DF selector.begin_roll() - var fish_catch: FishCatch = selector.create_catch(fish) + var fish_catch: FishCatch = selector.create_catch(fish, attempt.bait_tags) if fish_catch == null or not fish_catch.is_valid(): _cancel_attempt(attempt.owner_peer_id, "Fishing attempt ended.") return @@ -444,6 +461,8 @@ func _start_bite(attempt: NetworkFishingAttempt) -> void: attempt.barrier_damage, attempt.encounter_seed, fish_catch.quality, + int(fish.rarity), + fish.get_weight_percentile(fish_catch.weight_lb), ) var data: Dictionary = { "attempt_id": attempt.attempt_id, diff --git a/network/network_shop_service.gd b/network/network_shop_service.gd index cffcee5..88b821d 100644 --- a/network/network_shop_service.gd +++ b/network/network_shop_service.gd @@ -108,11 +108,13 @@ func is_local_purchase_pending() -> bool: func request_supply(item_id: StringName) -> String: + var owned: int = _bag.get_quantity(item_id) if _bag != null else 0 + var quantity: int = FishingShopStockType.get_purchase_quantity(item_id, owned) return _request_purchase( item_id, NetworkShopProtocol.ProductCategory.SUPPLY, - 1, - _bag.get_quantity(item_id) if _bag != null else 0 + quantity, + owned ) @@ -307,7 +309,7 @@ func _build_authoritative_result( var rejection: String = "" if StringName(str(request["shop_id"])) != SHOP_ID: rejection = "The shop is unavailable." - elif quantity != 1: + elif quantity < 1: rejection = "Purchase could not be completed." else: match category: @@ -322,10 +324,11 @@ func _build_authoritative_result( or product_id not in ( FishingShopStockType.get_stock_item_ids() ) - or item.category != ItemDataType.Category.CONSUMABLE + or (item.category != ItemDataType.Category.CONSUMABLE and not FishingShopStockType.is_bait_topoff(product_id)) or not item.stackable - or not item.usable + or (not item.usable and not FishingShopStockType.is_bait_topoff(product_id)) or current_state >= item.max_stack + or current_state + quantity > item.max_stack ): rejection = ( "Your Bag is full." @@ -333,7 +336,11 @@ func _build_authoritative_result( else "Purchase could not be completed." ) else: - resulting_state = current_state + 1 + if not FishingShopStockType.is_bait_topoff(product_id) and quantity != 1: + rejection = "Purchase could not be completed." + else: + cost *= quantity + resulting_state = current_state + quantity NetworkShopProtocol.ProductCategory.ROD: rejection = "This item is not sold here." NetworkShopProtocol.ProductCategory.REEL_SPEED_UPGRADE: @@ -576,7 +583,7 @@ func _validate_local_result(data: Dictionary) -> String: var resulting_state: int = int(data["resulting_state"]) if ( category != NetworkShopProtocol.ProductCategory.ART_UPGRADE - and resulting_state != expected_state + 1 + and resulting_state != expected_state + int(data["quantity"]) ): return "Purchase could not be completed." if not _wallet.can_afford(cost): @@ -585,6 +592,8 @@ func _validate_local_result(data: Dictionary) -> String: NetworkShopProtocol.ProductCategory.SUPPLY: if _bag.get_quantity(product_id) != expected_state: return "Purchase could not be completed." + if cost != FishingShopStockType.get_price(product_id) * int(data["quantity"]): + return "Purchase could not be completed." if not _bag.can_add_item(product_id, data["quantity"]): return "Your Bag is full." NetworkShopProtocol.ProductCategory.REEL_SPEED_UPGRADE: diff --git a/player/player.gd b/player/player.gd index 930f15b..4686df5 100644 --- a/player/player.gd +++ b/player/player.gd @@ -8,6 +8,7 @@ const FishDataType = preload("res://fish/fish_data.gd") const FishSaleServiceType = preload("res://economy/fish_sale_service.gd") const PlayerWalletType = preload("res://economy/player_wallet.gd") const PlayerBagType = preload("res://inventory/player_bag.gd") +const ItemDataType = preload("res://items/item_data.gd") const PlayerHotbarType = preload("res://inventory/player_hotbar.gd") const PlayerFishingUpgradesType = preload( "res://progression/player_fishing_upgrades.gd" @@ -49,6 +50,25 @@ const CONTROLLER_ZOOM_TRIGGER_AXIS: JoyAxis = JOY_AXIS_TRIGGER_LEFT var appearance_snapshot: Dictionary = ( CharacterCustomizationCatalog.default_snapshot() ) +var active_bait_id: StringName = StringName() +signal active_bait_changed(item_id: StringName) + + +func equip_bait(item: ItemDataType) -> bool: + if item == null or not item.is_bait() or bag == null: + return false + if not bag.owns_item(item.item_id): + return false + active_bait_id = item.item_id + active_bait_changed.emit(active_bait_id) + return true + + +func unequip_bait() -> void: + if active_bait_id.is_empty(): + return + active_bait_id = StringName() + active_bait_changed.emit(active_bait_id) func apply_appearance_snapshot(snapshot: Dictionary) -> void: @@ -69,7 +89,7 @@ class ShowcaseCameraSnapshot: @export_category("Movement") -@export var walk_speed: float = 4.5 +@export var walk_speed: float = 2.25 @export var sprint_speed: float = 7.2 @export var sneak_speed: float = 1.8 @export var slow_walk_speed: float = 2.9 diff --git a/tests/economy_regression_validation.gd b/tests/economy_regression_validation.gd index 51dca5d..9b40e74 100644 --- a/tests/economy_regression_validation.gd +++ b/tests/economy_regression_validation.gd @@ -48,7 +48,7 @@ func _run() -> void: as PlayerAssetReservationService ) assert(player != null) - assert(catalog != null and catalog.candidates.size() == 19) + assert(catalog != null and catalog.candidates.size() == 53) assert(sale_service != null) assert(shop_service != null) assert(session != null and session.is_host()) diff --git a/tests/fish_catalog_content_validation.gd b/tests/fish_catalog_content_validation.gd index 59aaf3a..0b7235b 100644 --- a/tests/fish_catalog_content_validation.gd +++ b/tests/fish_catalog_content_validation.gd @@ -55,6 +55,20 @@ const SALT_WATER_IDS: Array[StringName] = [ &"salmon_coho", &"salmon_pink", &"salmon_sockeye", + &"anchovy_european", &"anchovy_northern", + &"grouper_gulf", &"grouper_red", + &"mackerel_atlantic", &"mackerel_cero", &"mackerel_chub", + &"mackerel_king", &"mackerel_spanish", + &"marlin_black", &"marlin_blue", &"marlin_white", + &"pomfret_black", &"pomfret_chinese", &"pomfret_golden", + &"pomfret_white", &"sailfish", + &"snapper_lane", &"snapper_mangrove", &"snapper_mutton", + &"snapper_red", &"swordfish", +] +const NEW_FRESH_WATER_IDS: Array[StringName] = [ + &"chub_european", &"chub_flame", &"chub_lake", &"goldfish", + &"goldfish_bubbleeye", &"sauger", &"saugeye", &"trout_cutthroat", + &"trout_golden", &"trout_rainbow", &"trout_steelhead", &"walleye", ] @@ -64,6 +78,7 @@ func _initialize() -> void: func _run() -> void: _validate_catalog_and_pools() + _validate_weight_based_display_scale() _validate_starter_water_bodies() _validate_authoritative_water_filter() _validate_catches_and_authoritative_sale() @@ -71,10 +86,42 @@ func _run() -> void: quit() +func _validate_weight_based_display_scale() -> void: + var previous_scale: float = 0.0 + for fish: FishDataType in Catalog.candidates: + assert(fish.is_selectable()) + assert(fish.weight_min_lb > 0.0) + assert(fish.weight_max_lb <= 1000.0) + var minimum_scale: float = fish.get_display_scale_for_weight( + fish.weight_min_lb + ) + var maximum_scale: float = fish.get_display_scale_for_weight( + fish.weight_max_lb + ) + assert(minimum_scale >= FishDataType.DISPLAY_MIN_SCALE) + assert(maximum_scale <= FishDataType.DISPLAY_MAX_SCALE) + assert(maximum_scale >= minimum_scale) + var midpoint_weight: float = lerpf( + fish.weight_min_lb, + fish.weight_max_lb, + 0.5, + ) + assert( + fish.get_display_scale_for_weight(midpoint_weight) + >= minimum_scale + ) + # A one-pound catch is a shared visual reference, not a per-species + # texture-size decision. + var reference_scale: float = fish.get_display_scale_for_weight(1.0) + assert(is_equal_approx(reference_scale, FishDataType.DISPLAY_REFERENCE_SCALE)) + previous_scale = maxf(previous_scale, maximum_scale) + assert(previous_scale <= FishDataType.DISPLAY_MAX_SCALE) + + func _validate_catalog_and_pools() -> void: - assert(Catalog.candidates.size() == 19) - assert(PondPool.candidates.size() == 7) - assert(OceanPool.candidates.size() == 12) + assert(Catalog.candidates.size() == 53) + assert(PondPool.candidates.size() == 19) + assert(OceanPool.candidates.size() == 34) for fish_id: StringName in ORIGINAL_IDS: var original_fish: FishDataType = Catalog.get_fish_by_id(fish_id) assert(original_fish != null) @@ -101,6 +148,12 @@ func _validate_catalog_and_pools() -> void: assert(OceanPool.get_fish_by_id(fish_id) == null) assert(fish.availability.allowed_location_tags == [&"starter_pond"]) assert(LogbookCatalog.category_for(fish) == WaterType.Type.FRESH_WATER) + for fish_id: StringName in NEW_FRESH_WATER_IDS: + var fish: FishDataType = Catalog.get_fish_by_id(fish_id) + assert(fish != null and fish.is_selectable()) + assert(PondPool.get_fish_by_id(fish_id) == fish) + assert(OceanPool.get_fish_by_id(fish_id) == null) + assert(LogbookCatalog.category_for(fish) == WaterType.Type.FRESH_WATER) var expected_values: Dictionary[StringName, Array] = { &"catfish_blue": [1, 1.25, 3.0, 12.0, 6, 9], @@ -302,6 +355,12 @@ func _validate_catches_and_authoritative_sale() -> void: assert(loaded != null) assert(loaded.fish_id == fish.id) assert(loaded.fish == fish) + assert( + is_equal_approx( + loaded.display_scale, + fish.get_display_scale_for_weight(loaded.weight_lb), + ) + ) var replicated: FishCatch = FishCatchType.from_network_dict( fish_catch.to_network_dict(), Catalog.get_fish_by_id(fish.id) @@ -309,6 +368,12 @@ func _validate_catches_and_authoritative_sale() -> void: assert(replicated != null) assert(replicated.fish_id == fish.id) assert(replicated.fish.display_texture == fish.display_texture) + assert( + is_equal_approx( + replicated.display_scale, + fish.get_display_scale_for_weight(replicated.weight_lb), + ) + ) inventory.add_catch(loaded) assert(inventory.contains_catch_id(loaded.catch_id)) diff --git a/tests/fish_quality_validation.gd b/tests/fish_quality_validation.gd index 9e42687..366128f 100644 --- a/tests/fish_quality_validation.gd +++ b/tests/fish_quality_validation.gd @@ -79,15 +79,38 @@ func _validate_barrier_challenge_curve() -> void: FishQualityType.BARRIER_HEALTH_MULTIPLIERS.size() == FishQualityType.TIER_COUNT ) - var expected_health: Array[int] = [8, 10, 13, 18, 26] + var expected_minimums: Array[int] = [1, 10, 50, 100, 200] + var expected_maximums: Array[int] = [9, 50, 100, 200, 400] var previous_health: int = 0 for quality: int in FishQualityType.TIER_COUNT: var health: int = FishQualityType.apply_barrier_health(8, quality) - assert(health == expected_health[quality]) assert(health > previous_health) previous_health = health assert(FishQualityType.apply_barrier_health(8, -1) == 8) assert(FishQualityType.apply_barrier_health(0, FishQualityType.Tier.SHINY) == 4) + var impressive_low_input: int = FishQualityType.barrier_health_for_catch( + FishQualityType.Tier.IMPRESSIVE, + 0, + 0.0, + 1.0, + ) + var impressive_high_input: int = FishQualityType.barrier_health_for_catch( + FishQualityType.Tier.IMPRESSIVE, + 4, + 1.0, + 1.0, + ) + assert(impressive_low_input >= 50 and impressive_low_input <= 100) + assert(impressive_high_input > impressive_low_input) + assert(impressive_high_input <= 100) + assert( + FishQualityType.barrier_health_for_catch( + FishQualityType.Tier.BORING, + 4, + 1.0, + 1.0, + ) <= 9 + ) var profile := CatchDifficultyProfile.new() profile.barrier_count_min = 1 @@ -113,20 +136,24 @@ func _validate_barrier_challenge_curve() -> void: assert(barriers.size() == 1) var barrier := barriers[0] as RefCounted assert(barrier != null) - assert(int(barrier.get("maximum_health")) == expected_health[quality]) + var health: int = int(barrier.get("maximum_health")) + assert(health >= expected_minimums[quality]) + assert(health <= expected_maximums[quality]) controller.queue_free() - var shiny_health: int = FishQualityType.apply_barrier_health( - 8, + var shiny_health: int = FishQualityType.barrier_health_for_catch( FishQualityType.Tier.SHINY, + 4, + 1.0, + 1.0, ) var base_power_clicks: int = ceili(float(shiny_health) / 1.0) var max_power_clicks: int = ceili( float(shiny_health) / float(PlayerFishingUpgrades.MAX_BARRIER_POWER_LEVEL + 1) ) - assert(base_power_clicks == 26) - assert(max_power_clicks == 7) + assert(base_power_clicks == 400) + assert(max_power_clicks == 100) assert(max_power_clicks < base_power_clicks) @@ -191,7 +218,7 @@ func _validate_catch_round_trip_and_sale() -> void: selector.deterministic_test_seed = 9911 selector.quality_weight_multipliers = [0.0, 0.0, 0.0, 0.0, 1.0] selector.begin_roll() - var fish_catch: FishCatch = selector.create_catch(fish) + var fish_catch: FishCatch = selector.create_catch(fish, [&"worm"]) assert(fish_catch != null) assert(fish_catch.quality == FishQualityType.Tier.SHINY) assert( diff --git a/tests/logbook_runtime_validation.gd b/tests/logbook_runtime_validation.gd index 71f7876..77280ea 100644 --- a/tests/logbook_runtime_validation.gd +++ b/tests/logbook_runtime_validation.gd @@ -49,20 +49,20 @@ func _run() -> void: assert(not hotbar.visible) var entry_buttons: Dictionary = logbook.get("_entry_buttons") - assert(entry_buttons.size() == 7) + assert(entry_buttons.size() == 19) await _capture_if_requested("-unknown") logbook.call( "_select_category", WaterType.Type.FRESH_WATER ) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 7) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 19) await _capture_if_requested("-fresh") logbook.call("_select_category", WaterType.Type.SALT_WATER) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 12) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 34) logbook.call("_select_category", WaterType.Type.FRESH_WATER) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 7) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 19) player.collection_log.mark_discovered(&"bluegill") await process_frame logbook.call("_select_entry", &"bluegill", &"bluegill") @@ -101,7 +101,7 @@ func _validate_save_round_trip( var player := main.get("_player") as Player var catalog := main.get("fish_catalog") as FishPool assert(catalog != null) - assert(catalog.candidates.size() == 19) + assert(catalog.candidates.size() == 53) for index: int in 4: _add_test_catch(player, catalog.candidates[index]) assert(save_manager.save_now()) @@ -122,7 +122,7 @@ func _validate_save_round_trip( assert(player.inventory.replace_all_catches(no_catches, 1)) assert(player.collection_log.replace_discovered_ids(no_discoveries)) assert(save_manager.load_player_data()) - assert(player.inventory.get_all_catches().size() == 19) + assert(player.inventory.get_all_catches().size() == 53) for fish: FishData in catalog.candidates: assert(player.inventory.get_count(fish.id) == 1) assert(player.collection_log.has_discovered(fish.id)) diff --git a/tests/logbook_validation.gd b/tests/logbook_validation.gd index 8003fa4..38b7ade 100644 --- a/tests/logbook_validation.gd +++ b/tests/logbook_validation.gd @@ -60,17 +60,54 @@ func _validate_catalog() -> void: &"salmon_coho", &"salmon_pink", &"salmon_sockeye", + &"anchovy_european", + &"anchovy_northern", + &"chub_european", + &"chub_flame", + &"chub_lake", + &"goldfish", + &"goldfish_bubbleeye", + &"grouper_gulf", + &"grouper_red", + &"mackerel_atlantic", + &"mackerel_cero", + &"mackerel_chub", + &"mackerel_king", + &"mackerel_spanish", + &"marlin_black", + &"marlin_blue", + &"marlin_white", + &"pomfret_black", + &"pomfret_chinese", + &"pomfret_golden", + &"pomfret_white", + &"sailfish", + &"sauger", + &"saugeye", + &"snapper_lane", + &"snapper_mangrove", + &"snapper_mutton", + &"snapper_red", + &"swordfish", + &"trout_cutthroat", + &"trout_golden", + &"trout_rainbow", + &"trout_steelhead", + &"walleye", ] assert(LogbookCatalog.CATALOG_ORDER == expected_ids) for index: int in expected_ids.size(): var fish := CatalogResource.get_fish_by_id(expected_ids[index]) assert(fish != null) - assert(LogbookCatalog.facts_for(fish.id) != "unknown") assert(not LogbookCatalog.facts_for(fish.id).is_empty()) assert( LogbookCatalog.facts_for(fish.id) == LogbookCatalog.facts_for(fish.id).to_lower() ) + if LogbookCatalog.FISH_FACTS.has(fish.id): + assert(LogbookCatalog.facts_for(fish.id) != "unknown") + else: + assert(LogbookCatalog.facts_for(fish.id) == "unknown") var expected_category: WaterType.Type = ( WaterType.Type.SALT_WATER if expected_ids[index] in [ @@ -86,6 +123,28 @@ func _validate_catalog() -> void: &"salmon_coho", &"salmon_pink", &"salmon_sockeye", + &"anchovy_european", + &"anchovy_northern", + &"grouper_gulf", + &"grouper_red", + &"mackerel_atlantic", + &"mackerel_cero", + &"mackerel_chub", + &"mackerel_king", + &"mackerel_spanish", + &"marlin_black", + &"marlin_blue", + &"marlin_white", + &"pomfret_black", + &"pomfret_chinese", + &"pomfret_golden", + &"pomfret_white", + &"sailfish", + &"snapper_lane", + &"snapper_mangrove", + &"snapper_mutton", + &"snapper_red", + &"swordfish", ] else WaterType.Type.FRESH_WATER ) @@ -129,7 +188,7 @@ func _validate_page() -> void: page.call("_select_category", category) await create_timer(0.25).timeout var entries: Dictionary = page.get("_entry_buttons") - assert(entries.size() == (7 if category == WaterType.Type.FRESH_WATER else 12)) + assert(entries.size() == (19 if category == WaterType.Type.FRESH_WATER else 34)) for fish: FishDataType in LogbookCatalog.ordered_species( CatalogResource.candidates ): @@ -179,7 +238,7 @@ func _validate_page() -> void: candidate.display_name ) ) - assert(silhouette_count == 19) + assert(silhouette_count == 53) page.call("_select_category", WaterType.Type.OTHER) await create_timer(0.25).timeout diff --git a/ui/chat_ui.gd b/ui/chat_ui.gd index 909e307..6cba3c4 100644 --- a/ui/chat_ui.gd +++ b/ui/chat_ui.gd @@ -232,7 +232,9 @@ func toggle_chat() -> void: func refocus_gameplay() -> void: close_chat() _controller_refocused = true - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() func toggle_focus() -> void: diff --git a/ui/fishing_shop.gd b/ui/fishing_shop.gd index 79ba3f8..f984b77 100644 --- a/ui/fishing_shop.gd +++ b/ui/fishing_shop.gd @@ -290,7 +290,9 @@ func close_shop( _closing = true _transaction_in_progress = false hide() - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() if _fishing_spot != null and is_instance_valid(_fishing_spot): _fishing_spot.set_local_menu_input_suppressed(INPUT_OWNER, false) if ( @@ -426,15 +428,23 @@ func _refresh_supplies() -> void: FishingShopStockType.get_price(item_id), _bag.get_quantity(item_id), ] + if FishingShopStockType.is_bait_topoff(item_id): + button.text = "%s\n$%d each • %d/%d" % [ + item.display_name, + FishingShopStockType.get_price(item_id), + _bag.get_quantity(item_id), + FishingShopStockType.WORM_MAX_STACK, + ] button.tooltip_text = item.description button.disabled = ( _transaction_in_progress or _closing or _network_shop == null or not _network_shop.can_request_purchase() - or not _bag.can_add_item(item_id, 1) + or FishingShopStockType.get_purchase_quantity(item_id, _bag.get_quantity(item_id)) <= 0 + or not _bag.can_add_item(item_id, FishingShopStockType.get_purchase_quantity(item_id, _bag.get_quantity(item_id))) or not _wallet.can_afford( - FishingShopStockType.get_price(item_id) + FishingShopStockType.get_price(item_id) * FishingShopStockType.get_purchase_quantity(item_id, _bag.get_quantity(item_id)) ) ) button.tooltip_text = ( @@ -574,10 +584,12 @@ func _purchase_supply(item_id: StringName) -> void: if _transaction_in_progress or not _is_transaction_context_valid(): _feedback.text = "unable to complete purchase." return - if not _bag.can_add_item(item_id, 1): + var owned: int = _bag.get_quantity(item_id) + var quantity: int = FishingShopStockType.get_purchase_quantity(item_id, owned) + if quantity <= 0 or not _bag.can_add_item(item_id, quantity): _feedback.text = "Your Bag is full." return - if not _wallet.can_afford(FishingShopStockType.get_price(item_id)): + if not _wallet.can_afford(FishingShopStockType.get_price(item_id) * quantity): _feedback.text = "Not enough fish coin." return if _network_shop == null: diff --git a/ui/logbook_catalog.gd b/ui/logbook_catalog.gd index 79c9df9..1ba1a1e 100644 --- a/ui/logbook_catalog.gd +++ b/ui/logbook_catalog.gd @@ -25,6 +25,40 @@ const CATALOG_ORDER: Array[StringName] = [ &"salmon_coho", &"salmon_pink", &"salmon_sockeye", + &"anchovy_european", + &"anchovy_northern", + &"chub_european", + &"chub_flame", + &"chub_lake", + &"goldfish", + &"goldfish_bubbleeye", + &"grouper_gulf", + &"grouper_red", + &"mackerel_atlantic", + &"mackerel_cero", + &"mackerel_chub", + &"mackerel_king", + &"mackerel_spanish", + &"marlin_black", + &"marlin_blue", + &"marlin_white", + &"pomfret_black", + &"pomfret_chinese", + &"pomfret_golden", + &"pomfret_white", + &"sailfish", + &"sauger", + &"saugeye", + &"snapper_lane", + &"snapper_mangrove", + &"snapper_mutton", + &"snapper_red", + &"swordfish", + &"trout_cutthroat", + &"trout_golden", + &"trout_rainbow", + &"trout_steelhead", + &"walleye", ] # Short presentation notes are kept here with the catalog contract rather @@ -107,6 +141,142 @@ const FISH_FACTS: Dictionary[StringName, String] = { "sockeye salmon feed heavily on plankton at sea. adults turn vivid red " + "as they return inland to spawn." ), + &"anchovy_european": ( + "european anchovies form dense schools and feed by filtering tiny " + + "plankton from coastal water." + ), + &"anchovy_northern": ( + "northern anchovies gather in huge schools along the pacific coast " + + "and filter plankton with their fine gill rakers." + ), + &"chub_european": ( + "european chub are adaptable river fish. adults often patrol " + + "shallows and feed on insects, small fish, and fruit." + ), + &"chub_flame": ( + "flame chubs prefer cool, clear streams. their bright breeding colors " + + "make a small fish easy to spot in spring water." + ), + &"chub_lake": ( + "lake chubs school in cold northern water and use their small mouths " + + "to pick insects and other tiny prey from the current." + ), + &"goldfish": ( + "goldfish can tolerate a surprisingly wide range of conditions. " + + "their wild relatives often live in slow, weedy water." + ), + &"goldfish_bubbleeye": ( + "bubble-eye goldfish have delicate fluid-filled sacs beneath their " + + "eyes, making careful handling especially important." + ), + &"grouper_gulf": ( + "gulf grouper are ambush predators that use a sudden gulp to pull " + + "prey into their cavernous mouths." + ), + &"grouper_red": ( + "red grouper excavate shelters in reef rubble. the hollows they make " + + "can become hiding places for many smaller animals." + ), + &"mackerel_atlantic": ( + "atlantic mackerel travel in fast schools across the north atlantic " + + "and feed on plankton and small schooling fish." + ), + &"mackerel_cero": ( + "cero mackerel are streamlined coastal hunters. sharp teeth help " + + "them slash through schools of smaller fish." + ), + &"mackerel_chub": ( + "chub mackerel school near the surface and follow plankton blooms. " + + "their dark wavy bars help identify them at a glance." + ), + &"mackerel_king": ( + "king mackerel are swift coastal predators. their pointed teeth and " + + "long body are built for sudden bursts of speed." + ), + &"mackerel_spanish": ( + "spanish mackerel hunt in warm coastal waters and often travel in " + + "loose schools while chasing baitfish." + ), + &"marlin_black": ( + "black marlin are powerful billfish that spend much of their lives " + + "in warm open ocean and can make blistering runs." + ), + &"marlin_blue": ( + "blue marlin are highly migratory open-ocean hunters. their long bill " + + "helps them stun prey before turning back to feed." + ), + &"marlin_white": ( + "white marlin favor warm offshore water and use their rounded dorsal " + + "fin and bill to weave through schools of prey." + ), + &"pomfret_black": ( + "black pomfret have a deep, laterally compressed body that lets them " + + "maneuver neatly through open water." + ), + &"pomfret_chinese": ( + "chinese pomfret are silvery schooling fish with a tall, flattened " + + "body and long sickle-shaped fins." + ), + &"pomfret_golden": ( + "golden pomfret are warm-water swimmers whose golden sheen is most " + + "noticeable along the fins and flanks." + ), + &"pomfret_white": ( + "white pomfret gather over coastal grounds and use their compact, " + + "deep bodies to turn quickly while feeding." + ), + &"sailfish": ( + "sailfish raise their enormous dorsal fin while herding baitfish. " + + "they are among the fastest fish in the sea." + ), + &"sauger": ( + "sauger favor turbid rivers and reservoirs. their mottled backs " + + "blend into the dim, shifting light near the bottom." + ), + &"saugeye": ( + "saugeye are a fertile hybrid of sauger and walleye. they combine " + + "traits from both parent species and often grow quickly." + ), + &"snapper_lane": ( + "lane snapper use reef structure for cover and hunt small crustaceans " + + "and fish when the light begins to fade." + ), + &"snapper_mangrove": ( + "mangrove snapper shelter among roots and docks when young, then " + + "move toward reefs as they grow." + ), + &"snapper_mutton": ( + "mutton snapper have canine teeth that help them pick crabs, shrimp, " + + "and other hard-shelled prey from the reef." + ), + &"snapper_red": ( + "red snapper gather around reefs, wrecks, and ledges. their diet " + + "includes small fish, shrimp, and squid." + ), + &"swordfish": ( + "swordfish are fast, wide-ranging predators with a flattened bill. " + + "they can cross deep water and warm surface layers in one day." + ), + &"trout_cutthroat": ( + "cutthroat trout take their name from the red slash beneath the jaw. " + + "many populations rely on cold, well-oxygenated streams." + ), + &"trout_golden": ( + "golden trout evolved in clear, high-elevation california streams. " + + "their bright flanks stand out against rocky alpine water." + ), + &"trout_rainbow": ( + "rainbow trout are adaptable stream hunters. the pink lateral stripe " + + "is especially vivid when the fish is in breeding condition." + ), + &"trout_steelhead": ( + "steelhead are the ocean-going form of rainbow trout. adults can " + + "leave fresh water and later return to spawn." + ), + &"walleye": ( + "walleye have light-sensitive eyes that help them hunt in murky water " + + "and around dusk. their reflective layer gives the eyes a pale glow." + ), } static func category_for(fish: FishDataType) -> WaterType.Type: diff --git a/ui/network/join_game_page.gd b/ui/network/join_game_page.gd index e096f50..160550e 100644 --- a/ui/network/join_game_page.gd +++ b/ui/network/join_game_page.gd @@ -150,7 +150,9 @@ func open_page(preserved_endpoint: String = "") -> void: func close_page() -> void: _clear_edit_state() hide() - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() func get_endpoint_text() -> String: diff --git a/ui/pause_menu.gd b/ui/pause_menu.gd index f13003e..b989972 100644 --- a/ui/pause_menu.gd +++ b/ui/pause_menu.gd @@ -495,7 +495,9 @@ func _finish_close(reason: CloseReason, restore_controls: bool) -> void: hide() if _fishing_spot != null and is_instance_valid(_fishing_spot): _fishing_spot.set_local_menu_input_suppressed(INPUT_OWNER, false) - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() if restore_controls: _restore_controls() else: diff --git a/ui/player_menu.gd b/ui/player_menu.gd index 5e6bd32..1fac21f 100644 --- a/ui/player_menu.gd +++ b/ui/player_menu.gd @@ -145,7 +145,6 @@ const SALE_CONFIRMATION_SIZE := Vector2(520.0, 190.0) @onready var _cooler_inner_liner: PanelContainer = %CoolerInnerLiner @onready var _cooler_water_surface: ColorRect = %WaterSurface @onready var _fish_field: Control = %FishField -@onready var _cooler_empty: Label = %CoolerEmpty @onready var _cooler_sort_controls: HBoxContainer = %CoolerSortControls @onready var _cooler_sort_option: NotepadInkChoiceType = %CoolerSortOption @onready var _cooler_sort_direction: NotepadInkActionType = %CoolerSortDirection @@ -190,6 +189,7 @@ const SALE_CONFIRMATION_SIZE := Vector2(520.0, 190.0) @onready var _lures_filter: Button = %LuresFilter @onready var _tackle_empty: Label = %TackleEmpty @onready var _tackle_detail_text: Label = %TackleDetailText +@onready var _tackle_equip_button: Button = %TackleEquipButton @onready var _tackle_item_list: VBoxContainer = %TackleItemList @onready var _bag_outer_wall: PanelContainer = %BagOuterWall @onready var _bag_inner_liner: PanelContainer = %BagInnerLiner @@ -368,6 +368,7 @@ func _ready() -> void: ) _bait_filter.pressed.connect(_set_tackle_view.bind(TackleView.BAIT)) _lures_filter.pressed.connect(_set_tackle_view.bind(TackleView.LURES)) + _tackle_equip_button.pressed.connect(_toggle_active_bait) _logbook_tab.pressed.connect( _show_section.bind(Section.LOGBOOK) ) @@ -566,6 +567,8 @@ func setup( _fishing_spot.bite_activated.connect(_on_bite_activated) if not _bag.contents_changed.is_connected(_on_bag_changed): _bag.contents_changed.connect(_on_bag_changed) + if not _player.active_bait_changed.is_connected(_on_active_bait_changed): + _player.active_bait_changed.connect(_on_active_bait_changed) if not _hotbar.slots_changed.is_connected(_on_hotbar_changed): _hotbar.slots_changed.connect(_on_hotbar_changed) if not _cooler_capacity.capacity_changed.is_connected( @@ -1369,12 +1372,14 @@ func _update_tackle_detail() -> void: else null ) if item == null: + _tackle_equip_button.visible = false _tackle_detail_text.text = ( "Select bait for details." if _tackle_view == TackleView.BAIT else "Select a lure for details." ) return + _tackle_equip_button.visible = item.is_bait() var quantity: int = _bag.get_quantity(item.item_id) if _bag != null else 0 var assigned_slot: int = -1 if _hotbar != null: @@ -1397,6 +1402,30 @@ func _update_tackle_detail() -> void: item.description, ] ) + if item.is_bait(): + _tackle_equip_button.text = ( + "dequip %s" % item.display_name + if _player != null and _player.active_bait_id == item.item_id + else "equip %s" % item.display_name + ) + _tackle_equip_button.disabled = quantity <= 0 + + +func _toggle_active_bait() -> void: + if _player == null or _item_catalog == null: + return + var item: ItemDataType = _item_catalog.get_item_by_id(_selected_tackle_item_id) + if item == null or not item.is_bait(): + return + if _player.active_bait_id == item.item_id: + _player.unequip_bait() + else: + _player.equip_bait(item) + _update_tackle_detail() + + +func _on_active_bait_changed(_item_id: StringName) -> void: + _update_tackle_detail() func _apply_cooler_control_styles() -> void: @@ -1948,7 +1977,9 @@ func _begin_menu_exit(reason: CloseReason, restore_controls: bool) -> void: _catalog_logbook.deactivate() elif _current_section == Section.NET: _the_net_page.deactivate() - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() var generation: int = _transition_generation var closing_generation: int = _menu_generation _presentation_tween = create_tween().set_parallel(true) @@ -2003,7 +2034,9 @@ func _finish_close( _presentation_scale_root.scale = Vector2.ONE visible = false set_process(false) - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() if _fishing_spot != null and is_instance_valid(_fishing_spot): _fishing_spot.set_local_menu_input_suppressed(INPUT_OWNER, false) if restore_controls: @@ -2062,7 +2095,9 @@ func _begin_page_transition(section: Section) -> void: _cancel_page_tween() _page_transitioning = true _set_content_interactive(false) - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() var outgoing_section: Section = _current_section var outgoing_inventory: bool = _is_inventory_section(outgoing_section) var incoming_inventory: bool = _is_inventory_section(section) @@ -2722,7 +2757,6 @@ func _refresh_inventory() -> void: catches.sort_custom(_compare_catches) _sorted_catches = catches _inventory_empty.visible = catches.is_empty() - _cooler_empty.visible = catches.is_empty() var visible_ids: Array[StringName] = [] for fish_catch: FishCatchType in catches: visible_ids.append(fish_catch.catch_id) @@ -3600,7 +3634,9 @@ func _release_focus_from(node: Node, fallback: Control) -> void: ) ): return - get_viewport().gui_release_focus() + var current_viewport: Viewport = get_viewport() + if current_viewport != null: + current_viewport.gui_release_focus() if ( visible and not _transitioning diff --git a/ui/player_menu.tscn b/ui/player_menu.tscn index e9693fd..c2ebff5 100644 --- a/ui/player_menu.tscn +++ b/ui/player_menu.tscn @@ -167,21 +167,6 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -[node name="CoolerEmpty" type="Label" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/CoolerPage/CoolerOuterWall/CoolerWallMargin/CoolerInnerLiner/CoolerInnerMargin/CoolerScroll/CoolerHost"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -theme_override_colors/font_color = Color(0.91, 0.97, 0.98, 0.82) -theme_override_font_sizes/font_size = 24 -text = "the cooler is empty" -horizontal_alignment = 1 -vertical_alignment = 1 - [node name="DetailConstellation" type="Control" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/CoolerPage"] unique_name_in_owner = true layout_mode = 0 @@ -705,12 +690,21 @@ theme_override_constants/margin_top = 20 theme_override_constants/margin_right = 20 theme_override_constants/margin_bottom = 20 -[node name="TackleDetailText" type="Label" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/TackleBoxPage/TackleDetailPanel/Margin"] +[node name="Layout" type="VBoxContainer" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/TackleBoxPage/TackleDetailPanel/Margin"] +layout_mode = 2 +theme_override_constants/separation = 12 + +[node name="TackleDetailText" type="Label" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/TackleBoxPage/TackleDetailPanel/Margin/Layout"] unique_name_in_owner = true layout_mode = 2 text = "Select bait or a lure for details." autowrap_mode = 2 -vertical_alignment = 1 + +[node name="TackleEquipButton" type="Button" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot/TackleBoxPage/TackleDetailPanel/Margin/Layout"] +unique_name_in_owner = true +layout_mode = 2 +custom_minimum_size = Vector2(0, 44) +text = "equip worms" [node name="LogbookPage" type="Control" parent="ResponsivePlayerMenuStage/PlayerMenuPresentationScaleRoot"] unique_name_in_owner = true diff --git a/ui/profile_page.gd b/ui/profile_page.gd index fce7b83..a5b030c 100644 --- a/ui/profile_page.gd +++ b/ui/profile_page.gd @@ -2,6 +2,7 @@ class_name ProfilePage extends Control const CHECK_DEBOUNCE_SECONDS: float = 0.4 +const OPTION_GRID_COLUMNS: int = 6 const ControllerMappingManagerType = preload( "res://settings/controller_mapping_manager.gd" ) @@ -513,7 +514,7 @@ func _build_feature_preview_options(options: Array) -> void: scroll.vertical_scroll_mode = ScrollContainer.SCROLL_MODE_AUTO _option_list.add_child(scroll) var grid := GridContainer.new() - grid.columns = 4 + grid.columns = OPTION_GRID_COLUMNS grid.add_theme_constant_override("h_separation", 8) grid.add_theme_constant_override("v_separation", 8) grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -591,7 +592,7 @@ func _feature_preview_texture( func _build_fur_color_options(options: Array) -> void: var grid := GridContainer.new() - grid.columns = 4 + grid.columns = OPTION_GRID_COLUMNS grid.add_theme_constant_override("h_separation", 10) grid.add_theme_constant_override("v_separation", 10) _option_list.add_child(grid)