diff --git a/economy/art_shop_stock.gd b/economy/art_shop_stock.gd index acc5382..ff84d09 100644 --- a/economy/art_shop_stock.gd +++ b/economy/art_shop_stock.gd @@ -49,7 +49,7 @@ static func get_display_name(product_id: StringName) -> String: static func get_description(product_id: StringName) -> String: if product_id == ART_KIT_ITEM_ID: - return "Press P in the game world to paint!" + return "Select the Art Kit in the Hotbar to paint." var color_id: StringName = PlayerArtUnlocks.color_id_for_product(product_id) if not color_id.is_empty(): return "Unlocks this marker color in the Paint UI." diff --git a/economy/fishing_shop_stock.gd b/economy/fishing_shop_stock.gd index 87795ad..4f5fda4 100644 --- a/economy/fishing_shop_stock.gd +++ b/economy/fishing_shop_stock.gd @@ -3,10 +3,12 @@ extends RefCounted const ItemCatalogType = preload("res://items/item_catalog.gd") const ItemDataType = preload("res://items/item_data.gd") +const FishingRodDataType = preload("res://items/fishing_rod_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 FISH_FINDER_ID: StringName = &"fish_finder" +const MAGNET_ID: StringName = &"magnet" const BATTERIES_ID: StringName = &"batteries" const ITEM_PRICES: Dictionary[StringName, int] = { @@ -22,6 +24,7 @@ const ITEM_PRICES: Dictionary[StringName, int] = { &"energy_drink": 35, &"snack": 30, FISH_FINDER_ID: 500, + MAGNET_ID: 250, BATTERIES_ID: 15, } const BAIT_UNLOCK_PRICES: Dictionary[StringName, int] = { @@ -42,6 +45,7 @@ const ITEM_ORDER: Array[StringName] = [ &"luminous_roe", &"the_standby", FISH_FINDER_ID, + MAGNET_ID, &"coffee", &"energy_drink", &"snack", @@ -57,6 +61,25 @@ static func get_stock_item_ids() -> Array[StringName]: return ITEM_ORDER.duplicate() +static func get_rod_stock( + catalog: ItemCatalogType, +) -> Array[FishingRodDataType]: + var rods: Array[FishingRodDataType] = [] + if catalog == null: + return rods + for item: ItemDataType in catalog.get_available_items(): + var rod := item as FishingRodDataType + if rod != null and rod.is_shop_available(): + rods.append(rod) + rods.sort_custom( + func(left: FishingRodDataType, right: FishingRodDataType) -> bool: + if left.shop_order == right.shop_order: + return str(left.item_id) < str(right.item_id) + return left.shop_order < right.shop_order + ) + return rods + + static func get_unlock_price(item_id: StringName) -> int: return BAIT_UNLOCK_PRICES.get(item_id, -1) @@ -81,7 +104,12 @@ static func is_permanent_unlock( ) -> bool: return ( item != null - and (item.is_lure() or item_id == FISH_FINDER_ID) + and ( + item.is_lure() + or item_id == FISH_FINDER_ID + or item_id == MAGNET_ID + or item is FishingRodDataType + ) ) @@ -111,6 +139,8 @@ static func purchase_one( if wallet == null or bag == null or catalog == null: return false var item: ItemDataType = catalog.get_item_by_id(item_id) + if item == null or not item.is_available(): + return false var bait_topoff: bool = is_bait_topoff(item_id) var permanent_unlock: bool = is_permanent_unlock(item_id, item) var quantity: int = get_purchase_quantity( @@ -118,15 +148,20 @@ static func purchase_one( bag.get_quantity(item_id), item.max_stack if item != null else WORM_MAX_STACK, ) - var price: int = get_purchase_cost( - item_id, - quantity, - bag.is_bait_unlocked(item_id), + var rod := item as FishingRodDataType + var price: int = ( + rod.shop_price + if rod != null + else get_purchase_cost( + item_id, + quantity, + bag.is_bait_unlocked(item_id), + ) ) if ( price < 0 - or item == null - or not item.is_valid() + or not item.is_available() + or (rod != null and not rod.is_shop_available()) or ( item.category != ItemDataType.Category.CONSUMABLE and not bait_topoff diff --git a/fish/fish_data.gd b/fish/fish_data.gd index 2bb99af..60ce03e 100644 --- a/fish/fish_data.gd +++ b/fish/fish_data.gd @@ -26,14 +26,21 @@ enum Rarity { @export var id: StringName @export var display_name: String +@export_category("Developer Catalog") +## Disabled species remain resolvable for saves but cannot be newly selected. +@export var active: bool = true +@export_range(1, 999999, 1) var catalog_number: int = 1 +@export var collection_group: StringName +@export_multiline var logbook_fact: String +@export_category("Fishing") @export_flags("Fresh Water", "Salt Water") var allowed_water_types: int = WaterType.ALL_FISHABLE_MASK @export var rarity: Rarity = Rarity.COMMON @export_range(0.0, 1000.0, 0.01) var base_catch_weight: float = 1.0 @export var catch_profile: CatchDifficultyProfileType @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 +@export_range(0.001, 500000.0, 0.001) var weight_min_lb: float = 0.5 +@export_range(0.001, 500000.0, 0.001) 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 @@ -47,7 +54,8 @@ var allowed_water_types: int = WaterType.ALL_FISHABLE_MASK func is_selectable() -> bool: return ( - not id.is_empty() + active + and not id.is_empty() and base_catch_weight > 0.0 and catch_profile != null and weight_min_lb > 0.0 @@ -74,7 +82,7 @@ func get_primary_water_type() -> WaterType.Type: func get_minimum_weight() -> float: - return maxf(weight_min_lb, 0.01) + return maxf(weight_min_lb, 0.001) func get_maximum_weight() -> float: diff --git a/fish/fish_selector.gd b/fish/fish_selector.gd index 506a906..89bc3ca 100644 --- a/fish/fish_selector.gd +++ b/fish/fish_selector.gd @@ -7,10 +7,12 @@ const FishDataType = preload("res://fish/fish_data.gd") const FishPoolType = preload("res://fish/fish_pool.gd") const FishQualityType = preload("res://fish/fish_quality.gd") const FishingContextType = preload("res://fishing/fishing_context.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") var undiscovered_weight_multiplier: float = 1.5 var rarity_weight_multipliers: Array[float] = [] var quality_weight_multipliers: Array[float] = [] +var active_rod: FishingRodDataType var use_deterministic_test_seed: bool = false var deterministic_test_seed: int = 24680 var selection_seed: int = 0 @@ -55,8 +57,16 @@ func select_fish( # 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 active_rod != null: + final_weight *= maxf( + active_rod.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 active_rod != null: + final_weight *= active_rod.get_rarity_multiplier(fish.rarity) + final_weight *= active_rod.get_affinity_multiplier(fish, context) if final_weight <= 0.0: continue all_fish.append(fish) @@ -87,6 +97,8 @@ func _roll_rarity(context: FishingContextType) -> int: for index: int in range(weights.size()): if index < rarity_weight_multipliers.size(): weights[index] *= maxf(rarity_weight_multipliers[index], 0.0) + if active_rod != null: + weights[index] *= active_rod.get_rarity_multiplier(index) var total: float = 0.0 for weight: float in weights: total += weight @@ -107,9 +119,13 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish caught_fish.fish = fish caught_fish.fish_id = fish.id caught_fish.ensure_identity() - caught_fish.weight_lb = _rng.randf_range( + var weight_roll: float = _biased_unit_roll( + active_rod.weight_roll_bias if active_rod != null else 0.0 + ) + caught_fish.weight_lb = lerpf( fish.get_minimum_weight(), - fish.get_maximum_weight() + fish.get_maximum_weight(), + weight_roll, ) caught_fish.display_scale = fish.get_display_scale_for_weight( caught_fish.weight_lb @@ -118,6 +134,11 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish 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) + for quality: int in range(quality_multipliers.size()): + if active_rod != null: + quality_multipliers[quality] *= active_rod.get_quality_multiplier( + quality + ) caught_fish.quality = FishQualityType.roll( _rng, quality_multipliers, @@ -127,3 +148,14 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish caught_fish.quality, ) return caught_fish + + +func _biased_unit_roll(bias: float) -> float: + var roll: float = _rng.randf() + var safe_bias: float = clampf(bias, -0.5, 0.5) + if is_zero_approx(safe_bias): + return roll + var exponent: float = 1.0 / (1.0 + absf(safe_bias) * 2.0) + if safe_bias > 0.0: + return pow(roll, exponent) + return 1.0 - pow(1.0 - roll, exponent) diff --git a/fish/pools/fish_catalog.tres b/fish/pools/fish_catalog.tres index 73609c8..666dce2 100644 --- a/fish/pools/fish_catalog.tres +++ b/fish/pools/fish_catalog.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" load_steps=55 format=3] +[gd_resource type="Resource" load_steps=315 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"] @@ -54,7 +54,267 @@ [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"] +[ext_resource type="Resource" path="res://fish/species/bowfin/bowfin.tres" id="55_bowfin"] +[ext_resource type="Resource" path="res://fish/species/sturgeon_lake/sturgeon_lake.tres" id="56_sturgeon_lake"] +[ext_resource type="Resource" path="res://fish/species/gar_longnose/gar_longnose.tres" id="57_gar_longnose"] +[ext_resource type="Resource" path="res://fish/species/paddlefish/paddlefish.tres" id="58_paddlefish"] +[ext_resource type="Resource" path="res://fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres" id="59_sturgeon_shovelnose"] +[ext_resource type="Resource" path="res://fish/species/gar_spotted/gar_spotted.tres" id="60_gar_spotted"] +[ext_resource type="Resource" path="res://fish/species/lungfish_west_african/lungfish_west_african.tres" id="61_lungfish_west_african"] +[ext_resource type="Resource" path="res://fish/species/mudskipper_atlantic/mudskipper_atlantic.tres" id="62_mudskipper_atlantic"] +[ext_resource type="Resource" path="res://fish/species/foureyes_largescale/foureyes_largescale.tres" id="63_foureyes_largescale"] +[ext_resource type="Resource" path="res://fish/species/mullet_red/mullet_red.tres" id="64_mullet_red"] +[ext_resource type="Resource" path="res://fish/species/plaice_european/plaice_european.tres" id="65_plaice_european"] +[ext_resource type="Resource" path="res://fish/species/flounder_summer/flounder_summer.tres" id="66_flounder_summer"] +[ext_resource type="Resource" path="res://fish/species/flounder_winter/flounder_winter.tres" id="67_flounder_winter"] +[ext_resource type="Resource" path="res://fish/species/dugong/dugong.tres" id="68_dugong"] +[ext_resource type="Resource" path="res://fish/species/seal_harbor/seal_harbor.tres" id="69_seal_harbor"] +[ext_resource type="Resource" path="res://fish/species/sea_otter/sea_otter.tres" id="70_sea_otter"] +[ext_resource type="Resource" path="res://fish/species/walrus/walrus.tres" id="71_walrus"] +[ext_resource type="Resource" path="res://fish/species/manatee_west_indian/manatee_west_indian.tres" id="72_manatee_west_indian"] +[ext_resource type="Resource" path="res://fish/species/pipefish_bay/pipefish_bay.tres" id="73_pipefish_bay"] +[ext_resource type="Resource" path="res://fish/species/seahorse_lined/seahorse_lined.tres" id="74_seahorse_lined"] +[ext_resource type="Resource" path="res://fish/species/monkfish/monkfish.tres" id="75_monkfish"] +[ext_resource type="Resource" path="res://fish/species/tripletail/tripletail.tres" id="76_tripletail"] +[ext_resource type="Resource" path="res://fish/species/bluefish/bluefish.tres" id="77_bluefish"] +[ext_resource type="Resource" path="res://fish/species/jack_crevalle/jack_crevalle.tres" id="78_jack_crevalle"] +[ext_resource type="Resource" path="res://fish/species/queenfish_talang/queenfish_talang.tres" id="79_queenfish_talang"] +[ext_resource type="Resource" path="res://fish/species/sand_lance_american/sand_lance_american.tres" id="80_sand_lance_american"] +[ext_resource type="Resource" path="res://fish/species/menhaden_atlantic/menhaden_atlantic.tres" id="81_menhaden_atlantic"] +[ext_resource type="Resource" path="res://fish/species/sardine_european/sardine_european.tres" id="82_sardine_european"] +[ext_resource type="Resource" path="res://fish/species/sardine_pacific/sardine_pacific.tres" id="83_sardine_pacific"] +[ext_resource type="Resource" path="res://fish/species/shark_blacktip/shark_blacktip.tres" id="84_shark_blacktip"] +[ext_resource type="Resource" path="res://fish/species/shark_great_hammerhead/shark_great_hammerhead.tres" id="85_shark_great_hammerhead"] +[ext_resource type="Resource" path="res://fish/species/shark_great_white/shark_great_white.tres" id="86_shark_great_white"] +[ext_resource type="Resource" path="res://fish/species/shark_tiger/shark_tiger.tres" id="87_shark_tiger"] +[ext_resource type="Resource" path="res://fish/species/shark_whale/shark_whale.tres" id="88_shark_whale"] +[ext_resource type="Resource" path="res://fish/species/burbot/burbot.tres" id="89_burbot"] +[ext_resource type="Resource" path="res://fish/species/cisco/cisco.tres" id="90_cisco"] +[ext_resource type="Resource" path="res://fish/species/whitefish_lake/whitefish_lake.tres" id="91_whitefish_lake"] +[ext_resource type="Resource" path="res://fish/species/char_arctic/char_arctic.tres" id="92_char_arctic"] +[ext_resource type="Resource" path="res://fish/species/grayling_arctic/grayling_arctic.tres" id="93_grayling_arctic"] +[ext_resource type="Resource" path="res://fish/species/trout_brown/trout_brown.tres" id="94_trout_brown"] +[ext_resource type="Resource" path="res://fish/species/wolffish_atlantic/wolffish_atlantic.tres" id="95_wolffish_atlantic"] +[ext_resource type="Resource" path="res://fish/species/cusk/cusk.tres" id="96_cusk"] +[ext_resource type="Resource" path="res://fish/species/wolffish_spotted/wolffish_spotted.tres" id="97_wolffish_spotted"] +[ext_resource type="Resource" path="res://fish/species/herring_atlantic/herring_atlantic.tres" id="98_herring_atlantic"] +[ext_resource type="Resource" path="res://fish/species/capelin/capelin.tres" id="99_capelin"] +[ext_resource type="Resource" path="res://fish/species/sprat_european/sprat_european.tres" id="100_sprat_european"] +[ext_resource type="Resource" path="res://fish/species/herring_pacific/herring_pacific.tres" id="101_herring_pacific"] +[ext_resource type="Resource" path="res://fish/species/pollock_alaska/pollock_alaska.tres" id="102_pollock_alaska"] +[ext_resource type="Resource" path="res://fish/species/cod_atlantic/cod_atlantic.tres" id="103_cod_atlantic"] +[ext_resource type="Resource" path="res://fish/species/pollock_atlantic/pollock_atlantic.tres" id="104_pollock_atlantic"] +[ext_resource type="Resource" path="res://fish/species/sole_dover/sole_dover.tres" id="105_sole_dover"] +[ext_resource type="Resource" path="res://fish/species/haddock/haddock.tres" id="106_haddock"] +[ext_resource type="Resource" path="res://fish/species/cod_pacific/cod_pacific.tres" id="107_cod_pacific"] +[ext_resource type="Resource" path="res://fish/species/hake_pacific/hake_pacific.tres" id="108_hake_pacific"] +[ext_resource type="Resource" path="res://fish/species/hake_silver/hake_silver.tres" id="109_hake_silver"] +[ext_resource type="Resource" path="res://fish/species/nautilus_chambered/nautilus_chambered.tres" id="110_nautilus_chambered"] +[ext_resource type="Resource" path="res://fish/species/cuttlefish_common/cuttlefish_common.tres" id="111_cuttlefish_common"] +[ext_resource type="Resource" path="res://fish/species/cuttlefish_flamboyant/cuttlefish_flamboyant.tres" id="112_cuttlefish_flamboyant"] +[ext_resource type="Resource" path="res://fish/species/tilefish_blueline/tilefish_blueline.tres" id="113_tilefish_blueline"] +[ext_resource type="Resource" path="res://fish/species/tilefish_golden/tilefish_golden.tres" id="114_tilefish_golden"] +[ext_resource type="Resource" path="res://fish/species/ocean_perch_pacific/ocean_perch_pacific.tres" id="115_ocean_perch_pacific"] +[ext_resource type="Resource" path="res://fish/species/sea_bass_chilean/sea_bass_chilean.tres" id="116_sea_bass_chilean"] +[ext_resource type="Resource" path="res://fish/species/sablefish/sablefish.tres" id="117_sablefish"] +[ext_resource type="Resource" path="res://fish/species/wreckfish/wreckfish.tres" id="118_wreckfish"] +[ext_resource type="Resource" path="res://fish/species/oarfish_giant/oarfish_giant.tres" id="119_oarfish_giant"] +[ext_resource type="Resource" path="res://fish/species/coelacanth_west_indian/coelacanth_west_indian.tres" id="120_coelacanth_west_indian"] +[ext_resource type="Resource" path="res://fish/species/anglerfish_black_seadevil/anglerfish_black_seadevil.tres" id="121_anglerfish_black_seadevil"] +[ext_resource type="Resource" path="res://fish/species/fangtooth_common/fangtooth_common.tres" id="122_fangtooth_common"] +[ext_resource type="Resource" path="res://fish/species/gulper_eel/gulper_eel.tres" id="123_gulper_eel"] +[ext_resource type="Resource" path="res://fish/species/barreleye_pacific/barreleye_pacific.tres" id="124_barreleye_pacific"] +[ext_resource type="Resource" path="res://fish/species/blobfish_smooth_head/blobfish_smooth_head.tres" id="125_blobfish_smooth_head"] +[ext_resource type="Resource" path="res://fish/species/lanternfish_spotted/lanternfish_spotted.tres" id="126_lanternfish_spotted"] +[ext_resource type="Resource" path="res://fish/species/sea_star_crown_of_thorns/sea_star_crown_of_thorns.tres" id="127_sea_star_crown_of_thorns"] +[ext_resource type="Resource" path="res://fish/species/sea_cucumber_giant_california/sea_cucumber_giant_california.tres" id="128_sea_cucumber_giant_california"] +[ext_resource type="Resource" path="res://fish/species/urchin_purple/urchin_purple.tres" id="129_urchin_purple"] +[ext_resource type="Resource" path="res://fish/species/sand_dollar/sand_dollar.tres" id="130_sand_dollar"] +[ext_resource type="Resource" path="res://fish/species/sea_star_sunflower/sea_star_sunflower.tres" id="131_sea_star_sunflower"] +[ext_resource type="Resource" path="res://fish/species/axolotl/axolotl.tres" id="132_axolotl"] +[ext_resource type="Resource" path="res://fish/species/hellbender/hellbender.tres" id="133_hellbender"] +[ext_resource type="Resource" path="res://fish/species/guppy/guppy.tres" id="134_guppy"] +[ext_resource type="Resource" path="res://fish/species/tetra_neon/tetra_neon.tres" id="135_tetra_neon"] +[ext_resource type="Resource" path="res://fish/species/danio_zebra/danio_zebra.tres" id="136_danio_zebra"] +[ext_resource type="Resource" path="res://fish/species/largemouth_bass/largemouth_bass.tres" id="137_largemouth_bass"] +[ext_resource type="Resource" path="res://fish/species/smallmouth_bass/smallmouth_bass.tres" id="138_smallmouth_bass"] +[ext_resource type="Resource" path="res://fish/species/buffalo_bigmouth/buffalo_bigmouth.tres" id="139_buffalo_bigmouth"] +[ext_resource type="Resource" path="res://fish/species/redhorse_golden/redhorse_golden.tres" id="140_redhorse_golden"] +[ext_resource type="Resource" path="res://fish/species/quillback/quillback.tres" id="141_quillback"] +[ext_resource type="Resource" path="res://fish/species/buffalo_smallmouth/buffalo_smallmouth.tres" id="142_buffalo_smallmouth"] +[ext_resource type="Resource" path="res://fish/species/sucker_white/sucker_white.tres" id="143_sucker_white"] +[ext_resource type="Resource" path="res://fish/species/bullhead_black/bullhead_black.tres" id="144_bullhead_black"] +[ext_resource type="Resource" path="res://fish/species/bullhead_brown/bullhead_brown.tres" id="145_bullhead_brown"] +[ext_resource type="Resource" path="res://fish/species/madtom_tadpole/madtom_tadpole.tres" id="146_madtom_tadpole"] +[ext_resource type="Resource" path="res://fish/species/bullhead_yellow/bullhead_yellow.tres" id="147_bullhead_yellow"] +[ext_resource type="Resource" path="res://fish/species/barbel_common/barbel_common.tres" id="148_barbel_common"] +[ext_resource type="Resource" path="res://fish/species/bream_common/bream_common.tres" id="149_bream_common"] +[ext_resource type="Resource" path="res://fish/species/roach_common/roach_common.tres" id="150_roach_common"] +[ext_resource type="Resource" path="res://fish/species/fallfish/fallfish.tres" id="151_fallfish"] +[ext_resource type="Resource" path="res://fish/species/ide/ide.tres" id="152_ide"] +[ext_resource type="Resource" path="res://fish/species/rudd/rudd.tres" id="153_rudd"] +[ext_resource type="Resource" path="res://fish/species/tench/tench.tres" id="154_tench"] +[ext_resource type="Resource" path="res://fish/species/crayfish_red_swamp/crayfish_red_swamp.tres" id="155_crayfish_red_swamp"] +[ext_resource type="Resource" path="res://fish/species/gar_alligator/gar_alligator.tres" id="156_gar_alligator"] +[ext_resource type="Resource" path="res://fish/species/arapaima/arapaima.tres" id="157_arapaima"] +[ext_resource type="Resource" path="res://fish/species/tigerfish_goliath/tigerfish_goliath.tres" id="158_tigerfish_goliath"] +[ext_resource type="Resource" path="res://fish/species/muskellunge/muskellunge.tres" id="159_muskellunge"] +[ext_resource type="Resource" path="res://fish/species/shiner_common/shiner_common.tres" id="160_shiner_common"] +[ext_resource type="Resource" path="res://fish/species/chub_creek/chub_creek.tres" id="161_chub_creek"] +[ext_resource type="Resource" path="res://fish/species/shiner_emerald/shiner_emerald.tres" id="162_shiner_emerald"] +[ext_resource type="Resource" path="res://fish/species/minnow_fathead/minnow_fathead.tres" id="163_minnow_fathead"] +[ext_resource type="Resource" path="res://fish/species/shiner_golden/shiner_golden.tres" id="164_shiner_golden"] +[ext_resource type="Resource" path="res://fish/species/electric_eel/electric_eel.tres" id="165_electric_eel"] +[ext_resource type="Resource" path="res://fish/species/freshwater_drum/freshwater_drum.tres" id="166_freshwater_drum"] +[ext_resource type="Resource" path="res://fish/species/goldeye/goldeye.tres" id="167_goldeye"] +[ext_resource type="Resource" path="res://fish/species/mooneye/mooneye.tres" id="168_mooneye"] +[ext_resource type="Resource" path="res://fish/species/loach_weather/loach_weather.tres" id="169_loach_weather"] +[ext_resource type="Resource" path="res://fish/species/koi/koi.tres" id="170_koi"] +[ext_resource type="Resource" path="res://fish/species/crappie_black/crappie_black.tres" id="171_crappie_black"] +[ext_resource type="Resource" path="res://fish/species/green_sunfish/green_sunfish.tres" id="172_green_sunfish"] +[ext_resource type="Resource" path="res://fish/species/pumpkinseed/pumpkinseed.tres" id="173_pumpkinseed"] +[ext_resource type="Resource" path="res://fish/species/redear_sunfish/redear_sunfish.tres" id="174_redear_sunfish"] +[ext_resource type="Resource" path="res://fish/species/warmouth/warmouth.tres" id="175_warmouth"] +[ext_resource type="Resource" path="res://fish/species/crappie_white/crappie_white.tres" id="176_crappie_white"] +[ext_resource type="Resource" path="res://fish/species/yellow_perch/yellow_perch.tres" id="177_yellow_perch"] +[ext_resource type="Resource" path="res://fish/species/pickerel_chain/pickerel_chain.tres" id="178_pickerel_chain"] +[ext_resource type="Resource" path="res://fish/species/pickerel_grass/pickerel_grass.tres" id="179_pickerel_grass"] +[ext_resource type="Resource" path="res://fish/species/pike_northern/pike_northern.tres" id="180_pike_northern"] +[ext_resource type="Resource" path="res://fish/species/jelly_crystal/jelly_crystal.tres" id="181_jelly_crystal"] +[ext_resource type="Resource" path="res://fish/species/jelly_lions_mane/jelly_lions_mane.tres" id="182_jelly_lions_mane"] +[ext_resource type="Resource" path="res://fish/species/jelly_moon/jelly_moon.tres" id="183_jelly_moon"] +[ext_resource type="Resource" path="res://fish/species/jelly_pacific_sea_nettle/jelly_pacific_sea_nettle.tres" id="184_jelly_pacific_sea_nettle"] +[ext_resource type="Resource" path="res://fish/species/jelly_sea_wasp/jelly_sea_wasp.tres" id="185_jelly_sea_wasp"] +[ext_resource type="Resource" path="res://fish/species/pompano_african/pompano_african.tres" id="186_pompano_african"] +[ext_resource type="Resource" path="res://fish/species/cobia/cobia.tres" id="187_cobia"] +[ext_resource type="Resource" path="res://fish/species/trevally_giant/trevally_giant.tres" id="188_trevally_giant"] +[ext_resource type="Resource" path="res://fish/species/amberjack_greater/amberjack_greater.tres" id="189_amberjack_greater"] +[ext_resource type="Resource" path="res://fish/species/amberjack_lesser/amberjack_lesser.tres" id="190_amberjack_lesser"] +[ext_resource type="Resource" path="res://fish/species/halibut_atlantic/halibut_atlantic.tres" id="191_halibut_atlantic"] +[ext_resource type="Resource" path="res://fish/species/halibut_pacific/halibut_pacific.tres" id="192_halibut_pacific"] +[ext_resource type="Resource" path="res://fish/species/turbot/turbot.tres" id="193_turbot"] +[ext_resource type="Resource" path="res://fish/species/lobster_american/lobster_american.tres" id="194_lobster_american"] +[ext_resource type="Resource" path="res://fish/species/krill_antarctic/krill_antarctic.tres" id="195_krill_antarctic"] +[ext_resource type="Resource" path="res://fish/species/lobster_caribbean_spiny/lobster_caribbean_spiny.tres" id="196_lobster_caribbean_spiny"] +[ext_resource type="Resource" path="res://fish/species/shrimp_peacock_mantis/shrimp_peacock_mantis.tres" id="197_shrimp_peacock_mantis"] +[ext_resource type="Resource" path="res://fish/species/shrimp_skunk_cleaner/shrimp_skunk_cleaner.tres" id="198_shrimp_skunk_cleaner"] +[ext_resource type="Resource" path="res://fish/species/crab_ghost/crab_ghost.tres" id="199_crab_ghost"] +[ext_resource type="Resource" path="res://fish/species/crab_blue/crab_blue.tres" id="200_crab_blue"] +[ext_resource type="Resource" path="res://fish/species/crab_dungeness/crab_dungeness.tres" id="201_crab_dungeness"] +[ext_resource type="Resource" path="res://fish/species/crab_japanese_spider/crab_japanese_spider.tres" id="202_crab_japanese_spider"] +[ext_resource type="Resource" path="res://fish/species/crab_red_king/crab_red_king.tres" id="203_crab_red_king"] +[ext_resource type="Resource" path="res://fish/species/eel_american/eel_american.tres" id="204_eel_american"] +[ext_resource type="Resource" path="res://fish/species/eel_european/eel_european.tres" id="205_eel_european"] +[ext_resource type="Resource" path="res://fish/species/smelt_rainbow/smelt_rainbow.tres" id="206_smelt_rainbow"] +[ext_resource type="Resource" path="res://fish/species/smelt_eulachon/smelt_eulachon.tres" id="207_smelt_eulachon"] +[ext_resource type="Resource" path="res://fish/species/sturgeon_white/sturgeon_white.tres" id="208_sturgeon_white"] +[ext_resource type="Resource" path="res://fish/species/mahi_mahi/mahi_mahi.tres" id="209_mahi_mahi"] +[ext_resource type="Resource" path="res://fish/species/opah/opah.tres" id="210_opah"] +[ext_resource type="Resource" path="res://fish/species/wahoo/wahoo.tres" id="211_wahoo"] +[ext_resource type="Resource" path="res://fish/species/octopus_common/octopus_common.tres" id="212_octopus_common"] +[ext_resource type="Resource" path="res://fish/species/octopus_day/octopus_day.tres" id="213_octopus_day"] +[ext_resource type="Resource" path="res://fish/species/octopus_giant_pacific/octopus_giant_pacific.tres" id="214_octopus_giant_pacific"] +[ext_resource type="Resource" path="res://fish/species/octopus_greater_blue_ringed/octopus_greater_blue_ringed.tres" id="215_octopus_greater_blue_ringed"] +[ext_resource type="Resource" path="res://fish/species/skate_barndoor/skate_barndoor.tres" id="216_skate_barndoor"] +[ext_resource type="Resource" path="res://fish/species/manta_ray_giant/manta_ray_giant.tres" id="217_manta_ray_giant"] +[ext_resource type="Resource" path="res://fish/species/sawfish_largetooth/sawfish_largetooth.tres" id="218_sawfish_largetooth"] +[ext_resource type="Resource" path="res://fish/species/stingray_ocellate_river/stingray_ocellate_river.tres" id="219_stingray_ocellate_river"] +[ext_resource type="Resource" path="res://fish/species/stingray_southern/stingray_southern.tres" id="220_stingray_southern"] +[ext_resource type="Resource" path="res://fish/species/lionfish_red/lionfish_red.tres" id="221_lionfish_red"] +[ext_resource type="Resource" path="res://fish/species/scorpionfish_red/scorpionfish_red.tres" id="222_scorpionfish_red"] +[ext_resource type="Resource" path="res://fish/species/moray_green/moray_green.tres" id="223_moray_green"] +[ext_resource type="Resource" path="res://fish/species/flounder_peacock/flounder_peacock.tres" id="224_flounder_peacock"] +[ext_resource type="Resource" path="res://fish/species/surgeonfish_blue/surgeonfish_blue.tres" id="225_surgeonfish_blue"] +[ext_resource type="Resource" path="res://fish/species/parrotfish_rainbow/parrotfish_rainbow.tres" id="226_parrotfish_rainbow"] +[ext_resource type="Resource" path="res://fish/species/parrotfish_stoplight/parrotfish_stoplight.tres" id="227_parrotfish_stoplight"] +[ext_resource type="Resource" path="res://fish/species/tang_yellow/tang_yellow.tres" id="228_tang_yellow"] +[ext_resource type="Resource" path="res://fish/species/trumpetfish_atlantic/trumpetfish_atlantic.tres" id="229_trumpetfish_atlantic"] +[ext_resource type="Resource" path="res://fish/species/triggerfish_gray/triggerfish_gray.tres" id="230_triggerfish_gray"] +[ext_resource type="Resource" path="res://fish/species/pufferfish_guineafowl/pufferfish_guineafowl.tres" id="231_pufferfish_guineafowl"] +[ext_resource type="Resource" path="res://fish/species/cowfish_longhorn/cowfish_longhorn.tres" id="232_cowfish_longhorn"] +[ext_resource type="Resource" path="res://fish/species/triggerfish_queen/triggerfish_queen.tres" id="233_triggerfish_queen"] +[ext_resource type="Resource" path="res://fish/species/cornetfish_red/cornetfish_red.tres" id="234_cornetfish_red"] +[ext_resource type="Resource" path="res://fish/species/porcupinefish_spotted/porcupinefish_spotted.tres" id="235_porcupinefish_spotted"] +[ext_resource type="Resource" path="res://fish/species/boxfish_yellow/boxfish_yellow.tres" id="236_boxfish_yellow"] +[ext_resource type="Resource" path="res://fish/species/butterflyfish_copperband/butterflyfish_copperband.tres" id="237_butterflyfish_copperband"] +[ext_resource type="Resource" path="res://fish/species/clownfish_ocellaris/clownfish_ocellaris.tres" id="238_clownfish_ocellaris"] +[ext_resource type="Resource" path="res://fish/species/angelfish_queen/angelfish_queen.tres" id="239_angelfish_queen"] +[ext_resource type="Resource" path="res://fish/species/grouper_atlantic_goliath/grouper_atlantic_goliath.tres" id="240_grouper_atlantic_goliath"] +[ext_resource type="Resource" path="res://fish/species/trevally_bluefin/trevally_bluefin.tres" id="241_trevally_bluefin"] +[ext_resource type="Resource" path="res://fish/species/grouper_giant/grouper_giant.tres" id="242_grouper_giant"] +[ext_resource type="Resource" path="res://fish/species/barracuda_great/barracuda_great.tres" id="243_barracuda_great"] +[ext_resource type="Resource" path="res://fish/species/grouper_nassau/grouper_nassau.tres" id="244_grouper_nassau"] +[ext_resource type="Resource" path="res://fish/species/chromis_blue_green/chromis_blue_green.tres" id="245_chromis_blue_green"] +[ext_resource type="Resource" path="res://fish/species/grunt_bluestriped/grunt_bluestriped.tres" id="246_grunt_bluestriped"] +[ext_resource type="Resource" path="res://fish/species/grunt_french/grunt_french.tres" id="247_grunt_french"] +[ext_resource type="Resource" path="res://fish/species/damselfish_sergeant_major/damselfish_sergeant_major.tres" id="248_damselfish_sergeant_major"] +[ext_resource type="Resource" path="res://fish/species/wrasse_ballan/wrasse_ballan.tres" id="249_wrasse_ballan"] +[ext_resource type="Resource" path="res://fish/species/wrasse_cleaner/wrasse_cleaner.tres" id="250_wrasse_cleaner"] +[ext_resource type="Resource" path="res://fish/species/hogfish/hogfish.tres" id="251_hogfish"] +[ext_resource type="Resource" path="res://fish/species/turtle_green/turtle_green.tres" id="252_turtle_green"] +[ext_resource type="Resource" path="res://fish/species/turtle_hawksbill/turtle_hawksbill.tres" id="253_turtle_hawksbill"] +[ext_resource type="Resource" path="res://fish/species/turtle_leatherback/turtle_leatherback.tres" id="254_turtle_leatherback"] +[ext_resource type="Resource" path="res://fish/species/turtle_loggerhead/turtle_loggerhead.tres" id="255_turtle_loggerhead"] +[ext_resource type="Resource" path="res://fish/species/seadragon_leafy/seadragon_leafy.tres" id="256_seadragon_leafy"] +[ext_resource type="Resource" path="res://fish/species/seadragon_weedy/seadragon_weedy.tres" id="257_seadragon_weedy"] +[ext_resource type="Resource" path="res://fish/species/oyster_black_lip_pearl/oyster_black_lip_pearl.tres" id="258_oyster_black_lip_pearl"] +[ext_resource type="Resource" path="res://fish/species/clam_giant/clam_giant.tres" id="259_clam_giant"] +[ext_resource type="Resource" path="res://fish/species/clam_geoduck/clam_geoduck.tres" id="260_clam_geoduck"] +[ext_resource type="Resource" path="res://fish/species/conch_queen/conch_queen.tres" id="261_conch_queen"] +[ext_resource type="Resource" path="res://fish/species/abalone_red/abalone_red.tres" id="262_abalone_red"] +[ext_resource type="Resource" path="res://fish/species/squid_bigfin_reef/squid_bigfin_reef.tres" id="263_squid_bigfin_reef"] +[ext_resource type="Resource" path="res://fish/species/squid_colossal/squid_colossal.tres" id="264_squid_colossal"] +[ext_resource type="Resource" path="res://fish/species/squid_giant/squid_giant.tres" id="265_squid_giant"] +[ext_resource type="Resource" path="res://fish/species/squid_humboldt/squid_humboldt.tres" id="266_squid_humboldt"] +[ext_resource type="Resource" path="res://fish/species/halfbeak_ballyhoo/halfbeak_ballyhoo.tres" id="267_halfbeak_ballyhoo"] +[ext_resource type="Resource" path="res://fish/species/needlefish_hound/needlefish_hound.tres" id="268_needlefish_hound"] +[ext_resource type="Resource" path="res://fish/species/flyingfish_tropical/flyingfish_tropical.tres" id="269_flyingfish_tropical"] +[ext_resource type="Resource" path="res://fish/species/croaker_atlantic/croaker_atlantic.tres" id="270_croaker_atlantic"] +[ext_resource type="Resource" path="res://fish/species/black_drum/black_drum.tres" id="271_black_drum"] +[ext_resource type="Resource" path="res://fish/species/red_drum/red_drum.tres" id="272_red_drum"] +[ext_resource type="Resource" path="res://fish/species/mullet_striped/mullet_striped.tres" id="273_mullet_striped"] +[ext_resource type="Resource" path="res://fish/species/weakfish/weakfish.tres" id="274_weakfish"] +[ext_resource type="Resource" path="res://fish/species/white_perch/white_perch.tres" id="275_white_perch"] +[ext_resource type="Resource" path="res://fish/species/croaker_yellowfin/croaker_yellowfin.tres" id="276_croaker_yellowfin"] +[ext_resource type="Resource" path="res://fish/species/rockfish_black/rockfish_black.tres" id="277_rockfish_black"] +[ext_resource type="Resource" path="res://fish/species/sea_bass_black/sea_bass_black.tres" id="278_sea_bass_black"] +[ext_resource type="Resource" path="res://fish/species/rockfish_canary/rockfish_canary.tres" id="279_rockfish_canary"] +[ext_resource type="Resource" path="res://fish/species/porgy_scup/porgy_scup.tres" id="280_porgy_scup"] +[ext_resource type="Resource" path="res://fish/species/sheepshead/sheepshead.tres" id="281_sheepshead"] +[ext_resource type="Resource" path="res://fish/species/tautog/tautog.tres" id="282_tautog"] +[ext_resource type="Resource" path="res://fish/species/rockfish_yelloweye/rockfish_yelloweye.tres" id="283_rockfish_yelloweye"] +[ext_resource type="Resource" path="res://fish/species/lingcod/lingcod.tres" id="284_lingcod"] +[ext_resource type="Resource" path="res://fish/species/milkfish/milkfish.tres" id="285_milkfish"] +[ext_resource type="Resource" path="res://fish/species/roosterfish/roosterfish.tres" id="286_roosterfish"] +[ext_resource type="Resource" path="res://fish/species/tarpon_atlantic/tarpon_atlantic.tres" id="287_tarpon_atlantic"] +[ext_resource type="Resource" path="res://fish/species/barramundi/barramundi.tres" id="288_barramundi"] +[ext_resource type="Resource" path="res://fish/species/snook_common/snook_common.tres" id="289_snook_common"] +[ext_resource type="Resource" path="res://fish/species/bonefish/bonefish.tres" id="290_bonefish"] +[ext_resource type="Resource" path="res://fish/species/pompano_florida/pompano_florida.tres" id="291_pompano_florida"] +[ext_resource type="Resource" path="res://fish/species/ladyfish/ladyfish.tres" id="292_ladyfish"] +[ext_resource type="Resource" path="res://fish/species/permit/permit.tres" id="293_permit"] +[ext_resource type="Resource" path="res://fish/species/knifefish_clown/knifefish_clown.tres" id="294_knifefish_clown"] +[ext_resource type="Resource" path="res://fish/species/loach_clown/loach_clown.tres" id="295_loach_clown"] +[ext_resource type="Resource" path="res://fish/species/discus/discus.tres" id="296_discus"] +[ext_resource type="Resource" path="res://fish/species/angelfish_freshwater/angelfish_freshwater.tres" id="297_angelfish_freshwater"] +[ext_resource type="Resource" path="res://fish/species/gourami_giant/gourami_giant.tres" id="298_gourami_giant"] +[ext_resource type="Resource" path="res://fish/species/tilapia_nile/tilapia_nile.tres" id="299_tilapia_nile"] +[ext_resource type="Resource" path="res://fish/species/oscar/oscar.tres" id="300_oscar"] +[ext_resource type="Resource" path="res://fish/species/betta_siamese/betta_siamese.tres" id="301_betta_siamese"] +[ext_resource type="Resource" path="res://fish/species/tambaqui/tambaqui.tres" id="302_tambaqui"] +[ext_resource type="Resource" path="res://fish/species/catfish_walking/catfish_walking.tres" id="303_catfish_walking"] +[ext_resource type="Resource" path="res://fish/species/snakehead_giant/snakehead_giant.tres" id="304_snakehead_giant"] +[ext_resource type="Resource" path="res://fish/species/dorado_golden/dorado_golden.tres" id="305_dorado_golden"] +[ext_resource type="Resource" path="res://fish/species/mahseer_golden/mahseer_golden.tres" id="306_mahseer_golden"] +[ext_resource type="Resource" path="res://fish/species/peacock_bass/peacock_bass.tres" id="307_peacock_bass"] +[ext_resource type="Resource" path="res://fish/species/piranha_red_bellied/piranha_red_bellied.tres" id="308_piranha_red_bellied"] +[ext_resource type="Resource" path="res://fish/species/arowana_silver/arowana_silver.tres" id="309_arowana_silver"] +[ext_resource type="Resource" path="res://fish/species/whale_blue/whale_blue.tres" id="310_whale_blue"] +[ext_resource type="Resource" path="res://fish/species/dolphin_bottlenose/dolphin_bottlenose.tres" id="311_dolphin_bottlenose"] +[ext_resource type="Resource" path="res://fish/species/whale_humpback/whale_humpback.tres" id="312_whale_humpback"] +[ext_resource type="Resource" path="res://fish/species/whale_killer/whale_killer.tres" id="313_whale_killer"] +[ext_resource type="Resource" path="res://fish/species/whale_sperm/whale_sperm.tres" id="314_whale_sperm"] [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"), 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")] +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"), ExtResource("55_bowfin"), ExtResource("56_sturgeon_lake"), ExtResource("57_gar_longnose"), ExtResource("58_paddlefish"), ExtResource("59_sturgeon_shovelnose"), ExtResource("60_gar_spotted"), ExtResource("61_lungfish_west_african"), ExtResource("62_mudskipper_atlantic"), ExtResource("63_foureyes_largescale"), ExtResource("64_mullet_red"), ExtResource("65_plaice_european"), ExtResource("66_flounder_summer"), ExtResource("67_flounder_winter"), ExtResource("68_dugong"), ExtResource("69_seal_harbor"), ExtResource("70_sea_otter"), ExtResource("71_walrus"), ExtResource("72_manatee_west_indian"), ExtResource("73_pipefish_bay"), ExtResource("74_seahorse_lined"), ExtResource("75_monkfish"), ExtResource("76_tripletail"), ExtResource("77_bluefish"), ExtResource("78_jack_crevalle"), ExtResource("79_queenfish_talang"), ExtResource("80_sand_lance_american"), ExtResource("81_menhaden_atlantic"), ExtResource("82_sardine_european"), ExtResource("83_sardine_pacific"), ExtResource("84_shark_blacktip"), ExtResource("85_shark_great_hammerhead"), ExtResource("86_shark_great_white"), ExtResource("87_shark_tiger"), ExtResource("88_shark_whale"), ExtResource("89_burbot"), ExtResource("90_cisco"), ExtResource("91_whitefish_lake"), ExtResource("92_char_arctic"), ExtResource("93_grayling_arctic"), ExtResource("94_trout_brown"), ExtResource("95_wolffish_atlantic"), ExtResource("96_cusk"), ExtResource("97_wolffish_spotted"), ExtResource("98_herring_atlantic"), ExtResource("99_capelin"), ExtResource("100_sprat_european"), ExtResource("101_herring_pacific"), ExtResource("102_pollock_alaska"), ExtResource("103_cod_atlantic"), ExtResource("104_pollock_atlantic"), ExtResource("105_sole_dover"), ExtResource("106_haddock"), ExtResource("107_cod_pacific"), ExtResource("108_hake_pacific"), ExtResource("109_hake_silver"), ExtResource("110_nautilus_chambered"), ExtResource("111_cuttlefish_common"), ExtResource("112_cuttlefish_flamboyant"), ExtResource("113_tilefish_blueline"), ExtResource("114_tilefish_golden"), ExtResource("115_ocean_perch_pacific"), ExtResource("116_sea_bass_chilean"), ExtResource("117_sablefish"), ExtResource("118_wreckfish"), ExtResource("119_oarfish_giant"), ExtResource("120_coelacanth_west_indian"), ExtResource("121_anglerfish_black_seadevil"), ExtResource("122_fangtooth_common"), ExtResource("123_gulper_eel"), ExtResource("124_barreleye_pacific"), ExtResource("125_blobfish_smooth_head"), ExtResource("126_lanternfish_spotted"), ExtResource("127_sea_star_crown_of_thorns"), ExtResource("128_sea_cucumber_giant_california"), ExtResource("129_urchin_purple"), ExtResource("130_sand_dollar"), ExtResource("131_sea_star_sunflower"), ExtResource("132_axolotl"), ExtResource("133_hellbender"), ExtResource("134_guppy"), ExtResource("135_tetra_neon"), ExtResource("136_danio_zebra"), ExtResource("137_largemouth_bass"), ExtResource("138_smallmouth_bass"), ExtResource("139_buffalo_bigmouth"), ExtResource("140_redhorse_golden"), ExtResource("141_quillback"), ExtResource("142_buffalo_smallmouth"), ExtResource("143_sucker_white"), ExtResource("144_bullhead_black"), ExtResource("145_bullhead_brown"), ExtResource("146_madtom_tadpole"), ExtResource("147_bullhead_yellow"), ExtResource("148_barbel_common"), ExtResource("149_bream_common"), ExtResource("150_roach_common"), ExtResource("151_fallfish"), ExtResource("152_ide"), ExtResource("153_rudd"), ExtResource("154_tench"), ExtResource("155_crayfish_red_swamp"), ExtResource("156_gar_alligator"), ExtResource("157_arapaima"), ExtResource("158_tigerfish_goliath"), ExtResource("159_muskellunge"), ExtResource("160_shiner_common"), ExtResource("161_chub_creek"), ExtResource("162_shiner_emerald"), ExtResource("163_minnow_fathead"), ExtResource("164_shiner_golden"), ExtResource("165_electric_eel"), ExtResource("166_freshwater_drum"), ExtResource("167_goldeye"), ExtResource("168_mooneye"), ExtResource("169_loach_weather"), ExtResource("170_koi"), ExtResource("171_crappie_black"), ExtResource("172_green_sunfish"), ExtResource("173_pumpkinseed"), ExtResource("174_redear_sunfish"), ExtResource("175_warmouth"), ExtResource("176_crappie_white"), ExtResource("177_yellow_perch"), ExtResource("178_pickerel_chain"), ExtResource("179_pickerel_grass"), ExtResource("180_pike_northern"), ExtResource("181_jelly_crystal"), ExtResource("182_jelly_lions_mane"), ExtResource("183_jelly_moon"), ExtResource("184_jelly_pacific_sea_nettle"), ExtResource("185_jelly_sea_wasp"), ExtResource("186_pompano_african"), ExtResource("187_cobia"), ExtResource("188_trevally_giant"), ExtResource("189_amberjack_greater"), ExtResource("190_amberjack_lesser"), ExtResource("191_halibut_atlantic"), ExtResource("192_halibut_pacific"), ExtResource("193_turbot"), ExtResource("194_lobster_american"), ExtResource("195_krill_antarctic"), ExtResource("196_lobster_caribbean_spiny"), ExtResource("197_shrimp_peacock_mantis"), ExtResource("198_shrimp_skunk_cleaner"), ExtResource("199_crab_ghost"), ExtResource("200_crab_blue"), ExtResource("201_crab_dungeness"), ExtResource("202_crab_japanese_spider"), ExtResource("203_crab_red_king"), ExtResource("204_eel_american"), ExtResource("205_eel_european"), ExtResource("206_smelt_rainbow"), ExtResource("207_smelt_eulachon"), ExtResource("208_sturgeon_white"), ExtResource("209_mahi_mahi"), ExtResource("210_opah"), ExtResource("211_wahoo"), ExtResource("212_octopus_common"), ExtResource("213_octopus_day"), ExtResource("214_octopus_giant_pacific"), ExtResource("215_octopus_greater_blue_ringed"), ExtResource("216_skate_barndoor"), ExtResource("217_manta_ray_giant"), ExtResource("218_sawfish_largetooth"), ExtResource("219_stingray_ocellate_river"), ExtResource("220_stingray_southern"), ExtResource("221_lionfish_red"), ExtResource("222_scorpionfish_red"), ExtResource("223_moray_green"), ExtResource("224_flounder_peacock"), ExtResource("225_surgeonfish_blue"), ExtResource("226_parrotfish_rainbow"), ExtResource("227_parrotfish_stoplight"), ExtResource("228_tang_yellow"), ExtResource("229_trumpetfish_atlantic"), ExtResource("230_triggerfish_gray"), ExtResource("231_pufferfish_guineafowl"), ExtResource("232_cowfish_longhorn"), ExtResource("233_triggerfish_queen"), ExtResource("234_cornetfish_red"), ExtResource("235_porcupinefish_spotted"), ExtResource("236_boxfish_yellow"), ExtResource("237_butterflyfish_copperband"), ExtResource("238_clownfish_ocellaris"), ExtResource("239_angelfish_queen"), ExtResource("240_grouper_atlantic_goliath"), ExtResource("241_trevally_bluefin"), ExtResource("242_grouper_giant"), ExtResource("243_barracuda_great"), ExtResource("244_grouper_nassau"), ExtResource("245_chromis_blue_green"), ExtResource("246_grunt_bluestriped"), ExtResource("247_grunt_french"), ExtResource("248_damselfish_sergeant_major"), ExtResource("249_wrasse_ballan"), ExtResource("250_wrasse_cleaner"), ExtResource("251_hogfish"), ExtResource("252_turtle_green"), ExtResource("253_turtle_hawksbill"), ExtResource("254_turtle_leatherback"), ExtResource("255_turtle_loggerhead"), ExtResource("256_seadragon_leafy"), ExtResource("257_seadragon_weedy"), ExtResource("258_oyster_black_lip_pearl"), ExtResource("259_clam_giant"), ExtResource("260_clam_geoduck"), ExtResource("261_conch_queen"), ExtResource("262_abalone_red"), ExtResource("263_squid_bigfin_reef"), ExtResource("264_squid_colossal"), ExtResource("265_squid_giant"), ExtResource("266_squid_humboldt"), ExtResource("267_halfbeak_ballyhoo"), ExtResource("268_needlefish_hound"), ExtResource("269_flyingfish_tropical"), ExtResource("270_croaker_atlantic"), ExtResource("271_black_drum"), ExtResource("272_red_drum"), ExtResource("273_mullet_striped"), ExtResource("274_weakfish"), ExtResource("275_white_perch"), ExtResource("276_croaker_yellowfin"), ExtResource("277_rockfish_black"), ExtResource("278_sea_bass_black"), ExtResource("279_rockfish_canary"), ExtResource("280_porgy_scup"), ExtResource("281_sheepshead"), ExtResource("282_tautog"), ExtResource("283_rockfish_yelloweye"), ExtResource("284_lingcod"), ExtResource("285_milkfish"), ExtResource("286_roosterfish"), ExtResource("287_tarpon_atlantic"), ExtResource("288_barramundi"), ExtResource("289_snook_common"), ExtResource("290_bonefish"), ExtResource("291_pompano_florida"), ExtResource("292_ladyfish"), ExtResource("293_permit"), ExtResource("294_knifefish_clown"), ExtResource("295_loach_clown"), ExtResource("296_discus"), ExtResource("297_angelfish_freshwater"), ExtResource("298_gourami_giant"), ExtResource("299_tilapia_nile"), ExtResource("300_oscar"), ExtResource("301_betta_siamese"), ExtResource("302_tambaqui"), ExtResource("303_catfish_walking"), ExtResource("304_snakehead_giant"), ExtResource("305_dorado_golden"), ExtResource("306_mahseer_golden"), ExtResource("307_peacock_bass"), ExtResource("308_piranha_red_bellied"), ExtResource("309_arowana_silver"), ExtResource("310_whale_blue"), ExtResource("311_dolphin_bottlenose"), ExtResource("312_whale_humpback"), ExtResource("313_whale_killer"), ExtResource("314_whale_sperm")] diff --git a/fish/species/abalone_red/abalone_red.tres b/fish/species/abalone_red/abalone_red.tres new file mode 100644 index 0000000..039c7e2 --- /dev/null +++ b/fish/species/abalone_red/abalone_red.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"abalone_red" +display_name = "red abalone" +active = false +catalog_number = 6405 +collection_group = &"Shellfish" +logbook_fact = "red abalones cling to pacific rocks with broad muscular feet. rows of shell holes release water that has passed over the gills." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 12.0 +sell_value_min = 24 +sell_value_max = 56 +sell_value_curve = 0.88 diff --git a/fish/species/amberjack_greater/amberjack_greater.tres b/fish/species/amberjack_greater/amberjack_greater.tres new file mode 100644 index 0000000..53ea638 --- /dev/null +++ b/fish/species/amberjack_greater/amberjack_greater.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"amberjack_greater" +display_name = "greater amberjack" +active = false +catalog_number = 3604 +collection_group = &"Large coastal predators" +logbook_fact = "greater amberjacks circle reefs, wrecks, and offshore platforms. a dark stripe crosses the eye of their sturdy torpedo-shaped bodies." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 90.0 +sell_value_min = 15 +sell_value_max = 42 +sell_value_curve = 0.82 diff --git a/fish/species/amberjack_lesser/amberjack_lesser.tres b/fish/species/amberjack_lesser/amberjack_lesser.tres new file mode 100644 index 0000000..2fd0aec --- /dev/null +++ b/fish/species/amberjack_lesser/amberjack_lesser.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"amberjack_lesser" +display_name = "lesser amberjack" +active = false +catalog_number = 3605 +collection_group = &"Large coastal predators" +logbook_fact = "lesser amberjacks school around deep reefs and floating objects. an enlarged eye suits their preference for dimmer water." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 20.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/anchovy_european/anchovy_european.tres b/fish/species/anchovy_european/anchovy_european.tres index fea09ed..722fbaf 100644 --- a/fish/species/anchovy_european/anchovy_european.tres +++ b/fish/species/anchovy_european/anchovy_european.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"anchovy_european" display_name = "european anchovy" +active = true +catalog_number = 805 +collection_group = &"Coastal schooling fish" +logbook_fact = "european anchovies form dense schools and feed by filtering tiny plankton from coastal water." allowed_water_types = 2 base_catch_weight = 0.5 catch_profile = ExtResource("2_profile") diff --git a/fish/species/anchovy_northern/anchovy_northern.tres b/fish/species/anchovy_northern/anchovy_northern.tres index ad53d6e..a1940d5 100644 --- a/fish/species/anchovy_northern/anchovy_northern.tres +++ b/fish/species/anchovy_northern/anchovy_northern.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"anchovy_northern" display_name = "northern anchovy" +active = true +catalog_number = 808 +collection_group = &"Coastal schooling fish" +logbook_fact = "northern anchovies gather in huge schools along the pacific coast and filter plankton with their fine gill rakers." allowed_water_types = 2 base_catch_weight = 0.5 catch_profile = ExtResource("2_profile") diff --git a/fish/species/angelfish_freshwater/angelfish_freshwater.tres b/fish/species/angelfish_freshwater/angelfish_freshwater.tres new file mode 100644 index 0000000..5d9bda2 --- /dev/null +++ b/fish/species/angelfish_freshwater/angelfish_freshwater.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"angelfish_freshwater" +display_name = "freshwater angelfish" +active = false +catalog_number = 7504 +collection_group = &"Tropical freshwater fish" +logbook_fact = "freshwater angelfish slip between tall plants on narrow triangular bodies. long fins and vertical bars resemble stems and shadows." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +sell_value_min = 10 +sell_value_max = 22 +sell_value_curve = 0.95 diff --git a/fish/species/angelfish_queen/angelfish_queen.tres b/fish/species/angelfish_queen/angelfish_queen.tres new file mode 100644 index 0000000..d45bbea --- /dev/null +++ b/fish/species/angelfish_queen/angelfish_queen.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"angelfish_queen" +display_name = "queen angelfish" +active = false +catalog_number = 5703 +collection_group = &"Reef ornamentals" +logbook_fact = "queen angelfish graze sponges from warm atlantic reefs. a blue-ringed spot on the forehead resembles a tiny crown." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 2.0 +sell_value_min = 11 +sell_value_max = 25 +sell_value_curve = 0.94 diff --git a/fish/species/anglerfish_black_seadevil/anglerfish_black_seadevil.tres b/fish/species/anglerfish_black_seadevil/anglerfish_black_seadevil.tres new file mode 100644 index 0000000..2888120 --- /dev/null +++ b/fish/species/anglerfish_black_seadevil/anglerfish_black_seadevil.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"anglerfish_black_seadevil" +display_name = "black seadevil" +active = false +catalog_number = 1801 +collection_group = &"Deep-sea oddities" +logbook_fact = "black seadevils lure prey with a glowing organ suspended above the mouth. tiny males permanently attach to much larger females." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.05 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 2.0 +sell_value_min = 48 +sell_value_max = 105 +sell_value_curve = 0.92 diff --git a/fish/species/arapaima/arapaima.tres b/fish/species/arapaima/arapaima.tres new file mode 100644 index 0000000..2ee2c75 --- /dev/null +++ b/fish/species/arapaima/arapaima.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"arapaima" +display_name = "arapaima" +active = false +catalog_number = 2702 +collection_group = &"Freshwater giants" +logbook_fact = "arapaima must surface frequently to gulp air through a specialized swim bladder. large armored scales protect their long river-going bodies." +allowed_water_types = 1 +rarity = 4 +base_catch_weight = 0.04 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 40.0 +weight_max_lb = 400.0 +sell_value_min = 60 +sell_value_max = 140 +sell_value_curve = 0.78 diff --git a/fish/species/arowana_silver/arowana_silver.tres b/fish/species/arowana_silver/arowana_silver.tres new file mode 100644 index 0000000..413621c --- /dev/null +++ b/fish/species/arowana_silver/arowana_silver.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"arowana_silver" +display_name = "silver arowana" +active = false +catalog_number = 7606 +collection_group = &"Tropical freshwater predators" +logbook_fact = "silver arowanas patrol the surface with upturned mouths and long bodies. powerful jumps capture insects and small animals above the water." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 15.0 +sell_value_min = 25 +sell_value_max = 56 +sell_value_curve = 0.86 diff --git a/fish/species/axolotl/axolotl.tres b/fish/species/axolotl/axolotl.tres new file mode 100644 index 0000000..17ba5ad --- /dev/null +++ b/fish/species/axolotl/axolotl.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"axolotl" +display_name = "axolotl" +active = false +catalog_number = 2001 +collection_group = &"Freshwater amphibians" +logbook_fact = "axolotls remain aquatic and keep feathery external gills throughout adulthood. lost limbs and parts of several organs can regenerate." +allowed_water_types = 1 +rarity = 4 +base_catch_weight = 0.04 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 0.7 +sell_value_min = 36 +sell_value_max = 78 +sell_value_curve = 0.96 diff --git a/fish/species/barbel_common/barbel_common.tres b/fish/species/barbel_common/barbel_common.tres new file mode 100644 index 0000000..4e1b93d --- /dev/null +++ b/fish/species/barbel_common/barbel_common.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"barbel_common" +display_name = "common barbel" +active = false +catalog_number = 2501 +collection_group = &"Freshwater coarse fish" +logbook_fact = "common barbels hold close to fast river bottoms with streamlined bodies and broad fins. four mouth barbels locate food among stones." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 25.0 +sell_value_min = 13 +sell_value_max = 31 +sell_value_curve = 0.85 diff --git a/fish/species/barracuda_great/barracuda_great.tres b/fish/species/barracuda_great/barracuda_great.tres new file mode 100644 index 0000000..c2a105f --- /dev/null +++ b/fish/species/barracuda_great/barracuda_great.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"barracuda_great" +display_name = "great barracuda" +active = false +catalog_number = 5804 +collection_group = &"Reef predators" +logbook_fact = "great barracudas hover motionless before accelerating toward prey. long jaws carry two distinct rows of sharp teeth." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 80.0 +sell_value_min = 28 +sell_value_max = 65 +sell_value_curve = 0.82 diff --git a/fish/species/barramundi/barramundi.tres b/fish/species/barramundi/barramundi.tres new file mode 100644 index 0000000..afbd336 --- /dev/null +++ b/fish/species/barramundi/barramundi.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"barramundi" +display_name = "barramundi" +active = false +catalog_number = 7302 +collection_group = &"Tropical estuary" +logbook_fact = "barramundi move between rivers and coasts and can breathe in low-oxygen water. many mature first as males and later become females." +allowed_water_types = 3 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 45.0 +sell_value_min = 15 +sell_value_max = 38 +sell_value_curve = 0.84 diff --git a/fish/species/barreleye_pacific/barreleye_pacific.tres b/fish/species/barreleye_pacific/barreleye_pacific.tres new file mode 100644 index 0000000..d784c35 --- /dev/null +++ b/fish/species/barreleye_pacific/barreleye_pacific.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"barreleye_pacific" +display_name = "Pacific barreleye" +active = false +catalog_number = 1804 +collection_group = &"Deep-sea oddities" +logbook_fact = "pacific barreleyes peer upward through transparent shields covering the head. tubular eyes rotate forward when the fish turns to feed." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.045 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 2.5 +sell_value_min = 42 +sell_value_max = 88 +sell_value_curve = 0.9 diff --git a/fish/species/bass/bass.tres b/fish/species/bass/bass.tres index bc2b026..b263c3f 100644 --- a/fish/species/bass/bass.tres +++ b/fish/species/bass/bass.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"bass" display_name = "striped bass" +active = true +catalog_number = 6701 +collection_group = &"Temperate coastal" +logbook_fact = "striped bass split their lives between salt and fresh water, returning upriver to spawn. a long-lived striper may see three decades." allowed_water_types = 2 rarity = 1 base_catch_weight = 4.0 diff --git a/fish/species/betta_siamese/betta_siamese.tres b/fish/species/betta_siamese/betta_siamese.tres new file mode 100644 index 0000000..06bbac6 --- /dev/null +++ b/fish/species/betta_siamese/betta_siamese.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"betta_siamese" +display_name = "Siamese fighting fish" +active = false +catalog_number = 7508 +collection_group = &"Tropical freshwater fish" +logbook_fact = "siamese fighting fish breathe surface air with a labyrinth organ. males build bubble nests and guard the eggs beneath them." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.15 +sell_value_min = 5 +sell_value_max = 10 +sell_value_curve = 1.0 diff --git a/fish/species/black_drum/black_drum.tres b/fish/species/black_drum/black_drum.tres new file mode 100644 index 0000000..88a4ee2 --- /dev/null +++ b/fish/species/black_drum/black_drum.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"black_drum" +display_name = "black drum" +active = false +catalog_number = 6802 +collection_group = &"Temperate estuary" +logbook_fact = "black drum crush oysters and crabs with rounded throat teeth. large adults develop dark vertical bars that fade with age." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 70.0 +sell_value_min = 8 +sell_value_max = 27 +sell_value_curve = 0.82 diff --git a/fish/species/blobfish_smooth_head/blobfish_smooth_head.tres b/fish/species/blobfish_smooth_head/blobfish_smooth_head.tres new file mode 100644 index 0000000..0117988 --- /dev/null +++ b/fish/species/blobfish_smooth_head/blobfish_smooth_head.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"blobfish_smooth_head" +display_name = "smooth-head blobfish" +active = false +catalog_number = 1805 +collection_group = &"Deep-sea oddities" +logbook_fact = "smooth-head blobfish rest on deep slopes where pressure supports their soft bodies. they conserve energy by waiting for edible matter nearby." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.04 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 5.0 +sell_value_min = 42 +sell_value_max = 90 +sell_value_curve = 0.86 diff --git a/fish/species/bluefish/bluefish.tres b/fish/species/bluefish/bluefish.tres new file mode 100644 index 0000000..70288f5 --- /dev/null +++ b/fish/species/bluefish/bluefish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"bluefish" +display_name = "bluefish" +active = false +catalog_number = 702 +collection_group = &"Coastal pelagic fish" +logbook_fact = "bluefish race in coordinated schools while pursuing smaller fish. sharp teeth and powerful jaws make their feeding bursts especially fierce." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.85 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 25.0 +sell_value_min = 7 +sell_value_max = 19 +sell_value_curve = 0.85 diff --git a/fish/species/bluegill/bluegill.tres b/fish/species/bluegill/bluegill.tres index 9e98a5b..04c03d0 100644 --- a/fish/species/bluegill/bluegill.tres +++ b/fish/species/bluegill/bluegill.tres @@ -9,6 +9,10 @@ script = ExtResource("1_fish_data") id = &"bluegill" display_name = "bluegill" +active = true +catalog_number = 3102 +collection_group = &"Freshwater panfish" +logbook_fact = "bluegill fathers sweep shallow bowls into the bottom for nests, then stand guard. whole neighborhoods of nests can crowd together." allowed_water_types = 1 rarity = 0 base_catch_weight = 10.0 diff --git a/fish/species/bonefish/bonefish.tres b/fish/species/bonefish/bonefish.tres new file mode 100644 index 0000000..0c0d6dd --- /dev/null +++ b/fish/species/bonefish/bonefish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"bonefish" +display_name = "bonefish" +active = false +catalog_number = 7401 +collection_group = &"Tropical flats fish" +logbook_fact = "bonefish sweep tropical flats in silvery schools and root for buried prey. their speed and pale bodies make them difficult to follow in shallow water." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 15.0 +sell_value_min = 13 +sell_value_max = 31 +sell_value_curve = 0.86 diff --git a/fish/species/bowfin/bowfin.tres b/fish/species/bowfin/bowfin.tres new file mode 100644 index 0000000..748197a --- /dev/null +++ b/fish/species/bowfin/bowfin.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"bowfin" +display_name = "bowfin" +active = false +catalog_number = 101 +collection_group = &"Ancient freshwater fish" +logbook_fact = "bowfin can gulp air at the surface when warm backwaters run low on oxygen. a long dorsal fin ripples as they stalk prey." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 20.0 +sell_value_min = 13 +sell_value_max = 30 +sell_value_curve = 0.85 diff --git a/fish/species/boxfish_yellow/boxfish_yellow.tres b/fish/species/boxfish_yellow/boxfish_yellow.tres new file mode 100644 index 0000000..d701ada --- /dev/null +++ b/fish/species/boxfish_yellow/boxfish_yellow.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"boxfish_yellow" +display_name = "yellow boxfish" +active = false +catalog_number = 5608 +collection_group = &"Reef oddities" +logbook_fact = "yellow boxfish juveniles are bright cubes covered in black spots. rigid body armor leaves small fins to provide careful steering." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.32 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.8 +sell_value_min = 10 +sell_value_max = 22 +sell_value_curve = 0.96 diff --git a/fish/species/bream_common/bream_common.tres b/fish/species/bream_common/bream_common.tres new file mode 100644 index 0000000..54ecc57 --- /dev/null +++ b/fish/species/bream_common/bream_common.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"bream_common" +display_name = "common bream" +active = false +catalog_number = 2502 +collection_group = &"Freshwater coarse fish" +logbook_fact = "common bream gather in slow rivers and lakes with silvery, deep-sided bodies. protruding mouths sift insect larvae from soft bottoms." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 15.0 +sell_value_min = 4 +sell_value_max = 12 +sell_value_curve = 0.88 diff --git a/fish/species/buffalo_bigmouth/buffalo_bigmouth.tres b/fish/species/buffalo_bigmouth/buffalo_bigmouth.tres new file mode 100644 index 0000000..4053eb6 --- /dev/null +++ b/fish/species/buffalo_bigmouth/buffalo_bigmouth.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"buffalo_bigmouth" +display_name = "bigmouth buffalo" +active = false +catalog_number = 2301 +collection_group = &"Freshwater bottom fish" +logbook_fact = "bigmouth buffalo filter plankton with fine gill rakers instead of rooting for prey. some individuals survive for more than a century." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 8.0 +weight_max_lb = 80.0 +sell_value_min = 28 +sell_value_max = 63 +sell_value_curve = 0.82 diff --git a/fish/species/buffalo_smallmouth/buffalo_smallmouth.tres b/fish/species/buffalo_smallmouth/buffalo_smallmouth.tres new file mode 100644 index 0000000..f0d2780 --- /dev/null +++ b/fish/species/buffalo_smallmouth/buffalo_smallmouth.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"buffalo_smallmouth" +display_name = "smallmouth buffalo" +active = false +catalog_number = 2304 +collection_group = &"Freshwater bottom fish" +logbook_fact = "smallmouth buffalo use thick lips to graze bottom-dwelling food in warm rivers. their deep, heavy bodies form a pronounced arch behind the head." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 3.0 +weight_max_lb = 45.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.84 diff --git a/fish/species/bullhead_black/bullhead_black.tres b/fish/species/bullhead_black/bullhead_black.tres new file mode 100644 index 0000000..87f6155 --- /dev/null +++ b/fish/species/bullhead_black/bullhead_black.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"bullhead_black" +display_name = "black bullhead" +active = false +catalog_number = 2401 +collection_group = &"Freshwater catfish" +logbook_fact = "black bullheads tolerate warm, cloudy water with little oxygen. stout spines protect the dorsal and pectoral fins from predators." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 6.0 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.92 diff --git a/fish/species/bullhead_brown/bullhead_brown.tres b/fish/species/bullhead_brown/bullhead_brown.tres new file mode 100644 index 0000000..c900d5f --- /dev/null +++ b/fish/species/bullhead_brown/bullhead_brown.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"bullhead_brown" +display_name = "brown bullhead" +active = false +catalog_number = 2403 +collection_group = &"Freshwater catfish" +logbook_fact = "brown bullheads search muddy bottoms with eight sensitive barbels. males guard nests and herd newly hatched young in a dark moving ball." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.95 diff --git a/fish/species/bullhead_yellow/bullhead_yellow.tres b/fish/species/bullhead_yellow/bullhead_yellow.tres new file mode 100644 index 0000000..e2b5d63 --- /dev/null +++ b/fish/species/bullhead_yellow/bullhead_yellow.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"bullhead_yellow" +display_name = "yellow bullhead" +active = false +catalog_number = 2408 +collection_group = &"Freshwater catfish" +logbook_fact = "yellow bullheads use pale chin barbels to distinguish food in murky shallows. both parents may guard the nest and schooling young." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 3.5 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.95 diff --git a/fish/species/burbot/burbot.tres b/fish/species/burbot/burbot.tres new file mode 100644 index 0000000..25e9277 --- /dev/null +++ b/fish/species/burbot/burbot.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"burbot" +display_name = "burbot" +active = false +catalog_number = 1001 +collection_group = &"Cold freshwater fish" +logbook_fact = "burbot are the only freshwater members of the cod family. they become most active in cold darkness and may spawn beneath winter ice." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 18.0 +sell_value_min = 12 +sell_value_max = 28 +sell_value_curve = 0.86 diff --git a/fish/species/butterflyfish_copperband/butterflyfish_copperband.tres b/fish/species/butterflyfish_copperband/butterflyfish_copperband.tres new file mode 100644 index 0000000..e9a3385 --- /dev/null +++ b/fish/species/butterflyfish_copperband/butterflyfish_copperband.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"butterflyfish_copperband" +display_name = "copperband butterflyfish" +active = false +catalog_number = 5701 +collection_group = &"Reef ornamentals" +logbook_fact = "copperband butterflyfish probe reef cracks with long narrow snouts. bold orange bands and a false eyespot confuse predators." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.32 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.4 +sell_value_min = 9 +sell_value_max = 21 +sell_value_curve = 0.98 diff --git a/fish/species/capelin/capelin.tres b/fish/species/capelin/capelin.tres new file mode 100644 index 0000000..0e5f25b --- /dev/null +++ b/fish/species/capelin/capelin.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"capelin" +display_name = "capelin" +active = false +catalog_number = 1302 +collection_group = &"Cold schooling fish" +logbook_fact = "capelin are small polar fish that feed whales, seabirds, and larger fish. many schools roll onto beaches or shallows to release their eggs." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.2 +sell_value_min = 4 +sell_value_max = 8 +sell_value_curve = 1.0 diff --git a/fish/species/carp/carp.tres b/fish/species/carp/carp.tres index 5673834..4bcdb6c 100644 --- a/fish/species/carp/carp.tres +++ b/fish/species/carp/carp.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.5 script = ExtResource("1_fish_data") id = &"carp" display_name = "common carp" +active = true +catalog_number = 2503 +collection_group = &"Freshwater coarse fish" +logbook_fact = "whisker-like barbels help a common carp investigate the bottom. nosing through sediment can cloud the water and loosen plants." allowed_water_types = 1 rarity = 2 base_catch_weight = 1.5 diff --git a/fish/species/catfish_blue/catfish_blue.tres b/fish/species/catfish_blue/catfish_blue.tres index 482520a..98fda16 100644 --- a/fish/species/catfish_blue/catfish_blue.tres +++ b/fish/species/catfish_blue/catfish_blue.tres @@ -16,6 +16,10 @@ preferred_bait_weight_multiplier = 1.35 script = ExtResource("1_fish_data") id = &"catfish_blue" display_name = "blue catfish" +active = true +catalog_number = 2402 +collection_group = &"Freshwater catfish" +logbook_fact = "a deep fork in the tail inspired the blue catfish's scientific name. it rests deep by daylight and becomes more active after dark." allowed_water_types = 1 rarity = 1 base_catch_weight = 1.25 diff --git a/fish/species/catfish_channel/catfish_channel.tres b/fish/species/catfish_channel/catfish_channel.tres index 265daad..69aff97 100644 --- a/fish/species/catfish_channel/catfish_channel.tres +++ b/fish/species/catfish_channel/catfish_channel.tres @@ -16,6 +16,10 @@ preferred_bait_weight_multiplier = 1.35 script = ExtResource("1_fish_data") id = &"catfish_channel" display_name = "channel catfish" +active = true +catalog_number = 2404 +collection_group = &"Freshwater catfish" +logbook_fact = "a channel catfish can taste through skin all over its body, especially near its gills and whiskers. the male watches the eggs." allowed_water_types = 1 base_catch_weight = 2.0 catch_profile = ExtResource("2_profile") diff --git a/fish/species/catfish_flathead/catfish_flathead.tres b/fish/species/catfish_flathead/catfish_flathead.tres index 651359a..84a6f01 100644 --- a/fish/species/catfish_flathead/catfish_flathead.tres +++ b/fish/species/catfish_flathead/catfish_flathead.tres @@ -16,6 +16,10 @@ preferred_bait_weight_multiplier = 1.35 script = ExtResource("1_fish_data") id = &"catfish_flathead" display_name = "flathead catfish" +active = true +catalog_number = 2405 +collection_group = &"Freshwater catfish" +logbook_fact = "flatheads favor hideouts made by logs, rocks, ledges, and other underwater structure. as they grow, fish dominate their menu." allowed_water_types = 1 rarity = 1 catch_profile = ExtResource("2_profile") diff --git a/fish/species/catfish_walking/catfish_walking.tres b/fish/species/catfish_walking/catfish_walking.tres new file mode 100644 index 0000000..7b8dbf4 --- /dev/null +++ b/fish/species/catfish_walking/catfish_walking.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"catfish_walking" +display_name = "walking catfish" +active = false +catalog_number = 7510 +collection_group = &"Tropical freshwater fish" +logbook_fact = "walking catfish wriggle across wet ground using stiff pectoral spines for support. an air-breathing organ helps them survive the journey." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 5.0 +sell_value_min = 11 +sell_value_max = 24 +sell_value_curve = 0.9 diff --git a/fish/species/catfish_white/catfish_white.tres b/fish/species/catfish_white/catfish_white.tres index 6ee72ea..e5cc545 100644 --- a/fish/species/catfish_white/catfish_white.tres +++ b/fish/species/catfish_white/catfish_white.tres @@ -16,6 +16,10 @@ preferred_bait_weight_multiplier = 1.35 script = ExtResource("1_fish_data") id = &"catfish_white" display_name = "white catfish" +active = true +catalog_number = 2407 +collection_group = &"Freshwater catfish" +logbook_fact = "white catfish began along the atlantic coast between new york and florida. people later carried them far beyond that home range." allowed_water_types = 1 base_catch_weight = 2.0 catch_profile = ExtResource("2_profile") diff --git a/fish/species/char_arctic/char_arctic.tres b/fish/species/char_arctic/char_arctic.tres new file mode 100644 index 0000000..cb47137 --- /dev/null +++ b/fish/species/char_arctic/char_arctic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"char_arctic" +display_name = "arctic char" +active = false +catalog_number = 1101 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "arctic char thrive farther north than any other freshwater fish. some remain in lakes while others migrate between rivers and the sea." +allowed_water_types = 3 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 25.0 +sell_value_min = 14 +sell_value_max = 32 +sell_value_curve = 0.86 diff --git a/fish/species/chromis_blue_green/chromis_blue_green.tres b/fish/species/chromis_blue_green/chromis_blue_green.tres new file mode 100644 index 0000000..e02ded5 --- /dev/null +++ b/fish/species/chromis_blue_green/chromis_blue_green.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"chromis_blue_green" +display_name = "blue-green chromis" +active = false +catalog_number = 5901 +collection_group = &"Reef schooling fish" +logbook_fact = "blue-green chromis form loose clouds above branching coral. the school dives into narrow shelter whenever a predator approaches." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.25 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 1.0 diff --git a/fish/species/chub_creek/chub_creek.tres b/fish/species/chub_creek/chub_creek.tres new file mode 100644 index 0000000..e2bda01 --- /dev/null +++ b/fish/species/chub_creek/chub_creek.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"chub_creek" +display_name = "creek chub" +active = false +catalog_number = 2802 +collection_group = &"Freshwater minnows" +logbook_fact = "creek chubs gather around pools and undercut banks in small streams. males build gravel ridges where several fish may spawn." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 3.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.8 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 1.0 diff --git a/fish/species/chub_european/chub_european.tres b/fish/species/chub_european/chub_european.tres index e282b90..aeed2b7 100644 --- a/fish/species/chub_european/chub_european.tres +++ b/fish/species/chub_european/chub_european.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"chub_european" display_name = "european chub" +active = true +catalog_number = 2505 +collection_group = &"Freshwater coarse fish" +logbook_fact = "european chub are adaptable river fish. adults often patrol shallows and feed on insects, small fish, and fruit." allowed_water_types = 1 base_catch_weight = 0.55 catch_profile = ExtResource("2_profile") diff --git a/fish/species/chub_flame/chub_flame.tres b/fish/species/chub_flame/chub_flame.tres index d631ab0..4ca30fe 100644 --- a/fish/species/chub_flame/chub_flame.tres +++ b/fish/species/chub_flame/chub_flame.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"chub_flame" display_name = "flame chub" +active = true +catalog_number = 2805 +collection_group = &"Freshwater minnows" +logbook_fact = "flame chubs prefer cool, clear streams. their bright breeding colors make a small fish easy to spot in spring water." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.4 diff --git a/fish/species/chub_lake/chub_lake.tres b/fish/species/chub_lake/chub_lake.tres index c04c5b3..8b8927f 100644 --- a/fish/species/chub_lake/chub_lake.tres +++ b/fish/species/chub_lake/chub_lake.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"chub_lake" display_name = "lake chub" +active = true +catalog_number = 2807 +collection_group = &"Freshwater minnows" +logbook_fact = "lake chubs school in cold northern water and use their small mouths to pick insects and other tiny prey from the current." allowed_water_types = 1 base_catch_weight = 0.55 catch_profile = ExtResource("2_profile") diff --git a/fish/species/cisco/cisco.tres b/fish/species/cisco/cisco.tres new file mode 100644 index 0000000..694a9ec --- /dev/null +++ b/fish/species/cisco/cisco.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"cisco" +display_name = "cisco" +active = false +catalog_number = 1002 +collection_group = &"Cold freshwater fish" +logbook_fact = "cisco school in the cool open water of northern lakes. these slim relatives of salmon feed on plankton and become prey for larger fish." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 3.0 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.95 diff --git a/fish/species/clam_geoduck/clam_geoduck.tres b/fish/species/clam_geoduck/clam_geoduck.tres new file mode 100644 index 0000000..82c8eac --- /dev/null +++ b/fish/species/clam_geoduck/clam_geoduck.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"clam_geoduck" +display_name = "Pacific geoduck" +active = false +catalog_number = 6403 +collection_group = &"Shellfish" +logbook_fact = "pacific geoducks bury their shells deep while a long siphon reaches the seafloor. these clams can survive for well over a century." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 15.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.88 diff --git a/fish/species/clam_giant/clam_giant.tres b/fish/species/clam_giant/clam_giant.tres new file mode 100644 index 0000000..d56f410 --- /dev/null +++ b/fish/species/clam_giant/clam_giant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"clam_giant" +display_name = "giant clam" +active = false +catalog_number = 6402 +collection_group = &"Shellfish" +logbook_fact = "giant clams host photosynthetic algae inside brightly colored mantles. heavy shells remain anchored to one reef spot throughout adulthood." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 500.0 +sell_value_min = 28 +sell_value_max = 72 +sell_value_curve = 0.8 diff --git a/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres b/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres new file mode 100644 index 0000000..b09dbdb --- /dev/null +++ b/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"clownfish_ocellaris" +display_name = "ocellaris clownfish" +active = false +catalog_number = 5702 +collection_group = &"Reef ornamentals" +logbook_fact = "ocellaris clownfish shelter safely among stinging anemone tentacles. each group is led by a female that develops from the largest male." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.15 +sell_value_min = 5 +sell_value_max = 10 +sell_value_curve = 1.0 diff --git a/fish/species/cobia/cobia.tres b/fish/species/cobia/cobia.tres new file mode 100644 index 0000000..885f55a --- /dev/null +++ b/fish/species/cobia/cobia.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"cobia" +display_name = "cobia" +active = false +catalog_number = 3602 +collection_group = &"Large coastal predators" +logbook_fact = "cobia often follow sharks, rays, and floating structures in warm seas. a broad dark stripe runs along their long, powerful bodies." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 80.0 +sell_value_min = 15 +sell_value_max = 40 +sell_value_curve = 0.82 diff --git a/fish/species/cod_atlantic/cod_atlantic.tres b/fish/species/cod_atlantic/cod_atlantic.tres new file mode 100644 index 0000000..22ee1ca --- /dev/null +++ b/fish/species/cod_atlantic/cod_atlantic.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"cod_atlantic" +display_name = "atlantic cod" +active = false +catalog_number = 1402 +collection_group = &"Cold shelf fish" +logbook_fact = "atlantic cod carry a pale lateral line and one chin barbel. they search cold seafloors for crustaceans, mollusks, and smaller fish." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 55.0 +sell_value_min = 5 +sell_value_max = 18 +sell_value_curve = 0.85 diff --git a/fish/species/cod_pacific/cod_pacific.tres b/fish/species/cod_pacific/cod_pacific.tres new file mode 100644 index 0000000..7f0b8ce --- /dev/null +++ b/fish/species/cod_pacific/cod_pacific.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"cod_pacific" +display_name = "pacific cod" +active = false +catalog_number = 1406 +collection_group = &"Cold shelf fish" +logbook_fact = "pacific cod use a chin barbel to investigate cold shelf bottoms. seasonal schools follow prey between deeper water and coastal spawning grounds." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 45.0 +sell_value_min = 5 +sell_value_max = 17 +sell_value_curve = 0.85 diff --git a/fish/species/coelacanth_west_indian/coelacanth_west_indian.tres b/fish/species/coelacanth_west_indian/coelacanth_west_indian.tres new file mode 100644 index 0000000..fafc161 --- /dev/null +++ b/fish/species/coelacanth_west_indian/coelacanth_west_indian.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"coelacanth_west_indian" +display_name = "West Indian Ocean coelacanth" +active = false +catalog_number = 1702 +collection_group = &"Deep-sea legends" +logbook_fact = "west indian ocean coelacanths shelter in deep volcanic caves by day. fleshy lobed fins move in an alternating, limb-like rhythm." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.03 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 200.0 +sell_value_min = 65 +sell_value_max = 145 +sell_value_curve = 0.8 diff --git a/fish/species/conch_queen/conch_queen.tres b/fish/species/conch_queen/conch_queen.tres new file mode 100644 index 0000000..0868ddf --- /dev/null +++ b/fish/species/conch_queen/conch_queen.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"conch_queen" +display_name = "queen conch" +active = false +catalog_number = 6404 +collection_group = &"Shellfish" +logbook_fact = "queen conchs graze algae with a long flexible snout. adults develop a broad flared shell lip and move by vaulting on one muscular foot." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 5.0 +sell_value_min = 15 +sell_value_max = 36 +sell_value_curve = 0.91 diff --git a/fish/species/cornetfish_red/cornetfish_red.tres b/fish/species/cornetfish_red/cornetfish_red.tres new file mode 100644 index 0000000..fe4fbc9 --- /dev/null +++ b/fish/species/cornetfish_red/cornetfish_red.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"cornetfish_red" +display_name = "red cornetfish" +active = false +catalog_number = 5606 +collection_group = &"Reef oddities" +logbook_fact = "red cornetfish stalk reefs with extremely long bodies and tubular snouts. a trailing filament extends from the center of the tail." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 24 +sell_value_max = 55 +sell_value_curve = 0.92 diff --git a/fish/species/cowfish_longhorn/cowfish_longhorn.tres b/fish/species/cowfish_longhorn/cowfish_longhorn.tres new file mode 100644 index 0000000..2f647cc --- /dev/null +++ b/fish/species/cowfish_longhorn/cowfish_longhorn.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"cowfish_longhorn" +display_name = "longhorn cowfish" +active = false +catalog_number = 5604 +collection_group = &"Reef oddities" +logbook_fact = "longhorn cowfish wear a rigid box of fused scales with horns above the eyes. small fins steer the angular body with surprising precision." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.13 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 2.0 +sell_value_min = 23 +sell_value_max = 52 +sell_value_curve = 0.94 diff --git a/fish/species/crab_blue/crab_blue.tres b/fish/species/crab_blue/crab_blue.tres new file mode 100644 index 0000000..2248f78 --- /dev/null +++ b/fish/species/crab_blue/crab_blue.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"crab_blue" +display_name = "blue crab" +active = false +catalog_number = 3902 +collection_group = &"Marine crabs" +logbook_fact = "blue crabs swim with flattened rear legs shaped like paddles. bright blue claws and an olive shell conceal a quick, defensive temperament." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.15 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.1 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.95 diff --git a/fish/species/crab_dungeness/crab_dungeness.tres b/fish/species/crab_dungeness/crab_dungeness.tres new file mode 100644 index 0000000..6a75ee3 --- /dev/null +++ b/fish/species/crab_dungeness/crab_dungeness.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"crab_dungeness" +display_name = "Dungeness crab" +active = false +catalog_number = 3903 +collection_group = &"Marine crabs" +logbook_fact = "dungeness crabs bury beneath sand with only their eyes and antennae exposed. broad toothed shells protect them along cool pacific coasts." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.65 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 3.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.92 diff --git a/fish/species/crab_ghost/crab_ghost.tres b/fish/species/crab_ghost/crab_ghost.tres new file mode 100644 index 0000000..5713645 --- /dev/null +++ b/fish/species/crab_ghost/crab_ghost.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"crab_ghost" +display_name = "Atlantic ghost crab" +active = false +catalog_number = 3901 +collection_group = &"Marine crabs" +logbook_fact = "atlantic ghost crabs dash across beaches on long pale legs and retreat into deep burrows. raised eyes scan nearly every direction." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.02 +weight_max_lb = 0.5 +sell_value_min = 11 +sell_value_max = 24 +sell_value_curve = 0.97 diff --git a/fish/species/crab_japanese_spider/crab_japanese_spider.tres b/fish/species/crab_japanese_spider/crab_japanese_spider.tres new file mode 100644 index 0000000..e045021 --- /dev/null +++ b/fish/species/crab_japanese_spider/crab_japanese_spider.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"crab_japanese_spider" +display_name = "Japanese spider crab" +active = false +catalog_number = 3904 +collection_group = &"Marine crabs" +logbook_fact = "japanese spider crabs carry the longest leg span of any living arthropod. adults roam deep seafloors around japan." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.045 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 44.0 +sell_value_min = 38 +sell_value_max = 88 +sell_value_curve = 0.84 diff --git a/fish/species/crab_red_king/crab_red_king.tres b/fish/species/crab_red_king/crab_red_king.tres new file mode 100644 index 0000000..d0b8a74 --- /dev/null +++ b/fish/species/crab_red_king/crab_red_king.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"crab_red_king" +display_name = "red king crab" +active = false +catalog_number = 3905 +collection_group = &"Marine crabs" +logbook_fact = "red king crabs stride over cold northern bottoms on long armored legs. despite the name, they are closer to hermit crabs than true crabs." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 24.0 +sell_value_min = 24 +sell_value_max = 58 +sell_value_curve = 0.85 diff --git a/fish/species/crappie_black/crappie_black.tres b/fish/species/crappie_black/crappie_black.tres new file mode 100644 index 0000000..ba6956e --- /dev/null +++ b/fish/species/crappie_black/crappie_black.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"crappie_black" +display_name = "black crappie" +active = false +catalog_number = 3101 +collection_group = &"Freshwater panfish" +logbook_fact = "black crappie gather around submerged wood and vegetation in clear water. irregular dark speckles scatter across their deep silver bodies." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.9 diff --git a/fish/species/crappie_white/crappie_white.tres b/fish/species/crappie_white/crappie_white.tres new file mode 100644 index 0000000..85c22b0 --- /dev/null +++ b/fish/species/crappie_white/crappie_white.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"crappie_white" +display_name = "white crappie" +active = false +catalog_number = 3107 +collection_group = &"Freshwater panfish" +logbook_fact = "white crappie favor warm, cloudy water and gather around structure. vertical bars cross their silver sides instead of scattered speckles." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.5 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.9 diff --git a/fish/species/crayfish_red_swamp/crayfish_red_swamp.tres b/fish/species/crayfish_red_swamp/crayfish_red_swamp.tres new file mode 100644 index 0000000..cd9d6a0 --- /dev/null +++ b/fish/species/crayfish_red_swamp/crayfish_red_swamp.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"crayfish_red_swamp" +display_name = "red swamp crayfish" +active = false +catalog_number = 2601 +collection_group = &"Freshwater crustaceans" +logbook_fact = "red swamp crayfish burrow into wet ground when water recedes. adaptable populations feed on plants, carrion, and small aquatic animals." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.25 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.98 diff --git a/fish/species/croaker_atlantic/croaker_atlantic.tres b/fish/species/croaker_atlantic/croaker_atlantic.tres new file mode 100644 index 0000000..2f4df70 --- /dev/null +++ b/fish/species/croaker_atlantic/croaker_atlantic.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"croaker_atlantic" +display_name = "atlantic croaker" +active = false +catalog_number = 6801 +collection_group = &"Temperate estuary" +logbook_fact = "atlantic croakers vibrate muscles against the swim bladder to make a croaking sound. chin barbels locate worms in sandy bays." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 5.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/croaker_yellowfin/croaker_yellowfin.tres b/fish/species/croaker_yellowfin/croaker_yellowfin.tres new file mode 100644 index 0000000..ed5410d --- /dev/null +++ b/fish/species/croaker_yellowfin/croaker_yellowfin.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"croaker_yellowfin" +display_name = "yellowfin croaker" +active = false +catalog_number = 6807 +collection_group = &"Temperate estuary" +logbook_fact = "yellowfin croakers search sandy surf zones with a small chin barbel. internal muscles produce croaks and drumming calls." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 4.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/cusk/cusk.tres b/fish/species/cusk/cusk.tres new file mode 100644 index 0000000..c43b1b7 --- /dev/null +++ b/fish/species/cusk/cusk.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"cusk" +display_name = "cusk" +active = false +catalog_number = 1202 +collection_group = &"Cold reef fish" +logbook_fact = "cusk move slowly across cold rocky bottoms, sheltering in cracks and caves. a single long fin runs around much of the rear body." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 30.0 +sell_value_min = 7 +sell_value_max = 19 +sell_value_curve = 0.85 diff --git a/fish/species/cuttlefish_common/cuttlefish_common.tres b/fish/species/cuttlefish_common/cuttlefish_common.tres new file mode 100644 index 0000000..98ec8a0 --- /dev/null +++ b/fish/species/cuttlefish_common/cuttlefish_common.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"cuttlefish_common" +display_name = "common cuttlefish" +active = false +catalog_number = 1502 +collection_group = &"Cuttlefish and nautiluses" +logbook_fact = "common cuttlefish flash changing colors and patterns through specialized skin cells. an internal cuttlebone controls buoyancy." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.55 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 12.0 +sell_value_min = 7 +sell_value_max = 17 +sell_value_curve = 0.9 diff --git a/fish/species/cuttlefish_flamboyant/cuttlefish_flamboyant.tres b/fish/species/cuttlefish_flamboyant/cuttlefish_flamboyant.tres new file mode 100644 index 0000000..4c19554 --- /dev/null +++ b/fish/species/cuttlefish_flamboyant/cuttlefish_flamboyant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"cuttlefish_flamboyant" +display_name = "flamboyant cuttlefish" +active = false +catalog_number = 1503 +collection_group = &"Cuttlefish and nautiluses" +logbook_fact = "flamboyant cuttlefish walk along the seafloor on their arms and fins. vivid displays warn predators of potent toxins." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.4 +sell_value_min = 26 +sell_value_max = 58 +sell_value_curve = 0.96 diff --git a/fish/species/damselfish_sergeant_major/damselfish_sergeant_major.tres b/fish/species/damselfish_sergeant_major/damselfish_sergeant_major.tres new file mode 100644 index 0000000..24260cf --- /dev/null +++ b/fish/species/damselfish_sergeant_major/damselfish_sergeant_major.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"damselfish_sergeant_major" +display_name = "sergeant major" +active = false +catalog_number = 5904 +collection_group = &"Reef schooling fish" +logbook_fact = "sergeant majors guard purple egg patches on hard reef surfaces. five dark bars cross their yellow and silver bodies." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.02 +weight_max_lb = 0.5 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/danio_zebra/danio_zebra.tres b/fish/species/danio_zebra/danio_zebra.tres new file mode 100644 index 0000000..72567d8 --- /dev/null +++ b/fish/species/danio_zebra/danio_zebra.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"danio_zebra" +display_name = "zebrafish" +active = false +catalog_number = 2103 +collection_group = &"Freshwater aquarium fish" +logbook_fact = "zebrafish carry horizontal blue stripes from gill to tail. hardy schools thrive in shallow streams, flooded fields, and quiet pools." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.12 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/discus/discus.tres b/fish/species/discus/discus.tres new file mode 100644 index 0000000..4b84820 --- /dev/null +++ b/fish/species/discus/discus.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"discus" +display_name = "discus" +active = false +catalog_number = 7503 +collection_group = &"Tropical freshwater fish" +logbook_fact = "discus move through quiet amazon backwaters with round, flattened bodies. parents feed newly hatched young with nutrient-rich skin mucus." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.0 +sell_value_min = 24 +sell_value_max = 52 +sell_value_curve = 0.92 diff --git a/fish/species/dolphin_bottlenose/dolphin_bottlenose.tres b/fish/species/dolphin_bottlenose/dolphin_bottlenose.tres new file mode 100644 index 0000000..8d07e73 --- /dev/null +++ b/fish/species/dolphin_bottlenose/dolphin_bottlenose.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"dolphin_bottlenose" +display_name = "common bottlenose dolphin" +active = false +catalog_number = 7702 +collection_group = &"Whales and dolphins" +logbook_fact = "common bottlenose dolphins coordinate with whistles, clicks, and body signals. echolocation reveals prey hidden in dark or cloudy water." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.012 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 330.0 +weight_max_lb = 1400.0 +sell_value_min = 75 +sell_value_max = 180 +sell_value_curve = 0.76 diff --git a/fish/species/dorado_golden/dorado_golden.tres b/fish/species/dorado_golden/dorado_golden.tres new file mode 100644 index 0000000..c5f7abf --- /dev/null +++ b/fish/species/dorado_golden/dorado_golden.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"dorado_golden" +display_name = "golden dorado" +active = false +catalog_number = 7602 +collection_group = &"Tropical freshwater predators" +logbook_fact = "golden dorado chase fish through powerful south american rivers. muscular tails, heavy jaws, and golden scales suit life in fast current." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 55.0 +sell_value_min = 29 +sell_value_max = 66 +sell_value_curve = 0.82 diff --git a/fish/species/dugong/dugong.tres b/fish/species/dugong/dugong.tres new file mode 100644 index 0000000..d6c756d --- /dev/null +++ b/fish/species/dugong/dugong.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"dugong" +display_name = "dugong" +active = false +catalog_number = 501 +collection_group = &"Coastal marine mammals" +logbook_fact = "dugongs graze seagrass meadows with a downturned, bristled snout. they are the only fully marine members of the sirenian family." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.011 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 500.0 +weight_max_lb = 1100.0 +sell_value_min = 72 +sell_value_max = 165 +sell_value_curve = 0.77 diff --git a/fish/species/eel_american/eel_american.tres b/fish/species/eel_american/eel_american.tres new file mode 100644 index 0000000..54a671b --- /dev/null +++ b/fish/species/eel_american/eel_american.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"eel_american" +display_name = "american eel" +active = false +catalog_number = 4001 +collection_group = &"Migratory eels" +logbook_fact = "american eels hatch far out in the sargasso sea before entering freshwater rivers. adults later reverse the journey to spawn once." +allowed_water_types = 3 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 12 +sell_value_max = 27 +sell_value_curve = 0.88 diff --git a/fish/species/eel_european/eel_european.tres b/fish/species/eel_european/eel_european.tres new file mode 100644 index 0000000..54a0c61 --- /dev/null +++ b/fish/species/eel_european/eel_european.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"eel_european" +display_name = "european eel" +active = false +catalog_number = 4002 +collection_group = &"Migratory eels" +logbook_fact = "european eels cross the atlantic as transparent larvae before entering rivers and lakes. mature silver eels return to sea to reproduce." +allowed_water_types = 3 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 10.0 +sell_value_min = 13 +sell_value_max = 30 +sell_value_curve = 0.88 diff --git a/fish/species/electric_eel/electric_eel.tres b/fish/species/electric_eel/electric_eel.tres new file mode 100644 index 0000000..cc63eea --- /dev/null +++ b/fish/species/electric_eel/electric_eel.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"electric_eel" +display_name = "electric eel" +active = false +catalog_number = 2901 +collection_group = &"Freshwater oddities" +logbook_fact = "electric eels navigate and hunt with electrical pulses produced along most of the body. they must surface regularly to breathe air." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 44.0 +sell_value_min = 25 +sell_value_max = 60 +sell_value_curve = 0.82 diff --git a/fish/species/fallfish/fallfish.tres b/fish/species/fallfish/fallfish.tres new file mode 100644 index 0000000..72e3774 --- /dev/null +++ b/fish/species/fallfish/fallfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"fallfish" +display_name = "fallfish" +active = false +catalog_number = 2506 +collection_group = &"Freshwater coarse fish" +logbook_fact = "fallfish are large minnows that build broad stone nests in flowing water. other stream fish often reuse the gravel mounds for spawning." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 3.5 +sell_value_min = 5 +sell_value_max = 10 +sell_value_curve = 0.92 diff --git a/fish/species/fangtooth_common/fangtooth_common.tres b/fish/species/fangtooth_common/fangtooth_common.tres new file mode 100644 index 0000000..e53e1ad --- /dev/null +++ b/fish/species/fangtooth_common/fangtooth_common.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"fangtooth_common" +display_name = "common fangtooth" +active = false +catalog_number = 1802 +collection_group = &"Deep-sea oddities" +logbook_fact = "common fangtooths carry outsized teeth that fit into pockets in the roof of the mouth. they migrate upward from deep water after dark." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +sell_value_min = 25 +sell_value_max = 56 +sell_value_curve = 0.96 diff --git a/fish/species/flounder_peacock/flounder_peacock.tres b/fish/species/flounder_peacock/flounder_peacock.tres new file mode 100644 index 0000000..54737a4 --- /dev/null +++ b/fish/species/flounder_peacock/flounder_peacock.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"flounder_peacock" +display_name = "peacock flounder" +active = false +catalog_number = 5401 +collection_group = &"Reef flatfish" +logbook_fact = "peacock flounders change their spots and colors to match tropical sand. both eyes scan above while the flat body remains concealed." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 5.0 +sell_value_min = 11 +sell_value_max = 24 +sell_value_curve = 0.9 diff --git a/fish/species/flounder_summer/flounder_summer.tres b/fish/species/flounder_summer/flounder_summer.tres new file mode 100644 index 0000000..9d5892b --- /dev/null +++ b/fish/species/flounder_summer/flounder_summer.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"flounder_summer" +display_name = "summer flounder" +active = false +catalog_number = 402 +collection_group = &"Coastal flatfish" +logbook_fact = "summer flounder bury themselves in sand with only their eyes exposed. a sudden burst carries them upward to seize passing prey." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 15.0 +sell_value_min = 6 +sell_value_max = 16 +sell_value_curve = 0.88 diff --git a/fish/species/flounder_winter/flounder_winter.tres b/fish/species/flounder_winter/flounder_winter.tres new file mode 100644 index 0000000..6ad7a4b --- /dev/null +++ b/fish/species/flounder_winter/flounder_winter.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"flounder_winter" +display_name = "winter flounder" +active = false +catalog_number = 403 +collection_group = &"Coastal flatfish" +logbook_fact = "winter flounder favor cool bays and estuaries where they rest on muddy bottoms. their eyes sit on the right side of the body." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 8.0 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.9 diff --git a/fish/species/flyingfish_tropical/flyingfish_tropical.tres b/fish/species/flyingfish_tropical/flyingfish_tropical.tres new file mode 100644 index 0000000..7f94269 --- /dev/null +++ b/fish/species/flyingfish_tropical/flyingfish_tropical.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"flyingfish_tropical" +display_name = "tropical flyingfish" +active = false +catalog_number = 6603 +collection_group = &"Surface ocean fish" +logbook_fact = "tropical flyingfish accelerate underwater before spreading enlarged fins above the surface. glides help them escape pursuing predators." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.5 +sell_value_min = 10 +sell_value_max = 22 +sell_value_curve = 0.94 diff --git a/fish/species/foureyes_largescale/foureyes_largescale.tres b/fish/species/foureyes_largescale/foureyes_largescale.tres new file mode 100644 index 0000000..23b1b6c --- /dev/null +++ b/fish/species/foureyes_largescale/foureyes_largescale.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"foureyes_largescale" +display_name = "largescale foureyes" +active = false +catalog_number = 202 +collection_group = &"Brackish oddities" +logbook_fact = "largescale foureyes cruise with each eye divided across the waterline. one half watches above while the other scans below." +allowed_water_types = 3 +rarity = 2 +base_catch_weight = 0.32 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.0 +sell_value_min = 10 +sell_value_max = 23 +sell_value_curve = 0.95 diff --git a/fish/species/freshwater_drum/freshwater_drum.tres b/fish/species/freshwater_drum/freshwater_drum.tres new file mode 100644 index 0000000..bd1389b --- /dev/null +++ b/fish/species/freshwater_drum/freshwater_drum.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"freshwater_drum" +display_name = "freshwater drum" +active = false +catalog_number = 2902 +collection_group = &"Freshwater oddities" +logbook_fact = "freshwater drum crush snails and mussels with powerful throat teeth. muscles vibrating against the swim bladder produce a low drumming sound." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 35.0 +sell_value_min = 7 +sell_value_max = 20 +sell_value_curve = 0.85 diff --git a/fish/species/gar_alligator/gar_alligator.tres b/fish/species/gar_alligator/gar_alligator.tres new file mode 100644 index 0000000..48c02e2 --- /dev/null +++ b/fish/species/gar_alligator/gar_alligator.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"gar_alligator" +display_name = "alligator gar" +active = false +catalog_number = 2701 +collection_group = &"Freshwater giants" +logbook_fact = "alligator gar combine a broad tooth-filled snout with heavy armor-like scales. a vascular swim bladder lets them breathe air at the surface." +allowed_water_types = 1 +rarity = 4 +base_catch_weight = 0.055 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 300.0 +sell_value_min = 55 +sell_value_max = 125 +sell_value_curve = 0.8 diff --git a/fish/species/gar_longnose/gar_longnose.tres b/fish/species/gar_longnose/gar_longnose.tres new file mode 100644 index 0000000..29a8d68 --- /dev/null +++ b/fish/species/gar_longnose/gar_longnose.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"gar_longnose" +display_name = "longnose gar" +active = false +catalog_number = 103 +collection_group = &"Ancient freshwater fish" +logbook_fact = "longnose gar wait near the surface before snapping sideways at passing fish. their narrow jaws carry rows of fine needle-like teeth." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 35.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.85 diff --git a/fish/species/gar_spotted/gar_spotted.tres b/fish/species/gar_spotted/gar_spotted.tres new file mode 100644 index 0000000..abb3d16 --- /dev/null +++ b/fish/species/gar_spotted/gar_spotted.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"gar_spotted" +display_name = "spotted gar" +active = false +catalog_number = 106 +collection_group = &"Ancient freshwater fish" +logbook_fact = "spotted gar linger among vegetation where their mottled bodies break up their outline. they rise to gulp air as well as breathing through gills." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 15.0 +sell_value_min = 13 +sell_value_max = 29 +sell_value_curve = 0.88 diff --git a/fish/species/goby_round/goby_round.tres b/fish/species/goby_round/goby_round.tres index 4c8872e..20d76a4 100644 --- a/fish/species/goby_round/goby_round.tres +++ b/fish/species/goby_round/goby_round.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.35 script = ExtResource("1_fish_data") id = &"goby_round" display_name = "round goby" +active = true +catalog_number = 3401 +collection_group = &"Freshwater small fish" +logbook_fact = "round gobies use fused pelvic fins like a suction cup to hold onto rocks. they are small fish with a famously large appetite." allowed_water_types = 1 base_catch_weight = 8.0 catch_profile = ExtResource("2_profile") diff --git a/fish/species/goldeye/goldeye.tres b/fish/species/goldeye/goldeye.tres new file mode 100644 index 0000000..c623dc8 --- /dev/null +++ b/fish/species/goldeye/goldeye.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"goldeye" +display_name = "goldeye" +active = false +catalog_number = 2903 +collection_group = &"Freshwater oddities" +logbook_fact = "goldeye patrol turbid rivers with large light-sensitive eyes and a toothed tongue. they rise toward the surface to hunt insects and small fish." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 6.0 +sell_value_min = 12 +sell_value_max = 25 +sell_value_curve = 0.9 diff --git a/fish/species/goldfish/goldfish.tres b/fish/species/goldfish/goldfish.tres index 153365d..c70b2d3 100644 --- a/fish/species/goldfish/goldfish.tres +++ b/fish/species/goldfish/goldfish.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"goldfish" display_name = "goldfish" +active = true +catalog_number = 3002 +collection_group = &"Freshwater ornamental" +logbook_fact = "goldfish can tolerate a surprisingly wide range of conditions. their wild relatives often live in slow, weedy water." allowed_water_types = 1 base_catch_weight = 0.5 catch_profile = ExtResource("2_profile") diff --git a/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres b/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres index d6a288a..aa75c08 100644 --- a/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres +++ b/fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"goldfish_bubbleeye" display_name = "bubble-eye goldfish" +active = true +catalog_number = 3001 +collection_group = &"Freshwater ornamental" +logbook_fact = "bubble-eye goldfish have delicate fluid-filled sacs beneath their eyes, making careful handling especially important." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/gourami_giant/gourami_giant.tres b/fish/species/gourami_giant/gourami_giant.tres new file mode 100644 index 0000000..b7a9095 --- /dev/null +++ b/fish/species/gourami_giant/gourami_giant.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"gourami_giant" +display_name = "giant gourami" +active = false +catalog_number = 7505 +collection_group = &"Tropical freshwater fish" +logbook_fact = "giant gouramis breathe surface air through a specialized labyrinth organ. adults graze plants but also investigate insects and small animals." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 20.0 +sell_value_min = 13 +sell_value_max = 31 +sell_value_curve = 0.86 diff --git a/fish/species/grayling_arctic/grayling_arctic.tres b/fish/species/grayling_arctic/grayling_arctic.tres new file mode 100644 index 0000000..fc1e09d --- /dev/null +++ b/fish/species/grayling_arctic/grayling_arctic.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"grayling_arctic" +display_name = "arctic grayling" +active = false +catalog_number = 1102 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "arctic grayling carry a tall, colorful dorsal fin like a sail. they feed on drifting insects in cold, clear rivers and lakes." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 6.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.9 diff --git a/fish/species/green_sunfish/green_sunfish.tres b/fish/species/green_sunfish/green_sunfish.tres new file mode 100644 index 0000000..92a6838 --- /dev/null +++ b/fish/species/green_sunfish/green_sunfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"green_sunfish" +display_name = "green sunfish" +active = false +catalog_number = 3103 +collection_group = &"Freshwater panfish" +logbook_fact = "green sunfish tolerate small, warm, cloudy pools better than many relatives. a large mouth lets them tackle insects, crayfish, and fish." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 3.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.5 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 1.0 diff --git a/fish/species/grouper_atlantic_goliath/grouper_atlantic_goliath.tres b/fish/species/grouper_atlantic_goliath/grouper_atlantic_goliath.tres new file mode 100644 index 0000000..fae0ea5 --- /dev/null +++ b/fish/species/grouper_atlantic_goliath/grouper_atlantic_goliath.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"grouper_atlantic_goliath" +display_name = "Atlantic goliath grouper" +active = false +catalog_number = 5801 +collection_group = &"Reef predators" +logbook_fact = "atlantic goliath groupers occupy reefs, wrecks, and mangrove roots. enormous mouths pull prey inward with a sudden pressure drop." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.05 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 800.0 +sell_value_min = 50 +sell_value_max = 125 +sell_value_curve = 0.78 diff --git a/fish/species/grouper_giant/grouper_giant.tres b/fish/species/grouper_giant/grouper_giant.tres new file mode 100644 index 0000000..bc4ecf1 --- /dev/null +++ b/fish/species/grouper_giant/grouper_giant.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"grouper_giant" +display_name = "giant grouper" +active = false +catalog_number = 5803 +collection_group = &"Reef predators" +logbook_fact = "giant groupers become massive ambush predators around indo-pacific reefs. juveniles carry bold black-and-yellow markings." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.045 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 880.0 +sell_value_min = 52 +sell_value_max = 128 +sell_value_curve = 0.78 diff --git a/fish/species/grouper_gulf/grouper_gulf.tres b/fish/species/grouper_gulf/grouper_gulf.tres index 1e0446e..c3aaffa 100644 --- a/fish/species/grouper_gulf/grouper_gulf.tres +++ b/fish/species/grouper_gulf/grouper_gulf.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"grouper_gulf" display_name = "gulf grouper" +active = true +catalog_number = 5805 +collection_group = &"Reef predators" +logbook_fact = "gulf grouper are ambush predators that use a sudden gulp to pull prey into their cavernous mouths." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.3 diff --git a/fish/species/grouper_nassau/grouper_nassau.tres b/fish/species/grouper_nassau/grouper_nassau.tres new file mode 100644 index 0000000..06bbcdf --- /dev/null +++ b/fish/species/grouper_nassau/grouper_nassau.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"grouper_nassau" +display_name = "Nassau grouper" +active = false +catalog_number = 5806 +collection_group = &"Reef predators" +logbook_fact = "nassau groupers shift their bars and colors with mood and surroundings. adults gather at traditional reef sites to spawn." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 55.0 +sell_value_min = 25 +sell_value_max = 62 +sell_value_curve = 0.82 diff --git a/fish/species/grouper_red/grouper_red.tres b/fish/species/grouper_red/grouper_red.tres index 5594641..b83fecb 100644 --- a/fish/species/grouper_red/grouper_red.tres +++ b/fish/species/grouper_red/grouper_red.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"grouper_red" display_name = "red grouper" +active = true +catalog_number = 5807 +collection_group = &"Reef predators" +logbook_fact = "red grouper excavate shelters in reef rubble. the hollows they make can become hiding places for many smaller animals." allowed_water_types = 2 rarity = 2 base_catch_weight = 0.2 diff --git a/fish/species/grunt_bluestriped/grunt_bluestriped.tres b/fish/species/grunt_bluestriped/grunt_bluestriped.tres new file mode 100644 index 0000000..ef78e38 --- /dev/null +++ b/fish/species/grunt_bluestriped/grunt_bluestriped.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"grunt_bluestriped" +display_name = "bluestriped grunt" +active = false +catalog_number = 5902 +collection_group = &"Reef schooling fish" +logbook_fact = "bluestriped grunts shelter on reefs by day and spread over seagrass to feed at night. grinding throat teeth produce audible grunts." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 3.0 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.94 diff --git a/fish/species/grunt_french/grunt_french.tres b/fish/species/grunt_french/grunt_french.tres new file mode 100644 index 0000000..d695ecd --- /dev/null +++ b/fish/species/grunt_french/grunt_french.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"grunt_french" +display_name = "French grunt" +active = false +catalog_number = 5903 +collection_group = &"Reef schooling fish" +logbook_fact = "french grunts gather in yellow-striped schools around reefs and wrecks. they travel into nearby sand and grass beds after dark." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 3.5 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.94 diff --git a/fish/species/gulper_eel/gulper_eel.tres b/fish/species/gulper_eel/gulper_eel.tres new file mode 100644 index 0000000..328a595 --- /dev/null +++ b/fish/species/gulper_eel/gulper_eel.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"gulper_eel" +display_name = "gulper eel" +active = false +catalog_number = 1803 +collection_group = &"Deep-sea oddities" +logbook_fact = "gulper eels unfold enormous mouths to engulf prey in the deep sea. a whip-like tail ends in a small light-producing organ." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.04 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 18.0 +sell_value_min = 44 +sell_value_max = 92 +sell_value_curve = 0.86 diff --git a/fish/species/guppy/guppy.tres b/fish/species/guppy/guppy.tres new file mode 100644 index 0000000..911447f --- /dev/null +++ b/fish/species/guppy/guppy.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"guppy" +display_name = "guppy" +active = false +catalog_number = 2101 +collection_group = &"Freshwater aquarium fish" +logbook_fact = "guppies are livebearers whose young arrive ready to swim. males display bright colors while females often favor larger, less flashy bodies." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.15 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/haddock/haddock.tres b/fish/species/haddock/haddock.tres new file mode 100644 index 0000000..0f73e63 --- /dev/null +++ b/fish/species/haddock/haddock.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"haddock" +display_name = "haddock" +active = false +catalog_number = 1405 +collection_group = &"Cold shelf fish" +logbook_fact = "haddock are recognized by a dark shoulder mark and black lateral line. schools forage over cold seafloors for small bottom animals." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 20.0 +sell_value_min = 4 +sell_value_max = 11 +sell_value_curve = 0.9 diff --git a/fish/species/hake_pacific/hake_pacific.tres b/fish/species/hake_pacific/hake_pacific.tres new file mode 100644 index 0000000..85b521b --- /dev/null +++ b/fish/species/hake_pacific/hake_pacific.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"hake_pacific" +display_name = "pacific hake" +active = false +catalog_number = 1407 +collection_group = &"Cold shelf fish" +logbook_fact = "pacific hake rise from deep water at night to feed on krill and fish. large schools migrate along the west coast with changing seasons." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 3 +sell_value_max = 9 +sell_value_curve = 0.92 diff --git a/fish/species/hake_silver/hake_silver.tres b/fish/species/hake_silver/hake_silver.tres new file mode 100644 index 0000000..79d7ea0 --- /dev/null +++ b/fish/species/hake_silver/hake_silver.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"hake_silver" +display_name = "silver hake" +active = false +catalog_number = 1408 +collection_group = &"Cold shelf fish" +logbook_fact = "silver hake hunt fish and crustaceans over sandy atlantic shelves. they move upward after dark and return toward the bottom by day." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 5.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/halfbeak_ballyhoo/halfbeak_ballyhoo.tres b/fish/species/halfbeak_ballyhoo/halfbeak_ballyhoo.tres new file mode 100644 index 0000000..7362805 --- /dev/null +++ b/fish/species/halfbeak_ballyhoo/halfbeak_ballyhoo.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"halfbeak_ballyhoo" +display_name = "ballyhoo" +active = false +catalog_number = 6601 +collection_group = &"Surface ocean fish" +logbook_fact = "ballyhoo skim warm ocean surfaces with an extended lower jaw. tight schools scatter into quick leaps when predators strike." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.0 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/halibut_atlantic/halibut_atlantic.tres b/fish/species/halibut_atlantic/halibut_atlantic.tres new file mode 100644 index 0000000..c8bf167 --- /dev/null +++ b/fish/species/halibut_atlantic/halibut_atlantic.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"halibut_atlantic" +display_name = "atlantic halibut" +active = false +catalog_number = 3701 +collection_group = &"Large flatfish" +logbook_fact = "atlantic halibut are immense right-eyed flatfish of cold northern seas. adults ambush fish and squid from deep rocky or sandy bottoms." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 300.0 +sell_value_min = 32 +sell_value_max = 82 +sell_value_curve = 0.8 diff --git a/fish/species/halibut_pacific/halibut_pacific.tres b/fish/species/halibut_pacific/halibut_pacific.tres new file mode 100644 index 0000000..9980aef --- /dev/null +++ b/fish/species/halibut_pacific/halibut_pacific.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"halibut_pacific" +display_name = "pacific halibut" +active = false +catalog_number = 3702 +collection_group = &"Large flatfish" +logbook_fact = "pacific halibut lie camouflaged on cold continental shelves. powerful flat bodies can travel long distances between feeding and spawning grounds." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 350.0 +sell_value_min = 34 +sell_value_max = 86 +sell_value_curve = 0.8 diff --git a/fish/species/hellbender/hellbender.tres b/fish/species/hellbender/hellbender.tres new file mode 100644 index 0000000..8a9d228 --- /dev/null +++ b/fish/species/hellbender/hellbender.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"hellbender" +display_name = "hellbender" +active = false +catalog_number = 2002 +collection_group = &"Freshwater amphibians" +logbook_fact = "hellbenders hide beneath large rocks in cool, clean rivers. folds of loose skin absorb oxygen while the flattened body grips the current." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 5.5 +sell_value_min = 24 +sell_value_max = 54 +sell_value_curve = 0.91 diff --git a/fish/species/herring_atlantic/herring_atlantic.tres b/fish/species/herring_atlantic/herring_atlantic.tres new file mode 100644 index 0000000..00f1e36 --- /dev/null +++ b/fish/species/herring_atlantic/herring_atlantic.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"herring_atlantic" +display_name = "atlantic herring" +active = false +catalog_number = 1301 +collection_group = &"Cold schooling fish" +logbook_fact = "atlantic herring gather in immense schools that move between feeding and spawning grounds. they filter plankton with fine gill rakers." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.5 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/herring_pacific/herring_pacific.tres b/fish/species/herring_pacific/herring_pacific.tres new file mode 100644 index 0000000..27dcff7 --- /dev/null +++ b/fish/species/herring_pacific/herring_pacific.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"herring_pacific" +display_name = "pacific herring" +active = false +catalog_number = 1304 +collection_group = &"Cold schooling fish" +logbook_fact = "pacific herring return to coastal shallows to coat plants and rocks with eggs. their oily schools support entire marine food webs." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.5 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/hogfish/hogfish.tres b/fish/species/hogfish/hogfish.tres new file mode 100644 index 0000000..8d7dd29 --- /dev/null +++ b/fish/species/hogfish/hogfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"hogfish" +display_name = "hogfish" +active = false +catalog_number = 6103 +collection_group = &"Reef wrasses" +logbook_fact = "hogfish root through sand with long pig-like snouts in search of shellfish. adults can change from female to male as social groups shift." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 20.0 +sell_value_min = 12 +sell_value_max = 30 +sell_value_curve = 0.86 diff --git a/fish/species/ide/ide.tres b/fish/species/ide/ide.tres new file mode 100644 index 0000000..dcc9980 --- /dev/null +++ b/fish/species/ide/ide.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"ide" +display_name = "ide" +active = false +catalog_number = 2507 +collection_group = &"Freshwater coarse fish" +logbook_fact = "ide move between rivers, lakes, and brackish coastal water in loose schools. adults eat insects, crustaceans, plants, and small fish." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 9.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.9 diff --git a/fish/species/jack_crevalle/jack_crevalle.tres b/fish/species/jack_crevalle/jack_crevalle.tres new file mode 100644 index 0000000..e20485e --- /dev/null +++ b/fish/species/jack_crevalle/jack_crevalle.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"jack_crevalle" +display_name = "crevalle jack" +active = false +catalog_number = 705 +collection_group = &"Coastal pelagic fish" +logbook_fact = "crevalle jacks patrol warm coasts in fast-moving schools. their deep bodies and forked tails deliver long, powerful runs." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 35.0 +sell_value_min = 7 +sell_value_max = 20 +sell_value_curve = 0.84 diff --git a/fish/species/jelly_crystal/jelly_crystal.tres b/fish/species/jelly_crystal/jelly_crystal.tres new file mode 100644 index 0000000..fe2f34e --- /dev/null +++ b/fish/species/jelly_crystal/jelly_crystal.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"jelly_crystal" +display_name = "crystal jelly" +active = false +catalog_number = 3501 +collection_group = &"Jellies" +logbook_fact = "crystal jellies are nearly transparent except for glowing points around the bell. their green fluorescent protein transformed biological research." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 4.0 +sell_value_min = 15 +sell_value_max = 34 +sell_value_curve = 0.93 diff --git a/fish/species/jelly_lions_mane/jelly_lions_mane.tres b/fish/species/jelly_lions_mane/jelly_lions_mane.tres new file mode 100644 index 0000000..cedb3c8 --- /dev/null +++ b/fish/species/jelly_lions_mane/jelly_lions_mane.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"jelly_lions_mane" +display_name = "lion's mane jelly" +active = false +catalog_number = 3502 +collection_group = &"Jellies" +logbook_fact = "lion's mane jellies trail dense curtains of tentacles through cold seas. the bell darkens from yellow to deep red as the animal grows." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 200.0 +sell_value_min = 24 +sell_value_max = 58 +sell_value_curve = 0.82 diff --git a/fish/species/jelly_moon/jelly_moon.tres b/fish/species/jelly_moon/jelly_moon.tres new file mode 100644 index 0000000..ef7cbe1 --- /dev/null +++ b/fish/species/jelly_moon/jelly_moon.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"jelly_moon" +display_name = "moon jelly" +active = false +catalog_number = 3503 +collection_group = &"Jellies" +logbook_fact = "moon jellies pulse gently with four horseshoe-shaped organs visible through the bell. short tentacles sweep plankton toward the mouth." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 5.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.94 diff --git a/fish/species/jelly_pacific_sea_nettle/jelly_pacific_sea_nettle.tres b/fish/species/jelly_pacific_sea_nettle/jelly_pacific_sea_nettle.tres new file mode 100644 index 0000000..e3697b3 --- /dev/null +++ b/fish/species/jelly_pacific_sea_nettle/jelly_pacific_sea_nettle.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"jelly_pacific_sea_nettle" +display_name = "Pacific sea nettle" +active = false +catalog_number = 3504 +collection_group = &"Jellies" +logbook_fact = "pacific sea nettles carry rust-colored stripes across pale bells. long tentacles and frilled mouth arms capture plankton and small fish." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 12.0 +sell_value_min = 14 +sell_value_max = 32 +sell_value_curve = 0.9 diff --git a/fish/species/jelly_sea_wasp/jelly_sea_wasp.tres b/fish/species/jelly_sea_wasp/jelly_sea_wasp.tres new file mode 100644 index 0000000..64c2288 --- /dev/null +++ b/fish/species/jelly_sea_wasp/jelly_sea_wasp.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"jelly_sea_wasp" +display_name = "sea wasp" +active = false +catalog_number = 3505 +collection_group = &"Jellies" +logbook_fact = "sea wasps have box-shaped bells and clusters of eyes along the lower edge. their long tentacles deliver exceptionally potent venom." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.035 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 6.0 +sell_value_min = 42 +sell_value_max = 90 +sell_value_curve = 0.9 diff --git a/fish/species/knifefish_clown/knifefish_clown.tres b/fish/species/knifefish_clown/knifefish_clown.tres new file mode 100644 index 0000000..23781ad --- /dev/null +++ b/fish/species/knifefish_clown/knifefish_clown.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"knifefish_clown" +display_name = "clown knifefish" +active = false +catalog_number = 7501 +collection_group = &"Tropical freshwater fish" +logbook_fact = "clown knifefish undulate one long belly fin to glide forward or backward. dark eye-like spots line their silver nocturnal bodies." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 25.0 +sell_value_min = 16 +sell_value_max = 38 +sell_value_curve = 0.86 diff --git a/fish/species/koi/koi.tres b/fish/species/koi/koi.tres new file mode 100644 index 0000000..7c110cc --- /dev/null +++ b/fish/species/koi/koi.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"koi" +display_name = "koi" +active = false +catalog_number = 3003 +collection_group = &"Freshwater ornamental" +logbook_fact = "koi are colorful domesticated forms of common carp selected over many generations. each fish carries a distinctive arrangement of patches and scales." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 35.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.87 diff --git a/fish/species/krill_antarctic/krill_antarctic.tres b/fish/species/krill_antarctic/krill_antarctic.tres new file mode 100644 index 0000000..390487d --- /dev/null +++ b/fish/species/krill_antarctic/krill_antarctic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"krill_antarctic" +display_name = "Antarctic krill" +active = false +catalog_number = 3802 +collection_group = &"Lobsters and shrimp" +logbook_fact = "antarctic krill form enormous swarms beneath southern seas and ice. these small crustaceans feed whales, seals, penguins, and fish." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.001 +weight_max_lb = 0.01 +sell_value_min = 10 +sell_value_max = 22 +sell_value_curve = 0.99 diff --git a/fish/species/ladyfish/ladyfish.tres b/fish/species/ladyfish/ladyfish.tres new file mode 100644 index 0000000..1cc8e7b --- /dev/null +++ b/fish/species/ladyfish/ladyfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"ladyfish" +display_name = "ladyfish" +active = false +catalog_number = 7403 +collection_group = &"Tropical flats fish" +logbook_fact = "ladyfish race through warm shallows after schooling prey and often leap when pursued. a deeply forked tail powers their slender bodies." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 8.0 +sell_value_min = 4 +sell_value_max = 10 +sell_value_curve = 0.9 diff --git a/fish/species/lanternfish_spotted/lanternfish_spotted.tres b/fish/species/lanternfish_spotted/lanternfish_spotted.tres new file mode 100644 index 0000000..8d47916 --- /dev/null +++ b/fish/species/lanternfish_spotted/lanternfish_spotted.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"lanternfish_spotted" +display_name = "spotted lanternfish" +active = false +catalog_number = 1806 +collection_group = &"Deep-sea oddities" +logbook_fact = "spotted lanternfish carry rows of light-producing organs along their bodies. immense schools rise toward the surface each night." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +sell_value_min = 14 +sell_value_max = 30 +sell_value_curve = 0.95 diff --git a/fish/species/largemouth_bass/largemouth_bass.tres b/fish/species/largemouth_bass/largemouth_bass.tres new file mode 100644 index 0000000..e32cd20 --- /dev/null +++ b/fish/species/largemouth_bass/largemouth_bass.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"largemouth_bass" +display_name = "largemouth bass" +active = false +catalog_number = 2201 +collection_group = &"Freshwater bass" +logbook_fact = "largemouth bass wait among weeds and timber before lunging at prey. the upper jaw extends beyond the eye when the mouth is closed." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 18.0 +sell_value_min = 4 +sell_value_max = 12 +sell_value_curve = 0.9 diff --git a/fish/species/lingcod/lingcod.tres b/fish/species/lingcod/lingcod.tres new file mode 100644 index 0000000..34c8c0b --- /dev/null +++ b/fish/species/lingcod/lingcod.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"lingcod" +display_name = "lingcod" +active = false +catalog_number = 7001 +collection_group = &"Temperate reef predators" +logbook_fact = "lingcod guard rocky dens and ambush fish with a huge tooth-lined mouth. despite the name, they are greenling relatives rather than cod." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 60.0 +sell_value_min = 14 +sell_value_max = 38 +sell_value_curve = 0.83 diff --git a/fish/species/lionfish_red/lionfish_red.tres b/fish/species/lionfish_red/lionfish_red.tres new file mode 100644 index 0000000..9b46e72 --- /dev/null +++ b/fish/species/lionfish_red/lionfish_red.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"lionfish_red" +display_name = "red lionfish" +active = false +catalog_number = 5201 +collection_group = &"Reef ambush fish" +logbook_fact = "red lionfish spread ornate venomous spines when threatened. broad fins herd smaller fish into corners before a rapid gulp." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 3.0 +sell_value_min = 11 +sell_value_max = 25 +sell_value_curve = 0.92 diff --git a/fish/species/loach_clown/loach_clown.tres b/fish/species/loach_clown/loach_clown.tres new file mode 100644 index 0000000..afe5549 --- /dev/null +++ b/fish/species/loach_clown/loach_clown.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"loach_clown" +display_name = "clown loach" +active = false +catalog_number = 7502 +collection_group = &"Tropical freshwater fish" +logbook_fact = "clown loaches rest in groups and make clicking sounds while feeding. orange bodies carry three broad black bands and small eye spines." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.32 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 2.0 +sell_value_min = 10 +sell_value_max = 22 +sell_value_curve = 0.9 diff --git a/fish/species/loach_weather/loach_weather.tres b/fish/species/loach_weather/loach_weather.tres new file mode 100644 index 0000000..8b23ea1 --- /dev/null +++ b/fish/species/loach_weather/loach_weather.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"loach_weather" +display_name = "weather loach" +active = false +catalog_number = 2905 +collection_group = &"Freshwater oddities" +logbook_fact = "weather loaches gulp air and pass it through the intestine when oxygen runs low. restless activity often increases as air pressure falls." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.85 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.7 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.95 diff --git a/fish/species/lobster_american/lobster_american.tres b/fish/species/lobster_american/lobster_american.tres new file mode 100644 index 0000000..92bdb7f --- /dev/null +++ b/fish/species/lobster_american/lobster_american.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"lobster_american" +display_name = "American lobster" +active = false +catalog_number = 3801 +collection_group = &"Lobsters and shrimp" +logbook_fact = "american lobsters shelter in rocky crevices and emerge to forage along the bottom. one claw crushes while the other cuts and grips." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 44.0 +sell_value_min = 16 +sell_value_max = 42 +sell_value_curve = 0.86 diff --git a/fish/species/lobster_caribbean_spiny/lobster_caribbean_spiny.tres b/fish/species/lobster_caribbean_spiny/lobster_caribbean_spiny.tres new file mode 100644 index 0000000..94672a9 --- /dev/null +++ b/fish/species/lobster_caribbean_spiny/lobster_caribbean_spiny.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"lobster_caribbean_spiny" +display_name = "Caribbean spiny lobster" +active = false +catalog_number = 3803 +collection_group = &"Lobsters and shrimp" +logbook_fact = "caribbean spiny lobsters rely on long antennae and a thorny shell instead of large claws. groups march together across the seafloor." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 26.0 +sell_value_min = 15 +sell_value_max = 38 +sell_value_curve = 0.87 diff --git a/fish/species/lungfish_west_african/lungfish_west_african.tres b/fish/species/lungfish_west_african/lungfish_west_african.tres new file mode 100644 index 0000000..4baad67 --- /dev/null +++ b/fish/species/lungfish_west_african/lungfish_west_african.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"lungfish_west_african" +display_name = "West African lungfish" +active = false +catalog_number = 107 +collection_group = &"Ancient freshwater fish" +logbook_fact = "west african lungfish breathe air with paired lungs. when floodplains dry, they seal themselves in a mud cocoon until water returns." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 10.0 +sell_value_min = 12 +sell_value_max = 28 +sell_value_curve = 0.86 diff --git a/fish/species/mackerel_atlantic/mackerel_atlantic.tres b/fish/species/mackerel_atlantic/mackerel_atlantic.tres index 514ef07..edf6d38 100644 --- a/fish/species/mackerel_atlantic/mackerel_atlantic.tres +++ b/fish/species/mackerel_atlantic/mackerel_atlantic.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"mackerel_atlantic" display_name = "atlantic mackerel" +active = true +catalog_number = 701 +collection_group = &"Coastal pelagic fish" +logbook_fact = "atlantic mackerel travel in fast schools across the north atlantic and feed on plankton and small schooling fish." allowed_water_types = 2 base_catch_weight = 0.5 catch_profile = ExtResource("2_profile") diff --git a/fish/species/mackerel_cero/mackerel_cero.tres b/fish/species/mackerel_cero/mackerel_cero.tres index fbbb612..6dc9040 100644 --- a/fish/species/mackerel_cero/mackerel_cero.tres +++ b/fish/species/mackerel_cero/mackerel_cero.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"mackerel_cero" display_name = "cero mackerel" +active = true +catalog_number = 703 +collection_group = &"Coastal pelagic fish" +logbook_fact = "cero mackerel are streamlined coastal hunters. sharp teeth help them slash through schools of smaller fish." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/mackerel_chub/mackerel_chub.tres b/fish/species/mackerel_chub/mackerel_chub.tres index f4ceca1..189904e 100644 --- a/fish/species/mackerel_chub/mackerel_chub.tres +++ b/fish/species/mackerel_chub/mackerel_chub.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"mackerel_chub" display_name = "chub mackerel" +active = true +catalog_number = 704 +collection_group = &"Coastal pelagic fish" +logbook_fact = "chub mackerel school near the surface and follow plankton blooms. their dark wavy bars help identify them at a glance." allowed_water_types = 2 base_catch_weight = 0.5 catch_profile = ExtResource("2_profile") diff --git a/fish/species/mackerel_king/mackerel_king.tres b/fish/species/mackerel_king/mackerel_king.tres index 2c28071..4e0a047 100644 --- a/fish/species/mackerel_king/mackerel_king.tres +++ b/fish/species/mackerel_king/mackerel_king.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"mackerel_king" display_name = "king mackerel" +active = true +catalog_number = 706 +collection_group = &"Coastal pelagic fish" +logbook_fact = "king mackerel are swift coastal predators. their pointed teeth and long body are built for sudden bursts of speed." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.3 diff --git a/fish/species/mackerel_spanish/mackerel_spanish.tres b/fish/species/mackerel_spanish/mackerel_spanish.tres index 0319917..0aee136 100644 --- a/fish/species/mackerel_spanish/mackerel_spanish.tres +++ b/fish/species/mackerel_spanish/mackerel_spanish.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"mackerel_spanish" display_name = "spanish mackerel" +active = true +catalog_number = 707 +collection_group = &"Coastal pelagic fish" +logbook_fact = "spanish mackerel hunt in warm coastal waters and often travel in loose schools while chasing baitfish." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/madtom_tadpole/madtom_tadpole.tres b/fish/species/madtom_tadpole/madtom_tadpole.tres new file mode 100644 index 0000000..d43c1c5 --- /dev/null +++ b/fish/species/madtom_tadpole/madtom_tadpole.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"madtom_tadpole" +display_name = "tadpole madtom" +active = false +catalog_number = 2406 +collection_group = &"Freshwater catfish" +logbook_fact = "tadpole madtoms are tiny nocturnal catfish that shelter beneath vegetation and debris. venomous fin spines discourage larger predators." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.02 +weight_max_lb = 0.15 +sell_value_min = 8 +sell_value_max = 16 +sell_value_curve = 0.95 diff --git a/fish/species/mahi_mahi/mahi_mahi.tres b/fish/species/mahi_mahi/mahi_mahi.tres new file mode 100644 index 0000000..ded9958 --- /dev/null +++ b/fish/species/mahi_mahi/mahi_mahi.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"mahi_mahi" +display_name = "mahi-mahi" +active = false +catalog_number = 4701 +collection_group = &"Oceanic pelagic fish" +logbook_fact = "mahi-mahi flash brilliant blue, green, and gold while chasing prey near the surface. they grow quickly and gather around floating objects." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 50.0 +sell_value_min = 15 +sell_value_max = 38 +sell_value_curve = 0.84 diff --git a/fish/species/mahseer_golden/mahseer_golden.tres b/fish/species/mahseer_golden/mahseer_golden.tres new file mode 100644 index 0000000..4a51858 --- /dev/null +++ b/fish/species/mahseer_golden/mahseer_golden.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"mahseer_golden" +display_name = "golden mahseer" +active = false +catalog_number = 7603 +collection_group = &"Tropical freshwater predators" +logbook_fact = "golden mahseer migrate through swift mountain rivers to reach spawning grounds. large scales shine bronze beneath reddish fins." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 8.0 +weight_max_lb = 90.0 +sell_value_min = 32 +sell_value_max = 72 +sell_value_curve = 0.82 diff --git a/fish/species/manatee_west_indian/manatee_west_indian.tres b/fish/species/manatee_west_indian/manatee_west_indian.tres new file mode 100644 index 0000000..65094d0 --- /dev/null +++ b/fish/species/manatee_west_indian/manatee_west_indian.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"manatee_west_indian" +display_name = "West Indian manatee" +active = false +catalog_number = 505 +collection_group = &"Coastal marine mammals" +logbook_fact = "west indian manatees graze aquatic plants in warm coastal water and rivers. they surface regularly to breathe through nostrils atop the snout." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.012 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 440.0 +weight_max_lb = 1300.0 +sell_value_min = 70 +sell_value_max = 160 +sell_value_curve = 0.77 diff --git a/fish/species/manta_ray_giant/manta_ray_giant.tres b/fish/species/manta_ray_giant/manta_ray_giant.tres new file mode 100644 index 0000000..29eeede --- /dev/null +++ b/fish/species/manta_ray_giant/manta_ray_giant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"manta_ray_giant" +display_name = "giant manta ray" +active = false +catalog_number = 5102 +collection_group = &"Rays and skates" +logbook_fact = "giant manta rays funnel plankton into wide mouths with two flexible head fins. each belly carries a unique pattern of dark spots." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.025 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 100.0 +weight_max_lb = 1000.0 +sell_value_min = 65 +sell_value_max = 150 +sell_value_curve = 0.76 diff --git a/fish/species/marlin_black/marlin_black.tres b/fish/species/marlin_black/marlin_black.tres index 39110c5..93f0ba2 100644 --- a/fish/species/marlin_black/marlin_black.tres +++ b/fish/species/marlin_black/marlin_black.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"marlin_black" display_name = "black marlin" +active = true +catalog_number = 4601 +collection_group = &"Oceanic billfish" +logbook_fact = "black marlin are powerful billfish that spend much of their lives in warm open ocean and can make blistering runs." allowed_water_types = 2 rarity = 3 base_catch_weight = 0.08 diff --git a/fish/species/marlin_blue/marlin_blue.tres b/fish/species/marlin_blue/marlin_blue.tres index b3328ba..51cff14 100644 --- a/fish/species/marlin_blue/marlin_blue.tres +++ b/fish/species/marlin_blue/marlin_blue.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"marlin_blue" display_name = "blue marlin" +active = true +catalog_number = 4602 +collection_group = &"Oceanic billfish" +logbook_fact = "blue marlin are highly migratory open-ocean hunters. their long bill helps them stun prey before turning back to feed." allowed_water_types = 2 rarity = 4 base_catch_weight = 0.05 diff --git a/fish/species/marlin_white/marlin_white.tres b/fish/species/marlin_white/marlin_white.tres index e90651c..bbbf34f 100644 --- a/fish/species/marlin_white/marlin_white.tres +++ b/fish/species/marlin_white/marlin_white.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"marlin_white" display_name = "white marlin" +active = true +catalog_number = 4605 +collection_group = &"Oceanic billfish" +logbook_fact = "white marlin favor warm offshore water and use their rounded dorsal fin and bill to weave through schools of prey." allowed_water_types = 2 rarity = 3 base_catch_weight = 0.1 diff --git a/fish/species/menhaden_atlantic/menhaden_atlantic.tres b/fish/species/menhaden_atlantic/menhaden_atlantic.tres new file mode 100644 index 0000000..ced8488 --- /dev/null +++ b/fish/species/menhaden_atlantic/menhaden_atlantic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"menhaden_atlantic" +display_name = "atlantic menhaden" +active = false +catalog_number = 802 +collection_group = &"Coastal schooling fish" +logbook_fact = "atlantic menhaden strain plankton from coastal water with fine gill rakers. dense schools feed whales, seabirds, and predatory fish." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.5 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 0.98 diff --git a/fish/species/milkfish/milkfish.tres b/fish/species/milkfish/milkfish.tres new file mode 100644 index 0000000..08d5627 --- /dev/null +++ b/fish/species/milkfish/milkfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"milkfish" +display_name = "milkfish" +active = false +catalog_number = 7101 +collection_group = &"Tropical coastal fish" +logbook_fact = "milkfish graze algae and tiny organisms in warm coastal shallows. deeply forked tails drive large schools through lagoons and estuaries." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 25.0 +sell_value_min = 4 +sell_value_max = 12 +sell_value_curve = 0.88 diff --git a/fish/species/minnow_fathead/minnow_fathead.tres b/fish/species/minnow_fathead/minnow_fathead.tres new file mode 100644 index 0000000..be28197 --- /dev/null +++ b/fish/species/minnow_fathead/minnow_fathead.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"minnow_fathead" +display_name = "fathead minnow" +active = false +catalog_number = 2804 +collection_group = &"Freshwater minnows" +logbook_fact = "fathead minnows tolerate warm, muddy ponds where many fish struggle. males guard eggs laid beneath rocks, logs, and other cover." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 4.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.02 +weight_max_lb = 0.2 +sell_value_min = 1 +sell_value_max = 2 +sell_value_curve = 1.0 diff --git a/fish/species/monkfish/monkfish.tres b/fish/species/monkfish/monkfish.tres new file mode 100644 index 0000000..a4374e1 --- /dev/null +++ b/fish/species/monkfish/monkfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"monkfish" +display_name = "monkfish" +active = false +catalog_number = 603 +collection_group = &"Coastal oddities" +logbook_fact = "monkfish hide against the bottom and wave a fleshy lure above a cavernous mouth. a sudden gulp draws fish and crustaceans inward." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 55.0 +sell_value_min = 14 +sell_value_max = 35 +sell_value_curve = 0.84 diff --git a/fish/species/mooneye/mooneye.tres b/fish/species/mooneye/mooneye.tres new file mode 100644 index 0000000..e663618 --- /dev/null +++ b/fish/species/mooneye/mooneye.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"mooneye" +display_name = "mooneye" +active = false +catalog_number = 2904 +collection_group = &"Freshwater oddities" +logbook_fact = "mooneyes flash silver in clear rivers and lakes while feeding near the surface. their large eyes suit evening hunts for insects and small fish." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.85 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.92 diff --git a/fish/species/moray_green/moray_green.tres b/fish/species/moray_green/moray_green.tres new file mode 100644 index 0000000..36aee31 --- /dev/null +++ b/fish/species/moray_green/moray_green.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"moray_green" +display_name = "green moray" +active = false +catalog_number = 5301 +collection_group = &"Reef eels" +logbook_fact = "green morays appear green because yellow mucus coats blue-gray skin. a second set of jaws pulls captured prey deeper into the throat." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 30.0 +sell_value_min = 13 +sell_value_max = 32 +sell_value_curve = 0.86 diff --git a/fish/species/mudskipper_atlantic/mudskipper_atlantic.tres b/fish/species/mudskipper_atlantic/mudskipper_atlantic.tres new file mode 100644 index 0000000..f548d93 --- /dev/null +++ b/fish/species/mudskipper_atlantic/mudskipper_atlantic.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"mudskipper_atlantic" +display_name = "atlantic mudskipper" +active = false +catalog_number = 201 +collection_group = &"Brackish oddities" +logbook_fact = "atlantic mudskippers use sturdy fins to hop and crawl across exposed mud. moist skin and mouth linings let them breathe out of water." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 1.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.5 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.95 diff --git a/fish/species/mullet_red/mullet_red.tres b/fish/species/mullet_red/mullet_red.tres new file mode 100644 index 0000000..3b2a878 --- /dev/null +++ b/fish/species/mullet_red/mullet_red.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"mullet_red" +display_name = "red mullet" +active = false +catalog_number = 301 +collection_group = &"Coastal bottom fish" +logbook_fact = "red mullet comb sandy bottoms with two chin barbels that taste hidden prey. their foraging leaves winding trails in the sediment." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 3.0 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.92 diff --git a/fish/species/mullet_striped/mullet_striped.tres b/fish/species/mullet_striped/mullet_striped.tres new file mode 100644 index 0000000..7d75d6b --- /dev/null +++ b/fish/species/mullet_striped/mullet_striped.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"mullet_striped" +display_name = "striped mullet" +active = false +catalog_number = 6804 +collection_group = &"Temperate estuary" +logbook_fact = "striped mullet leap clear of the water and travel in coastal schools. they graze algae and detritus with specialized digestive systems." +allowed_water_types = 3 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/muskellunge/muskellunge.tres b/fish/species/muskellunge/muskellunge.tres new file mode 100644 index 0000000..84c8513 --- /dev/null +++ b/fish/species/muskellunge/muskellunge.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"muskellunge" +display_name = "muskellunge" +active = false +catalog_number = 2704 +collection_group = &"Freshwater giants" +logbook_fact = "muskellunge wait motionless among weeds before exploding toward prey. pale bodies carry bars or spots that fade into broken underwater light." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 8.0 +weight_max_lb = 60.0 +sell_value_min = 32 +sell_value_max = 72 +sell_value_curve = 0.82 diff --git a/fish/species/nautilus_chambered/nautilus_chambered.tres b/fish/species/nautilus_chambered/nautilus_chambered.tres new file mode 100644 index 0000000..fd6189c --- /dev/null +++ b/fish/species/nautilus_chambered/nautilus_chambered.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"nautilus_chambered" +display_name = "chambered nautilus" +active = false +catalog_number = 1501 +collection_group = &"Cuttlefish and nautiluses" +logbook_fact = "chambered nautiluses regulate buoyancy with gas-filled shell chambers. dozens of small tentacles feel for food in dark reef slopes." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.05 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 3.0 +sell_value_min = 34 +sell_value_max = 76 +sell_value_curve = 0.92 diff --git a/fish/species/needlefish_hound/needlefish_hound.tres b/fish/species/needlefish_hound/needlefish_hound.tres new file mode 100644 index 0000000..ecb8226 --- /dev/null +++ b/fish/species/needlefish_hound/needlefish_hound.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"needlefish_hound" +display_name = "houndfish" +active = false +catalog_number = 6602 +collection_group = &"Surface ocean fish" +logbook_fact = "houndfish hunt near the surface with long jaws filled with fine teeth. powerful leaps can carry their narrow bodies far above the water." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 10.0 +sell_value_min = 11 +sell_value_max = 25 +sell_value_curve = 0.88 diff --git a/fish/species/oarfish_giant/oarfish_giant.tres b/fish/species/oarfish_giant/oarfish_giant.tres new file mode 100644 index 0000000..f34adcc --- /dev/null +++ b/fish/species/oarfish_giant/oarfish_giant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"oarfish_giant" +display_name = "giant oarfish" +active = false +catalog_number = 1701 +collection_group = &"Deep-sea legends" +logbook_fact = "giant oarfish drift vertically through deep open water, rowing with a crimson dorsal fin. their ribbon-like bodies can reach remarkable lengths." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.035 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 600.0 +sell_value_min = 60 +sell_value_max = 140 +sell_value_curve = 0.78 diff --git a/fish/species/ocean_perch_pacific/ocean_perch_pacific.tres b/fish/species/ocean_perch_pacific/ocean_perch_pacific.tres new file mode 100644 index 0000000..a7f9873 --- /dev/null +++ b/fish/species/ocean_perch_pacific/ocean_perch_pacific.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"ocean_perch_pacific" +display_name = "Pacific ocean perch" +active = false +catalog_number = 1603 +collection_group = &"Deep shelf fish" +logbook_fact = "pacific ocean perch hover around deep rocky reefs in the north pacific. these slow-growing fish give birth to live young." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 12.0 +sell_value_min = 7 +sell_value_max = 17 +sell_value_curve = 0.88 diff --git a/fish/species/octopus_common/octopus_common.tres b/fish/species/octopus_common/octopus_common.tres new file mode 100644 index 0000000..b86950e --- /dev/null +++ b/fish/species/octopus_common/octopus_common.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"octopus_common" +display_name = "common octopus" +active = false +catalog_number = 4901 +collection_group = &"Octopuses" +logbook_fact = "common octopuses squeeze through narrow cracks and solve problems while hunting reefs. skin cells rapidly change color and texture." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.65 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 22.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.87 diff --git a/fish/species/octopus_day/octopus_day.tres b/fish/species/octopus_day/octopus_day.tres new file mode 100644 index 0000000..aada4c1 --- /dev/null +++ b/fish/species/octopus_day/octopus_day.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"octopus_day" +display_name = "day octopus" +active = false +catalog_number = 4902 +collection_group = &"Octopuses" +logbook_fact = "day octopuses forage across tropical reefs while the sun is high. shifting bars and spots communicate alarm, camouflage, and threat." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 15.0 +sell_value_min = 15 +sell_value_max = 36 +sell_value_curve = 0.88 diff --git a/fish/species/octopus_giant_pacific/octopus_giant_pacific.tres b/fish/species/octopus_giant_pacific/octopus_giant_pacific.tres new file mode 100644 index 0000000..09aca6d --- /dev/null +++ b/fish/species/octopus_giant_pacific/octopus_giant_pacific.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"octopus_giant_pacific" +display_name = "giant Pacific octopus" +active = false +catalog_number = 4903 +collection_group = &"Octopuses" +logbook_fact = "giant pacific octopuses explore cold rocky dens with thousands of arm suckers. females guard their eggs without feeding until they hatch." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 200.0 +sell_value_min = 28 +sell_value_max = 70 +sell_value_curve = 0.81 diff --git a/fish/species/octopus_greater_blue_ringed/octopus_greater_blue_ringed.tres b/fish/species/octopus_greater_blue_ringed/octopus_greater_blue_ringed.tres new file mode 100644 index 0000000..a59bd06 --- /dev/null +++ b/fish/species/octopus_greater_blue_ringed/octopus_greater_blue_ringed.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"octopus_greater_blue_ringed" +display_name = "greater blue-ringed octopus" +active = false +catalog_number = 4904 +collection_group = &"Octopuses" +logbook_fact = "greater blue-ringed octopuses reveal vivid rings when threatened. a tiny beak can deliver venom strong enough to stop breathing." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.04 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.3 +sell_value_min = 38 +sell_value_max = 82 +sell_value_curve = 0.96 diff --git a/fish/species/opah/opah.tres b/fish/species/opah/opah.tres new file mode 100644 index 0000000..2bb4231 --- /dev/null +++ b/fish/species/opah/opah.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"opah" +display_name = "opah" +active = false +catalog_number = 4702 +collection_group = &"Oceanic pelagic fish" +logbook_fact = "opah circulate warm blood through much of the body, an unusual trait among fish. round silver flanks glow with red fins and pale spots." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 600.0 +sell_value_min = 36 +sell_value_max = 88 +sell_value_curve = 0.8 diff --git a/fish/species/oscar/oscar.tres b/fish/species/oscar/oscar.tres new file mode 100644 index 0000000..d3da024 --- /dev/null +++ b/fish/species/oscar/oscar.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"oscar" +display_name = "oscar" +active = false +catalog_number = 7507 +collection_group = &"Tropical freshwater fish" +logbook_fact = "oscars are large south american cichlids that recognize routines and defend territories. a tail eyespot may redirect attacks away from the head." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 4.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.9 diff --git a/fish/species/oyster_black_lip_pearl/oyster_black_lip_pearl.tres b/fish/species/oyster_black_lip_pearl/oyster_black_lip_pearl.tres new file mode 100644 index 0000000..cc95d74 --- /dev/null +++ b/fish/species/oyster_black_lip_pearl/oyster_black_lip_pearl.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"oyster_black_lip_pearl" +display_name = "black-lip pearl oyster" +active = false +catalog_number = 6401 +collection_group = &"Shellfish" +logbook_fact = "black-lip pearl oysters line their shells with dark-edged nacre. a trapped irritant can become coated in the same pearly material." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.22 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 5.0 +sell_value_min = 14 +sell_value_max = 40 +sell_value_curve = 0.91 diff --git a/fish/species/paddlefish/paddlefish.tres b/fish/species/paddlefish/paddlefish.tres new file mode 100644 index 0000000..c9d4925 --- /dev/null +++ b/fish/species/paddlefish/paddlefish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"paddlefish" +display_name = "paddlefish" +active = false +catalog_number = 104 +collection_group = &"Ancient freshwater fish" +logbook_fact = "paddlefish cruise open rivers with their mouths wide, filtering tiny plankton from the water. the broad snout senses faint electrical signals." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 120.0 +sell_value_min = 34 +sell_value_max = 76 +sell_value_curve = 0.82 diff --git a/fish/species/parrotfish_rainbow/parrotfish_rainbow.tres b/fish/species/parrotfish_rainbow/parrotfish_rainbow.tres new file mode 100644 index 0000000..3320b61 --- /dev/null +++ b/fish/species/parrotfish_rainbow/parrotfish_rainbow.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"parrotfish_rainbow" +display_name = "rainbow parrotfish" +active = false +catalog_number = 5502 +collection_group = &"Reef grazers" +logbook_fact = "rainbow parrotfish scrape algae from reefs with fused beak-like teeth. crushed coral passes through them and returns to the reef as sand." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 40.0 +sell_value_min = 25 +sell_value_max = 58 +sell_value_curve = 0.84 diff --git a/fish/species/parrotfish_stoplight/parrotfish_stoplight.tres b/fish/species/parrotfish_stoplight/parrotfish_stoplight.tres new file mode 100644 index 0000000..2392e88 --- /dev/null +++ b/fish/species/parrotfish_stoplight/parrotfish_stoplight.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"parrotfish_stoplight" +display_name = "stoplight parrotfish" +active = false +catalog_number = 5503 +collection_group = &"Reef grazers" +logbook_fact = "stoplight parrotfish change color dramatically as they mature. powerful dental plates bite algae from hard reef surfaces." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 15.0 +sell_value_min = 12 +sell_value_max = 29 +sell_value_curve = 0.88 diff --git a/fish/species/peacock_bass/peacock_bass.tres b/fish/species/peacock_bass/peacock_bass.tres new file mode 100644 index 0000000..39487fe --- /dev/null +++ b/fish/species/peacock_bass/peacock_bass.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"peacock_bass" +display_name = "peacock bass" +active = false +catalog_number = 7604 +collection_group = &"Tropical freshwater predators" +logbook_fact = "peacock bass are aggressive south american cichlids rather than true bass. adults guard nests and hunt fish in warm clear water." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 25.0 +sell_value_min = 15 +sell_value_max = 36 +sell_value_curve = 0.84 diff --git a/fish/species/permit/permit.tres b/fish/species/permit/permit.tres new file mode 100644 index 0000000..bd36724 --- /dev/null +++ b/fish/species/permit/permit.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"permit" +display_name = "permit" +active = false +catalog_number = 7404 +collection_group = &"Tropical flats fish" +logbook_fact = "permit browse tropical flats for crabs and shellfish with rubbery mouths. tall silver bodies carry long sickle-shaped dorsal and anal fins." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 3.0 +weight_max_lb = 50.0 +sell_value_min = 27 +sell_value_max = 62 +sell_value_curve = 0.84 diff --git a/fish/species/pickerel_chain/pickerel_chain.tres b/fish/species/pickerel_chain/pickerel_chain.tres new file mode 100644 index 0000000..f69ab5f --- /dev/null +++ b/fish/species/pickerel_chain/pickerel_chain.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"pickerel_chain" +display_name = "chain pickerel" +active = false +catalog_number = 3301 +collection_group = &"Freshwater predators" +logbook_fact = "chain pickerel hover among vegetation before darting at fish and frogs. a chain-like pattern breaks up their green flanks." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 9.0 +sell_value_min = 6 +sell_value_max = 15 +sell_value_curve = 0.9 diff --git a/fish/species/pickerel_grass/pickerel_grass.tres b/fish/species/pickerel_grass/pickerel_grass.tres new file mode 100644 index 0000000..ef59b58 --- /dev/null +++ b/fish/species/pickerel_grass/pickerel_grass.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"pickerel_grass" +display_name = "grass pickerel" +active = false +catalog_number = 3302 +collection_group = &"Freshwater predators" +logbook_fact = "grass pickerel remain small enough to hunt in narrow, weedy creeks and marshes. dark bars camouflage their slim bodies among stems." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.5 +sell_value_min = 2 +sell_value_max = 6 +sell_value_curve = 0.95 diff --git a/fish/species/pike_northern/pike_northern.tres b/fish/species/pike_northern/pike_northern.tres new file mode 100644 index 0000000..eb4dc5d --- /dev/null +++ b/fish/species/pike_northern/pike_northern.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"pike_northern" +display_name = "northern pike" +active = false +catalog_number = 3303 +collection_group = &"Freshwater predators" +logbook_fact = "northern pike are solitary ambush hunters built for sudden acceleration. pale bean-shaped spots cover their long green bodies." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 30.0 +sell_value_min = 8 +sell_value_max = 24 +sell_value_curve = 0.85 diff --git a/fish/species/pipefish_bay/pipefish_bay.tres b/fish/species/pipefish_bay/pipefish_bay.tres new file mode 100644 index 0000000..f5582c4 --- /dev/null +++ b/fish/species/pipefish_bay/pipefish_bay.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"pipefish_bay" +display_name = "bay pipefish" +active = false +catalog_number = 601 +collection_group = &"Coastal oddities" +logbook_fact = "bay pipefish hide upright among seagrass, matching the blades with their slender bodies. males carry developing eggs in a brood pouch." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.005 +weight_max_lb = 0.04 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 1.0 diff --git a/fish/species/piranha_red_bellied/piranha_red_bellied.tres b/fish/species/piranha_red_bellied/piranha_red_bellied.tres new file mode 100644 index 0000000..efca0b8 --- /dev/null +++ b/fish/species/piranha_red_bellied/piranha_red_bellied.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"piranha_red_bellied" +display_name = "red-bellied piranha" +active = false +catalog_number = 7605 +collection_group = &"Tropical freshwater predators" +logbook_fact = "red-bellied piranhas communicate with barks and drum-like sounds. schools provide protection as they search for fish, insects, and carrion." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 12 +sell_value_max = 27 +sell_value_curve = 0.9 diff --git a/fish/species/plaice_european/plaice_european.tres b/fish/species/plaice_european/plaice_european.tres new file mode 100644 index 0000000..9e9be9a --- /dev/null +++ b/fish/species/plaice_european/plaice_european.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"plaice_european" +display_name = "European plaice" +active = false +catalog_number = 401 +collection_group = &"Coastal flatfish" +logbook_fact = "european plaice lie flat on the seafloor with both eyes on the same side. orange spots help distinguish them from neighboring flatfish." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 10.0 +sell_value_min = 4 +sell_value_max = 10 +sell_value_curve = 0.9 diff --git a/fish/species/pollock_alaska/pollock_alaska.tres b/fish/species/pollock_alaska/pollock_alaska.tres new file mode 100644 index 0000000..0e4af05 --- /dev/null +++ b/fish/species/pollock_alaska/pollock_alaska.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"pollock_alaska" +display_name = "Alaska pollock" +active = false +catalog_number = 1401 +collection_group = &"Cold shelf fish" +logbook_fact = "alaska pollock form vast schools over cold northern shelves. they feed on plankton and fish while supporting many larger predators." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/pollock_atlantic/pollock_atlantic.tres b/fish/species/pollock_atlantic/pollock_atlantic.tres new file mode 100644 index 0000000..7d50342 --- /dev/null +++ b/fish/species/pollock_atlantic/pollock_atlantic.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"pollock_atlantic" +display_name = "Atlantic pollock" +active = false +catalog_number = 1403 +collection_group = &"Cold shelf fish" +logbook_fact = "atlantic pollock are swift relatives of cod with dark backs and pale lateral lines. adults gather around rocky banks and wrecks." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 35.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/pomfret_black/pomfret_black.tres b/fish/species/pomfret_black/pomfret_black.tres index 8020100..d3e73d6 100644 --- a/fish/species/pomfret_black/pomfret_black.tres +++ b/fish/species/pomfret_black/pomfret_black.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"pomfret_black" display_name = "black pomfret" +active = true +catalog_number = 803 +collection_group = &"Coastal schooling fish" +logbook_fact = "black pomfret have a deep, laterally compressed body that lets them maneuver neatly through open water." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.3 diff --git a/fish/species/pomfret_chinese/pomfret_chinese.tres b/fish/species/pomfret_chinese/pomfret_chinese.tres index 2eaf34b..76d6943 100644 --- a/fish/species/pomfret_chinese/pomfret_chinese.tres +++ b/fish/species/pomfret_chinese/pomfret_chinese.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"pomfret_chinese" display_name = "chinese pomfret" +active = true +catalog_number = 804 +collection_group = &"Coastal schooling fish" +logbook_fact = "chinese pomfret are silvery schooling fish with a tall, flattened body and long sickle-shaped fins." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.3 diff --git a/fish/species/pomfret_golden/pomfret_golden.tres b/fish/species/pomfret_golden/pomfret_golden.tres index da1f561..8637db1 100644 --- a/fish/species/pomfret_golden/pomfret_golden.tres +++ b/fish/species/pomfret_golden/pomfret_golden.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"pomfret_golden" display_name = "golden pomfret" +active = true +catalog_number = 807 +collection_group = &"Coastal schooling fish" +logbook_fact = "golden pomfret are warm-water swimmers whose golden sheen is most noticeable along the fins and flanks." allowed_water_types = 2 rarity = 2 base_catch_weight = 0.18 diff --git a/fish/species/pomfret_white/pomfret_white.tres b/fish/species/pomfret_white/pomfret_white.tres index fa317c7..7152086 100644 --- a/fish/species/pomfret_white/pomfret_white.tres +++ b/fish/species/pomfret_white/pomfret_white.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"pomfret_white" display_name = "white pomfret" +active = true +catalog_number = 810 +collection_group = &"Coastal schooling fish" +logbook_fact = "white pomfret gather over coastal grounds and use their compact, deep bodies to turn quickly while feeding." allowed_water_types = 2 base_catch_weight = 0.45 catch_profile = ExtResource("2_profile") diff --git a/fish/species/pompano_african/pompano_african.tres b/fish/species/pompano_african/pompano_african.tres new file mode 100644 index 0000000..0b73340 --- /dev/null +++ b/fish/species/pompano_african/pompano_african.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"pompano_african" +display_name = "African pompano" +active = false +catalog_number = 3601 +collection_group = &"Large coastal predators" +logbook_fact = "african pompano develop long streaming fin rays while young. adults become deep-bodied silver hunters around reefs and offshore structure." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.26 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 50.0 +sell_value_min = 14 +sell_value_max = 35 +sell_value_curve = 0.84 diff --git a/fish/species/pompano_florida/pompano_florida.tres b/fish/species/pompano_florida/pompano_florida.tres new file mode 100644 index 0000000..be7a10e --- /dev/null +++ b/fish/species/pompano_florida/pompano_florida.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"pompano_florida" +display_name = "Florida pompano" +active = false +catalog_number = 7402 +collection_group = &"Tropical flats fish" +logbook_fact = "florida pompano search warm surf for crabs, clams, and sand fleas. short blunt snouts lead into deep, silvery bodies." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.85 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 9.0 +sell_value_min = 7 +sell_value_max = 16 +sell_value_curve = 0.88 diff --git a/fish/species/porcupinefish_spotted/porcupinefish_spotted.tres b/fish/species/porcupinefish_spotted/porcupinefish_spotted.tres new file mode 100644 index 0000000..1e51582 --- /dev/null +++ b/fish/species/porcupinefish_spotted/porcupinefish_spotted.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"porcupinefish_spotted" +display_name = "spotted porcupinefish" +active = false +catalog_number = 5607 +collection_group = &"Reef oddities" +logbook_fact = "spotted porcupinefish inflate until long spines stand outward. fused teeth form a strong beak for crushing shelled prey." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.12 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 7.0 +sell_value_min = 24 +sell_value_max = 54 +sell_value_curve = 0.9 diff --git a/fish/species/porgy_scup/porgy_scup.tres b/fish/species/porgy_scup/porgy_scup.tres new file mode 100644 index 0000000..dec3c55 --- /dev/null +++ b/fish/species/porgy_scup/porgy_scup.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"porgy_scup" +display_name = "scup" +active = false +catalog_number = 6904 +collection_group = &"Temperate reef fish" +logbook_fact = "scup use small strong teeth to crush shellfish and other bottom prey. deep silver bodies gather around piers, reefs, and eelgrass." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 2.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 5.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.92 diff --git a/fish/species/pufferfish_guineafowl/pufferfish_guineafowl.tres b/fish/species/pufferfish_guineafowl/pufferfish_guineafowl.tres new file mode 100644 index 0000000..3771896 --- /dev/null +++ b/fish/species/pufferfish_guineafowl/pufferfish_guineafowl.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"pufferfish_guineafowl" +display_name = "guineafowl puffer" +active = false +catalog_number = 5603 +collection_group = &"Reef oddities" +logbook_fact = "guineafowl puffers swallow water to inflate when threatened. adults may shift from a spotted dark pattern to a vivid yellow form." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 5.0 +sell_value_min = 11 +sell_value_max = 26 +sell_value_curve = 0.9 diff --git a/fish/species/pumpkinseed/pumpkinseed.tres b/fish/species/pumpkinseed/pumpkinseed.tres new file mode 100644 index 0000000..5a24e96 --- /dev/null +++ b/fish/species/pumpkinseed/pumpkinseed.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"pumpkinseed" +display_name = "pumpkinseed" +active = false +catalog_number = 3104 +collection_group = &"Freshwater panfish" +logbook_fact = "pumpkinseeds use compact teeth to crush snails and other hard prey. blue facial lines and an orange gill spot brighten their round bodies." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 3.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 1.3 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 1.0 diff --git a/fish/species/queenfish_talang/queenfish_talang.tres b/fish/species/queenfish_talang/queenfish_talang.tres new file mode 100644 index 0000000..6b3f91c --- /dev/null +++ b/fish/species/queenfish_talang/queenfish_talang.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"queenfish_talang" +display_name = "talang queenfish" +active = false +catalog_number = 708 +collection_group = &"Coastal pelagic fish" +logbook_fact = "talang queenfish chase schooling prey near warm coasts and estuaries. hooked teeth and a deeply forked tail suit their rapid attacks." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 20.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/quillback/quillback.tres b/fish/species/quillback/quillback.tres new file mode 100644 index 0000000..915fc08 --- /dev/null +++ b/fish/species/quillback/quillback.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"quillback" +display_name = "quillback" +active = false +catalog_number = 2303 +collection_group = &"Freshwater bottom fish" +logbook_fact = "quillbacks carry a long first dorsal ray that rises like a quill. small mouths gather insect larvae and other food from river and lake bottoms." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 15.0 +sell_value_min = 6 +sell_value_max = 16 +sell_value_curve = 0.88 diff --git a/fish/species/red_drum/red_drum.tres b/fish/species/red_drum/red_drum.tres new file mode 100644 index 0000000..98c6bdd --- /dev/null +++ b/fish/species/red_drum/red_drum.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"red_drum" +display_name = "red drum" +active = false +catalog_number = 6803 +collection_group = &"Temperate estuary" +logbook_fact = "red drum use powerful tails to patrol surf and estuaries. one or more black spots near the tail may confuse predators about which end is the head." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 45.0 +sell_value_min = 8 +sell_value_max = 23 +sell_value_curve = 0.84 diff --git a/fish/species/redear_sunfish/redear_sunfish.tres b/fish/species/redear_sunfish/redear_sunfish.tres new file mode 100644 index 0000000..55221d8 --- /dev/null +++ b/fish/species/redear_sunfish/redear_sunfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"redear_sunfish" +display_name = "redear sunfish" +active = false +catalog_number = 3105 +collection_group = &"Freshwater panfish" +logbook_fact = "redear sunfish specialize in snails, crushing shells with strong throat teeth. a red or orange margin marks the dark flap behind the gill." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 1.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 3.0 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.95 diff --git a/fish/species/redhorse_golden/redhorse_golden.tres b/fish/species/redhorse_golden/redhorse_golden.tres new file mode 100644 index 0000000..15296d5 --- /dev/null +++ b/fish/species/redhorse_golden/redhorse_golden.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"redhorse_golden" +display_name = "golden redhorse" +active = false +catalog_number = 2302 +collection_group = &"Freshwater bottom fish" +logbook_fact = "golden redhorses probe flowing river bottoms with fleshy, downward-facing mouths. coppery scales and reddish fins give them a warm glow." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 8.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.9 diff --git a/fish/species/roach_common/roach_common.tres b/fish/species/roach_common/roach_common.tres new file mode 100644 index 0000000..a85b58f --- /dev/null +++ b/fish/species/roach_common/roach_common.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"roach_common" +display_name = "common roach" +active = false +catalog_number = 2504 +collection_group = &"Freshwater coarse fish" +logbook_fact = "common roach thrive in many lakes and rivers, often schooling near vegetation. red fins and a red-orange eye brighten their silver bodies." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 4.0 +sell_value_min = 2 +sell_value_max = 6 +sell_value_curve = 0.95 diff --git a/fish/species/rockfish_black/rockfish_black.tres b/fish/species/rockfish_black/rockfish_black.tres new file mode 100644 index 0000000..4bbcd5a --- /dev/null +++ b/fish/species/rockfish_black/rockfish_black.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"rockfish_black" +display_name = "black rockfish" +active = false +catalog_number = 6901 +collection_group = &"Temperate reef fish" +logbook_fact = "black rockfish gather above reefs and kelp along the north pacific coast. like other rockfish, they give birth to live young." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 10.0 +sell_value_min = 4 +sell_value_max = 11 +sell_value_curve = 0.9 diff --git a/fish/species/rockfish_canary/rockfish_canary.tres b/fish/species/rockfish_canary/rockfish_canary.tres new file mode 100644 index 0000000..2aeb290 --- /dev/null +++ b/fish/species/rockfish_canary/rockfish_canary.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"rockfish_canary" +display_name = "canary rockfish" +active = false +catalog_number = 6903 +collection_group = &"Temperate reef fish" +logbook_fact = "canary rockfish glow orange-yellow over deep pacific reefs. these long-lived fish mature slowly and give birth to live young." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 12.0 +sell_value_min = 7 +sell_value_max = 17 +sell_value_curve = 0.88 diff --git a/fish/species/rockfish_yelloweye/rockfish_yelloweye.tres b/fish/species/rockfish_yelloweye/rockfish_yelloweye.tres new file mode 100644 index 0000000..d06d1d3 --- /dev/null +++ b/fish/species/rockfish_yelloweye/rockfish_yelloweye.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"rockfish_yelloweye" +display_name = "yelloweye rockfish" +active = false +catalog_number = 6907 +collection_group = &"Temperate reef fish" +logbook_fact = "yelloweye rockfish can live for more than a century on deep pacific reefs. bright golden eyes stand out against orange-red bodies." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 35.0 +sell_value_min = 28 +sell_value_max = 64 +sell_value_curve = 0.84 diff --git a/fish/species/roosterfish/roosterfish.tres b/fish/species/roosterfish/roosterfish.tres new file mode 100644 index 0000000..fdb432a --- /dev/null +++ b/fish/species/roosterfish/roosterfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"roosterfish" +display_name = "roosterfish" +active = false +catalog_number = 7201 +collection_group = &"Tropical coastal predators" +logbook_fact = "roosterfish raise seven long dorsal spines while chasing prey through tropical surf. dark bands cross their sleek silver bodies." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 100.0 +sell_value_min = 30 +sell_value_max = 70 +sell_value_curve = 0.82 diff --git a/fish/species/rudd/rudd.tres b/fish/species/rudd/rudd.tres new file mode 100644 index 0000000..317fa8c --- /dev/null +++ b/fish/species/rudd/rudd.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"rudd" +display_name = "rudd" +active = false +catalog_number = 2508 +collection_group = &"Freshwater coarse fish" +logbook_fact = "rudd feed near the surface with an upturned mouth and red fins. golden-green bodies disappear easily among warm, weedy shallows." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.4 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 4.5 +sell_value_min = 3 +sell_value_max = 7 +sell_value_curve = 0.95 diff --git a/fish/species/sablefish/sablefish.tres b/fish/species/sablefish/sablefish.tres new file mode 100644 index 0000000..d180b9b --- /dev/null +++ b/fish/species/sablefish/sablefish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sablefish" +display_name = "sablefish" +active = false +catalog_number = 1605 +collection_group = &"Deep shelf fish" +logbook_fact = "sablefish roam deep north pacific slopes and can live for many decades. soft dark bodies conceal rich, oil-filled flesh." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.22 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 40.0 +sell_value_min = 15 +sell_value_max = 36 +sell_value_curve = 0.84 diff --git a/fish/species/sailfish/sailfish.tres b/fish/species/sailfish/sailfish.tres index 7f6bea9..398f62d 100644 --- a/fish/species/sailfish/sailfish.tres +++ b/fish/species/sailfish/sailfish.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"sailfish" display_name = "sailfish" +active = true +catalog_number = 4603 +collection_group = &"Oceanic billfish" +logbook_fact = "sailfish raise their enormous dorsal fin while herding baitfish. they are among the fastest fish in the sea." allowed_water_types = 2 rarity = 3 base_catch_weight = 0.1 diff --git a/fish/species/salmon_atlantic/salmon_atlantic.tres b/fish/species/salmon_atlantic/salmon_atlantic.tres index fa3f0d6..906d86b 100644 --- a/fish/species/salmon_atlantic/salmon_atlantic.tres +++ b/fish/species/salmon_atlantic/salmon_atlantic.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"salmon_atlantic" display_name = "atlantic salmon" +active = true +catalog_number = 4401 +collection_group = &"Ocean-run salmon" +logbook_fact = "atlantic salmon can return from the ocean to the river where they hatched. unlike many salmon, some survive to make the trip again." allowed_water_types = 2 rarity = 3 base_catch_weight = 0.65 diff --git a/fish/species/salmon_chum/salmon_chum.tres b/fish/species/salmon_chum/salmon_chum.tres index 748295b..67d3684 100644 --- a/fish/species/salmon_chum/salmon_chum.tres +++ b/fish/species/salmon_chum/salmon_chum.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"salmon_chum" display_name = "chum salmon" +active = true +catalog_number = 4402 +collection_group = &"Ocean-run salmon" +logbook_fact = "chum salmon travel immense distances and develop striking bars when they return to fresh water to spawn." allowed_water_types = 2 rarity = 1 base_catch_weight = 2.5 diff --git a/fish/species/salmon_coho/salmon_coho.tres b/fish/species/salmon_coho/salmon_coho.tres index 1c1a783..ad51f7b 100644 --- a/fish/species/salmon_coho/salmon_coho.tres +++ b/fish/species/salmon_coho/salmon_coho.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"salmon_coho" display_name = "coho salmon" +active = true +catalog_number = 4403 +collection_group = &"Ocean-run salmon" +logbook_fact = "coho salmon are agile hunters known for powerful leaps. young coho may spend more than a year growing in streams." allowed_water_types = 2 rarity = 2 base_catch_weight = 1.4 diff --git a/fish/species/salmon_pink/salmon_pink.tres b/fish/species/salmon_pink/salmon_pink.tres index d390cf1..7f76c62 100644 --- a/fish/species/salmon_pink/salmon_pink.tres +++ b/fish/species/salmon_pink/salmon_pink.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"salmon_pink" display_name = "pink salmon" +active = true +catalog_number = 4404 +collection_group = &"Ocean-run salmon" +logbook_fact = "pink salmon usually follow a strict two-year life cycle. spawning males develop the hump that inspired their nickname." allowed_water_types = 2 rarity = 1 base_catch_weight = 3.0 diff --git a/fish/species/salmon_sockeye/salmon_sockeye.tres b/fish/species/salmon_sockeye/salmon_sockeye.tres index deeda39..04b75b3 100644 --- a/fish/species/salmon_sockeye/salmon_sockeye.tres +++ b/fish/species/salmon_sockeye/salmon_sockeye.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"salmon_sockeye" display_name = "sockeye salmon" +active = true +catalog_number = 4405 +collection_group = &"Ocean-run salmon" +logbook_fact = "sockeye salmon feed heavily on plankton at sea. adults turn vivid red as they return inland to spawn." allowed_water_types = 2 rarity = 2 base_catch_weight = 1.6 diff --git a/fish/species/sand_dollar/sand_dollar.tres b/fish/species/sand_dollar/sand_dollar.tres new file mode 100644 index 0000000..fd3f73c --- /dev/null +++ b/fish/species/sand_dollar/sand_dollar.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"sand_dollar" +display_name = "sand dollar" +active = false +catalog_number = 1904 +collection_group = &"Echinoderms" +logbook_fact = "sand dollars burrow just beneath sandy seafloors and filter tiny food particles. the familiar star pattern marks their five-part body plan." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.2 +sell_value_min = 4 +sell_value_max = 10 +sell_value_curve = 0.98 diff --git a/fish/species/sand_lance_american/sand_lance_american.tres b/fish/species/sand_lance_american/sand_lance_american.tres new file mode 100644 index 0000000..4f53bbb --- /dev/null +++ b/fish/species/sand_lance_american/sand_lance_american.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sand_lance_american" +display_name = "American sand lance" +active = false +catalog_number = 801 +collection_group = &"Coastal schooling fish" +logbook_fact = "american sand lance dive headfirst into loose sand when danger approaches. immense schools carry energy from plankton to larger predators." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.02 +weight_max_lb = 0.4 +sell_value_min = 1 +sell_value_max = 3 +sell_value_curve = 1.0 diff --git a/fish/species/sardine_european/sardine_european.tres b/fish/species/sardine_european/sardine_european.tres new file mode 100644 index 0000000..3052323 --- /dev/null +++ b/fish/species/sardine_european/sardine_european.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"sardine_european" +display_name = "European pilchard" +active = false +catalog_number = 806 +collection_group = &"Coastal schooling fish" +logbook_fact = "european pilchards form shimmering schools along atlantic and mediterranean coasts. they feed mainly on plankton near the surface." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.6 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 1.0 diff --git a/fish/species/sardine_pacific/sardine_pacific.tres b/fish/species/sardine_pacific/sardine_pacific.tres new file mode 100644 index 0000000..3e4db3d --- /dev/null +++ b/fish/species/sardine_pacific/sardine_pacific.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"sardine_pacific" +display_name = "Pacific sardine" +active = false +catalog_number = 809 +collection_group = &"Coastal schooling fish" +logbook_fact = "pacific sardines follow cool, productive water in enormous schools. their movements shift as currents and plankton supplies change." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 1.0 diff --git a/fish/species/sauger/sauger.tres b/fish/species/sauger/sauger.tres index 49cf5ad..0918236 100644 --- a/fish/species/sauger/sauger.tres +++ b/fish/species/sauger/sauger.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"sauger" display_name = "sauger" +active = true +catalog_number = 3304 +collection_group = &"Freshwater predators" +logbook_fact = "sauger favor turbid rivers and reservoirs. their mottled backs blend into the dim, shifting light near the bottom." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/saugeye/saugeye.tres b/fish/species/saugeye/saugeye.tres index e834005..ac82232 100644 --- a/fish/species/saugeye/saugeye.tres +++ b/fish/species/saugeye/saugeye.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"saugeye" display_name = "saugeye" +active = true +catalog_number = 3305 +collection_group = &"Freshwater predators" +logbook_fact = "saugeye are a fertile hybrid of sauger and walleye. they combine traits from both parent species and often grow quickly." allowed_water_types = 1 rarity = 2 base_catch_weight = 0.2 diff --git a/fish/species/sawfish_largetooth/sawfish_largetooth.tres b/fish/species/sawfish_largetooth/sawfish_largetooth.tres new file mode 100644 index 0000000..699c8d6 --- /dev/null +++ b/fish/species/sawfish_largetooth/sawfish_largetooth.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"sawfish_largetooth" +display_name = "largetooth sawfish" +active = false +catalog_number = 5103 +collection_group = &"Rays and skates" +logbook_fact = "largetooth sawfish detect hidden prey with a long sensory rostrum. a swift sideways sweep stuns fish and exposes animals buried in mud." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.035 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 25.0 +weight_max_lb = 1300.0 +sell_value_min = 58 +sell_value_max = 135 +sell_value_curve = 0.78 diff --git a/fish/species/scorpionfish_red/scorpionfish_red.tres b/fish/species/scorpionfish_red/scorpionfish_red.tres new file mode 100644 index 0000000..eda1241 --- /dev/null +++ b/fish/species/scorpionfish_red/scorpionfish_red.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"scorpionfish_red" +display_name = "red scorpionfish" +active = false +catalog_number = 5202 +collection_group = &"Reef ambush fish" +logbook_fact = "red scorpionfish vanish against rocky reefs through mottled color and skin flaps. venomous dorsal spines punish careless predators." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 7.0 +sell_value_min = 11 +sell_value_max = 25 +sell_value_curve = 0.9 diff --git a/fish/species/sea_bass_black/sea_bass_black.tres b/fish/species/sea_bass_black/sea_bass_black.tres new file mode 100644 index 0000000..0f4fca3 --- /dev/null +++ b/fish/species/sea_bass_black/sea_bass_black.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_bass_black" +display_name = "black sea bass" +active = false +catalog_number = 6902 +collection_group = &"Temperate reef fish" +logbook_fact = "black sea bass shelter around reefs, piers, and wrecks. many begin life as female and later become male." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 1.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 4 +sell_value_max = 10 +sell_value_curve = 0.9 diff --git a/fish/species/sea_bass_chilean/sea_bass_chilean.tres b/fish/species/sea_bass_chilean/sea_bass_chilean.tres new file mode 100644 index 0000000..c52a88c --- /dev/null +++ b/fish/species/sea_bass_chilean/sea_bass_chilean.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_bass_chilean" +display_name = "Patagonian toothfish" +active = false +catalog_number = 1604 +collection_group = &"Deep shelf fish" +logbook_fact = "patagonian toothfish patrol cold, deep southern water with large canine teeth. natural antifreeze proteins protect their blood from freezing." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 220.0 +sell_value_min = 32 +sell_value_max = 78 +sell_value_curve = 0.8 diff --git a/fish/species/sea_cucumber_giant_california/sea_cucumber_giant_california.tres b/fish/species/sea_cucumber_giant_california/sea_cucumber_giant_california.tres new file mode 100644 index 0000000..5670862 --- /dev/null +++ b/fish/species/sea_cucumber_giant_california/sea_cucumber_giant_california.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_cucumber_giant_california" +display_name = "giant California sea cucumber" +active = false +catalog_number = 1902 +collection_group = &"Echinoderms" +logbook_fact = "giant california sea cucumbers sweep organic particles from the seafloor with branching tentacles. soft tube feet anchor their long bodies." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 5.0 +sell_value_min = 13 +sell_value_max = 29 +sell_value_curve = 0.93 diff --git a/fish/species/sea_otter/sea_otter.tres b/fish/species/sea_otter/sea_otter.tres new file mode 100644 index 0000000..c7740a3 --- /dev/null +++ b/fish/species/sea_otter/sea_otter.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_otter" +display_name = "sea otter" +active = false +catalog_number = 503 +collection_group = &"Coastal marine mammals" +logbook_fact = "sea otters float on their backs while opening shellfish with stones. dense fur traps insulating air because they lack a thick blubber layer." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.02 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 30.0 +weight_max_lb = 100.0 +sell_value_min = 55 +sell_value_max = 125 +sell_value_curve = 0.84 diff --git a/fish/species/sea_star_crown_of_thorns/sea_star_crown_of_thorns.tres b/fish/species/sea_star_crown_of_thorns/sea_star_crown_of_thorns.tres new file mode 100644 index 0000000..bfc9493 --- /dev/null +++ b/fish/species/sea_star_crown_of_thorns/sea_star_crown_of_thorns.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_star_crown_of_thorns" +display_name = "crown-of-thorns sea star" +active = false +catalog_number = 1901 +collection_group = &"Echinoderms" +logbook_fact = "crown-of-thorns sea stars crawl over reefs and digest coral tissue outside the body. venomous spines discourage many predators." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 7.0 +sell_value_min = 23 +sell_value_max = 52 +sell_value_curve = 0.91 diff --git a/fish/species/sea_star_sunflower/sea_star_sunflower.tres b/fish/species/sea_star_sunflower/sea_star_sunflower.tres new file mode 100644 index 0000000..7409a31 --- /dev/null +++ b/fish/species/sea_star_sunflower/sea_star_sunflower.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"sea_star_sunflower" +display_name = "sunflower sea star" +active = false +catalog_number = 1905 +collection_group = &"Echinoderms" +logbook_fact = "sunflower sea stars move quickly on thousands of tube feet and may carry many arms. they hunt urchins, clams, and other bottom animals." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 13.0 +sell_value_min = 14 +sell_value_max = 32 +sell_value_curve = 0.89 diff --git a/fish/species/seadragon_leafy/seadragon_leafy.tres b/fish/species/seadragon_leafy/seadragon_leafy.tres new file mode 100644 index 0000000..b137a34 --- /dev/null +++ b/fish/species/seadragon_leafy/seadragon_leafy.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"seadragon_leafy" +display_name = "leafy seadragon" +active = false +catalog_number = 6301 +collection_group = &"Seahorses and seadragons" +logbook_fact = "leafy seadragons drift among seaweed with elaborate skin lobes that resemble leaves. males carry eggs beneath the tail." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 0.5 +sell_value_min = 24 +sell_value_max = 55 +sell_value_curve = 0.94 diff --git a/fish/species/seadragon_weedy/seadragon_weedy.tres b/fish/species/seadragon_weedy/seadragon_weedy.tres new file mode 100644 index 0000000..e388f50 --- /dev/null +++ b/fish/species/seadragon_weedy/seadragon_weedy.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"seadragon_weedy" +display_name = "weedy seadragon" +active = false +catalog_number = 6302 +collection_group = &"Seahorses and seadragons" +logbook_fact = "weedy seadragons rely on slender bodies and small leaf-like lobes for camouflage. males brood rows of eggs on the underside of the tail." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.22 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 0.6 +sell_value_min = 16 +sell_value_max = 38 +sell_value_curve = 0.93 diff --git a/fish/species/seahorse_lined/seahorse_lined.tres b/fish/species/seahorse_lined/seahorse_lined.tres new file mode 100644 index 0000000..42fe3e3 --- /dev/null +++ b/fish/species/seahorse_lined/seahorse_lined.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"seahorse_lined" +display_name = "lined seahorse" +active = false +catalog_number = 602 +collection_group = &"Coastal oddities" +logbook_fact = "lined seahorses anchor to grass and coral with curling tails. the male broods eggs in a pouch and releases fully formed young." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.005 +weight_max_lb = 0.05 +sell_value_min = 9 +sell_value_max = 20 +sell_value_curve = 1.0 diff --git a/fish/species/seal_harbor/seal_harbor.tres b/fish/species/seal_harbor/seal_harbor.tres new file mode 100644 index 0000000..59bdf2b --- /dev/null +++ b/fish/species/seal_harbor/seal_harbor.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"seal_harbor" +display_name = "harbor seal" +active = false +catalog_number = 502 +collection_group = &"Coastal marine mammals" +logbook_fact = "harbor seals rest on rocky shores and sandbars between hunting trips. sensitive whiskers can trace the water trails left by moving fish." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.018 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 120.0 +weight_max_lb = 370.0 +sell_value_min = 60 +sell_value_max = 140 +sell_value_curve = 0.79 diff --git a/fish/species/shark_blacktip/shark_blacktip.tres b/fish/species/shark_blacktip/shark_blacktip.tres new file mode 100644 index 0000000..99bc169 --- /dev/null +++ b/fish/species/shark_blacktip/shark_blacktip.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shark_blacktip" +display_name = "blacktip shark" +active = false +catalog_number = 901 +collection_group = &"Coastal sharks" +logbook_fact = "blacktip sharks are named for the dark markings on their fins. they hunt schooling fish in warm shallows and sometimes leap clear of the water." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 15.0 +weight_max_lb = 150.0 +sell_value_min = 32 +sell_value_max = 75 +sell_value_curve = 0.8 diff --git a/fish/species/shark_great_hammerhead/shark_great_hammerhead.tres b/fish/species/shark_great_hammerhead/shark_great_hammerhead.tres new file mode 100644 index 0000000..65b9d96 --- /dev/null +++ b/fish/species/shark_great_hammerhead/shark_great_hammerhead.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shark_great_hammerhead" +display_name = "great hammerhead shark" +active = false +catalog_number = 902 +collection_group = &"Coastal sharks" +logbook_fact = "great hammerheads sweep their wide heads over the bottom while searching for rays. widely spaced senses help pinpoint hidden prey." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.035 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 50.0 +weight_max_lb = 1000.0 +sell_value_min = 62 +sell_value_max = 145 +sell_value_curve = 0.78 diff --git a/fish/species/shark_great_white/shark_great_white.tres b/fish/species/shark_great_white/shark_great_white.tres new file mode 100644 index 0000000..560b596 --- /dev/null +++ b/fish/species/shark_great_white/shark_great_white.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"shark_great_white" +display_name = "great white shark" +active = false +catalog_number = 903 +collection_group = &"Coastal sharks" +logbook_fact = "great white sharks conserve heat in their swimming muscles while crossing cool seas. rows of serrated teeth are replaced throughout life." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.025 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 100.0 +weight_max_lb = 1000.0 +sell_value_min = 70 +sell_value_max = 150 +sell_value_curve = 0.76 diff --git a/fish/species/shark_tiger/shark_tiger.tres b/fish/species/shark_tiger/shark_tiger.tres new file mode 100644 index 0000000..a3f34f7 --- /dev/null +++ b/fish/species/shark_tiger/shark_tiger.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shark_tiger" +display_name = "tiger shark" +active = false +catalog_number = 904 +collection_group = &"Coastal sharks" +logbook_fact = "tiger sharks carry dark vertical bars that fade as they mature. broad jaws let them investigate an unusually varied range of prey." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.06 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 50.0 +weight_max_lb = 1000.0 +sell_value_min = 50 +sell_value_max = 120 +sell_value_curve = 0.8 diff --git a/fish/species/shark_whale/shark_whale.tres b/fish/species/shark_whale/shark_whale.tres new file mode 100644 index 0000000..b0bbe19 --- /dev/null +++ b/fish/species/shark_whale/shark_whale.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shark_whale" +display_name = "whale shark" +active = false +catalog_number = 905 +collection_group = &"Coastal sharks" +logbook_fact = "whale sharks are enormous filter feeders covered in unique spot patterns. they cruise with open mouths to collect plankton and tiny fish." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.025 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 500.0 +weight_max_lb = 45000.0 +sell_value_min = 70 +sell_value_max = 160 +sell_value_curve = 0.76 diff --git a/fish/species/sheepshead/sheepshead.tres b/fish/species/sheepshead/sheepshead.tres new file mode 100644 index 0000000..df76f08 --- /dev/null +++ b/fish/species/sheepshead/sheepshead.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sheepshead" +display_name = "sheepshead" +active = false +catalog_number = 6905 +collection_group = &"Temperate reef fish" +logbook_fact = "sheepshead carry flat human-like front teeth for biting barnacles and crabs. dark bars cross their high silver bodies." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 20.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/shiner_common/shiner_common.tres b/fish/species/shiner_common/shiner_common.tres new file mode 100644 index 0000000..505bb24 --- /dev/null +++ b/fish/species/shiner_common/shiner_common.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"shiner_common" +display_name = "common shiner" +active = false +catalog_number = 2801 +collection_group = &"Freshwater minnows" +logbook_fact = "common shiners flash silver in clear streams and small rivers. breeding males develop rosy fins and a blue-violet sheen." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 4.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.3 +sell_value_min = 1 +sell_value_max = 3 +sell_value_curve = 1.0 diff --git a/fish/species/shiner_emerald/shiner_emerald.tres b/fish/species/shiner_emerald/shiner_emerald.tres new file mode 100644 index 0000000..7497ae6 --- /dev/null +++ b/fish/species/shiner_emerald/shiner_emerald.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"shiner_emerald" +display_name = "emerald shiner" +active = false +catalog_number = 2803 +collection_group = &"Freshwater minnows" +logbook_fact = "emerald shiners form bright surface schools in large lakes and rivers. slender bodies feed on plankton and drifting insects." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 3.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.25 +sell_value_min = 1 +sell_value_max = 3 +sell_value_curve = 1.0 diff --git a/fish/species/shiner_golden/shiner_golden.tres b/fish/species/shiner_golden/shiner_golden.tres new file mode 100644 index 0000000..755bffb --- /dev/null +++ b/fish/species/shiner_golden/shiner_golden.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"shiner_golden" +display_name = "golden shiner" +active = false +catalog_number = 2806 +collection_group = &"Freshwater minnows" +logbook_fact = "golden shiners school around dense vegetation in warm water. an upturned mouth takes insects and plankton from near the surface." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 3.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.0 +sell_value_min = 2 +sell_value_max = 4 +sell_value_curve = 1.0 diff --git a/fish/species/shrimp_peacock_mantis/shrimp_peacock_mantis.tres b/fish/species/shrimp_peacock_mantis/shrimp_peacock_mantis.tres new file mode 100644 index 0000000..4a12b76 --- /dev/null +++ b/fish/species/shrimp_peacock_mantis/shrimp_peacock_mantis.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shrimp_peacock_mantis" +display_name = "peacock mantis shrimp" +active = false +catalog_number = 3804 +collection_group = &"Lobsters and shrimp" +logbook_fact = "peacock mantis shrimp strike hard-shelled prey with club-like limbs. complex eyes move independently and detect colors beyond human vision." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.4 +sell_value_min = 22 +sell_value_max = 50 +sell_value_curve = 0.96 diff --git a/fish/species/shrimp_skunk_cleaner/shrimp_skunk_cleaner.tres b/fish/species/shrimp_skunk_cleaner/shrimp_skunk_cleaner.tres new file mode 100644 index 0000000..9ab3908 --- /dev/null +++ b/fish/species/shrimp_skunk_cleaner/shrimp_skunk_cleaner.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"shrimp_skunk_cleaner" +display_name = "skunk cleaner shrimp" +active = false +catalog_number = 3805 +collection_group = &"Lobsters and shrimp" +logbook_fact = "skunk cleaner shrimp advertise at reef cleaning stations with bright white antennae. visiting fish pause while parasites are picked away." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.15 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.98 diff --git a/fish/species/skate_barndoor/skate_barndoor.tres b/fish/species/skate_barndoor/skate_barndoor.tres new file mode 100644 index 0000000..013fc2f --- /dev/null +++ b/fish/species/skate_barndoor/skate_barndoor.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"skate_barndoor" +display_name = "barndoor skate" +active = false +catalog_number = 5101 +collection_group = &"Rays and skates" +logbook_fact = "barndoor skates glide over cold atlantic bottoms with broad wing-like fins. rows of thorny spines protect the back and tail." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 150.0 +sell_value_min = 28 +sell_value_max = 68 +sell_value_curve = 0.8 diff --git a/fish/species/smallmouth_bass/smallmouth_bass.tres b/fish/species/smallmouth_bass/smallmouth_bass.tres new file mode 100644 index 0000000..11e876f --- /dev/null +++ b/fish/species/smallmouth_bass/smallmouth_bass.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"smallmouth_bass" +display_name = "smallmouth bass" +active = false +catalog_number = 2202 +collection_group = &"Freshwater bass" +logbook_fact = "smallmouth bass favor clear water with rock and moving current. bronze flanks and dark vertical bars distinguish them from largemouth bass." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 1.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 12.0 +sell_value_min = 6 +sell_value_max = 15 +sell_value_curve = 0.9 diff --git a/fish/species/smelt_eulachon/smelt_eulachon.tres b/fish/species/smelt_eulachon/smelt_eulachon.tres new file mode 100644 index 0000000..b6d7b16 --- /dev/null +++ b/fish/species/smelt_eulachon/smelt_eulachon.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"smelt_eulachon" +display_name = "eulachon" +active = false +catalog_number = 4201 +collection_group = &"Ocean-run forage fish" +logbook_fact = "eulachon return from the pacific to spawn in coastal rivers. their oil-rich bodies once served as candles when dried and fitted with wicks." +allowed_water_types = 3 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.5 +sell_value_min = 4 +sell_value_max = 9 +sell_value_curve = 0.98 diff --git a/fish/species/smelt_rainbow/smelt_rainbow.tres b/fish/species/smelt_rainbow/smelt_rainbow.tres new file mode 100644 index 0000000..19f1b1d --- /dev/null +++ b/fish/species/smelt_rainbow/smelt_rainbow.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"smelt_rainbow" +display_name = "rainbow smelt" +active = false +catalog_number = 4101 +collection_group = &"Migratory forage fish" +logbook_fact = "rainbow smelt move between coastal water and rivers, though some remain landlocked. cucumber-like aromas cling to freshly caught fish." +allowed_water_types = 3 +rarity = 0 +base_catch_weight = 2.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.8 +sell_value_min = 2 +sell_value_max = 5 +sell_value_curve = 1.0 diff --git a/fish/species/snakehead_giant/snakehead_giant.tres b/fish/species/snakehead_giant/snakehead_giant.tres new file mode 100644 index 0000000..44b10e3 --- /dev/null +++ b/fish/species/snakehead_giant/snakehead_giant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"snakehead_giant" +display_name = "giant snakehead" +active = false +catalog_number = 7601 +collection_group = &"Tropical freshwater predators" +logbook_fact = "giant snakeheads breathe air and guard schools of young near the surface. long bodies launch sudden attacks from flooded vegetation." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 3.0 +weight_max_lb = 45.0 +sell_value_min = 28 +sell_value_max = 64 +sell_value_curve = 0.84 diff --git a/fish/species/snapper_lane/snapper_lane.tres b/fish/species/snapper_lane/snapper_lane.tres index e9e7422..f72ab38 100644 --- a/fish/species/snapper_lane/snapper_lane.tres +++ b/fish/species/snapper_lane/snapper_lane.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"snapper_lane" display_name = "lane snapper" +active = true +catalog_number = 6001 +collection_group = &"Reef snapper" +logbook_fact = "lane snapper use reef structure for cover and hunt small crustaceans and fish when the light begins to fade." allowed_water_types = 2 base_catch_weight = 0.45 catch_profile = ExtResource("2_profile") diff --git a/fish/species/snapper_mangrove/snapper_mangrove.tres b/fish/species/snapper_mangrove/snapper_mangrove.tres index 58226ad..f400800 100644 --- a/fish/species/snapper_mangrove/snapper_mangrove.tres +++ b/fish/species/snapper_mangrove/snapper_mangrove.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"snapper_mangrove" display_name = "mangrove snapper" +active = true +catalog_number = 6002 +collection_group = &"Reef snapper" +logbook_fact = "mangrove snapper shelter among roots and docks when young, then move toward reefs as they grow." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/snapper_mutton/snapper_mutton.tres b/fish/species/snapper_mutton/snapper_mutton.tres index 6d4441a..37b4b24 100644 --- a/fish/species/snapper_mutton/snapper_mutton.tres +++ b/fish/species/snapper_mutton/snapper_mutton.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"snapper_mutton" display_name = "mutton snapper" +active = true +catalog_number = 6003 +collection_group = &"Reef snapper" +logbook_fact = "mutton snapper have canine teeth that help them pick crabs, shrimp, and other hard-shelled prey from the reef." allowed_water_types = 2 rarity = 2 base_catch_weight = 0.2 diff --git a/fish/species/snapper_red/snapper_red.tres b/fish/species/snapper_red/snapper_red.tres index 8778c98..fabf736 100644 --- a/fish/species/snapper_red/snapper_red.tres +++ b/fish/species/snapper_red/snapper_red.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"snapper_red" display_name = "red snapper" +active = true +catalog_number = 6004 +collection_group = &"Reef snapper" +logbook_fact = "red snapper gather around reefs, wrecks, and ledges. their diet includes small fish, shrimp, and squid." allowed_water_types = 2 rarity = 1 base_catch_weight = 0.35 diff --git a/fish/species/snook_common/snook_common.tres b/fish/species/snook_common/snook_common.tres new file mode 100644 index 0000000..e810953 --- /dev/null +++ b/fish/species/snook_common/snook_common.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"snook_common" +display_name = "common snook" +active = false +catalog_number = 7303 +collection_group = &"Tropical estuary" +logbook_fact = "common snook wait around mangrove roots and current seams to ambush prey. a bold black lateral line divides their silver flanks." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 30.0 +sell_value_min = 13 +sell_value_max = 32 +sell_value_curve = 0.85 diff --git a/fish/species/sole_dover/sole_dover.tres b/fish/species/sole_dover/sole_dover.tres new file mode 100644 index 0000000..88daf9a --- /dev/null +++ b/fish/species/sole_dover/sole_dover.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sole_dover" +display_name = "Dover sole" +active = false +catalog_number = 1404 +collection_group = &"Cold shelf fish" +logbook_fact = "dover sole glide over deep muddy bottoms of the eastern pacific. both eyes migrate to the right side as the young fish becomes flat." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 8.0 +sell_value_min = 6 +sell_value_max = 14 +sell_value_curve = 0.9 diff --git a/fish/species/sprat_european/sprat_european.tres b/fish/species/sprat_european/sprat_european.tres new file mode 100644 index 0000000..20f313c --- /dev/null +++ b/fish/species/sprat_european/sprat_european.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"sprat_european" +display_name = "European sprat" +active = false +catalog_number = 1303 +collection_group = &"Cold schooling fish" +logbook_fact = "european sprat form compact schools in northern coastal seas. these tiny herring relatives feed on plankton near the surface." +allowed_water_types = 2 +rarity = 0 +base_catch_weight = 3.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.03 +weight_max_lb = 0.3 +sell_value_min = 1 +sell_value_max = 3 +sell_value_curve = 1.0 diff --git a/fish/species/squid_bigfin_reef/squid_bigfin_reef.tres b/fish/species/squid_bigfin_reef/squid_bigfin_reef.tres new file mode 100644 index 0000000..838a6ef --- /dev/null +++ b/fish/species/squid_bigfin_reef/squid_bigfin_reef.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"squid_bigfin_reef" +display_name = "bigfin reef squid" +active = false +catalog_number = 6501 +collection_group = &"Squid" +logbook_fact = "bigfin reef squid hover in coordinated groups around warm reefs. shifting colors and body patterns signal to nearby squid." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 5.0 +sell_value_min = 13 +sell_value_max = 30 +sell_value_curve = 0.91 diff --git a/fish/species/squid_colossal/squid_colossal.tres b/fish/species/squid_colossal/squid_colossal.tres new file mode 100644 index 0000000..8ade0a5 --- /dev/null +++ b/fish/species/squid_colossal/squid_colossal.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"squid_colossal" +display_name = "colossal squid" +active = false +catalog_number = 6502 +collection_group = &"Squid" +logbook_fact = "colossal squid carry swiveling hooks on their arms and tentacles. enormous eyes gather faint light in the deep southern ocean." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.015 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 400.0 +weight_max_lb = 1100.0 +sell_value_min = 82 +sell_value_max = 190 +sell_value_curve = 0.76 diff --git a/fish/species/squid_giant/squid_giant.tres b/fish/species/squid_giant/squid_giant.tres new file mode 100644 index 0000000..e67af33 --- /dev/null +++ b/fish/species/squid_giant/squid_giant.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"squid_giant" +display_name = "giant squid" +active = false +catalog_number = 6503 +collection_group = &"Squid" +logbook_fact = "giant squid hunt deep ocean prey with two long feeding tentacles. the largest eyes in the animal world watch for movement in darkness." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.02 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 100.0 +weight_max_lb = 600.0 +sell_value_min = 70 +sell_value_max = 165 +sell_value_curve = 0.77 diff --git a/fish/species/squid_humboldt/squid_humboldt.tres b/fish/species/squid_humboldt/squid_humboldt.tres new file mode 100644 index 0000000..038bcf8 --- /dev/null +++ b/fish/species/squid_humboldt/squid_humboldt.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"squid_humboldt" +display_name = "Humboldt squid" +active = false +catalog_number = 6504 +collection_group = &"Squid" +logbook_fact = "humboldt squid flash red and white while hunting in large groups. powerful beaks and grasping suckers handle fish and other squid." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 5.0 +weight_max_lb = 110.0 +sell_value_min = 26 +sell_value_max = 64 +sell_value_curve = 0.82 diff --git a/fish/species/stingray_ocellate_river/stingray_ocellate_river.tres b/fish/species/stingray_ocellate_river/stingray_ocellate_river.tres new file mode 100644 index 0000000..5ee7b41 --- /dev/null +++ b/fish/species/stingray_ocellate_river/stingray_ocellate_river.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"stingray_ocellate_river" +display_name = "ocellate river stingray" +active = false +catalog_number = 5104 +collection_group = &"Rays and skates" +logbook_fact = "ocellate river stingrays carry bright eye-like spots across a round disc. they hide beneath sand in south american rivers." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 35.0 +sell_value_min = 28 +sell_value_max = 65 +sell_value_curve = 0.82 diff --git a/fish/species/stingray_southern/stingray_southern.tres b/fish/species/stingray_southern/stingray_southern.tres new file mode 100644 index 0000000..ed24d11 --- /dev/null +++ b/fish/species/stingray_southern/stingray_southern.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"stingray_southern" +display_name = "southern stingray" +active = false +catalog_number = 5105 +collection_group = &"Rays and skates" +logbook_fact = "southern stingrays bury in warm sand with only their eyes and spiracles visible. crushing plates break open clams and crustaceans." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.23 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 80.0 +sell_value_min = 15 +sell_value_max = 40 +sell_value_curve = 0.82 diff --git a/fish/species/sturgeon_lake/sturgeon_lake.tres b/fish/species/sturgeon_lake/sturgeon_lake.tres new file mode 100644 index 0000000..b69a743 --- /dev/null +++ b/fish/species/sturgeon_lake/sturgeon_lake.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sturgeon_lake" +display_name = "lake sturgeon" +active = false +catalog_number = 102 +collection_group = &"Ancient freshwater fish" +logbook_fact = "lake sturgeon sweep the bottom with four sensitive barbels before extending a tube-like mouth to feed. they can live for decades." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 180.0 +sell_value_min = 36 +sell_value_max = 82 +sell_value_curve = 0.8 diff --git a/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres b/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres new file mode 100644 index 0000000..f62d908 --- /dev/null +++ b/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sturgeon_shovelnose" +display_name = "shovelnose sturgeon" +active = false +catalog_number = 105 +collection_group = &"Ancient freshwater fish" +logbook_fact = "shovelnose sturgeon hug flowing river bottoms and probe for insect larvae. a flattened snout helps them hold position in strong current." +allowed_water_types = 1 +rarity = 2 +base_catch_weight = 0.22 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 8.0 +sell_value_min = 12 +sell_value_max = 25 +sell_value_curve = 0.9 diff --git a/fish/species/sturgeon_white/sturgeon_white.tres b/fish/species/sturgeon_white/sturgeon_white.tres new file mode 100644 index 0000000..9b4892c --- /dev/null +++ b/fish/species/sturgeon_white/sturgeon_white.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"sturgeon_white" +display_name = "white sturgeon" +active = false +catalog_number = 4301 +collection_group = &"Ocean-run giants" +logbook_fact = "white sturgeon are the largest freshwater fish in north america. armored plates line bodies built for long lives in rivers and estuaries." +allowed_water_types = 3 +rarity = 4 +base_catch_weight = 0.045 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 500.0 +sell_value_min = 58 +sell_value_max = 135 +sell_value_curve = 0.78 diff --git a/fish/species/sucker_white/sucker_white.tres b/fish/species/sucker_white/sucker_white.tres new file mode 100644 index 0000000..1e2c2b3 --- /dev/null +++ b/fish/species/sucker_white/sucker_white.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"sucker_white" +display_name = "white sucker" +active = false +catalog_number = 2305 +collection_group = &"Freshwater bottom fish" +logbook_fact = "white suckers vacuum insects and organic matter from cool freshwater bottoms. spring runs carry large groups into shallow streams." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.0 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.9 diff --git a/fish/species/sunfish/sunfish.tres b/fish/species/sunfish/sunfish.tres index 14d2ced..9b9401d 100644 --- a/fish/species/sunfish/sunfish.tres +++ b/fish/species/sunfish/sunfish.tres @@ -9,6 +9,10 @@ script = ExtResource("1_fish_data") id = &"sunfish" display_name = "sunfish" +active = true +catalog_number = 5001 +collection_group = &"Open-ocean giants" +logbook_fact = "ocean sunfish are built more like enormous swimming heads than ordinary fish. they visit the surface and turn sideways to warm up." allowed_water_types = 2 rarity = 0 base_catch_weight = 7.0 diff --git a/fish/species/surgeonfish_blue/surgeonfish_blue.tres b/fish/species/surgeonfish_blue/surgeonfish_blue.tres new file mode 100644 index 0000000..9a21da4 --- /dev/null +++ b/fish/species/surgeonfish_blue/surgeonfish_blue.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"surgeonfish_blue" +display_name = "blue tang" +active = false +catalog_number = 5501 +collection_group = &"Reef grazers" +logbook_fact = "blue tangs graze algae from coral reefs with small close-set teeth. sharp folding spines near the tail give surgeonfish their name." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.5 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.95 diff --git a/fish/species/swordfish/swordfish.tres b/fish/species/swordfish/swordfish.tres index 2184395..5f776ca 100644 --- a/fish/species/swordfish/swordfish.tres +++ b/fish/species/swordfish/swordfish.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"]) script = ExtResource("1_fish_data") id = &"swordfish" display_name = "swordfish" +active = true +catalog_number = 4604 +collection_group = &"Oceanic billfish" +logbook_fact = "swordfish are fast, wide-ranging predators with a flattened bill. they can cross deep water and warm surface layers in one day." allowed_water_types = 2 rarity = 4 base_catch_weight = 0.06 diff --git a/fish/species/tambaqui/tambaqui.tres b/fish/species/tambaqui/tambaqui.tres new file mode 100644 index 0000000..981d643 --- /dev/null +++ b/fish/species/tambaqui/tambaqui.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"tambaqui" +display_name = "tambaqui" +active = false +catalog_number = 7509 +collection_group = &"Tropical freshwater fish" +logbook_fact = "tambaqui follow seasonal floods into forests to feed on fruit and seeds. strong square teeth crack tough plant material." +allowed_water_types = 1 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 8.0 +weight_max_lb = 80.0 +sell_value_min = 30 +sell_value_max = 68 +sell_value_curve = 0.82 diff --git a/fish/species/tang_yellow/tang_yellow.tres b/fish/species/tang_yellow/tang_yellow.tres new file mode 100644 index 0000000..c4facd7 --- /dev/null +++ b/fish/species/tang_yellow/tang_yellow.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"tang_yellow" +display_name = "yellow tang" +active = false +catalog_number = 5504 +collection_group = &"Reef grazers" +logbook_fact = "yellow tangs browse algae across hawaiian reefs during daylight. at night their bright bodies darken and show a pale horizontal stripe." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 0.8 +sell_value_min = 9 +sell_value_max = 20 +sell_value_curve = 0.96 diff --git a/fish/species/tarpon_atlantic/tarpon_atlantic.tres b/fish/species/tarpon_atlantic/tarpon_atlantic.tres new file mode 100644 index 0000000..c2fbff0 --- /dev/null +++ b/fish/species/tarpon_atlantic/tarpon_atlantic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"tarpon_atlantic" +display_name = "atlantic tarpon" +active = false +catalog_number = 7301 +collection_group = &"Tropical estuary" +logbook_fact = "atlantic tarpon gulp air with a lung-like swim bladder when coastal water runs low on oxygen. giant silver scales flash during leaps." +allowed_water_types = 3 +rarity = 3 +base_catch_weight = 0.09 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 180.0 +sell_value_min = 34 +sell_value_max = 82 +sell_value_curve = 0.8 diff --git a/fish/species/tautog/tautog.tres b/fish/species/tautog/tautog.tres new file mode 100644 index 0000000..cbd926f --- /dev/null +++ b/fish/species/tautog/tautog.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tautog" +display_name = "tautog" +active = false +catalog_number = 6906 +collection_group = &"Temperate reef fish" +logbook_fact = "tautog pry mussels and crabs from rocky structure with thick lips and strong teeth. adults return to familiar shelters year after year." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 20.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/tench/tench.tres b/fish/species/tench/tench.tres new file mode 100644 index 0000000..300a922 --- /dev/null +++ b/fish/species/tench/tench.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"tench" +display_name = "tench" +active = false +catalog_number = 2509 +collection_group = &"Freshwater coarse fish" +logbook_fact = "tench browse quiet, muddy bottoms with two small mouth barbels. a thick coat of slime protects their olive-green scales." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 12.0 +sell_value_min = 7 +sell_value_max = 17 +sell_value_curve = 0.88 diff --git a/fish/species/tetra_neon/tetra_neon.tres b/fish/species/tetra_neon/tetra_neon.tres new file mode 100644 index 0000000..487ef9b --- /dev/null +++ b/fish/species/tetra_neon/tetra_neon.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tetra_neon" +display_name = "neon tetra" +active = false +catalog_number = 2102 +collection_group = &"Freshwater aquarium fish" +logbook_fact = "neon tetras school through shaded forest streams. an iridescent blue stripe remains visible in the dim, tannin-stained water." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.9 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.08 +sell_value_min = 4 +sell_value_max = 8 +sell_value_curve = 0.98 diff --git a/fish/species/tigerfish_goliath/tigerfish_goliath.tres b/fish/species/tigerfish_goliath/tigerfish_goliath.tres new file mode 100644 index 0000000..dec9d49 --- /dev/null +++ b/fish/species/tigerfish_goliath/tigerfish_goliath.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tigerfish_goliath" +display_name = "goliath tigerfish" +active = false +catalog_number = 2703 +collection_group = &"Freshwater giants" +logbook_fact = "goliath tigerfish patrol powerful african rivers with interlocking dagger-like teeth. a muscular forked tail drives sudden attacks." +allowed_water_types = 1 +rarity = 4 +base_catch_weight = 0.035 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 20.0 +weight_max_lb = 150.0 +sell_value_min = 58 +sell_value_max = 132 +sell_value_curve = 0.8 diff --git a/fish/species/tilapia_nile/tilapia_nile.tres b/fish/species/tilapia_nile/tilapia_nile.tres new file mode 100644 index 0000000..3db4fb6 --- /dev/null +++ b/fish/species/tilapia_nile/tilapia_nile.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tilapia_nile" +display_name = "Nile tilapia" +active = false +catalog_number = 7506 +collection_group = &"Tropical freshwater fish" +logbook_fact = "nile tilapia thrive in warm lakes and rivers on a varied diet. females protect eggs and young inside their mouths." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 8.0 +sell_value_min = 3 +sell_value_max = 9 +sell_value_curve = 0.9 diff --git a/fish/species/tilefish_blueline/tilefish_blueline.tres b/fish/species/tilefish_blueline/tilefish_blueline.tres new file mode 100644 index 0000000..53598bd --- /dev/null +++ b/fish/species/tilefish_blueline/tilefish_blueline.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tilefish_blueline" +display_name = "blueline tilefish" +active = false +catalog_number = 1601 +collection_group = &"Deep shelf fish" +logbook_fact = "blueline tilefish shelter in burrows and rocky openings along deep shelves. a narrow blue stripe traces the edge of the dorsal fin." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.7 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 20.0 +sell_value_min = 7 +sell_value_max = 18 +sell_value_curve = 0.86 diff --git a/fish/species/tilefish_golden/tilefish_golden.tres b/fish/species/tilefish_golden/tilefish_golden.tres new file mode 100644 index 0000000..26e9543 --- /dev/null +++ b/fish/species/tilefish_golden/tilefish_golden.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"tilefish_golden" +display_name = "golden tilefish" +active = false +catalog_number = 1602 +collection_group = &"Deep shelf fish" +logbook_fact = "golden tilefish excavate burrows in soft clay along deep ocean slopes. their bright yellow spots contrast with blue-green backs." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.22 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 50.0 +sell_value_min = 15 +sell_value_max = 37 +sell_value_curve = 0.84 diff --git a/fish/species/trevally_bluefin/trevally_bluefin.tres b/fish/species/trevally_bluefin/trevally_bluefin.tres new file mode 100644 index 0000000..9c06970 --- /dev/null +++ b/fish/species/trevally_bluefin/trevally_bluefin.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"trevally_bluefin" +display_name = "bluefin trevally" +active = false +catalog_number = 5802 +collection_group = &"Reef predators" +logbook_fact = "bluefin trevally hunt reef fish in coordinated groups. electric blue fins and scattered blue spots contrast with a golden body." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 25.0 +sell_value_min = 14 +sell_value_max = 32 +sell_value_curve = 0.86 diff --git a/fish/species/trevally_giant/trevally_giant.tres b/fish/species/trevally_giant/trevally_giant.tres new file mode 100644 index 0000000..f1acce2 --- /dev/null +++ b/fish/species/trevally_giant/trevally_giant.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"trevally_giant" +display_name = "giant trevally" +active = false +catalog_number = 3603 +collection_group = &"Large coastal predators" +logbook_fact = "giant trevally hunt reef edges with bursts of speed and force. large individuals sometimes charge prey from surf and shallow lagoons." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 150.0 +sell_value_min = 32 +sell_value_max = 78 +sell_value_curve = 0.8 diff --git a/fish/species/triggerfish_gray/triggerfish_gray.tres b/fish/species/triggerfish_gray/triggerfish_gray.tres new file mode 100644 index 0000000..9eb4a35 --- /dev/null +++ b/fish/species/triggerfish_gray/triggerfish_gray.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"triggerfish_gray" +display_name = "gray triggerfish" +active = false +catalog_number = 5602 +collection_group = &"Reef oddities" +logbook_fact = "gray triggerfish lock a stout dorsal spine upright when wedged into shelter. strong teeth crack barnacles, crabs, and shellfish." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.3 +weight_max_lb = 12.0 +sell_value_min = 7 +sell_value_max = 17 +sell_value_curve = 0.88 diff --git a/fish/species/triggerfish_queen/triggerfish_queen.tres b/fish/species/triggerfish_queen/triggerfish_queen.tres new file mode 100644 index 0000000..e2de868 --- /dev/null +++ b/fish/species/triggerfish_queen/triggerfish_queen.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"triggerfish_queen" +display_name = "queen triggerfish" +active = false +catalog_number = 5605 +collection_group = &"Reef oddities" +logbook_fact = "queen triggerfish blow jets of water to uncover buried prey and flip sea urchins. vivid blue lines radiate across the face." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 15.0 +sell_value_min = 14 +sell_value_max = 32 +sell_value_curve = 0.88 diff --git a/fish/species/tripletail/tripletail.tres b/fish/species/tripletail/tripletail.tres new file mode 100644 index 0000000..e973888 --- /dev/null +++ b/fish/species/tripletail/tripletail.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"tripletail" +display_name = "tripletail" +active = false +catalog_number = 604 +collection_group = &"Coastal oddities" +logbook_fact = "tripletail often drift sideways near floating debris, resembling a loose leaf. rounded rear fins create the three-tailed silhouette." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.28 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 30.0 +sell_value_min = 13 +sell_value_max = 31 +sell_value_curve = 0.85 diff --git a/fish/species/trout_brown/trout_brown.tres b/fish/species/trout_brown/trout_brown.tres new file mode 100644 index 0000000..0e6cefd --- /dev/null +++ b/fish/species/trout_brown/trout_brown.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false + +[resource] +script = ExtResource("1_fish_data") +id = &"trout_brown" +display_name = "brown trout" +active = false +catalog_number = 1103 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "brown trout often shelter by day and hunt more freely after dark. adaptable populations occupy streams, lakes, and even coastal water." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 25.0 +sell_value_min = 7 +sell_value_max = 20 +sell_value_curve = 0.86 diff --git a/fish/species/trout_cutthroat/trout_cutthroat.tres b/fish/species/trout_cutthroat/trout_cutthroat.tres index fa29c47..61dc080 100644 --- a/fish/species/trout_cutthroat/trout_cutthroat.tres +++ b/fish/species/trout_cutthroat/trout_cutthroat.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"trout_cutthroat" display_name = "cutthroat trout" +active = true +catalog_number = 1104 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "cutthroat trout take their name from the red slash beneath the jaw. many populations rely on cold, well-oxygenated streams." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.4 diff --git a/fish/species/trout_golden/trout_golden.tres b/fish/species/trout_golden/trout_golden.tres index 8aa3201..5c3d87e 100644 --- a/fish/species/trout_golden/trout_golden.tres +++ b/fish/species/trout_golden/trout_golden.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"trout_golden" display_name = "golden trout" +active = true +catalog_number = 1105 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "golden trout evolved in clear, high-elevation california streams. their bright flanks stand out against rocky alpine water." allowed_water_types = 1 rarity = 2 base_catch_weight = 0.2 diff --git a/fish/species/trout_rainbow/trout_rainbow.tres b/fish/species/trout_rainbow/trout_rainbow.tres index f9c74f6..fbcdb42 100644 --- a/fish/species/trout_rainbow/trout_rainbow.tres +++ b/fish/species/trout_rainbow/trout_rainbow.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"trout_rainbow" display_name = "rainbow trout" +active = true +catalog_number = 1106 +collection_group = &"Cold freshwater salmonids" +logbook_fact = "rainbow trout are adaptable stream hunters. the pink lateral stripe is especially vivid when the fish is in breeding condition." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.45 diff --git a/fish/species/trout_steelhead/trout_steelhead.tres b/fish/species/trout_steelhead/trout_steelhead.tres index 57887f7..92f6985 100644 --- a/fish/species/trout_steelhead/trout_steelhead.tres +++ b/fish/species/trout_steelhead/trout_steelhead.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"trout_steelhead" display_name = "steelhead trout" +active = true +catalog_number = 4501 +collection_group = &"Ocean-run salmonids" +logbook_fact = "steelhead are the ocean-going form of rainbow trout. adults can leave fresh water and later return to spawn." allowed_water_types = 1 rarity = 2 base_catch_weight = 0.2 diff --git a/fish/species/trumpetfish_atlantic/trumpetfish_atlantic.tres b/fish/species/trumpetfish_atlantic/trumpetfish_atlantic.tres new file mode 100644 index 0000000..0a99228 --- /dev/null +++ b/fish/species/trumpetfish_atlantic/trumpetfish_atlantic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"trumpetfish_atlantic" +display_name = "atlantic trumpetfish" +active = false +catalog_number = 5601 +collection_group = &"Reef oddities" +logbook_fact = "atlantic trumpetfish hover head-down among corals and sea fans. long tubular snouts expand suddenly to draw in small fish." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.3 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.1 +weight_max_lb = 2.0 +sell_value_min = 10 +sell_value_max = 24 +sell_value_curve = 0.94 diff --git a/fish/species/tuna_albacore/tuna_albacore.tres b/fish/species/tuna_albacore/tuna_albacore.tres index 21a9155..d0b841b 100644 --- a/fish/species/tuna_albacore/tuna_albacore.tres +++ b/fish/species/tuna_albacore/tuna_albacore.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"tuna_albacore" display_name = "albacore tuna" +active = true +catalog_number = 4801 +collection_group = &"Oceanic tuna" +logbook_fact = "albacore have unusually long pectoral fins. their warm muscles help them cruise across wide stretches of open ocean." allowed_water_types = 2 rarity = 2 base_catch_weight = 1.5 diff --git a/fish/species/tuna_bigeye/tuna_bigeye.tres b/fish/species/tuna_bigeye/tuna_bigeye.tres index e5e4b7c..8c6c867 100644 --- a/fish/species/tuna_bigeye/tuna_bigeye.tres +++ b/fish/species/tuna_bigeye/tuna_bigeye.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"tuna_bigeye" display_name = "bigeye tuna" +active = true +catalog_number = 4802 +collection_group = &"Oceanic tuna" +logbook_fact = "bigeye tuna make daily trips between deep, cool water and warmer surface layers. their large eyes suit those dim depths." allowed_water_types = 2 rarity = 3 base_catch_weight = 0.55 diff --git a/fish/species/tuna_bluefin/tuna_bluefin.tres b/fish/species/tuna_bluefin/tuna_bluefin.tres index a669b5d..13e8bc2 100644 --- a/fish/species/tuna_bluefin/tuna_bluefin.tres +++ b/fish/species/tuna_bluefin/tuna_bluefin.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"tuna_bluefin" display_name = "bluefin tuna" +active = true +catalog_number = 4803 +collection_group = &"Oceanic tuna" +logbook_fact = "bluefin tuna are powerful ocean travelers. heat retained in their swimming muscles lets them thrive in surprisingly cold seas." allowed_water_types = 2 rarity = 4 base_catch_weight = 0.18 diff --git a/fish/species/tuna_skipjack/tuna_skipjack.tres b/fish/species/tuna_skipjack/tuna_skipjack.tres index 4d9e5a8..4541393 100644 --- a/fish/species/tuna_skipjack/tuna_skipjack.tres +++ b/fish/species/tuna_skipjack/tuna_skipjack.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"tuna_skipjack" display_name = "skipjack tuna" +active = true +catalog_number = 4804 +collection_group = &"Oceanic tuna" +logbook_fact = "skipjack travel in fast-moving schools and have dark stripes along their lower sides. they rarely stop swimming." allowed_water_types = 2 rarity = 1 base_catch_weight = 3.0 diff --git a/fish/species/tuna_yellowfin/tuna_yellowfin.tres b/fish/species/tuna_yellowfin/tuna_yellowfin.tres index cbd4950..5c5acc3 100644 --- a/fish/species/tuna_yellowfin/tuna_yellowfin.tres +++ b/fish/species/tuna_yellowfin/tuna_yellowfin.tres @@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4 script = ExtResource("1_fish_data") id = &"tuna_yellowfin" display_name = "yellowfin tuna" +active = true +catalog_number = 4805 +collection_group = &"Oceanic tuna" +logbook_fact = "yellowfin are named for their bright yellow fins and finlets. large schools often gather with other open-ocean hunters." allowed_water_types = 2 rarity = 2 catch_profile = ExtResource("2_profile") diff --git a/fish/species/turbot/turbot.tres b/fish/species/turbot/turbot.tres new file mode 100644 index 0000000..6b46871 --- /dev/null +++ b/fish/species/turbot/turbot.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"turbot" +display_name = "turbot" +active = false +catalog_number = 3703 +collection_group = &"Large flatfish" +logbook_fact = "turbot have broad, nearly circular bodies covered with bony bumps instead of scales. they bury into sand before ambushing fish and crustaceans." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.24 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 1.0 +weight_max_lb = 35.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.85 diff --git a/fish/species/turtle_green/turtle_green.tres b/fish/species/turtle_green/turtle_green.tres new file mode 100644 index 0000000..91f40cd --- /dev/null +++ b/fish/species/turtle_green/turtle_green.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"turtle_green" +display_name = "green sea turtle" +active = false +catalog_number = 6201 +collection_group = &"Sea turtles" +logbook_fact = "green sea turtles graze seagrass meadows with finely serrated jaws. adults migrate long distances between feeding and nesting grounds." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.018 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 65.0 +weight_max_lb = 500.0 +sell_value_min = 62 +sell_value_max = 145 +sell_value_curve = 0.78 diff --git a/fish/species/turtle_hawksbill/turtle_hawksbill.tres b/fish/species/turtle_hawksbill/turtle_hawksbill.tres new file mode 100644 index 0000000..5e07f77 --- /dev/null +++ b/fish/species/turtle_hawksbill/turtle_hawksbill.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"turtle_hawksbill" +display_name = "hawksbill sea turtle" +active = false +catalog_number = 6202 +collection_group = &"Sea turtles" +logbook_fact = "hawksbill sea turtles reach into reef crevices with narrow hooked beaks. a diet rich in sponges helps shape coral communities." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.014 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 75.0 +weight_max_lb = 250.0 +sell_value_min = 66 +sell_value_max = 150 +sell_value_curve = 0.8 diff --git a/fish/species/turtle_leatherback/turtle_leatherback.tres b/fish/species/turtle_leatherback/turtle_leatherback.tres new file mode 100644 index 0000000..1e89bee --- /dev/null +++ b/fish/species/turtle_leatherback/turtle_leatherback.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"turtle_leatherback" +display_name = "leatherback sea turtle" +active = false +catalog_number = 6203 +collection_group = &"Sea turtles" +logbook_fact = "leatherback sea turtles cross entire oceans while hunting jellies. a flexible ridged shell and internal heat help them enter cold water." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.012 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 500.0 +weight_max_lb = 2000.0 +sell_value_min = 75 +sell_value_max = 175 +sell_value_curve = 0.76 diff --git a/fish/species/turtle_loggerhead/turtle_loggerhead.tres b/fish/species/turtle_loggerhead/turtle_loggerhead.tres new file mode 100644 index 0000000..5b64995 --- /dev/null +++ b/fish/species/turtle_loggerhead/turtle_loggerhead.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"turtle_loggerhead" +display_name = "loggerhead sea turtle" +active = false +catalog_number = 6204 +collection_group = &"Sea turtles" +logbook_fact = "loggerhead sea turtles crush crabs and mollusks with massive jaws. females often return near their birth beaches to nest." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.016 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 150.0 +weight_max_lb = 1200.0 +sell_value_min = 68 +sell_value_max = 155 +sell_value_curve = 0.77 diff --git a/fish/species/urchin_purple/urchin_purple.tres b/fish/species/urchin_purple/urchin_purple.tres new file mode 100644 index 0000000..7725d3d --- /dev/null +++ b/fish/species/urchin_purple/urchin_purple.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"urchin_purple" +display_name = "purple sea urchin" +active = false +catalog_number = 1903 +collection_group = &"Echinoderms" +logbook_fact = "purple sea urchins scrape algae from rocks with a five-toothed feeding structure. dense groups can clear kelp from entire reefs." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.75 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.05 +weight_max_lb = 1.0 +sell_value_min = 5 +sell_value_max = 12 +sell_value_curve = 0.96 diff --git a/fish/species/wahoo/wahoo.tres b/fish/species/wahoo/wahoo.tres new file mode 100644 index 0000000..4753b9d --- /dev/null +++ b/fish/species/wahoo/wahoo.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"wahoo" +display_name = "wahoo" +active = false +catalog_number = 4703 +collection_group = &"Oceanic pelagic fish" +logbook_fact = "wahoo are streamlined open-ocean hunters with rows of sharp teeth. blue vertical bars flicker across their sides during fast pursuits." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 100.0 +sell_value_min = 30 +sell_value_max = 70 +sell_value_curve = 0.82 diff --git a/fish/species/walleye/walleye.tres b/fish/species/walleye/walleye.tres index ce833c9..97dea01 100644 --- a/fish/species/walleye/walleye.tres +++ b/fish/species/walleye/walleye.tres @@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"starter_pond"]) script = ExtResource("1_fish_data") id = &"walleye" display_name = "walleye" +active = true +catalog_number = 3306 +collection_group = &"Freshwater predators" +logbook_fact = "walleye have light-sensitive eyes that help them hunt in murky water and around dusk. their reflective layer gives the eyes a pale glow." allowed_water_types = 1 rarity = 1 base_catch_weight = 0.4 diff --git a/fish/species/walrus/walrus.tres b/fish/species/walrus/walrus.tres new file mode 100644 index 0000000..41682d5 --- /dev/null +++ b/fish/species/walrus/walrus.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"walrus" +display_name = "walrus" +active = false +catalog_number = 504 +collection_group = &"Coastal marine mammals" +logbook_fact = "walruses sweep the seafloor for clams and other soft-bodied prey. long tusks help them haul onto ice and settle disputes." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.012 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 800.0 +weight_max_lb = 3700.0 +sell_value_min = 74 +sell_value_max = 170 +sell_value_curve = 0.76 diff --git a/fish/species/warmouth/warmouth.tres b/fish/species/warmouth/warmouth.tres new file mode 100644 index 0000000..af0214f --- /dev/null +++ b/fish/species/warmouth/warmouth.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"warmouth" +display_name = "warmouth" +active = false +catalog_number = 3106 +collection_group = &"Freshwater panfish" +logbook_fact = "warmouth hide in weeds, roots, and murky backwaters before ambushing prey. red eyes and dark cheek stripes frame a notably large mouth." +allowed_water_types = 1 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 2.0 +sell_value_min = 5 +sell_value_max = 10 +sell_value_curve = 0.95 diff --git a/fish/species/weakfish/weakfish.tres b/fish/species/weakfish/weakfish.tres new file mode 100644 index 0000000..b0072e3 --- /dev/null +++ b/fish/species/weakfish/weakfish.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"weakfish" +display_name = "weakfish" +active = false +catalog_number = 6805 +collection_group = &"Temperate estuary" +logbook_fact = "weakfish are named for delicate mouth tissue that tears easily around a hook. iridescent spots scatter across their bronze backs." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.32 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 18.0 +sell_value_min = 12 +sell_value_max = 29 +sell_value_curve = 0.86 diff --git a/fish/species/whale_blue/whale_blue.tres b/fish/species/whale_blue/whale_blue.tres new file mode 100644 index 0000000..9fab3ed --- /dev/null +++ b/fish/species/whale_blue/whale_blue.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"whale_blue" +display_name = "blue whale" +active = false +catalog_number = 7701 +collection_group = &"Whales and dolphins" +logbook_fact = "blue whales are the largest animals known to have lived. pleated throats expand around vast mouthfuls of water that baleen filters for krill." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.005 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 100000.0 +weight_max_lb = 330000.0 +sell_value_min = 120 +sell_value_max = 300 +sell_value_curve = 0.72 diff --git a/fish/species/whale_humpback/whale_humpback.tres b/fish/species/whale_humpback/whale_humpback.tres new file mode 100644 index 0000000..e20e736 --- /dev/null +++ b/fish/species/whale_humpback/whale_humpback.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"whale_humpback" +display_name = "humpback whale" +active = false +catalog_number = 7703 +collection_group = &"Whales and dolphins" +logbook_fact = "humpback whales use long pectoral fins while turning and feeding. males produce layered songs that change across breeding seasons." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.008 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 40000.0 +weight_max_lb = 90000.0 +sell_value_min = 105 +sell_value_max = 260 +sell_value_curve = 0.73 diff --git a/fish/species/whale_killer/whale_killer.tres b/fish/species/whale_killer/whale_killer.tres new file mode 100644 index 0000000..b3ea92a --- /dev/null +++ b/fish/species/whale_killer/whale_killer.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +require_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"whale_killer" +display_name = "killer whale" +active = false +catalog_number = 7704 +collection_group = &"Whales and dolphins" +logbook_fact = "killer whales live in close family groups with distinct calls and hunting traditions. different populations specialize in different prey." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.008 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 3000.0 +weight_max_lb = 12000.0 +sell_value_min = 95 +sell_value_max = 230 +sell_value_curve = 0.74 diff --git a/fish/species/whale_sperm/whale_sperm.tres b/fish/species/whale_sperm/whale_sperm.tres new file mode 100644 index 0000000..a10b923 --- /dev/null +++ b/fish/species/whale_sperm/whale_sperm.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_day = false +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"whale_sperm" +display_name = "sperm whale" +active = false +catalog_number = 7705 +collection_group = &"Whales and dolphins" +logbook_fact = "sperm whales make deep dives to hunt squid with powerful echolocation clicks. their enormous square heads contain a waxy spermaceti organ." +allowed_water_types = 2 +rarity = 4 +base_catch_weight = 0.006 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 15000.0 +weight_max_lb = 125000.0 +sell_value_min = 115 +sell_value_max = 280 +sell_value_curve = 0.72 diff --git a/fish/species/white_perch/white_perch.tres b/fish/species/white_perch/white_perch.tres new file mode 100644 index 0000000..ee06ee4 --- /dev/null +++ b/fish/species/white_perch/white_perch.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"white_perch" +display_name = "white perch" +active = false +catalog_number = 6806 +collection_group = &"Temperate estuary" +logbook_fact = "white perch tolerate fresh and brackish water along the atlantic coast. deep silver bodies gather in schools around river mouths." +allowed_water_types = 3 +rarity = 1 +base_catch_weight = 1.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 3.5 +sell_value_min = 5 +sell_value_max = 11 +sell_value_curve = 0.9 diff --git a/fish/species/whitefish_lake/whitefish_lake.tres b/fish/species/whitefish_lake/whitefish_lake.tres new file mode 100644 index 0000000..4ad0281 --- /dev/null +++ b/fish/species/whitefish_lake/whitefish_lake.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") + +[resource] +script = ExtResource("1_fish_data") +id = &"whitefish_lake" +display_name = "lake whitefish" +active = false +catalog_number = 1003 +collection_group = &"Cold freshwater fish" +logbook_fact = "lake whitefish browse deep, cold bottoms with small downward-pointing mouths. large schools move toward shallows to spawn in autumn." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 1.5 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.5 +weight_max_lb = 12.0 +sell_value_min = 4 +sell_value_max = 11 +sell_value_curve = 0.9 diff --git a/fish/species/wolffish_atlantic/wolffish_atlantic.tres b/fish/species/wolffish_atlantic/wolffish_atlantic.tres new file mode 100644 index 0000000..a305cc7 --- /dev/null +++ b/fish/species/wolffish_atlantic/wolffish_atlantic.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +forbid_rain = true + +[resource] +script = ExtResource("1_fish_data") +id = &"wolffish_atlantic" +display_name = "atlantic wolffish" +active = false +catalog_number = 1201 +collection_group = &"Cold reef fish" +logbook_fact = "atlantic wolffish use heavy jaws and blunt teeth to crush shellfish and urchins. natural antifreeze proteins help them endure icy water." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.25 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 2.0 +weight_max_lb = 40.0 +sell_value_min = 14 +sell_value_max = 34 +sell_value_curve = 0.84 diff --git a/fish/species/wolffish_spotted/wolffish_spotted.tres b/fish/species/wolffish_spotted/wolffish_spotted.tres new file mode 100644 index 0000000..52a1de3 --- /dev/null +++ b/fish/species/wolffish_spotted/wolffish_spotted.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"wolffish_spotted" +display_name = "spotted wolffish" +active = false +catalog_number = 1203 +collection_group = &"Cold reef fish" +logbook_fact = "spotted wolffish crush hard-shelled prey with broad molar-like teeth. their pale spots stand out against a dark cold-water body." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.11 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 3.0 +weight_max_lb = 50.0 +sell_value_min = 26 +sell_value_max = 60 +sell_value_curve = 0.84 diff --git a/fish/species/wrasse_ballan/wrasse_ballan.tres b/fish/species/wrasse_ballan/wrasse_ballan.tres new file mode 100644 index 0000000..63cb0b6 --- /dev/null +++ b/fish/species/wrasse_ballan/wrasse_ballan.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"wrasse_ballan" +display_name = "ballan wrasse" +active = false +catalog_number = 6101 +collection_group = &"Reef wrasses" +logbook_fact = "ballan wrasse crush shellfish and sea urchins with strong throat teeth. thick lips and mottled colors suit rocky european reefs." +allowed_water_types = 2 +rarity = 1 +base_catch_weight = 0.8 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 10.0 +sell_value_min = 6 +sell_value_max = 15 +sell_value_curve = 0.9 diff --git a/fish/species/wrasse_cleaner/wrasse_cleaner.tres b/fish/species/wrasse_cleaner/wrasse_cleaner.tres new file mode 100644 index 0000000..e22c1f0 --- /dev/null +++ b/fish/species/wrasse_cleaner/wrasse_cleaner.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false +forbid_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"wrasse_cleaner" +display_name = "cleaner wrasse" +active = false +catalog_number = 6102 +collection_group = &"Reef wrasses" +logbook_fact = "cleaner wrasses advertise with a bright stripe and dance at reef stations. larger fish wait while parasites are picked from skin and gills." +allowed_water_types = 2 +rarity = 2 +base_catch_weight = 0.35 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.01 +weight_max_lb = 0.2 +sell_value_min = 9 +sell_value_max = 20 +sell_value_curve = 1.0 diff --git a/fish/species/wreckfish/wreckfish.tres b/fish/species/wreckfish/wreckfish.tres new file mode 100644 index 0000000..a2121ef --- /dev/null +++ b/fish/species/wreckfish/wreckfish.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +require_fog = true + +[resource] +script = ExtResource("1_fish_data") +id = &"wreckfish" +display_name = "wreckfish" +active = false +catalog_number = 1606 +collection_group = &"Deep shelf fish" +logbook_fact = "wreckfish gather around caves, ledges, and shipwrecks in deep water. powerful jaws let them ambush fish and large crustaceans." +allowed_water_types = 2 +rarity = 3 +base_catch_weight = 0.1 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 10.0 +weight_max_lb = 180.0 +sell_value_min = 31 +sell_value_max = 76 +sell_value_curve = 0.8 diff --git a/fish/species/yellow_perch/yellow_perch.tres b/fish/species/yellow_perch/yellow_perch.tres new file mode 100644 index 0000000..3147fdd --- /dev/null +++ b/fish/species/yellow_perch/yellow_perch.tres @@ -0,0 +1,28 @@ +[gd_resource type="Resource" script_class="FishData" load_steps=4 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"] + +[sub_resource type="Resource" id="Availability"] +script = ExtResource("3_availability") +allow_night = false + +[resource] +script = ExtResource("1_fish_data") +id = &"yellow_perch" +display_name = "yellow perch" +active = false +catalog_number = 3201 +collection_group = &"Freshwater perch" +logbook_fact = "yellow perch travel in schools through cool lakes and slow rivers. dark vertical bars and orange lower fins make them easy to recognize." +allowed_water_types = 1 +rarity = 0 +base_catch_weight = 2.2 +catch_profile = ExtResource("2_profile") +availability = SubResource("Availability") +weight_min_lb = 0.2 +weight_max_lb = 4.0 +sell_value_min = 3 +sell_value_max = 8 +sell_value_curve = 0.9 diff --git a/fishing/fishing_spot.gd b/fishing/fishing_spot.gd index 167a08b..2c8f584 100644 --- a/fishing/fishing_spot.gd +++ b/fishing/fishing_spot.gd @@ -15,6 +15,7 @@ const PlayerExperienceType = preload( ) const ItemCatalogType = preload("res://items/item_catalog.gd") const ItemDataType = preload("res://items/item_data.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const PlayerBagType = preload("res://inventory/player_bag.gd") const PlayerHotbarType = preload("res://inventory/player_hotbar.gd") const PlayerFishingUpgradesType = preload( @@ -658,7 +659,7 @@ func has_active_fishing_rod() -> bool: var item: ItemDataType = _get_active_item() return ( item != null - and item.is_valid() + and item.is_available() and item.category == ItemDataType.Category.ROD and item.usable and item.equippable @@ -676,7 +677,11 @@ func _get_active_item() -> ItemDataType: if item_id.is_empty() or not _local_bag.owns_item(item_id): return null var item: ItemDataType = _item_catalog.get_item_by_id(item_id) - return item if item != null and item.is_valid() else null + return item if item != null and item.is_available() else null + + +func _get_active_rod() -> FishingRodDataType: + return _get_active_item() as FishingRodDataType func _is_cooler_full() -> bool: @@ -829,7 +834,9 @@ func _on_cast_completed() -> void: _selected_water_region = get_fishable_water_region(_cast_target) _selection_context = _build_fishing_context(_selected_water_region) + var active_rod: FishingRodDataType = _get_active_rod() _fish_selector.undiscovered_weight_multiplier = undiscovered_weight_multiplier + _fish_selector.active_rod = active_rod _fish_selector.rarity_weight_multipliers = [] for rarity: int in range(FishDataType.Rarity.size()): _fish_selector.rarity_weight_multipliers.append( @@ -856,6 +863,10 @@ func _on_cast_completed() -> void: _item_effects.get_bite_time_multiplier() if _item_effects != null else 1.0 + ) * ( + active_rod.bite_time_multiplier + if active_rod != null + else 1.0 ) _withdrawal_progress = 0.0 _withdrawal_input_held = false @@ -1055,6 +1066,7 @@ func _activate_bite(confirmation_override: bool = false) -> void: func _get_effective_reel_speed() -> float: if _active_player == null: return 0.0 + var rod: FishingRodDataType = _get_active_rod() return _active_player.reel_speed * ( _fishing_upgrades.get_reel_speed_multiplier() if _fishing_upgrades != null @@ -1063,13 +1075,16 @@ func _get_effective_reel_speed() -> float: _item_effects.get_reel_multiplier() if _item_effects != null else 1.0 + ) * ( + rod.reel_speed_multiplier if rod != null else 1.0 ) func _get_effective_barrier_damage() -> int: if _active_player == null: return 1 - return ( + var rod: FishingRodDataType = _get_active_rod() + var damage: int = ( _fishing_upgrades.get_barrier_damage() if _fishing_upgrades != null else _active_player.click_power @@ -1078,6 +1093,13 @@ func _get_effective_barrier_damage() -> int: if _item_effects != null else 0 ) + return maxi( + roundi( + float(damage) + * (rod.barrier_power_multiplier if rod != null else 1.0) + ), + 1, + ) func _on_catch_encounter_updated( @@ -1512,7 +1534,11 @@ func _get_active_bait_tags() -> Array[StringName]: 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 [] + return ( + item.bait_tags.duplicate() + if item != null and item.is_available() and item.is_bait() + else [] + ) func _active_lure_has_effect(effect_id: StringName) -> bool: @@ -1527,7 +1553,12 @@ func _active_lure_has_effect(effect_id: StringName) -> bool: var lure: ItemDataType = _item_catalog.get_item_by_id( _local_player.active_lure_id ) - return lure != null and lure.is_lure() and effect_id in lure.lure_effects + return ( + lure != null + and lure.is_available() + and lure.is_lure() + and effect_id in lure.lure_effects + ) func _build_network_evidence() -> Dictionary: diff --git a/inventory/player_bag.gd b/inventory/player_bag.gd index 4fc12b6..ffb734d 100644 --- a/inventory/player_bag.gd +++ b/inventory/player_bag.gd @@ -39,7 +39,7 @@ func add_item(item_id: StringName, quantity: int = 1) -> bool: func can_add_item(item_id: StringName, quantity: int = 1) -> bool: - var item: ItemDataType = _resolve_valid_item(item_id) + var item: ItemDataType = _resolve_available_item(item_id) if item == null or quantity <= 0: return false var existing: OwnedItemType = get_owned_item(item_id) @@ -156,3 +156,8 @@ func _resolve_valid_item(item_id: StringName) -> ItemDataType: return null var item: ItemDataType = _catalog.get_item_by_id(item_id) return item if item != null and item.is_valid() else null + + +func _resolve_available_item(item_id: StringName) -> ItemDataType: + var item: ItemDataType = _resolve_valid_item(item_id) + return item if item != null and item.active else null diff --git a/inventory/player_hotbar.gd b/inventory/player_hotbar.gd index e9dbcec..a71ab68 100644 --- a/inventory/player_hotbar.gd +++ b/inventory/player_hotbar.gd @@ -249,7 +249,7 @@ func _can_assign(item_id: StringName) -> bool: if _catalog == null: return false var item: ItemDataType = _catalog.get_item_by_id(item_id) - return item != null and item.is_valid() and item.hotbar_allowed + return item != null and item.is_available() and item.hotbar_allowed func _can_assign_fish(catch_id: StringName) -> bool: diff --git a/items/catalog/art_kit.tres b/items/catalog/art_kit.tres index ee5b28e..e59705d 100644 --- a/items/catalog/art_kit.tres +++ b/items/catalog/art_kit.tres @@ -7,7 +7,7 @@ script = ExtResource("1_item") item_id = &"art_kit" display_name = "Art Kit" -description = "Press P in the game world to paint!" +description = "Select the Art Kit in the Hotbar to paint." category = 1 icon = ExtResource("2_icon") stackable = false diff --git a/items/catalog/basic_fishing_rod.tres b/items/catalog/basic_fishing_rod.tres index f43f9ca..9849b89 100644 --- a/items/catalog/basic_fishing_rod.tres +++ b/items/catalog/basic_fishing_rod.tres @@ -1,6 +1,6 @@ -[gd_resource type="Resource" script_class="ItemData" load_steps=3 format=3] +[gd_resource type="Resource" script_class="FishingRodData" load_steps=3 format=3] -[ext_resource type="Script" path="res://items/item_data.gd" id="1_script"] +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] [ext_resource type="Texture2D" path="res://items/icons/equipment/64_rod_base_thick.png" id="2_icon"] [resource] @@ -8,6 +8,7 @@ script = ExtResource("1_script") item_id = &"basic_fishing_rod" display_name = "basic fishing rod" description = "a dependable starter rod. select it to cast." +active = true category = 0 icon = ExtResource("2_icon") stackable = false @@ -15,3 +16,8 @@ max_stack = 1 usable = true equippable = true hotbar_allowed = true +shop_order = 1 +shop_price = 0 +unlock_level = 1 +effect_summary = "neutral baseline with no catch-selection or handling modifiers." +tradeoff = "none." diff --git a/items/catalog/cooler_expansion.tres b/items/catalog/cooler_expansion.tres deleted file mode 100644 index 2e9ed29..0000000 --- a/items/catalog/cooler_expansion.tres +++ /dev/null @@ -1,17 +0,0 @@ -[gd_resource type="Resource" script_class="ItemData" load_steps=3 format=3] - -[ext_resource type="Script" path="res://items/item_data.gd" id="1"] -[ext_resource type="Texture2D" path="res://items/icons/placeholder/cooler_expansion.svg" id="2"] - -[resource] -script = ExtResource("1") -item_id = &"cooler_expansion" -display_name = "cooler expansion" -description = "permanently increases the number of fish the cooler can hold." -category = 4 -icon = ExtResource("2") -stackable = false -max_stack = 1 -usable = false -equippable = false -hotbar_allowed = false diff --git a/items/catalog/item_catalog.tres b/items/catalog/item_catalog.tres index 43377ba..5f2ac3f 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=18 format=3] +[gd_resource type="Resource" script_class="ItemCatalog" load_steps=38 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"] @@ -6,7 +6,6 @@ [ext_resource type="Resource" path="res://items/catalog/energy_drink.tres" id="4_energy"] [ext_resource type="Resource" path="res://items/catalog/snack.tres" id="5_snack"] [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"] [ext_resource type="Resource" path="res://items/catalog/snails.tres" id="10_snails"] @@ -17,7 +16,28 @@ [ext_resource type="Resource" path="res://items/catalog/luminous_roe.tres" id="15_roe"] [ext_resource type="Resource" path="res://items/catalog/the_standby.tres" id="16_standby"] [ext_resource type="Resource" path="res://items/catalog/batteries.tres" id="17_batteries"] +[ext_resource type="Resource" path="res://items/catalog/rods/cardboard_classic_rod.tres" id="18_cardboard"] +[ext_resource type="Resource" path="res://items/catalog/rods/pond_skipper_rod.tres" id="19_pond"] +[ext_resource type="Resource" path="res://items/catalog/rods/river_runner_rod.tres" id="20_river"] +[ext_resource type="Resource" path="res://items/catalog/rods/lake_lunker_rod.tres" id="21_lake"] +[ext_resource type="Resource" path="res://items/catalog/rods/salt_spray_rod.tres" id="22_salt"] +[ext_resource type="Resource" path="res://items/catalog/rods/whisker_stick_rod.tres" id="23_whisker"] +[ext_resource type="Resource" path="res://items/catalog/rods/reef_raker_rod.tres" id="24_reef"] +[ext_resource type="Resource" path="res://items/catalog/rods/moonbeam_rod.tres" id="25_moonbeam"] +[ext_resource type="Resource" path="res://items/catalog/rods/sun_chaser_rod.tres" id="26_sun"] +[ext_resource type="Resource" path="res://items/catalog/rods/rainmaker_rod.tres" id="27_rain"] +[ext_resource type="Resource" path="res://items/catalog/rods/fogcatcher_rod.tres" id="28_fog"] +[ext_resource type="Resource" path="res://items/catalog/rods/field_guide_rod.tres" id="29_guide"] +[ext_resource type="Resource" path="res://items/catalog/rods/small_fry_rod.tres" id="30_small"] +[ext_resource type="Resource" path="res://items/catalog/rods/heavy_hauler_rod.tres" id="31_heavy"] +[ext_resource type="Resource" path="res://items/catalog/rods/pocket_rocket_rod.tres" id="32_rocket"] +[ext_resource type="Resource" path="res://items/catalog/rods/lucky_twig_rod.tres" id="33_lucky"] +[ext_resource type="Resource" path="res://items/catalog/rods/showboat_rod.tres" id="34_showboat"] +[ext_resource type="Resource" path="res://items/catalog/rods/deep_blue_rod.tres" id="35_deep"] +[ext_resource type="Resource" path="res://items/catalog/rods/oddity_string_rod.tres" id="36_oddity"] +[ext_resource type="Resource" path="res://items/catalog/rods/aurora_rod.tres" id="37_aurora"] +[ext_resource type="Resource" path="res://items/catalog/magnet.tres" id="38_magnet"] [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"), ExtResource("9_worms"), ExtResource("10_snails"), ExtResource("11_shrimp"), ExtResource("12_squid"), ExtResource("14_sardine"), ExtResource("13_anchovy"), ExtResource("15_roe"), ExtResource("16_standby"), ExtResource("17_batteries")] +items = [ExtResource("2_rod"), ExtResource("3_coffee"), ExtResource("4_energy"), ExtResource("5_snack"), ExtResource("6_finder"), ExtResource("8_art_kit"), ExtResource("9_worms"), ExtResource("10_snails"), ExtResource("11_shrimp"), ExtResource("12_squid"), ExtResource("14_sardine"), ExtResource("13_anchovy"), ExtResource("15_roe"), ExtResource("16_standby"), ExtResource("17_batteries"), ExtResource("18_cardboard"), ExtResource("19_pond"), ExtResource("20_river"), ExtResource("21_lake"), ExtResource("22_salt"), ExtResource("23_whisker"), ExtResource("24_reef"), ExtResource("25_moonbeam"), ExtResource("26_sun"), ExtResource("27_rain"), ExtResource("28_fog"), ExtResource("29_guide"), ExtResource("30_small"), ExtResource("31_heavy"), ExtResource("32_rocket"), ExtResource("33_lucky"), ExtResource("34_showboat"), ExtResource("35_deep"), ExtResource("36_oddity"), ExtResource("37_aurora"), ExtResource("38_magnet")] diff --git a/items/catalog/luminous_roe.tres b/items/catalog/luminous_roe.tres index 7814f42..677563e 100644 --- a/items/catalog/luminous_roe.tres +++ b/items/catalog/luminous_roe.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"luminous_roe" display_name = "luminous roe" -description = "rare glowing roe with the strongest rare catch odds." +description = "rare glowing roe with the strongest rarity and quality odds." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_6"]) diff --git a/items/catalog/magnet.tres b/items/catalog/magnet.tres new file mode 100644 index 0000000..eb2e25c --- /dev/null +++ b/items/catalog/magnet.tres @@ -0,0 +1,16 @@ +[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 = &"magnet" +display_name = "magnet" +description = "a heavy magnet ready for future magnet fishing." +active = true +category = 1 +stackable = false +max_stack = 1 +usable = false +equippable = false +hotbar_allowed = false diff --git a/items/catalog/rods/aurora_rod.tres b/items/catalog/rods/aurora_rod.tres new file mode 100644 index 0000000..303ce95 --- /dev/null +++ b/items/catalog/rods/aurora_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"aurora_rod" +display_name = "aurora rod" +description = "a shifting ribbon of color for anglers who have tried nearly everything else." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 21 +shop_price = 5000 +unlock_level = 15 +bite_time_multiplier = 1.35 +reel_speed_multiplier = 0.9 +rarity_weight_multipliers = Array[float]([0.85, 1.00, 1.15, 1.30, 1.45]) +quality_weight_multipliers = Array[float]([0.80, 0.95, 1.15, 1.30, 1.45]) +effect_summary = "modestly improves both species rarity and catch quality across all eligible fish." +tradeoff = "the slowest bite cycle in the set; intended as an expensive late-game sidegrade." diff --git a/items/catalog/rods/cardboard_classic_rod.tres b/items/catalog/rods/cardboard_classic_rod.tres new file mode 100644 index 0000000..97a304f --- /dev/null +++ b/items/catalog/rods/cardboard_classic_rod.tres @@ -0,0 +1,26 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"cardboard_classic_rod" +display_name = "cardboard classic" +description = "a cheerful folded rod that gets bites quickly, if not impressively." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 2 +shop_price = 40 +unlock_level = 1 +bite_time_multiplier = 0.85 +reel_speed_multiplier = 0.95 +barrier_power_multiplier = 0.85 +rarity_weight_multipliers = Array[float]([1.20, 1.00, 0.85, 0.70, 0.55]) +quality_weight_multipliers = Array[float]([1.20, 1.05, 0.85, 0.70, 0.55]) +effect_summary = "shorter bite waits and a low-cost early sidegrade." +tradeoff = "leans toward common, lower-quality fish and has weaker handling." diff --git a/items/catalog/rods/deep_blue_rod.tres b/items/catalog/rods/deep_blue_rod.tres new file mode 100644 index 0000000..2d9b03f --- /dev/null +++ b/items/catalog/rods/deep_blue_rod.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"deep_blue_rod" +display_name = "deep blue" +description = "a heavy navy rod for enormous shapes moving far offshore." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 19 +shop_price = 2500 +unlock_level = 12 +preferred_collection_groups = Array[StringName]([&"Coastal sharks", &"Large coastal predators", &"Oceanic billfish", &"Oceanic pelagic fish", &"Oceanic tuna", &"Open-ocean giants"]) +affinity_weight_multiplier = 1.75 +weight_roll_bias = 0.32 +bite_time_multiplier = 1.28 +reel_speed_multiplier = 0.82 +barrier_power_multiplier = 1.25 +effect_summary = "favors large ocean predator and pelagic collection groups and biases weight upward." +tradeoff = "very long bite waits and slower reeling." diff --git a/items/catalog/rods/field_guide_rod.tres b/items/catalog/rods/field_guide_rod.tres new file mode 100644 index 0000000..2b19f30 --- /dev/null +++ b/items/catalog/rods/field_guide_rod.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"field_guide_rod" +display_name = "field guide rod" +description = "a note-covered rod that keeps tugging toward something new." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 13 +shop_price = 1350 +unlock_level = 8 +undiscovered_weight_multiplier = 1.9 +bite_time_multiplier = 1.15 +effect_summary = "substantially increases the relative weight of eligible undiscovered species." +tradeoff = "longer bite waits and no bonus after a species is discovered." diff --git a/items/catalog/rods/fogcatcher_rod.tres b/items/catalog/rods/fogcatcher_rod.tres new file mode 100644 index 0000000..c0fdd25 --- /dev/null +++ b/items/catalog/rods/fogcatcher_rod.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"fogcatcher_rod" +display_name = "fogcatcher" +description = "a hazy blue rod for fish that prefer not to be seen." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 12 +shop_price = 1100 +unlock_level = 7 +weather_affinity = 2 +affinity_weight_multiplier = 1.65 +effect_summary = "strongly favors eligible fog-active fish." +tradeoff = "its affinity provides no benefit outside foggy weather." diff --git a/items/catalog/rods/heavy_hauler_rod.tres b/items/catalog/rods/heavy_hauler_rod.tres new file mode 100644 index 0000000..bc68c78 --- /dev/null +++ b/items/catalog/rods/heavy_hauler_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"heavy_hauler_rod" +display_name = "heavy hauler" +description = "a thick rod that would rather bring home one enormous fish." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 15 +shop_price = 1500 +unlock_level = 9 +weight_roll_bias = 0.28 +bite_time_multiplier = 1.18 +reel_speed_multiplier = 0.88 +barrier_power_multiplier = 1.2 +effect_summary = "biases fish weight upward and adds barrier power." +tradeoff = "longer bite waits and slower reeling." diff --git a/items/catalog/rods/lake_lunker_rod.tres b/items/catalog/rods/lake_lunker_rod.tres new file mode 100644 index 0000000..4d30f56 --- /dev/null +++ b/items/catalog/rods/lake_lunker_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"lake_lunker_rod" +display_name = "lake lunker" +description = "a broad, patient rod that favors hefty catches from open lakes." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 5 +shop_price = 400 +unlock_level = 4 +preferred_location_tags = Array[StringName]([&"lake"]) +affinity_weight_multiplier = 1.45 +weight_roll_bias = 0.12 +bite_time_multiplier = 1.05 +effect_summary = "favors eligible lake fish and gently biases weight rolls upward." +tradeoff = "slightly longer bite waits." diff --git a/items/catalog/rods/lucky_twig_rod.tres b/items/catalog/rods/lucky_twig_rod.tres new file mode 100644 index 0000000..8c26b19 --- /dev/null +++ b/items/catalog/rods/lucky_twig_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"lucky_twig_rod" +display_name = "lucky twig" +description = "an ordinary-looking branch that insists it is extremely lucky." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 17 +shop_price = 1800 +unlock_level = 10 +bite_time_multiplier = 1.2 +reel_speed_multiplier = 0.9 +barrier_power_multiplier = 0.85 +rarity_weight_multipliers = Array[float]([0.65, 1.00, 1.35, 1.65, 2.00]) +effect_summary = "strongly shifts species rarity toward rare, epic, and legendary fish." +tradeoff = "longer bite waits, slower reeling, and weaker barrier power." diff --git a/items/catalog/rods/moonbeam_rod.tres b/items/catalog/rods/moonbeam_rod.tres new file mode 100644 index 0000000..df83634 --- /dev/null +++ b/items/catalog/rods/moonbeam_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"moonbeam_rod" +display_name = "moonbeam rod" +description = "a pale rod that wakes up when the island goes quiet." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 9 +shop_price = 950 +unlock_level = 6 +time_affinity = 2 +affinity_weight_multiplier = 1.5 +bite_time_multiplier = 1.08 +quality_weight_multipliers = Array[float]([0.95, 0.98, 1.00, 1.08, 1.25]) +effect_summary = "favors eligible night fish and gives shiny quality a modest lift." +tradeoff = "slightly longer bite waits." diff --git a/items/catalog/rods/oddity_string_rod.tres b/items/catalog/rods/oddity_string_rod.tres new file mode 100644 index 0000000..8c51739 --- /dev/null +++ b/items/catalog/rods/oddity_string_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"oddity_string_rod" +display_name = "oddity string" +description = "a crooked spool of string that attracts fish with questionable silhouettes." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 20 +shop_price = 2600 +unlock_level = 12 +preferred_collection_groups = Array[StringName]([&"Brackish oddities", &"Coastal oddities", &"Deep-sea oddities", &"Freshwater oddities", &"Reef oddities"]) +affinity_weight_multiplier = 1.8 +bite_time_multiplier = 1.18 +quality_weight_multipliers = Array[float]([1.10, 1.05, 0.95, 0.90, 0.90]) +effect_summary = "favors eligible fish from authored oddity collection groups." +tradeoff = "longer bite waits and a slight average-quality penalty." diff --git a/items/catalog/rods/pocket_rocket_rod.tres b/items/catalog/rods/pocket_rocket_rod.tres new file mode 100644 index 0000000..b93d348 --- /dev/null +++ b/items/catalog/rods/pocket_rocket_rod.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"pocket_rocket_rod" +display_name = "pocket rocket" +description = "a buzzing pocket-sized rod for anglers in a hurry." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 16 +shop_price = 1400 +unlock_level = 9 +bite_time_multiplier = 0.7 +reel_speed_multiplier = 1.25 +barrier_power_multiplier = 0.8 +rarity_weight_multipliers = Array[float]([1.15, 1.00, 0.85, 0.72, 0.60]) +effect_summary = "greatly shortens bite waits and reels faster." +tradeoff = "reduces higher-rarity odds and barrier power." diff --git a/items/catalog/rods/pond_skipper_rod.tres b/items/catalog/rods/pond_skipper_rod.tres new file mode 100644 index 0000000..adb18e4 --- /dev/null +++ b/items/catalog/rods/pond_skipper_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"pond_skipper_rod" +display_name = "pond skipper" +description = "a springy little rod that feels at home beside quiet ponds." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 3 +shop_price = 150 +unlock_level = 2 +preferred_location_tags = Array[StringName]([&"starter_pond", &"pond"]) +affinity_weight_multiplier = 1.5 +bite_time_multiplier = 0.95 +effect_summary = "increases the relative selection weight of eligible pond fish." +tradeoff = "none; a focused sidegrade rather than a direct upgrade." diff --git a/items/catalog/rods/rainmaker_rod.tres b/items/catalog/rods/rainmaker_rod.tres new file mode 100644 index 0000000..3a407fd --- /dev/null +++ b/items/catalog/rods/rainmaker_rod.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"rainmaker_rod" +display_name = "rainmaker" +description = "a drip-shaped rod that becomes unusually lucky in the rain." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 11 +shop_price = 1100 +unlock_level = 7 +weather_affinity = 1 +affinity_weight_multiplier = 1.65 +effect_summary = "strongly favors eligible rain-active fish." +tradeoff = "its affinity provides no benefit outside rainy weather." diff --git a/items/catalog/rods/reef_raker_rod.tres b/items/catalog/rods/reef_raker_rod.tres new file mode 100644 index 0000000..2b3ff91 --- /dev/null +++ b/items/catalog/rods/reef_raker_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"reef_raker_rod" +display_name = "reef raker" +description = "a bright hooked rod tuned for the crowded life around reefs." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 8 +shop_price = 900 +unlock_level = 6 +preferred_collection_groups = Array[StringName]([&"Cold reef fish", &"Reef ambush fish", &"Reef eels", &"Reef flatfish", &"Reef grazers", &"Reef oddities", &"Reef ornamentals", &"Reef predators", &"Reef schooling fish", &"Reef snapper", &"Reef wrasses", &"Temperate reef fish", &"Temperate reef predators"]) +affinity_weight_multiplier = 1.45 +quality_weight_multipliers = Array[float]([0.95, 1.00, 1.12, 1.05, 1.00]) +effect_summary = "favors eligible reef collection groups and modestly favors impressive quality." +tradeoff = "no advantage away from reef-associated fish." diff --git a/items/catalog/rods/river_runner_rod.tres b/items/catalog/rods/river_runner_rod.tres new file mode 100644 index 0000000..7f0a464 --- /dev/null +++ b/items/catalog/rods/river_runner_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"river_runner_rod" +display_name = "river runner" +description = "a lively rod made to keep pace with moving river water." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 4 +shop_price = 250 +unlock_level = 3 +preferred_location_tags = Array[StringName]([&"river"]) +affinity_weight_multiplier = 1.5 +reel_speed_multiplier = 1.05 +effect_summary = "increases the relative selection weight of eligible river fish." +tradeoff = "none; a focused sidegrade rather than a direct upgrade." diff --git a/items/catalog/rods/salt_spray_rod.tres b/items/catalog/rods/salt_spray_rod.tres new file mode 100644 index 0000000..f3e6102 --- /dev/null +++ b/items/catalog/rods/salt_spray_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"salt_spray_rod" +display_name = "salt spray" +description = "a sea-green rod that seems happiest with salt on the line." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 6 +shop_price = 600 +unlock_level = 5 +preferred_location_tags = Array[StringName]([&"ocean"]) +affinity_weight_multiplier = 1.5 +rarity_weight_multipliers = Array[float]([0.95, 1.00, 1.05, 1.05, 1.05]) +effect_summary = "increases the relative selection weight of eligible ocean fish." +tradeoff = "none; a focused sidegrade rather than a direct upgrade." diff --git a/items/catalog/rods/showboat_rod.tres b/items/catalog/rods/showboat_rod.tres new file mode 100644 index 0000000..99bef41 --- /dev/null +++ b/items/catalog/rods/showboat_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"showboat_rod" +display_name = "showboat" +description = "a theatrical rod that refuses to land an unimpressive fish quietly." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 18 +shop_price = 2000 +unlock_level = 11 +bite_time_multiplier = 1.18 +reel_speed_multiplier = 0.9 +quality_weight_multipliers = Array[float]([0.50, 0.75, 1.35, 1.70, 2.10]) +effect_summary = "strongly shifts catch quality toward impressive, exceptional, and shiny." +tradeoff = "longer bite waits and slower reeling; species rarity is unchanged." diff --git a/items/catalog/rods/small_fry_rod.tres b/items/catalog/rods/small_fry_rod.tres new file mode 100644 index 0000000..a1631f0 --- /dev/null +++ b/items/catalog/rods/small_fry_rod.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"small_fry_rod" +display_name = "small fry" +description = "a tiny rod for anglers who value character over size." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 14 +shop_price = 1200 +unlock_level = 8 +weight_roll_bias = -0.25 +quality_weight_multipliers = Array[float]([0.75, 0.90, 1.25, 1.40, 1.55]) +effect_summary = "biases fish weight downward while improving high-quality outcomes." +tradeoff = "produces smaller catches on average." diff --git a/items/catalog/rods/sun_chaser_rod.tres b/items/catalog/rods/sun_chaser_rod.tres new file mode 100644 index 0000000..22c0803 --- /dev/null +++ b/items/catalog/rods/sun_chaser_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"sun_chaser_rod" +display_name = "sun chaser" +description = "a warm cream rod that likes bright mornings and busy afternoons." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 10 +shop_price = 950 +unlock_level = 6 +time_affinity = 1 +affinity_weight_multiplier = 1.4 +rarity_weight_multipliers = Array[float]([0.95, 1.00, 1.12, 1.08, 1.00]) +effect_summary = "favors eligible daytime fish and modestly improves rare-species odds." +tradeoff = "none; a focused sidegrade rather than a direct upgrade." diff --git a/items/catalog/rods/whisker_stick_rod.tres b/items/catalog/rods/whisker_stick_rod.tres new file mode 100644 index 0000000..a49ff63 --- /dev/null +++ b/items/catalog/rods/whisker_stick_rod.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FishingRodData" load_steps=2 format=3] + +[ext_resource type="Script" path="res://items/fishing_rod_data.gd" id="1_script"] + +[resource] +script = ExtResource("1_script") +item_id = &"whisker_stick_rod" +display_name = "whisker stick" +description = "a bendy rod with a suspicious talent for finding catfish." +active = false +category = 0 +stackable = false +max_stack = 1 +usable = true +equippable = true +hotbar_allowed = true +shop_order = 7 +shop_price = 750 +unlock_level = 5 +preferred_collection_groups = Array[StringName]([&"Freshwater catfish"]) +affinity_weight_multiplier = 1.7 +bite_time_multiplier = 1.08 +effect_summary = "strongly favors eligible fish in the Freshwater catfish collection group." +tradeoff = "slightly longer bite waits while it searches for whiskers." diff --git a/items/catalog/shrimp.tres b/items/catalog/shrimp.tres index e308163..6864265 100644 --- a/items/catalog/shrimp.tres +++ b/items/catalog/shrimp.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"shrimp" display_name = "shrimp" -description = "lively bait that noticeably improves rare catch chances." +description = "lively bait that noticeably improves rarity and quality odds." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_2"]) diff --git a/items/catalog/snails.tres b/items/catalog/snails.tres index 12d4497..adddefb 100644 --- a/items/catalog/snails.tres +++ b/items/catalog/snails.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"snails" display_name = "snails" -description = "slow-moving bait with a better chance for rarer catches." +description = "slow-moving bait with better rarity and quality odds." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_1"]) diff --git a/items/catalog/squid_chunks.tres b/items/catalog/squid_chunks.tres index dfe245f..bf0da93 100644 --- a/items/catalog/squid_chunks.tres +++ b/items/catalog/squid_chunks.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"squid_chunks" display_name = "squid chunks" -description = "rich cut bait that strongly favors rarer catches." +description = "rich cut bait that strongly favors rarer, higher-quality catches." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_3"]) diff --git a/items/catalog/whole_anchovy.tres b/items/catalog/whole_anchovy.tres index cbc60b6..b52018b 100644 --- a/items/catalog/whole_anchovy.tres +++ b/items/catalog/whole_anchovy.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"whole_anchovy" display_name = "sardine" -description = "valuable oily schooling bait tuned for exceptional catches." +description = "valuable oily schooling bait tuned for exceptional rarity and quality odds." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_5"]) diff --git a/items/catalog/whole_sardine.tres b/items/catalog/whole_sardine.tres index c5d0163..78a0e0e 100644 --- a/items/catalog/whole_sardine.tres +++ b/items/catalog/whole_sardine.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"whole_sardine" display_name = "minnow" -description = "small live bait with high rare catch potential." +description = "small live bait with strong rarity and quality potential." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"bait_rarity_4"]) diff --git a/items/catalog/worms.tres b/items/catalog/worms.tres index f01258e..71bd744 100644 --- a/items/catalog/worms.tres +++ b/items/catalog/worms.tres @@ -7,7 +7,7 @@ script = ExtResource("1") item_id = &"worms" display_name = "worms" -description = "basic bait that opens a small chance for rarer catches." +description = "basic bait that opens a small chance for rarer, higher-quality catches." icon = ExtResource("2_icon") category = 2 bait_tags = Array[StringName]([&"worm", &"bait_rarity_0"]) diff --git a/items/fishing_rod_data.gd b/items/fishing_rod_data.gd new file mode 100644 index 0000000..d1c8e7c --- /dev/null +++ b/items/fishing_rod_data.gd @@ -0,0 +1,151 @@ +class_name FishingRodData +extends ItemData + +const FishDataType = preload("res://fish/fish_data.gd") +const FishingContextType = preload("res://fishing/fishing_context.gd") + +enum TimeAffinity { + ANY, + DAY, + NIGHT, +} + +enum WeatherAffinity { + ANY, + RAIN, + FOG, +} + +const MULTIPLIER_COUNT: int = 5 + +@export_category("Rod Shop") +@export var shop_enabled: bool = true +@export_range(1, 999, 1) var shop_order: int = 1 +@export_range(0, 1000000, 1) var shop_price: int = 0 +@export_range(1, 100000, 1) var unlock_level: int = 1 + +@export_category("Rod Presentation") +## Optional authored visual. A null scene deliberately uses the current +## temporary rod mesh so new rod data never requires a model to function. +@export var rod_model_scene: PackedScene +@export var rod_model_transform: Transform3D = Transform3D.IDENTITY +@export var rod_tip_position := Vector3(0.0, 1.1, 0.0) + +@export_category("Rod Affinity") +@export var preferred_location_tags: Array[StringName] = [] +@export var preferred_collection_groups: Array[StringName] = [] +@export var time_affinity: TimeAffinity = TimeAffinity.ANY +@export var weather_affinity: WeatherAffinity = WeatherAffinity.ANY +@export_range(0.0, 10.0, 0.01) var affinity_weight_multiplier: float = 1.0 +@export_range(0.0, 10.0, 0.01) var undiscovered_weight_multiplier: float = 1.0 + +@export_category("Rod Catch Modifiers") +@export_range(-0.5, 0.5, 0.01) var weight_roll_bias: float = 0.0 +@export_range(0.05, 5.0, 0.01) var bite_time_multiplier: float = 1.0 +@export_range(0.05, 5.0, 0.01) var reel_speed_multiplier: float = 1.0 +@export_range(0.05, 5.0, 0.01) var barrier_power_multiplier: float = 1.0 +@export var rarity_weight_multipliers: Array[float] = [ + 1.0, 1.0, 1.0, 1.0, 1.0, +] +@export var quality_weight_multipliers: Array[float] = [ + 1.0, 1.0, 1.0, 1.0, 1.0, +] +@export_multiline var effect_summary: String +@export_multiline var tradeoff: String + + +func is_valid() -> bool: + return ( + super.is_valid() + and category == Category.ROD + and shop_order >= 1 + and shop_price >= 0 + and unlock_level >= 1 + and rarity_weight_multipliers.size() == MULTIPLIER_COUNT + and quality_weight_multipliers.size() == MULTIPLIER_COUNT + and _multipliers_are_non_negative(rarity_weight_multipliers) + and _multipliers_are_non_negative(quality_weight_multipliers) + and affinity_weight_multiplier >= 0.0 + and undiscovered_weight_multiplier >= 0.0 + and bite_time_multiplier > 0.0 + and reel_speed_multiplier > 0.0 + and barrier_power_multiplier > 0.0 + ) + + +func is_shop_available() -> bool: + return is_available() and shop_enabled and icon != null + + +func get_affinity_multiplier( + fish: FishDataType, + context: FishingContextType, +) -> float: + if fish == null or context == null or not _has_authored_affinity(): + return 1.0 + if ( + not preferred_location_tags.is_empty() + and not _has_any_match( + preferred_location_tags, + context.location_tags, + ) + ): + return 1.0 + if ( + not preferred_collection_groups.is_empty() + and fish.collection_group not in preferred_collection_groups + ): + return 1.0 + match time_affinity: + TimeAffinity.DAY: + if context.is_night or context.is_day_night_transition: + return 1.0 + TimeAffinity.NIGHT: + if not context.is_night or context.is_day_night_transition: + return 1.0 + match weather_affinity: + WeatherAffinity.RAIN: + if not context.is_raining: + return 1.0 + WeatherAffinity.FOG: + if not context.is_foggy: + return 1.0 + return maxf(affinity_weight_multiplier, 0.0) + + +func get_rarity_multiplier(rarity: int) -> float: + if rarity < 0 or rarity >= rarity_weight_multipliers.size(): + return 1.0 + return maxf(rarity_weight_multipliers[rarity], 0.0) + + +func get_quality_multiplier(quality: int) -> float: + if quality < 0 or quality >= quality_weight_multipliers.size(): + return 1.0 + return maxf(quality_weight_multipliers[quality], 0.0) + + +func _has_authored_affinity() -> bool: + return ( + not preferred_location_tags.is_empty() + or not preferred_collection_groups.is_empty() + or time_affinity != TimeAffinity.ANY + or weather_affinity != WeatherAffinity.ANY + ) + + +func _has_any_match( + expected: Array[StringName], + actual: Array[StringName], +) -> bool: + for value: StringName in expected: + if value in actual: + return true + return false + + +func _multipliers_are_non_negative(values: Array[float]) -> bool: + for value: float in values: + if not is_finite(value) or value < 0.0: + return false + return true diff --git a/items/fishing_rod_data.gd.uid b/items/fishing_rod_data.gd.uid new file mode 100644 index 0000000..324cfd7 --- /dev/null +++ b/items/fishing_rod_data.gd.uid @@ -0,0 +1 @@ +uid://car3ne3q6dhln diff --git a/items/icons/placeholder/cooler_expansion.svg b/items/icons/placeholder/cooler_expansion.svg deleted file mode 100644 index 105bff7..0000000 --- a/items/icons/placeholder/cooler_expansion.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/items/icons/placeholder/cooler_expansion.svg.import b/items/icons/placeholder/cooler_expansion.svg.import deleted file mode 100644 index fbcc85c..0000000 --- a/items/icons/placeholder/cooler_expansion.svg.import +++ /dev/null @@ -1,43 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d115jiqughf40" -path="res://.godot/imported/cooler_expansion.svg-a3d63bc21ba230007f1039372b518c8f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://items/icons/placeholder/cooler_expansion.svg" -dest_files=["res://.godot/imported/cooler_expansion.svg-a3d63bc21ba230007f1039372b518c8f.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 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/items/item_catalog.gd b/items/item_catalog.gd index b4245a0..511604b 100644 --- a/items/item_catalog.gd +++ b/items/item_catalog.gd @@ -28,3 +28,16 @@ func get_valid_items() -> Array[ItemDataType]: seen[item.item_id] = true result.append(item) return result + + +func get_available_item_by_id(item_id: StringName) -> ItemDataType: + var item: ItemDataType = get_item_by_id(item_id) + return item if item != null and item.is_available() else null + + +func get_available_items() -> Array[ItemDataType]: + var result: Array[ItemDataType] = [] + for item: ItemDataType in get_valid_items(): + if item.active: + result.append(item) + return result diff --git a/items/item_data.gd b/items/item_data.gd index a34cec0..72ac0d6 100644 --- a/items/item_data.gd +++ b/items/item_data.gd @@ -15,6 +15,11 @@ enum Category { @export var item_id: StringName @export var display_name: String @export_multiline var description: String +@export_category("Developer Catalog") +## Inactive items remain resolvable for existing saves, but cannot be newly +## acquired, equipped, used, or presented in shops. +@export var active: bool = true +@export_category("Item") @export var category: Category = Category.UTILITY @export var bait_tags: Array[StringName] = [] @export var lure_effects: Array[StringName] = [] @@ -35,6 +40,10 @@ func is_valid() -> bool: ) +func is_available() -> bool: + return active and is_valid() + + func get_category_name() -> String: return Category.keys()[category].to_lower() diff --git a/jobs/player_job_service.gd b/jobs/player_job_service.gd index 18d6f89..7f3be92 100644 --- a/jobs/player_job_service.gd +++ b/jobs/player_job_service.gd @@ -454,7 +454,7 @@ func _generate_host_board(cycle: int) -> void: var candidates: Array[FishDataType] = [] if _catalog != null: for fish: FishDataType in _catalog.candidates: - if fish != null: + if fish != null and fish.is_selectable(): candidates.append(fish) var schedule_anchor_index: int = _current_weather_segment() var allow_weather_jobs: bool = ( @@ -727,7 +727,7 @@ func _matches_canonical_board(board: Dictionary) -> bool: var candidates: Array[FishDataType] = [] if _catalog != null: for fish: FishDataType in _catalog.candidates: - if fish != null: + if fish != null and fish.is_selectable(): candidates.append(fish) var anchor_index: int = int(board.get("schedule_anchor_index", -1)) var allow_weather_jobs: bool = ( diff --git a/main/main.gd b/main/main.gd index e028509..4e1f28b 100644 --- a/main/main.gd +++ b/main/main.gd @@ -24,6 +24,7 @@ const PauseMenuType = preload("res://ui/pause_menu.gd") const ItemCatalogType = preload("res://items/item_catalog.gd") const ArtShopStockType = preload("res://economy/art_shop_stock.gd") const ItemDataType = preload("res://items/item_data.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const FishingShopType = preload("res://ui/fishing_shop.gd") const FishingShopInteractionType = preload( "res://world/fishing_shop_interaction.gd" @@ -1764,15 +1765,20 @@ func _on_active_hotbar_item_changed( var item = item_catalog.get_item_by_id(item_id) var active_is_rod: bool = ( item != null + and item.is_available() and item.category == ItemDataType.Category.ROD and _player.bag.owns_item(item_id) ) var active_is_art_kit: bool = ( item_id == ArtShopStockType.ART_KIT_ITEM_ID and item != null + and item.is_available() and _player.bag.owns_item(item_id) ) - _player.set_active_item_is_rod(active_is_rod, true) + _player.set_active_fishing_rod( + item as FishingRodDataType if active_is_rod else null, + true, + ) _player.set_active_art_kit( item.icon if item != null else null, active_is_art_kit, diff --git a/network/network_fishing_attempt.gd b/network/network_fishing_attempt.gd index 3a1b1de..84511db 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 rod_id: StringName var bait_tags: Array[StringName] = [] var lure_effects: Array[StringName] = [] var encounter_seed: int = 0 diff --git a/network/network_fishing_service.gd b/network/network_fishing_service.gd index 2015681..f7e1623 100644 --- a/network/network_fishing_service.gd +++ b/network/network_fishing_service.gd @@ -5,6 +5,7 @@ const FishCatchType = preload("res://fish/fish_catch.gd") const FishDataType = preload("res://fish/fish_data.gd") const FishPoolType = preload("res://fish/fish_pool.gd") const FishSelectorType = preload("res://fish/fish_selector.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const FishingContextType = preload("res://fishing/fishing_context.gd") const CollectionLogType = preload("res://collection/collection_log.gd") const FishExperienceType = preload("res://fish/fish_experience.gd") @@ -254,10 +255,10 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: if not bool(data["capacity_available"]): _record_and_reject(peer_id, request_id, "Cooler is full.") return - var rod: ItemData = _item_catalog.get_item_by_id( + var rod := _item_catalog.get_item_by_id( StringName(str(data["rod_id"])) - ) - if rod == null or rod.category != ItemData.Category.ROD: + ) as FishingRodDataType + if rod == null or not rod.is_available(): _record_and_reject(peer_id, request_id, "Select a fishing rod to cast.") return var avatar: Player = _spawn_service.get_avatar(peer_id) @@ -312,7 +313,7 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: if _item_use != null else null ) var selected_fish: FishDataType = _select_authoritative_fish( - region, data, effects + region, data, effects, rod ) if selected_fish == null or not selected_fish.is_allowed_in_water( region.water_type @@ -339,6 +340,7 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: not lure_id.is_empty() and ( lure == null + or not lure.is_available() or not lure.is_lure() or ( owns_authoritative_bag @@ -353,6 +355,7 @@ func _handle_cast_request(peer_id: int, data: Dictionary) -> void: return if not bait_id.is_empty() and ( bait == null + or not bait.is_available() or not bait.is_bait() or ( owns_authoritative_bag @@ -374,20 +377,38 @@ 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.rod_id = rod.item_id attempt.bait_tags = _bait_tags_for_request(data) attempt.lure_effects.clear() if lure != null: for effect_id: StringName in lure.lure_effects: attempt.lure_effects.append(effect_id) - attempt.reel_speed = float(data["reel_speed"]) * ( + var effect_reel_multiplier: float = ( effects.get_reel_multiplier() if effects != null else 1.0 ) - attempt.barrier_damage = int(data["barrier_damage"]) + ( + var effect_barrier_bonus: int = ( effects.get_barrier_bonus() if effects != null else 0 ) - attempt.bite_time_remaining = _fishing_spot.roll_bite_wait_time() * float( + var effect_bite_multiplier: float = ( effects.get_bite_time_multiplier() if effects != null else 1.0 ) + attempt.reel_speed = ( + float(data["reel_speed"]) + * effect_reel_multiplier + * rod.reel_speed_multiplier + ) + attempt.barrier_damage = maxi( + roundi( + (float(data["barrier_damage"]) + effect_barrier_bonus) + * rod.barrier_power_multiplier + ), + 1, + ) + attempt.bite_time_remaining = ( + _fishing_spot.roll_bite_wait_time() + * effect_bite_multiplier + * rod.bite_time_multiplier + ) attempt.controller = CatchController.new() add_child(attempt.controller) attempt.controller.encounter_updated.connect( @@ -472,6 +493,7 @@ func _select_authoritative_fish( region: FishableWaterRegion, data: Dictionary, effects: PlayerItemEffects, + rod: FishingRodDataType, ) -> FishDataType: var evidence_log := CollectionLogType.new() for value: Variant in data["discovered_fish_ids"]: @@ -480,6 +502,7 @@ func _select_authoritative_fish( return null evidence_log.mark_discovered(fish_id) var selector := FishSelectorType.new() + selector.active_rod = rod selector.undiscovered_weight_multiplier = ( _fishing_spot.undiscovered_weight_multiplier ) @@ -503,7 +526,11 @@ func _bait_tags_for_request(data: Dictionary) -> Array[StringName]: 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 [] + return ( + bait.bait_tags.duplicate() + if bait != null and bait.is_available() and bait.is_bait() + else [] + ) func _set_bite_pending(attempt: NetworkFishingAttempt) -> void: @@ -527,13 +554,20 @@ func _start_bite(attempt: NetworkFishingAttempt) -> void: if attempt.phase != NetworkFishingAttempt.Phase.WAITING_FOR_BITE: return var fish: FishDataType = _fish_catalog.get_fish_by_id(attempt.fish_id) - if fish == null or fish.catch_profile == null: + var rod := _item_catalog.get_item_by_id(attempt.rod_id) as FishingRodDataType + if ( + fish == null + or fish.catch_profile == null + or rod == null + or not rod.is_available() + ): _cancel_attempt(attempt.owner_peer_id, "Fishing attempt ended.") return attempt.bite_confirmation_pending = false attempt.phase = NetworkFishingAttempt.Phase.FIGHTING attempt.encounter_seed = _new_seed() var selector := FishSelectorType.new() + selector.active_rod = rod selector.use_deterministic_test_seed = true selector.deterministic_test_seed = attempt.encounter_seed ^ 0x5F3759DF selector.begin_roll() diff --git a/network/network_item_use_service.gd b/network/network_item_use_service.gd index f39d198..9b47b41 100644 --- a/network/network_item_use_service.gd +++ b/network/network_item_use_service.gd @@ -1,6 +1,8 @@ class_name NetworkItemUseService extends Node +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") + const ArtShopStockType = preload("res://economy/art_shop_stock.gd") const MAX_LEDGER_ENTRIES: int = 64 @@ -128,6 +130,7 @@ func _handle_use_request(peer_id: int, data: Dictionary) -> void: ) if error.is_empty() and ( item == null + or not item.is_available() or ( item.category != ItemData.Category.CONSUMABLE and not is_fish_finder @@ -294,13 +297,16 @@ func submit_local_equipped(item_id: StringName, owns_item: bool) -> void: return _local_equipped_revision += 1 var item: ItemData = _catalog.get_item_by_id(item_id) + var can_equip: bool = ( + item != null and item.is_available() and owns_item + ) var data := { "session_id": _session.get_session_id(), "owner_peer_id": _session.get_local_peer_id(), - "item_id": str(item_id) if item != null and owns_item else "", - "category": int(item.category) if item != null and owns_item else -1, + "item_id": str(item_id) if can_equip else "", + "category": int(item.category) if can_equip else -1, "revision": _local_equipped_revision, - "owns_item": owns_item and item != null, + "owns_item": can_equip, } if _session.is_host(): _handle_equipped_state(_session.get_local_peer_id(), data) @@ -331,6 +337,7 @@ func _handle_equipped_state(peer_id: int, data: Dictionary) -> void: var item: ItemData = _catalog.get_item_by_id(item_id) if not item_id.is_empty() and ( item == null + or not item.is_available() or not bool(data["owns_item"]) or int(item.category) != int(data["category"]) ): @@ -353,8 +360,17 @@ func _apply_equipped(data: Dictionary) -> void: if avatar != null: var item_id := StringName(str(data["item_id"])) var item: ItemData = _catalog.get_item_by_id(item_id) - avatar.set_active_item_is_rod( - int(data["category"]) == ItemData.Category.ROD, + avatar.set_active_fishing_rod( + ( + item as FishingRodDataType + if ( + item != null + and item.is_available() + and int(data["category"]) == ItemData.Category.ROD + and bool(data["owns_item"]) + ) + else null + ), true, ) avatar.set_active_art_kit( diff --git a/network/network_shop_service.gd b/network/network_shop_service.gd index 4dd0f98..0f26553 100644 --- a/network/network_shop_service.gd +++ b/network/network_shop_service.gd @@ -5,6 +5,7 @@ const FishingShopStockType = preload( "res://economy/fishing_shop_stock.gd" ) const ItemDataType = preload("res://items/item_data.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const OwnedItemType = preload("res://items/owned_item.gd") const ArtShopStockType = preload("res://economy/art_shop_stock.gd") @@ -126,6 +127,15 @@ func request_supply(item_id: StringName) -> String: ) +func request_rod(item_id: StringName) -> String: + return _request_purchase( + item_id, + NetworkShopProtocol.ProductCategory.ROD, + 1, + _bag.get_quantity(item_id) if _bag != null else 0, + ) + + func request_reel_speed_upgrade() -> String: return _request_purchase( REEL_PRODUCT_ID, @@ -340,7 +350,7 @@ func _build_authoritative_result( ) if ( item == null - or not item.is_valid() + or not item.is_available() or product_id not in ( FishingShopStockType.get_stock_item_ids() ) @@ -384,7 +394,29 @@ func _build_authoritative_result( rejection = "Purchase could not be completed." resulting_state = current_state + quantity NetworkShopProtocol.ProductCategory.ROD: - rejection = "This item is not sold here." + var rod := ( + _item_catalog.get_item_by_id(product_id) + as FishingRodDataType + if _item_catalog != null else null + ) + var available_rods: Array[FishingRodDataType] = ( + FishingShopStockType.get_rod_stock(_item_catalog) + ) + if ( + rod == null + or not rod.is_shop_available() + or rod not in available_rods + or quantity != 1 + or current_state != 0 + ): + rejection = ( + "Rod already owned." + if current_state > 0 + else "Purchase could not be completed." + ) + else: + cost = rod.shop_price + resulting_state = 1 NetworkShopProtocol.ProductCategory.REEL_SPEED_UPGRADE: if ( product_id != REEL_PRODUCT_ID @@ -434,7 +466,7 @@ func _build_authoritative_result( if ( product_id != ArtShopStockType.ART_KIT_ITEM_ID or art_item == null - or not art_item.is_valid() + or not art_item.is_available() or art_item.category != ItemDataType.Category.TOOL or art_item.stackable or not art_item.equippable @@ -643,6 +675,7 @@ func _validate_local_result(data: Dictionary) -> String: var bait_unlocked: bool = _bag.is_bait_unlocked(product_id) if ( item == null + or not item.is_available() or _bag.get_quantity(product_id) != expected_state or int(data["quantity"]) != FishingShopStockType.get_purchase_quantity( product_id, expected_state, item.max_stack @@ -655,6 +688,22 @@ func _validate_local_result(data: Dictionary) -> String: return "Purchase could not be completed." if not _bag.can_add_item(product_id, data["quantity"]): return "Your Bag is full." + NetworkShopProtocol.ProductCategory.ROD: + var rod := ( + _item_catalog.get_item_by_id(product_id) + as FishingRodDataType + if _item_catalog != null else null + ) + if ( + rod == null + or not rod.is_shop_available() + or _bag.get_quantity(product_id) != expected_state + or expected_state != 0 + or int(data["quantity"]) != 1 + or cost != rod.shop_price + or not _bag.can_add_item(product_id, 1) + ): + return "Purchase could not be completed." NetworkShopProtocol.ProductCategory.REEL_SPEED_UPGRADE: if _upgrades.get_reel_speed_level() != expected_state: return "Purchase could not be completed." @@ -671,8 +720,14 @@ func _validate_local_result(data: Dictionary) -> String: if _cooler_capacity.get_next_cost() != cost: return "Purchase could not be completed." NetworkShopProtocol.ProductCategory.ART_KIT: + var art_item: ItemDataType = ( + _item_catalog.get_item_by_id(product_id) + if _item_catalog != null else null + ) if ( product_id != ArtShopStockType.ART_KIT_ITEM_ID + or art_item == null + or not art_item.is_available() or _bag.get_quantity(product_id) != expected_state or not _bag.can_add_item(product_id, 1) or cost != ArtShopStockType.ART_KIT_PRICE @@ -702,6 +757,11 @@ func _apply_local_product(data: Dictionary) -> bool: _wallet.debit(data["total_cost"]) and _bag.add_item(product_id, data["quantity"]) ) + NetworkShopProtocol.ProductCategory.ROD: + return ( + _wallet.debit(int(data["total_cost"])) + and _bag.add_item(product_id, 1) + ) NetworkShopProtocol.ProductCategory.REEL_SPEED_UPGRADE: return _upgrades.purchase_reel_speed(_wallet) NetworkShopProtocol.ProductCategory.BARRIER_POWER_UPGRADE: diff --git a/player/fishing_rod_attachment.tscn b/player/fishing_rod_attachment.tscn index 46da419..f284825 100644 --- a/player/fishing_rod_attachment.tscn +++ b/player/fishing_rod_attachment.tscn @@ -14,10 +14,12 @@ bone_name = "rod_socket" [node name="FishingRod" type="Node3D" parent="."] -[node name="RodMesh" type="MeshInstance3D" parent="FishingRod"] +[node name="FallbackRodMesh" type="MeshInstance3D" parent="FishingRod"] position = Vector3(0, 0.5, 0) mesh = SubResource("FishingRodMesh") material_override = SubResource("FishingRodMaterial") +[node name="ModelMount" type="Node3D" parent="FishingRod"] + [node name="FishingRodTip" type="Marker3D" parent="FishingRod"] position = Vector3(0, 1.1, 0) diff --git a/player/player.gd b/player/player.gd index 6284873..66dde01 100644 --- a/player/player.gd +++ b/player/player.gd @@ -31,6 +31,7 @@ const ControllerMappingManagerType = preload( const FishingRodAttachmentScene = preload( "res://player/fishing_rod_attachment.tscn" ) +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const HeldItemAttachmentScene = preload( "res://player/held_item_attachment.tscn" ) @@ -445,6 +446,10 @@ var _fishing_after_release_pending: bool = false var _retract_animation_completed: bool = true var _fishing_rod: Node3D var _fishing_rod_tip: Marker3D +var _fishing_rod_model_mount: Node3D +var _fishing_rod_fallback_visual: GeometryInstance3D +var _custom_fishing_rod_visual: Node3D +var _active_fishing_rod_id: StringName var _active_item_is_rod: bool = false var _controller_mapping_manager: ControllerMappingManagerType var _sprint_dust_landing_ready: bool = false @@ -577,6 +582,12 @@ func _initialize_fishing_rod() -> void: _fishing_rod_tip = attachment.get_node( "FishingRod/FishingRodTip" ) as Marker3D + _fishing_rod_model_mount = attachment.get_node( + "FishingRod/ModelMount" + ) as Node3D + _fishing_rod_fallback_visual = attachment.get_node( + "FishingRod/FallbackRodMesh" + ) as GeometryInstance3D func _initialize_held_item_attachment() -> void: @@ -1902,6 +1913,45 @@ func get_fishing_rod() -> Node3D: return _fishing_rod +func set_active_fishing_rod( + rod: FishingRodDataType, + animate_transition: bool = false, +) -> void: + _apply_fishing_rod_model(rod) + set_active_item_is_rod(rod != null and rod.is_available(), animate_transition) + + +func _apply_fishing_rod_model(rod: FishingRodDataType) -> void: + var next_id: StringName = rod.item_id if rod != null else StringName() + if next_id == _active_fishing_rod_id: + return + _active_fishing_rod_id = next_id + if _custom_fishing_rod_visual != null: + _custom_fishing_rod_visual.hide() + _custom_fishing_rod_visual.queue_free() + _custom_fishing_rod_visual = null + if _fishing_rod_fallback_visual == null or _fishing_rod_tip == null: + return + _fishing_rod_fallback_visual.show() + _fishing_rod_tip.position = Vector3(0.0, 1.1, 0.0) + if rod == null: + return + _fishing_rod_tip.position = rod.rod_tip_position + if rod.rod_model_scene == null or _fishing_rod_model_mount == null: + return + var instance := rod.rod_model_scene.instantiate() as Node3D + if instance == null: + push_warning( + "Rod %s model root is not Node3D; using fallback." + % rod.item_id + ) + return + _custom_fishing_rod_visual = instance + _fishing_rod_model_mount.add_child(instance) + instance.transform = rod.rod_model_transform + _fishing_rod_fallback_visual.hide() + + func set_active_item_is_rod( active_is_rod: bool, animate_transition: bool = false, diff --git a/tests/economy_regression_validation.gd b/tests/economy_regression_validation.gd index 51ba48d..a0257d0 100644 --- a/tests/economy_regression_validation.gd +++ b/tests/economy_regression_validation.gd @@ -48,7 +48,8 @@ func _run() -> void: as PlayerAssetReservationService ) assert(player != null) - assert(catalog != null and catalog.candidates.size() == 53) + assert(catalog != null and catalog.candidates.size() == 313) + assert(LogbookCatalog.ordered_species(catalog.candidates).size() == 53) assert(sale_service != null) assert(shop_service != null) assert(session != null and session.is_host()) @@ -72,6 +73,7 @@ func _run() -> void: assert(session.set_host_open(false)) await _test_host_shop_purchase(main, player, shop_service) + await _test_host_rod_purchase(player, shop_service) await _test_host_art_shop_purchase(main, player, shop_service) await _test_fishing_shop_sale_ui( main, player, catalog, sale_service, reservations @@ -160,6 +162,8 @@ func _run_multiplayer_client() -> void: shop_service.local_purchase_finished.connect(_on_shop_finished) var catch_ids: Array[StringName] = [] for fish: FishData in catalog.candidates: + if not fish.active: + continue var fish_catch := _make_catch(fish) player.inventory.add_catch(fish_catch) catch_ids.append(fish_catch.catch_id) @@ -260,6 +264,8 @@ func _test_each_species( sale_service: NetworkSaleService, ) -> void: for fish: FishData in catalog.candidates: + if not fish.active: + continue assert(fish != null) var fish_catch := _make_catch(fish) player.inventory.add_catch(fish_catch) @@ -372,6 +378,8 @@ func _test_host_shop_sale( var species_ids: Array[StringName] = [] var expected_payout: int = 0 for fish: FishData in catalog.candidates: + if not fish.active: + continue var fish_catch := _make_catch(fish) player.inventory.add_catch(fish_catch) species_ids.append(fish_catch.catch_id) @@ -528,6 +536,18 @@ func _test_host_art_shop_purchase( assert(not shop_service.is_local_purchase_pending()) +func _test_host_rod_purchase( + player: Player, + shop_service: NetworkShopService, +) -> void: + assert(player.bag.remove_item(&"basic_fishing_rod", 1)) + _shop_result.clear() + assert(not shop_service.request_rod(&"basic_fishing_rod").is_empty()) + assert(not _shop_result.is_empty() and bool(_shop_result[1])) + assert(player.bag.owns_item(&"basic_fishing_rod")) + assert(not shop_service.is_local_purchase_pending()) + + func _test_fishing_shop_sale_ui( main: Node, player: Player, @@ -616,6 +636,27 @@ func _test_fishing_shop_sale_ui( assert(art_supplies_tab != null and art_supplies_tab.text == "Art Supplies") var sell_mode := shop_tabs[5] as Button assert(sell_mode != null and sell_mode.text == "Sell Fish") + var equipment_tab := shop_tabs[3] as Button + assert(equipment_tab != null and equipment_tab.text == "Equipment") + await _activate_pointer_control(equipment_tab, ui_viewport) + await process_frame + var equipment_sections: Array[String] = [] + for child: Node in shop.get_node("%SuppliesList").get_children(): + if child is Label: + equipment_sections.append((child as Label).text) + assert(equipment_sections == ["rods", "equipment"]) + var supplies_list := shop.get_node("%SuppliesList") as VBoxContainer + var rod_carousel := supplies_list.get_node("RodCarousel") as HBoxContainer + assert(rod_carousel != null) + var rod_cards := rod_carousel.get_node("RodScroll/RodCards") as HBoxContainer + assert(rod_cards != null and rod_cards.get_child_count() == 1) + var basic_rod_button := rod_cards.find_child( + "Rod_basic_fishing_rod", true, false + ) as Button + assert(basic_rod_button != null) + assert(basic_rod_button.custom_minimum_size == Vector2(144.0, 144.0)) + assert(basic_rod_button.icon != null and basic_rod_button.disabled) + assert(rod_cards.find_child("Rod_aurora_rod", true, false) == null) await _activate_pointer_control(art_supplies_tab, ui_viewport) await process_frame var stock_sections: Array[String] = [] diff --git a/tests/equipment_catalog_validation.gd b/tests/equipment_catalog_validation.gd new file mode 100644 index 0000000..3e562b4 --- /dev/null +++ b/tests/equipment_catalog_validation.gd @@ -0,0 +1,49 @@ +extends SceneTree + +const FishingShopStockType = preload("res://economy/fishing_shop_stock.gd") +const FishingShopType = preload("res://ui/fishing_shop.gd") +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 ItemCatalogResource: ItemCatalogType = preload( + "res://items/catalog/item_catalog.tres" +) + + +func _initialize() -> void: + var shop := FishingShopType.new() + assert(shop.call("_unlock_status", false) == "locked") + assert(shop.call("_unlock_status", true) == "unlocked") + shop.free() + + var magnet: ItemDataType = ItemCatalogResource.get_available_item_by_id( + &"magnet" + ) + assert(magnet != null) + assert(magnet.category == ItemDataType.Category.TOOL) + assert(magnet.icon == null) + assert(not magnet.usable) + assert(not magnet.equippable) + assert(not magnet.hotbar_allowed) + assert(FishingShopStockType.get_price(&"magnet") == 250) + assert(FishingShopStockType.get_stock_item_ids().has(&"magnet")) + assert(FishingShopStockType.is_permanent_unlock(&"magnet", magnet)) + + var wallet := PlayerWalletType.new() + wallet.current_balance = 250 + var bag := PlayerBagType.new() + bag.setup(ItemCatalogResource) + assert(FishingShopStockType.purchase_one( + &"magnet", wallet, bag, ItemCatalogResource + )) + assert(bag.owns_item(&"magnet")) + assert(wallet.get_balance() == 0) + assert(not FishingShopStockType.purchase_one( + &"magnet", wallet, bag, ItemCatalogResource + )) + bag.free() + wallet.free() + print("Equipment catalog validation: PASS") + quit() diff --git a/tests/equipment_catalog_validation.gd.uid b/tests/equipment_catalog_validation.gd.uid new file mode 100644 index 0000000..b26406d --- /dev/null +++ b/tests/equipment_catalog_validation.gd.uid @@ -0,0 +1 @@ +uid://1f2k3yrth7qn diff --git a/tests/fish_catalog_content_validation.gd b/tests/fish_catalog_content_validation.gd index 6746d70..cc393f6 100644 --- a/tests/fish_catalog_content_validation.gd +++ b/tests/fish_catalog_content_validation.gd @@ -89,6 +89,8 @@ func _run() -> void: func _validate_weight_based_display_scale() -> void: var previous_scale: float = 0.0 for fish: FishDataType in Catalog.candidates: + if not fish.active: + continue assert(fish.is_selectable()) assert(fish.weight_min_lb > 0.0) assert(fish.weight_max_lb <= 1000.0) @@ -119,9 +121,48 @@ func _validate_weight_based_display_scale() -> void: func _validate_catalog_and_pools() -> void: - assert(Catalog.candidates.size() == 53) + assert(Catalog.candidates.size() == 313) assert(PondPool.candidates.size() == 19) assert(OceanPool.candidates.size() == 34) + var active_count: int = 0 + var inactive_count: int = 0 + var catalog_numbers: Dictionary[int, bool] = {} + for fish: FishDataType in Catalog.candidates: + assert(fish != null and not fish.id.is_empty()) + assert(fish.catalog_number > 0) + assert(not fish.collection_group.is_empty()) + assert(not catalog_numbers.has(fish.catalog_number)) + catalog_numbers[fish.catalog_number] = true + assert(not fish.logbook_fact.strip_edges().is_empty()) + if fish.active: + active_count += 1 + assert(fish.is_selectable()) + assert(fish.display_texture != null) + else: + inactive_count += 1 + assert(not fish.is_selectable()) + assert(fish.display_texture == null) + assert(active_count == 53) + assert(inactive_count == 260) + var inactive_fish: FishDataType = Catalog.get_fish_by_id(&"bowfin") + assert(inactive_fish != null and not inactive_fish.active) + var inactive_pool := FishPoolType.new() + inactive_pool.candidates = [inactive_fish] + var inactive_context := FishingContextType.new() + inactive_context.water_type = WaterType.Type.FRESH_WATER + var inactive_collection := CollectionLogType.new() + var inactive_selector := FishSelectorType.new() + inactive_selector.use_deterministic_test_seed = true + inactive_selector.begin_roll() + assert( + inactive_selector.select_fish( + inactive_pool, + inactive_context, + inactive_collection, + ) == null + ) + assert(inactive_selector.create_catch(inactive_fish) == null) + inactive_collection.free() for fish_id: StringName in ORIGINAL_IDS: var original_fish: FishDataType = Catalog.get_fish_by_id(fish_id) assert(original_fish != null) @@ -277,21 +318,33 @@ func _validate_authoritative_water_filter() -> void: stale_fresh_pool_region.location_tags = [&"coast", &"ocean"] var evidence := {"discovered_fish_ids": []} assert( - service.call("_select_authoritative_fish", pond_region, evidence, null) - != null - ) - assert( - service.call("_select_authoritative_fish", ocean_region, evidence, null) + service.call( + "_select_authoritative_fish", pond_region, evidence, null, null + ) != null ) assert( service.call( - "_select_authoritative_fish", stale_salt_pool_region, evidence, null + "_select_authoritative_fish", ocean_region, evidence, null, null + ) + != null + ) + assert( + service.call( + "_select_authoritative_fish", + stale_salt_pool_region, + evidence, + null, + null, ) == null ) assert( service.call( - "_select_authoritative_fish", stale_fresh_pool_region, evidence, null + "_select_authoritative_fish", + stale_fresh_pool_region, + evidence, + null, + null, ) == null ) service.free() @@ -347,11 +400,14 @@ func _validate_catches_and_authoritative_sale() -> void: } sale_service.set("_buyers", sale_buyers) - for index: int in Catalog.candidates.size(): - var fish: FishDataType = Catalog.candidates[index] + var catch_sequence: int = 0 + for fish: FishDataType in Catalog.candidates: + if not fish.active: + continue + catch_sequence += 1 var fish_catch: FishCatch = selector.create_catch(fish) assert(fish_catch != null) - fish_catch.catch_sequence = index + 1 + fish_catch.catch_sequence = catch_sequence assert(fish_catch.fish.display_texture == fish.display_texture) var loaded: FishCatch = FishCatchType.from_save_dict( @@ -385,7 +441,7 @@ func _validate_catches_and_authoritative_sale() -> void: var sale_result: Dictionary = sale_service.call( "_build_authoritative_result", 1, - "catalog_sale_%d" % index, + "catalog_sale_%d" % catch_sequence, [loaded.to_network_dict()], PelicanBuyer, ) diff --git a/tests/logbook_runtime_validation.gd b/tests/logbook_runtime_validation.gd index 88227aa..c7fdb26 100644 --- a/tests/logbook_runtime_validation.gd +++ b/tests/logbook_runtime_validation.gd @@ -108,9 +108,11 @@ 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() == 53) + assert(catalog.candidates.size() == 313) + var active_species := LogbookCatalog.ordered_species(catalog.candidates) + assert(active_species.size() == 53) for index: int in 4: - _add_test_catch(player, catalog.candidates[index]) + _add_test_catch(player, active_species[index]) assert(save_manager.save_now()) var no_catches: Array[FishCatch] = [] var no_discoveries: Array[StringName] = [] @@ -119,18 +121,18 @@ func _validate_save_round_trip( assert(save_manager.load_player_data()) assert(player.inventory.get_all_catches().size() == 4) for index: int in 4: - var original_fish: FishData = catalog.candidates[index] + var original_fish: FishData = active_species[index] assert(player.inventory.get_count(original_fish.id) == 1) assert(player.collection_log.has_discovered(original_fish.id)) - for index: int in range(4, catalog.candidates.size()): - _add_test_catch(player, catalog.candidates[index]) + for index: int in range(4, active_species.size()): + _add_test_catch(player, active_species[index]) assert(save_manager.save_now()) 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() == 53) - for fish: FishData in catalog.candidates: + for fish: FishData in active_species: assert(player.inventory.get_count(fish.id) == 1) assert(player.collection_log.has_discovered(fish.id)) for fish_id: StringName in [ diff --git a/tests/logbook_validation.gd b/tests/logbook_validation.gd index 866a34f..bb43d3d 100644 --- a/tests/logbook_validation.gd +++ b/tests/logbook_validation.gd @@ -40,119 +40,27 @@ func _run() -> void: func _validate_catalog() -> void: - var expected_ids: Array[StringName] = [ - &"bluegill", - &"bass", - &"carp", - &"sunfish", - &"catfish_blue", - &"catfish_channel", - &"catfish_flathead", - &"catfish_white", - &"tuna_albacore", - &"tuna_bigeye", - &"tuna_bluefin", - &"tuna_skipjack", - &"tuna_yellowfin", - &"goby_round", - &"salmon_atlantic", - &"salmon_chum", - &"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(CatalogResource.candidates.size() == 313) + var ordered := LogbookCatalog.ordered_species(CatalogResource.candidates) + assert(ordered.size() == 53) + var previous_number: int = 0 + var catalog_numbers: Dictionary[int, bool] = {} + for fish: FishDataType in CatalogResource.candidates: assert(fish != null) - assert(not LogbookCatalog.facts_for(fish.id).is_empty()) + assert(fish.catalog_number > 0) + assert(not catalog_numbers.has(fish.catalog_number)) + catalog_numbers[fish.catalog_number] = true + assert(not LogbookCatalog.facts_for(fish).is_empty()) assert( - LogbookCatalog.facts_for(fish.id) - == LogbookCatalog.facts_for(fish.id).to_lower() + LogbookCatalog.facts_for(fish) + == LogbookCatalog.facts_for(fish).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 [ - &"bass", - &"sunfish", - &"tuna_albacore", - &"tuna_bigeye", - &"tuna_bluefin", - &"tuna_skipjack", - &"tuna_yellowfin", - &"salmon_atlantic", - &"salmon_chum", - &"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 - ) - assert( - LogbookCatalog.category_for(fish) - == expected_category - ) - assert(LogbookCatalog.catalog_number(fish.id) == index + 1) + assert(LogbookCatalog.facts_for(fish) != "unknown") + for fish: FishDataType in ordered: + assert(fish.active) + assert(fish.catalog_number > previous_number) + assert(LogbookCatalog.catalog_number(fish) == fish.catalog_number) + previous_number = fish.catalog_number assert( LogbookCatalog.empty_state(WaterType.Type.SALT_WATER) == "No saltwater catches cataloged yet." @@ -195,7 +103,7 @@ func _validate_page() -> void: if LogbookCatalog.category_for(fish) != category: continue var unknown_key := StringName( - "unknown_%d" % LogbookCatalog.catalog_number(fish.id) + "unknown_%d" % LogbookCatalog.catalog_number(fish) ) var entry := entries.get(unknown_key) as Button assert(entry != null) @@ -251,10 +159,13 @@ func _validate_page() -> void: await create_timer(0.25).timeout var bluegill = CatalogResource.get_fish_by_id(&"bluegill") - page.call("_select_entry", &"unknown_1", StringName()) + var bluegill_unknown := StringName( + "unknown_%d" % bluegill.catalog_number + ) + page.call("_select_entry", bluegill_unknown, StringName()) assert( (page.get("_entry_buttons") as Dictionary) - .get(&"unknown_1") != null + .get(bluegill_unknown) != null ) collection.mark_discovered(&"bluegill") await process_frame @@ -290,9 +201,13 @@ func _validate_page() -> void: assert(_detail_text(page).contains("number owned\n1")) assert(_detail_text(page).contains("number caught\nunknown")) assert(_detail_text(page).contains("body of water\nfresh water")) - assert(_detail_text(page).contains("catalog number\n#001")) + assert( + _detail_text(page).contains( + "catalog number\n#%03d" % bluegill.catalog_number + ) + ) assert(_detail_text(page).contains("fish facts\n")) - assert(_detail_text(page).contains(LogbookCatalog.facts_for(&"bluegill"))) + assert(_detail_text(page).contains(LogbookCatalog.facts_for(bluegill))) _validate_detail_field_fonts(page) _validate_handwritten_numeric_scale(page) var portrait_button := page.get("_detail_portrait_button") as Button @@ -413,7 +328,7 @@ func _validate_handwritten_numeric_scale(page: LogbookPage) -> void: var label := node as Label if label.text == "common": text_value = label - elif label.text == "#001": + elif label.text.begins_with("#"): numeric_value = label assert(text_value != null) assert(numeric_value != null) diff --git a/tests/rod_catalog_validation.gd b/tests/rod_catalog_validation.gd new file mode 100644 index 0000000..3b43b3f --- /dev/null +++ b/tests/rod_catalog_validation.gd @@ -0,0 +1,109 @@ +extends SceneTree + +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") +const FishingShopStockType = preload("res://economy/fishing_shop_stock.gd") +const ItemCatalogType = preload("res://items/item_catalog.gd") +const ItemDataType = preload("res://items/item_data.gd") +const OwnedItemType = preload("res://items/owned_item.gd") +const PlayerBagType = preload("res://inventory/player_bag.gd") +const PlayerWalletType = preload("res://economy/player_wallet.gd") + +const ItemCatalogResource: ItemCatalogType = preload( + "res://items/catalog/item_catalog.tres" +) +const RodAttachmentScene = preload( + "res://player/fishing_rod_attachment.tscn" +) + + +func _initialize() -> void: + call_deferred("_run") + + +func _run() -> void: + _validate_catalog_activation() + _validate_shop_stock() + _validate_inactive_save_compatibility() + _validate_fallback_attachment() + print("Rod catalog validation: PASS") + quit() + + +func _validate_catalog_activation() -> void: + var rods: Array[FishingRodDataType] = [] + for item: ItemDataType in ItemCatalogResource.get_valid_items(): + var rod := item as FishingRodDataType + if rod == null: + continue + rods.append(rod) + assert(rod.is_valid()) + if rod.icon == null: + assert(not rod.active) + assert(rods.size() == 21) + var available_rods: Array[FishingRodDataType] = [] + for rod: FishingRodDataType in rods: + if rod.is_available(): + available_rods.append(rod) + assert(available_rods.size() == 1) + var basic: FishingRodDataType = available_rods.front() + assert(basic.item_id == &"basic_fishing_rod") + assert(basic.icon != null) + assert(basic.rod_model_scene == null) + assert( + ItemCatalogResource.get_available_item_by_id(&"aurora_rod") == null + ) + assert(ItemCatalogResource.get_item_by_id(&"aurora_rod") != null) + + +func _validate_shop_stock() -> void: + var stock: Array[FishingRodDataType] = ( + FishingShopStockType.get_rod_stock(ItemCatalogResource) + ) + assert(stock.size() == 1) + assert(stock.front().item_id == &"basic_fishing_rod") + var wallet := PlayerWalletType.new() + wallet.current_balance = 100 + var bag := PlayerBagType.new() + bag.setup(ItemCatalogResource) + assert( + FishingShopStockType.purchase_one( + &"basic_fishing_rod", + wallet, + bag, + ItemCatalogResource, + ) + ) + assert(bag.owns_item(&"basic_fishing_rod")) + assert(wallet.get_balance() == 100) + assert( + not FishingShopStockType.purchase_one( + &"aurora_rod", + wallet, + bag, + ItemCatalogResource, + ) + ) + bag.free() + wallet.free() + + +func _validate_inactive_save_compatibility() -> void: + var bag := PlayerBagType.new() + bag.setup(ItemCatalogResource) + assert(not bag.can_add_item(&"aurora_rod", 1)) + assert(not bag.add_item(&"aurora_rod", 1)) + var legacy_record := OwnedItemType.new() + legacy_record.item_id = &"aurora_rod" + legacy_record.quantity = 1 + var legacy_items: Array[OwnedItemType] = [legacy_record] + assert(bag.replace_all_items(legacy_items)) + assert(bag.owns_item(&"aurora_rod")) + bag.free() + + +func _validate_fallback_attachment() -> void: + var attachment := RodAttachmentScene.instantiate() + assert(attachment.get_node_or_null("FishingRod/FallbackRodMesh") != null) + assert(attachment.get_node_or_null("FishingRod/ModelMount") != null) + assert(attachment.get_node_or_null("FishingRod/FishingRodTip") != null) + attachment.free() diff --git a/tests/rod_catalog_validation.gd.uid b/tests/rod_catalog_validation.gd.uid new file mode 100644 index 0000000..ae0537e --- /dev/null +++ b/tests/rod_catalog_validation.gd.uid @@ -0,0 +1 @@ +uid://bjbgbahx5iuyy diff --git a/ui/components/bubble_hotbar/bubble_hotbar_slot.gd b/ui/components/bubble_hotbar/bubble_hotbar_slot.gd index 4bebdfe..6c9764a 100644 --- a/ui/components/bubble_hotbar/bubble_hotbar_slot.gd +++ b/ui/components/bubble_hotbar/bubble_hotbar_slot.gd @@ -377,7 +377,7 @@ func _can_drop_data(_at_position: Vector2, data: Variant) -> bool: if _bag == null or not _bag.owns_item(item_id) or _catalog == null: return false var item: ItemDataType = _catalog.get_item_by_id(item_id) - return item != null and item.is_valid() and item.hotbar_allowed + return item != null and item.is_available() and item.hotbar_allowed if kind == "cooler_fish": var catch_id: StringName = StringName(str(payload.get("catch_id", ""))) return ( diff --git a/ui/fishing_shop.gd b/ui/fishing_shop.gd index d8678b7..ff1a44e 100644 --- a/ui/fishing_shop.gd +++ b/ui/fishing_shop.gd @@ -8,6 +8,7 @@ const PlayerWalletType = preload("res://economy/player_wallet.gd") const FishingShopStockType = preload("res://economy/fishing_shop_stock.gd") const ItemCatalogType = preload("res://items/item_catalog.gd") const ItemDataType = preload("res://items/item_data.gd") +const FishingRodDataType = preload("res://items/fishing_rod_data.gd") const PlayerBagType = preload("res://inventory/player_bag.gd") const FishingSpotType = preload("res://fishing/fishing_spot.gd") const PlayerFishingUpgradesType = preload( @@ -82,6 +83,15 @@ const SUPPLY_PRICE_HEIGHT: float = 24.0 const SUPPLY_PRICE_HORIZONTAL_PADDING: float = 12.0 const SUPPLY_PRICE_ICON_SIZE: float = 18.0 const SUPPLY_PRICE_ICON_GAP: float = 3.0 +const ROD_CARD_TILE_SIZE := Vector2(144.0, 144.0) +const ROD_CARD_HOST_SIZE := Vector2(152.0, 198.0) +const ROD_CAROUSEL_HEIGHT: float = 206.0 +const ROD_CAROUSEL_SEPARATION: int = 12 +const ROD_CAROUSEL_STEP: float = 328.0 +const ROD_PRICE_Y: float = 128.0 +const ROD_PRICE_HEIGHT: float = 30.0 +const ROD_PRICE_FONT_SIZE: int = 18 +const ROD_PRICE_ICON_SIZE: float = 22.0 @onready var _wallet_label: Label = %WalletLabel @onready var _shop_panel: PanelContainer = %ShopPanel @@ -650,7 +660,12 @@ func _refresh_supplies() -> void: stock_item_ids = grouped_item_ids var current_stock_group: StringName = StringName() var current_stock_grid: GridContainer - if _shop_section in [ShopSection.SNACKS, ShopSection.EQUIPMENT]: + if _shop_section == ShopSection.SNACKS: + current_stock_grid = _add_stock_icon_grid() + elif _shop_section == ShopSection.EQUIPMENT: + _add_stock_section("rods") + _add_rod_carousel() + _add_stock_section("equipment") current_stock_grid = _add_stock_icon_grid() for item_id: StringName in stock_item_ids: var item: ItemDataType = _item_catalog.get_item_by_id(item_id) @@ -671,6 +686,10 @@ func _refresh_supplies() -> void: button.alignment = HORIZONTAL_ALIGNMENT_LEFT var owned: int = _bag.get_quantity(item_id) var bait_topoff: bool = FishingShopStockType.is_bait_topoff(item_id) + var permanent_unlock: bool = ( + FishingShopStockType.is_permanent_unlock(item_id, item) + ) + var unlock_status: String = _unlock_status(owned > 0) var bait_unlocked: bool = ( not bait_topoff or _bag.is_bait_unlocked(item_id) ) @@ -683,10 +702,11 @@ func _refresh_supplies() -> void: var use_icon_tile: bool = ( current_stock_grid != null ) - button.text = "%s\nowned %d" % [ - item.display_name, - owned, - ] + button.text = ( + "%s\n%s" % [item.display_name, unlock_status] + if permanent_unlock + else "%s\nowned %d" % [item.display_name, owned] + ) var item_tooltip_text: String = item.description if bait_topoff: if use_icon_tile: @@ -724,11 +744,19 @@ func _refresh_supplies() -> void: button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN button.alignment = HORIZONTAL_ALIGNMENT_CENTER button.text = "" - item_tooltip_text = "%s\nowned %d\n%s" % [ - item.display_name, - owned, - item.description, - ] + item_tooltip_text = ( + "%s\n%s\n%s" % [ + item.display_name, + unlock_status, + item.description, + ] + if permanent_unlock + else "%s\nowned %d\n%s" % [ + item.display_name, + owned, + item.description, + ] + ) button.disabled = ( _transaction_in_progress or _closing @@ -777,6 +805,8 @@ func _refresh_supplies() -> void: func _item_belongs_in_current_section(item: ItemDataType) -> bool: + if not item.is_available(): + return false match _shop_section: ShopSection.BAIT: return item.is_bait() or item.is_lure() @@ -787,6 +817,10 @@ func _item_belongs_in_current_section(item: ItemDataType) -> bool: return false +func _unlock_status(unlocked: bool) -> String: + return "unlocked" if unlocked else "locked" + + func _add_stock_section(title: String) -> void: var label := Label.new() label.text = title @@ -811,21 +845,156 @@ func _add_stock_icon_grid() -> GridContainer: return grid +func _add_rod_carousel() -> void: + var shell := HBoxContainer.new() + shell.name = "RodCarousel" + shell.custom_minimum_size.y = ROD_CAROUSEL_HEIGHT + shell.size_flags_horizontal = Control.SIZE_EXPAND_FILL + shell.alignment = BoxContainer.ALIGNMENT_CENTER + shell.add_theme_constant_override("separation", 8) + _supplies_list.add_child(shell) + var previous := Button.new() + previous.name = "PreviousRod" + previous.text = "‹" + previous.tooltip_text = "Previous rods" + previous.custom_minimum_size = Vector2(42.0, 72.0) + previous.focus_mode = Control.FOCUS_ALL + UtilityPageStyleType.apply_ocean_button(previous) + shell.add_child(previous) + var scroll := ScrollContainer.new() + scroll.name = "RodScroll" + scroll.custom_minimum_size.y = ROD_CAROUSEL_HEIGHT + scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL + scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_AUTO + scroll.vertical_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED + scroll.follow_focus = true + shell.add_child(scroll) + var row := HBoxContainer.new() + row.name = "RodCards" + row.size_flags_horizontal = Control.SIZE_EXPAND_FILL + row.add_theme_constant_override( + "separation", ROD_CAROUSEL_SEPARATION + ) + scroll.add_child(row) + var rods: Array[FishingRodDataType] = ( + FishingShopStockType.get_rod_stock(_item_catalog) + ) + for rod: FishingRodDataType in rods: + _add_rod_card(row, rod) + var next := Button.new() + next.name = "NextRod" + next.text = "›" + next.tooltip_text = "Next rods" + next.custom_minimum_size = Vector2(42.0, 72.0) + next.focus_mode = Control.FOCUS_ALL + UtilityPageStyleType.apply_ocean_button(next) + shell.add_child(next) + previous.disabled = rods.size() <= 1 + next.disabled = rods.size() <= 1 + previous.pressed.connect( + _scroll_rod_carousel.bind(scroll, -ROD_CAROUSEL_STEP) + ) + next.pressed.connect( + _scroll_rod_carousel.bind(scroll, ROD_CAROUSEL_STEP) + ) + + +func _add_rod_card(parent: HBoxContainer, rod: FishingRodDataType) -> void: + var owned: bool = _bag.owns_item(rod.item_id) + var level: int = _player.experience.get_level() + var level_locked: bool = level < rod.unlock_level + var tooltip := "%s\n%s" % [rod.display_name, rod.description] + if not rod.effect_summary.strip_edges().is_empty(): + tooltip += "\n%s" % rod.effect_summary + if not rod.tradeoff.strip_edges().is_empty(): + tooltip += "\ntradeoff: %s" % rod.tradeoff + tooltip += "\nlevel %d" % rod.unlock_level + tooltip += "\n%s" % _unlock_status(owned) + var button := _make_stock_button("", tooltip) + button.name = "Rod_%s" % str(rod.item_id) + button.custom_minimum_size = ROD_CARD_TILE_SIZE + button.size = ROD_CARD_TILE_SIZE + button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN + button.icon = rod.icon + button.expand_icon = true + button.alignment = HORIZONTAL_ALIGNMENT_CENTER + button.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST + button.disabled = ( + owned + or level_locked + or _transaction_in_progress + or _closing + or _network_shop == null + or not _network_shop.can_request_purchase() + or not _wallet.can_afford(rod.shop_price) + or not _bag.can_add_item(rod.item_id, 1) + ) + button.pressed.connect(_purchase_rod.bind(rod.item_id)) + var host: Control = _add_supply_icon_tile( + parent, + button, + rod.shop_price, + ROD_CARD_TILE_SIZE, + ROD_CARD_HOST_SIZE, + ROD_PRICE_Y, + ROD_PRICE_HEIGHT, + ROD_PRICE_FONT_SIZE, + ROD_PRICE_ICON_SIZE, + ) + var name_label := Label.new() + name_label.name = "RodName" + name_label.position = Vector2(0.0, 162.0) + name_label.size = Vector2(ROD_CARD_HOST_SIZE.x, 30.0) + name_label.mouse_filter = Control.MOUSE_FILTER_IGNORE + name_label.text = rod.display_name + name_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + name_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + name_label.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS + name_label.add_theme_font_override("font", UtilityPageStyleType.TuffyFont) + name_label.add_theme_font_size_override("font_size", 17) + name_label.add_theme_color_override( + "font_color", UtilityPageStyleType.OCEAN_TEXT_PRIMARY + ) + host.add_child(name_label) + + +func _scroll_rod_carousel(scroll: ScrollContainer, amount: float) -> void: + var target: float = clampf( + float(scroll.scroll_horizontal) + amount, + 0.0, + maxf( + scroll.get_h_scroll_bar().max_value + - scroll.get_h_scroll_bar().page, + 0.0, + ), + ) + var tween := create_tween() + tween.set_trans(Tween.TRANS_QUAD) + tween.set_ease(Tween.EASE_OUT) + tween.tween_method( + func(value: float) -> void: + scroll.scroll_horizontal = roundi(value), + float(scroll.scroll_horizontal), + target, + 0.15, + ) + + func _add_art_kit_button(parent: GridContainer) -> void: var item: ItemDataType = _item_catalog.get_item_by_id( ArtShopStockType.ART_KIT_ITEM_ID ) - if item == null: + if item == null or not item.is_available(): return var owned: bool = _bag.get_quantity(ArtShopStockType.ART_KIT_ITEM_ID) > 0 var button: Button = _make_stock_button( "%s\n%s" % [ item.display_name, - "owned" if owned else "not owned", + _unlock_status(owned), ], "%s\n%s\n%s" % [ item.display_name, - "owned" if owned else "not owned", + _unlock_status(owned), item.description, ], ) @@ -942,29 +1111,35 @@ func _configure_marker_icon_tile( func _add_supply_icon_tile( - parent: GridContainer, + parent: Container, button: Button, price: int, -) -> void: + tile_size: Vector2 = SUPPLY_ICON_TILE_SIZE, + host_size: Vector2 = SUPPLY_ICON_HOST_SIZE, + price_y: float = SUPPLY_PRICE_Y, + price_height: float = SUPPLY_PRICE_HEIGHT, + price_font_size: int = SUPPLY_PRICE_FONT_SIZE, + price_icon_size: float = SUPPLY_PRICE_ICON_SIZE, +) -> Control: var tile_host := Control.new() - tile_host.custom_minimum_size = SUPPLY_ICON_HOST_SIZE + tile_host.custom_minimum_size = host_size tile_host.mouse_filter = Control.MOUSE_FILTER_IGNORE parent.add_child(tile_host) button.position = Vector2.ZERO - button.size = SUPPLY_ICON_TILE_SIZE + button.size = tile_size tile_host.add_child(button) var price_text := str(price) var price_text_width: float = UtilityPageStyleType.TuffyFont.get_string_size( price_text, HORIZONTAL_ALIGNMENT_LEFT, -1.0, - SUPPLY_PRICE_FONT_SIZE, + price_font_size, ).x var price_width: float = minf( - SUPPLY_ICON_TILE_SIZE.x, + tile_size.x, ceilf( price_text_width - + SUPPLY_PRICE_ICON_SIZE + + price_icon_size + SUPPLY_PRICE_ICON_GAP + SUPPLY_PRICE_HORIZONTAL_PADDING ), @@ -972,10 +1147,10 @@ func _add_supply_icon_tile( var price_bubble := PanelContainer.new() price_bubble.name = "PriceBubble" price_bubble.position = Vector2( - (SUPPLY_ICON_TILE_SIZE.x - price_width) * 0.5, - SUPPLY_PRICE_Y, + (tile_size.x - price_width) * 0.5, + price_y, ) - price_bubble.size = Vector2(price_width, SUPPLY_PRICE_HEIGHT) + price_bubble.size = Vector2(price_width, price_height) price_bubble.mouse_filter = Control.MOUSE_FILTER_IGNORE price_bubble.z_index = 2 var price_style := UtilityPageStyleType.rounded_style( @@ -998,7 +1173,7 @@ func _add_supply_icon_tile( price_bubble.add_child(price_row) var price_icon := TextureRect.new() price_icon.name = "CurrencyIcon" - price_icon.custom_minimum_size = Vector2.ONE * SUPPLY_PRICE_ICON_SIZE + price_icon.custom_minimum_size = Vector2.ONE * price_icon_size price_icon.mouse_filter = Control.MOUSE_FILTER_IGNORE price_icon.texture = CURRENCY_ICON price_icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE @@ -1015,13 +1190,14 @@ func _add_supply_icon_tile( "font", UtilityPageStyleType.TuffyFont ) price_label.add_theme_font_size_override( - "font_size", SUPPLY_PRICE_FONT_SIZE + "font_size", price_font_size ) price_label.add_theme_color_override( "font_color", SUPPLY_PRICE_COLOR ) price_label.add_theme_constant_override("outline_size", 0) price_row.add_child(price_label) + return tile_host func _refresh_cooler_capacity() -> void: @@ -1073,7 +1249,7 @@ func _purchase_supply(item_id: StringName) -> void: return var owned: int = _bag.get_quantity(item_id) var item: ItemDataType = _item_catalog.get_item_by_id(item_id) - if item == null: + if item == null or not item.is_available(): _set_feedback("Purchase could not be completed.") return var quantity: int = FishingShopStockType.get_purchase_quantity( @@ -1094,6 +1270,23 @@ func _purchase_supply(item_id: StringName) -> void: _network_shop.request_supply(item_id) +func _purchase_rod(item_id: StringName) -> void: + if _network_shop == null or not _is_transaction_context_valid(): + _set_feedback("Purchase could not be completed.") + return + var rod := _item_catalog.get_item_by_id(item_id) as FishingRodDataType + if ( + rod == null + or not rod.is_shop_available() + or _bag.owns_item(item_id) + or not _wallet.can_afford(rod.shop_price) + or not _bag.can_add_item(item_id, 1) + ): + _set_feedback("Purchase could not be completed.") + return + _network_shop.request_rod(item_id) + + func _purchase_art_kit() -> void: if _network_shop == null or not _is_transaction_context_valid(): _set_feedback("Purchase could not be completed.") diff --git a/ui/logbook_catalog.gd b/ui/logbook_catalog.gd index 1ba1a1e..9bff3cc 100644 --- a/ui/logbook_catalog.gd +++ b/ui/logbook_catalog.gd @@ -3,281 +3,6 @@ extends RefCounted const FishDataType = preload("res://fish/fish_data.gd") -# Catalog numbers are a presentation contract. Add future species deliberately; -# filtering and display order must not redefine an existing number. -const CATALOG_ORDER: Array[StringName] = [ - &"bluegill", - &"bass", - &"carp", - &"sunfish", - &"catfish_blue", - &"catfish_channel", - &"catfish_flathead", - &"catfish_white", - &"tuna_albacore", - &"tuna_bigeye", - &"tuna_bluefin", - &"tuna_skipjack", - &"tuna_yellowfin", - &"goby_round", - &"salmon_atlantic", - &"salmon_chum", - &"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 -# than mixed into gameplay balance resources. Add facts deliberately when a -# species joins the catalog. -const FISH_FACTS: Dictionary[StringName, String] = { - &"bluegill": ( - "bluegill fathers sweep shallow bowls into the bottom for nests, " - + "then stand guard. whole neighborhoods of nests can crowd together." - ), - &"bass": ( - "striped bass split their lives between salt and fresh water, " - + "returning upriver to spawn. a long-lived striper may see three decades." - ), - &"carp": ( - "whisker-like barbels help a common carp investigate the bottom. " - + "nosing through sediment can cloud the water and loosen plants." - ), - &"sunfish": ( - "ocean sunfish are built more like enormous swimming heads than " - + "ordinary fish. they visit the surface and turn sideways to warm up." - ), - &"catfish_blue": ( - "a deep fork in the tail inspired the blue catfish's scientific " - + "name. it rests deep by daylight and becomes more active after dark." - ), - &"catfish_channel": ( - "a channel catfish can taste through skin all over its body, " - + "especially near its gills and whiskers. the male watches the eggs." - ), - &"catfish_flathead": ( - "flatheads favor hideouts made by logs, rocks, ledges, and other " - + "underwater structure. as they grow, fish dominate their menu." - ), - &"catfish_white": ( - "white catfish began along the atlantic coast between new york " - + "and florida. people later carried them far beyond that home range." - ), - &"tuna_albacore": ( - "albacore have unusually long pectoral fins. their warm muscles help " - + "them cruise across wide stretches of open ocean." - ), - &"tuna_bigeye": ( - "bigeye tuna make daily trips between deep, cool water and warmer " - + "surface layers. their large eyes suit those dim depths." - ), - &"tuna_bluefin": ( - "bluefin tuna are powerful ocean travelers. heat retained in their " - + "swimming muscles lets them thrive in surprisingly cold seas." - ), - &"tuna_skipjack": ( - "skipjack travel in fast-moving schools and have dark stripes along " - + "their lower sides. they rarely stop swimming." - ), - &"tuna_yellowfin": ( - "yellowfin are named for their bright yellow fins and finlets. large " - + "schools often gather with other open-ocean hunters." - ), - &"goby_round": ( - "round gobies use fused pelvic fins like a suction cup to hold onto " - + "rocks. they are small fish with a famously large appetite." - ), - &"salmon_atlantic": ( - "atlantic salmon can return from the ocean to the river where they " - + "hatched. unlike many salmon, some survive to make the trip again." - ), - &"salmon_chum": ( - "chum salmon travel immense distances and develop striking bars when " - + "they return to fresh water to spawn." - ), - &"salmon_coho": ( - "coho salmon are agile hunters known for powerful leaps. young coho " - + "may spend more than a year growing in streams." - ), - &"salmon_pink": ( - "pink salmon usually follow a strict two-year life cycle. spawning " - + "males develop the hump that inspired their nickname." - ), - &"salmon_sockeye": ( - "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: if fish == null: @@ -299,24 +24,27 @@ static func empty_state(category: WaterType.Type) -> String: return "No entries available." -static func catalog_number(fish_id: StringName) -> int: - var index: int = CATALOG_ORDER.find(fish_id) - return index + 1 if index >= 0 else 0 +static func catalog_number(fish: FishDataType) -> int: + return fish.catalog_number if fish != null else 0 -static func facts_for(fish_id: StringName) -> String: - return str(FISH_FACTS.get(fish_id, "unknown")) +static func facts_for(fish: FishDataType) -> String: + if fish == null or fish.logbook_fact.strip_edges().is_empty(): + return "unknown" + return fish.logbook_fact static func ordered_species( candidates: Array[FishDataType], ) -> Array[FishDataType]: - var by_id: Dictionary[StringName, FishDataType] = {} - for fish: FishDataType in candidates: - if fish != null and not fish.id.is_empty(): - by_id[fish.id] = fish var ordered: Array[FishDataType] = [] - for fish_id: StringName in CATALOG_ORDER: - if by_id.has(fish_id): - ordered.append(by_id[fish_id]) + for fish: FishDataType in candidates: + if fish != null and fish.active and not fish.id.is_empty(): + ordered.append(fish) + ordered.sort_custom( + func(a: FishDataType, b: FishDataType) -> bool: + if a.catalog_number == b.catalog_number: + return String(a.id) < String(b.id) + return a.catalog_number < b.catalog_number + ) return ordered diff --git a/ui/logbook_page.gd b/ui/logbook_page.gd index ee63797..c579084 100644 --- a/ui/logbook_page.gd +++ b/ui/logbook_page.gd @@ -654,7 +654,7 @@ func _refresh_details(animate: bool) -> void: func _build_known_details(fish: FishDataType) -> void: _clear_details() - var catalog_number: int = LogbookCatalog.catalog_number(fish.id) + var catalog_number: int = LogbookCatalog.catalog_number(fish) var summary_margin := MarginContainer.new() summary_margin.size_flags_horizontal = Control.SIZE_EXPAND_FILL _set_margins(summary_margin, 40, 0, 40, 0) @@ -719,7 +719,7 @@ func _build_known_details(fish: FishDataType) -> void: summary_columns.add_child(facts_column) var facts_heading := _field_label("fish facts", 16) facts_column.add_child(facts_heading) - var facts := _label(LogbookCatalog.facts_for(fish.id), 16) + var facts := _label(LogbookCatalog.facts_for(fish), 16) facts.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART facts.size_flags_horizontal = Control.SIZE_EXPAND_FILL facts_column.add_child(facts) @@ -999,7 +999,7 @@ func _on_inventory_changed() -> void: func _unknown_selection_key(fish: FishDataType) -> StringName: - var number: int = LogbookCatalog.catalog_number(fish.id) + var number: int = LogbookCatalog.catalog_number(fish) return StringName("unknown_%d" % number) diff --git a/ui/player_menu.gd b/ui/player_menu.gd index 7f73acd..6c5d2f2 100644 --- a/ui/player_menu.gd +++ b/ui/player_menu.gd @@ -4334,7 +4334,7 @@ func _refresh_logbook() -> void: var valid_species: Array[FishDataType] = [] if _catalog != null: for fish: FishDataType in _catalog.candidates: - if fish != null and not fish.id.is_empty(): + if fish != null and fish.active and not fish.id.is_empty(): valid_species.append(fish) _logbook_species = valid_species _logbook_empty.visible = valid_species.is_empty()