Expand fish and equipment catalogs
This commit is contained in:
parent
63e50e285d
commit
f55663c105
380 changed files with 9430 additions and 575 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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")]
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
16
items/catalog/magnet.tres
Normal file
16
items/catalog/magnet.tres
Normal file
|
|
@ -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
|
||||
25
items/catalog/rods/aurora_rod.tres
Normal file
25
items/catalog/rods/aurora_rod.tres
Normal file
|
|
@ -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."
|
||||
26
items/catalog/rods/cardboard_classic_rod.tres
Normal file
26
items/catalog/rods/cardboard_classic_rod.tres
Normal file
|
|
@ -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."
|
||||
27
items/catalog/rods/deep_blue_rod.tres
Normal file
27
items/catalog/rods/deep_blue_rod.tres
Normal file
|
|
@ -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."
|
||||
23
items/catalog/rods/field_guide_rod.tres
Normal file
23
items/catalog/rods/field_guide_rod.tres
Normal file
|
|
@ -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."
|
||||
23
items/catalog/rods/fogcatcher_rod.tres
Normal file
23
items/catalog/rods/fogcatcher_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/heavy_hauler_rod.tres
Normal file
25
items/catalog/rods/heavy_hauler_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/lake_lunker_rod.tres
Normal file
25
items/catalog/rods/lake_lunker_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/lucky_twig_rod.tres
Normal file
25
items/catalog/rods/lucky_twig_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/moonbeam_rod.tres
Normal file
25
items/catalog/rods/moonbeam_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/oddity_string_rod.tres
Normal file
25
items/catalog/rods/oddity_string_rod.tres
Normal file
|
|
@ -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."
|
||||
25
items/catalog/rods/pocket_rocket_rod.tres
Normal file
25
items/catalog/rods/pocket_rocket_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/pond_skipper_rod.tres
Normal file
24
items/catalog/rods/pond_skipper_rod.tres
Normal file
|
|
@ -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."
|
||||
23
items/catalog/rods/rainmaker_rod.tres
Normal file
23
items/catalog/rods/rainmaker_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/reef_raker_rod.tres
Normal file
24
items/catalog/rods/reef_raker_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/river_runner_rod.tres
Normal file
24
items/catalog/rods/river_runner_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/salt_spray_rod.tres
Normal file
24
items/catalog/rods/salt_spray_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/showboat_rod.tres
Normal file
24
items/catalog/rods/showboat_rod.tres
Normal file
|
|
@ -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."
|
||||
23
items/catalog/rods/small_fry_rod.tres
Normal file
23
items/catalog/rods/small_fry_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/sun_chaser_rod.tres
Normal file
24
items/catalog/rods/sun_chaser_rod.tres
Normal file
|
|
@ -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."
|
||||
24
items/catalog/rods/whisker_stick_rod.tres
Normal file
24
items/catalog/rods/whisker_stick_rod.tres
Normal file
|
|
@ -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."
|
||||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
151
items/fishing_rod_data.gd
Normal file
151
items/fishing_rod_data.gd
Normal file
|
|
@ -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
|
||||
1
items/fishing_rod_data.gd.uid
Normal file
1
items/fishing_rod_data.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://car3ne3q6dhln
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<path d="M9 22h46v32H9z" fill="#72c7e8" stroke="#17243a" stroke-width="5"/>
|
||||
<path d="M7 13h50v12H7z" fill="#fff3d4" stroke="#17243a" stroke-width="5"/>
|
||||
<path d="M32 31v16M24 39h16" stroke="#ef6b88" stroke-width="6" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 314 B |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue