From bb75121dcdc7e1801adb06103a40be5497b07a2d Mon Sep 17 00:00:00 2001 From: Voyager Date: Mon, 24 Aug 2026 11:13:49 -0400 Subject: [PATCH] Activate full fish catalog --- art/exported/creatures/fish_placeholder.png | Bin 0 -> 1964 bytes .../creatures/fish_placeholder.png.import | 40 +++ fish/pools/generated_lake_pool.tres | 30 ++- fish/pools/generated_pond_pool.tres | 42 +++- fish/pools/generated_river_pool.tres | 66 ++++- fish/pools/starter_ocean_pool.tres | 234 +++++++++++++++--- fish/pools/starter_pond_pool.tres | 136 +++++++--- fish/species/abalone_red/abalone_red.tres | 6 +- .../amberjack_greater/amberjack_greater.tres | 6 +- .../amberjack_lesser/amberjack_lesser.tres | 6 +- .../anchovy_european/anchovy_european.tres | 2 +- .../anchovy_northern/anchovy_northern.tres | 2 +- .../angelfish_freshwater.tres | 6 +- .../angelfish_queen/angelfish_queen.tres | 6 +- .../anglerfish_black_seadevil.tres | 6 +- fish/species/arapaima/arapaima.tres | 6 +- .../arowana_silver/arowana_silver.tres | 6 +- fish/species/axolotl/axolotl.tres | 6 +- fish/species/barbel_common/barbel_common.tres | 6 +- .../barracuda_great/barracuda_great.tres | 6 +- fish/species/barramundi/barramundi.tres | 6 +- .../barreleye_pacific/barreleye_pacific.tres | 6 +- fish/species/bass/bass.tres | 2 +- fish/species/betta_siamese/betta_siamese.tres | 6 +- fish/species/black_drum/black_drum.tres | 6 +- .../blobfish_smooth_head.tres | 6 +- fish/species/bluefish/bluefish.tres | 6 +- fish/species/bluegill/bluegill.tres | 2 +- fish/species/bonefish/bonefish.tres | 6 +- fish/species/bowfin/bowfin.tres | 2 +- .../boxfish_yellow/boxfish_yellow.tres | 6 +- fish/species/bream_common/bream_common.tres | 6 +- .../buffalo_bigmouth/buffalo_bigmouth.tres | 6 +- .../buffalo_smallmouth.tres | 6 +- .../bullhead_black/bullhead_black.tres | 6 +- .../bullhead_brown/bullhead_brown.tres | 6 +- .../bullhead_yellow/bullhead_yellow.tres | 6 +- fish/species/burbot/burbot.tres | 6 +- .../butterflyfish_copperband.tres | 6 +- fish/species/capelin/capelin.tres | 6 +- fish/species/carp/carp.tres | 2 +- fish/species/catfish_blue/catfish_blue.tres | 2 +- .../catfish_channel/catfish_channel.tres | 2 +- .../catfish_flathead/catfish_flathead.tres | 2 +- .../catfish_walking/catfish_walking.tres | 6 +- fish/species/catfish_white/catfish_white.tres | 2 +- fish/species/char_arctic/char_arctic.tres | 6 +- .../chromis_blue_green.tres | 6 +- fish/species/chub_creek/chub_creek.tres | 6 +- fish/species/chub_european/chub_european.tres | 2 +- fish/species/chub_flame/chub_flame.tres | 2 +- fish/species/chub_lake/chub_lake.tres | 2 +- fish/species/cisco/cisco.tres | 6 +- fish/species/clam_geoduck/clam_geoduck.tres | 6 +- fish/species/clam_giant/clam_giant.tres | 6 +- .../clownfish_ocellaris.tres | 6 +- fish/species/cobia/cobia.tres | 6 +- fish/species/cod_atlantic/cod_atlantic.tres | 6 +- fish/species/cod_pacific/cod_pacific.tres | 6 +- .../coelacanth_west_indian.tres | 6 +- fish/species/conch_queen/conch_queen.tres | 6 +- .../cornetfish_red/cornetfish_red.tres | 6 +- .../cowfish_longhorn/cowfish_longhorn.tres | 6 +- .../crab_japanese_spider.tres | 6 +- fish/species/crab_red_king/crab_red_king.tres | 6 +- fish/species/crappie_black/crappie_black.tres | 6 +- fish/species/crappie_white/crappie_white.tres | 6 +- .../crayfish_red_swamp.tres | 6 +- .../croaker_atlantic/croaker_atlantic.tres | 6 +- .../croaker_yellowfin/croaker_yellowfin.tres | 6 +- fish/species/cusk/cusk.tres | 6 +- .../cuttlefish_common/cuttlefish_common.tres | 6 +- .../cuttlefish_flamboyant.tres | 6 +- .../damselfish_sergeant_major.tres | 6 +- fish/species/danio_zebra/danio_zebra.tres | 6 +- fish/species/discus/discus.tres | 6 +- .../dolphin_bottlenose.tres | 6 +- fish/species/dorado_golden/dorado_golden.tres | 6 +- fish/species/dugong/dugong.tres | 6 +- fish/species/eel_american/eel_american.tres | 6 +- fish/species/eel_european/eel_european.tres | 6 +- fish/species/electric_eel/electric_eel.tres | 6 +- fish/species/fallfish/fallfish.tres | 6 +- .../fangtooth_common/fangtooth_common.tres | 6 +- .../flounder_peacock/flounder_peacock.tres | 6 +- .../flounder_summer/flounder_summer.tres | 6 +- .../flounder_winter/flounder_winter.tres | 6 +- .../flyingfish_tropical.tres | 6 +- .../foureyes_largescale.tres | 6 +- .../freshwater_drum/freshwater_drum.tres | 6 +- fish/species/gar_alligator/gar_alligator.tres | 6 +- fish/species/gar_longnose/gar_longnose.tres | 2 +- fish/species/gar_spotted/gar_spotted.tres | 2 +- fish/species/goby_round/goby_round.tres | 2 +- fish/species/goldeye/goldeye.tres | 6 +- fish/species/goldfish/goldfish.tres | 2 +- .../goldfish_bubbleeye.tres | 2 +- fish/species/gourami_giant/gourami_giant.tres | 6 +- .../grayling_arctic/grayling_arctic.tres | 6 +- fish/species/green_sunfish/green_sunfish.tres | 6 +- .../grouper_atlantic_goliath.tres | 6 +- fish/species/grouper_giant/grouper_giant.tres | 6 +- fish/species/grouper_gulf/grouper_gulf.tres | 2 +- .../grouper_nassau/grouper_nassau.tres | 6 +- fish/species/grouper_red/grouper_red.tres | 2 +- .../grunt_bluestriped/grunt_bluestriped.tres | 6 +- fish/species/grunt_french/grunt_french.tres | 6 +- fish/species/gulper_eel/gulper_eel.tres | 6 +- fish/species/guppy/guppy.tres | 6 +- fish/species/haddock/haddock.tres | 6 +- fish/species/hake_pacific/hake_pacific.tres | 6 +- fish/species/hake_silver/hake_silver.tres | 6 +- .../halfbeak_ballyhoo/halfbeak_ballyhoo.tres | 6 +- .../halibut_atlantic/halibut_atlantic.tres | 6 +- .../halibut_pacific/halibut_pacific.tres | 6 +- fish/species/hellbender/hellbender.tres | 6 +- .../herring_atlantic/herring_atlantic.tres | 6 +- .../herring_pacific/herring_pacific.tres | 6 +- fish/species/hogfish/hogfish.tres | 6 +- fish/species/ide/ide.tres | 6 +- fish/species/jack_crevalle/jack_crevalle.tres | 6 +- fish/species/jelly_crystal/jelly_crystal.tres | 6 +- .../jelly_lions_mane/jelly_lions_mane.tres | 6 +- fish/species/jelly_moon/jelly_moon.tres | 6 +- .../jelly_pacific_sea_nettle.tres | 6 +- .../jelly_sea_wasp/jelly_sea_wasp.tres | 6 +- .../knifefish_clown/knifefish_clown.tres | 6 +- fish/species/koi/koi.tres | 6 +- .../krill_antarctic/krill_antarctic.tres | 6 +- fish/species/ladyfish/ladyfish.tres | 6 +- .../lanternfish_spotted.tres | 6 +- .../largemouth_bass/largemouth_bass.tres | 6 +- fish/species/lingcod/lingcod.tres | 6 +- fish/species/lionfish_red/lionfish_red.tres | 6 +- fish/species/loach_clown/loach_clown.tres | 6 +- fish/species/loach_weather/loach_weather.tres | 6 +- .../lobster_american/lobster_american.tres | 6 +- .../lobster_caribbean_spiny.tres | 6 +- .../lungfish_west_african.tres | 2 +- .../mackerel_atlantic/mackerel_atlantic.tres | 2 +- fish/species/mackerel_cero/mackerel_cero.tres | 2 +- fish/species/mackerel_chub/mackerel_chub.tres | 2 +- fish/species/mackerel_king/mackerel_king.tres | 2 +- .../mackerel_spanish/mackerel_spanish.tres | 2 +- .../madtom_tadpole/madtom_tadpole.tres | 6 +- fish/species/mahi_mahi/mahi_mahi.tres | 6 +- .../mahseer_golden/mahseer_golden.tres | 6 +- .../manatee_west_indian.tres | 6 +- .../manta_ray_giant/manta_ray_giant.tres | 6 +- fish/species/marlin_black/marlin_black.tres | 2 +- fish/species/marlin_blue/marlin_blue.tres | 2 +- fish/species/marlin_white/marlin_white.tres | 2 +- .../menhaden_atlantic/menhaden_atlantic.tres | 6 +- fish/species/milkfish/milkfish.tres | 6 +- .../minnow_fathead/minnow_fathead.tres | 6 +- fish/species/monkfish/monkfish.tres | 6 +- fish/species/mooneye/mooneye.tres | 6 +- fish/species/moray_green/moray_green.tres | 6 +- .../mudskipper_atlantic.tres | 6 +- fish/species/mullet_red/mullet_red.tres | 6 +- .../mullet_striped/mullet_striped.tres | 6 +- fish/species/muskellunge/muskellunge.tres | 6 +- .../nautilus_chambered.tres | 6 +- .../needlefish_hound/needlefish_hound.tres | 6 +- fish/species/oarfish_giant/oarfish_giant.tres | 6 +- .../ocean_perch_pacific.tres | 6 +- .../octopus_common/octopus_common.tres | 6 +- fish/species/octopus_day/octopus_day.tres | 6 +- .../octopus_giant_pacific.tres | 6 +- .../octopus_greater_blue_ringed.tres | 6 +- fish/species/opah/opah.tres | 6 +- fish/species/oscar/oscar.tres | 6 +- .../oyster_black_lip_pearl.tres | 6 +- fish/species/paddlefish/paddlefish.tres | 2 +- .../parrotfish_rainbow.tres | 6 +- .../parrotfish_stoplight.tres | 6 +- fish/species/peacock_bass/peacock_bass.tres | 6 +- fish/species/permit/permit.tres | 6 +- .../pickerel_chain/pickerel_chain.tres | 6 +- .../pickerel_grass/pickerel_grass.tres | 6 +- fish/species/pike_northern/pike_northern.tres | 6 +- fish/species/pipefish_bay/pipefish_bay.tres | 6 +- .../piranha_red_bellied.tres | 6 +- .../plaice_european/plaice_european.tres | 6 +- .../pollock_alaska/pollock_alaska.tres | 6 +- .../pollock_atlantic/pollock_atlantic.tres | 6 +- fish/species/pomfret_black/pomfret_black.tres | 2 +- .../pomfret_chinese/pomfret_chinese.tres | 2 +- .../pomfret_golden/pomfret_golden.tres | 2 +- fish/species/pomfret_white/pomfret_white.tres | 2 +- .../pompano_african/pompano_african.tres | 6 +- .../pompano_florida/pompano_florida.tres | 6 +- .../porcupinefish_spotted.tres | 6 +- fish/species/porgy_scup/porgy_scup.tres | 6 +- .../pufferfish_guineafowl.tres | 6 +- fish/species/pumpkinseed/pumpkinseed.tres | 6 +- .../queenfish_talang/queenfish_talang.tres | 6 +- fish/species/quillback/quillback.tres | 6 +- fish/species/red_drum/red_drum.tres | 6 +- .../redear_sunfish/redear_sunfish.tres | 6 +- .../redhorse_golden/redhorse_golden.tres | 6 +- fish/species/roach_common/roach_common.tres | 6 +- .../rockfish_black/rockfish_black.tres | 6 +- .../rockfish_canary/rockfish_canary.tres | 6 +- .../rockfish_yelloweye.tres | 6 +- fish/species/roosterfish/roosterfish.tres | 6 +- fish/species/rudd/rudd.tres | 6 +- fish/species/sablefish/sablefish.tres | 6 +- fish/species/sailfish/sailfish.tres | 2 +- .../salmon_atlantic/salmon_atlantic.tres | 2 +- fish/species/salmon_chum/salmon_chum.tres | 2 +- fish/species/salmon_coho/salmon_coho.tres | 2 +- fish/species/salmon_pink/salmon_pink.tres | 2 +- .../salmon_sockeye/salmon_sockeye.tres | 2 +- fish/species/sand_dollar/sand_dollar.tres | 6 +- .../sand_lance_american.tres | 6 +- .../sardine_european/sardine_european.tres | 6 +- .../sardine_pacific/sardine_pacific.tres | 6 +- fish/species/sauger/sauger.tres | 2 +- fish/species/saugeye/saugeye.tres | 2 +- .../sawfish_largetooth.tres | 6 +- .../scorpionfish_red/scorpionfish_red.tres | 6 +- .../sea_bass_black/sea_bass_black.tres | 6 +- .../sea_bass_chilean/sea_bass_chilean.tres | 6 +- .../sea_cucumber_giant_california.tres | 6 +- fish/species/sea_otter/sea_otter.tres | 6 +- .../sea_star_crown_of_thorns.tres | 6 +- .../sea_star_sunflower.tres | 6 +- .../seadragon_leafy/seadragon_leafy.tres | 6 +- .../seadragon_weedy/seadragon_weedy.tres | 6 +- .../seahorse_lined/seahorse_lined.tres | 6 +- fish/species/seal_harbor/seal_harbor.tres | 6 +- .../shark_blacktip/shark_blacktip.tres | 6 +- .../shark_great_hammerhead.tres | 6 +- .../shark_great_white/shark_great_white.tres | 6 +- fish/species/shark_tiger/shark_tiger.tres | 6 +- fish/species/shark_whale/shark_whale.tres | 6 +- fish/species/sheepshead/sheepshead.tres | 6 +- fish/species/shiner_common/shiner_common.tres | 6 +- .../shiner_emerald/shiner_emerald.tres | 6 +- fish/species/shiner_golden/shiner_golden.tres | 6 +- .../shrimp_peacock_mantis.tres | 6 +- .../shrimp_skunk_cleaner.tres | 6 +- .../skate_barndoor/skate_barndoor.tres | 6 +- .../smallmouth_bass/smallmouth_bass.tres | 6 +- .../smelt_eulachon/smelt_eulachon.tres | 6 +- fish/species/smelt_rainbow/smelt_rainbow.tres | 6 +- .../snakehead_giant/snakehead_giant.tres | 6 +- fish/species/snapper_lane/snapper_lane.tres | 2 +- .../snapper_mangrove/snapper_mangrove.tres | 2 +- .../snapper_mutton/snapper_mutton.tres | 2 +- fish/species/snapper_red/snapper_red.tres | 2 +- fish/species/snook_common/snook_common.tres | 6 +- fish/species/sole_dover/sole_dover.tres | 6 +- .../sprat_european/sprat_european.tres | 6 +- .../squid_bigfin_reef/squid_bigfin_reef.tres | 6 +- .../squid_colossal/squid_colossal.tres | 6 +- fish/species/squid_giant/squid_giant.tres | 6 +- .../squid_humboldt/squid_humboldt.tres | 6 +- .../stingray_ocellate_river.tres | 6 +- .../stingray_southern/stingray_southern.tres | 6 +- fish/species/sturgeon_lake/sturgeon_lake.tres | 2 +- .../sturgeon_shovelnose.tres | 2 +- .../sturgeon_white/sturgeon_white.tres | 6 +- fish/species/sucker_white/sucker_white.tres | 6 +- fish/species/sunfish/sunfish.tres | 2 +- .../surgeonfish_blue/surgeonfish_blue.tres | 6 +- fish/species/swordfish/swordfish.tres | 2 +- fish/species/tambaqui/tambaqui.tres | 6 +- fish/species/tang_yellow/tang_yellow.tres | 6 +- .../tarpon_atlantic/tarpon_atlantic.tres | 6 +- fish/species/tautog/tautog.tres | 6 +- fish/species/tench/tench.tres | 6 +- fish/species/tetra_neon/tetra_neon.tres | 6 +- .../tigerfish_goliath/tigerfish_goliath.tres | 6 +- fish/species/tilapia_nile/tilapia_nile.tres | 6 +- .../tilefish_blueline/tilefish_blueline.tres | 6 +- .../tilefish_golden/tilefish_golden.tres | 6 +- .../trevally_bluefin/trevally_bluefin.tres | 6 +- .../trevally_giant/trevally_giant.tres | 6 +- .../triggerfish_gray/triggerfish_gray.tres | 6 +- .../triggerfish_queen/triggerfish_queen.tres | 6 +- fish/species/tripletail/tripletail.tres | 6 +- fish/species/trout_brown/trout_brown.tres | 6 +- .../trout_cutthroat/trout_cutthroat.tres | 2 +- fish/species/trout_golden/trout_golden.tres | 2 +- fish/species/trout_rainbow/trout_rainbow.tres | 2 +- .../trout_steelhead/trout_steelhead.tres | 2 +- .../trumpetfish_atlantic.tres | 6 +- fish/species/tuna_albacore/tuna_albacore.tres | 2 +- fish/species/tuna_bigeye/tuna_bigeye.tres | 2 +- fish/species/tuna_bluefin/tuna_bluefin.tres | 2 +- fish/species/tuna_skipjack/tuna_skipjack.tres | 2 +- .../tuna_yellowfin/tuna_yellowfin.tres | 2 +- fish/species/turbot/turbot.tres | 6 +- fish/species/turtle_green/turtle_green.tres | 6 +- .../turtle_hawksbill/turtle_hawksbill.tres | 6 +- .../turtle_leatherback.tres | 6 +- .../turtle_loggerhead/turtle_loggerhead.tres | 6 +- fish/species/urchin_purple/urchin_purple.tres | 6 +- fish/species/wahoo/wahoo.tres | 6 +- fish/species/walleye/walleye.tres | 2 +- fish/species/walrus/walrus.tres | 6 +- fish/species/warmouth/warmouth.tres | 6 +- fish/species/weakfish/weakfish.tres | 6 +- fish/species/whale_blue/whale_blue.tres | 6 +- .../whale_humpback/whale_humpback.tres | 6 +- fish/species/whale_killer/whale_killer.tres | 6 +- fish/species/whale_sperm/whale_sperm.tres | 6 +- fish/species/white_perch/white_perch.tres | 6 +- .../whitefish_lake/whitefish_lake.tres | 6 +- .../wolffish_atlantic/wolffish_atlantic.tres | 6 +- .../wolffish_spotted/wolffish_spotted.tres | 6 +- fish/species/wrasse_ballan/wrasse_ballan.tres | 6 +- .../wrasse_cleaner/wrasse_cleaner.tres | 6 +- fish/species/wreckfish/wreckfish.tres | 6 +- fish/species/yellow_perch/yellow_perch.tres | 6 +- tests/economy_regression_validation.gd | 2 +- tests/fish_catalog_content_validation.gd | 95 ++++--- tests/logbook_runtime_validation.gd | 46 ++-- tests/logbook_validation.gd | 6 +- 321 files changed, 1611 insertions(+), 706 deletions(-) create mode 100644 art/exported/creatures/fish_placeholder.png create mode 100644 art/exported/creatures/fish_placeholder.png.import diff --git a/art/exported/creatures/fish_placeholder.png b/art/exported/creatures/fish_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..de69afb7d7040b41193b957beb8527c5d396e67b GIT binary patch literal 1964 zcmV;d2UGZoP)9@C00001b5ch_0olnc ze*gdg1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rl2pA3&B*x{qdjJ3j z0!c(cRCwC$oNH_pRTRg6ce^buyWO@(Tl#=%p@EkVlB`@AInO&yW@wsE!*yPoPEzO z`%ju~c4qI~x&M0}_uO-?APb=BECH4P%~H@z7C~gd;8y`R0m}dnPy$Q`oaz=&$Y+3l zV71+e(sU|-Dxe$al!Ab53DWdY{ip&~0Zl+7P#j~kXMtPnNR+1Y5b!W?IdB4a0r*%7 zd}$|0k>LP}fHGh*upGD%m;+QK_>s0EO4IpLX@s$O9e8@IB#9JutN@q-%vCdIj*^gB zim+rO?L=uh?Z7mXTYiv&>r+OMl9ma|W~>HoSH$F}aT2GLC`~6HSOM&?_>-lfeG^Gi zUoJIM8Uali_=z?%1t}p)(|HeA7sXG0l7hyB5Txnkjj<&aK)uqjOVl;HqZ_y_(L`xF zD}n7Xj6o2nm4eQg2~zf?8dwM{0IpDKtQN>i!XWA?u$S$?g5iOQb4~VzS`NgDbyBb; zDuR@>lmhdV%37g5=aXG{Mhad{6EVa1Rti>FB1lO~4X_BfP5m#8w+F$&0{(5U;QYx# zCQk2T!jzMCBB>A1{!i_xMf57=B6||}{C+8n_Jqm93za*(N_k*c0R@S8y8lcW$6l;w zVCx0ptA4ki%BF*MlcqK)Xc$LYHUjgLxJ0Oyf=&_P;Z9&Ga4Ya2Fw<&_0k50WJEzgJ z-9^oYZanjkM3kKFUG@BRPq+}yZarc*NdoYzN!kTmn*?bwwL>BTIoAL$0XK|^ahc*= zTP?p|R~z>I)u(?9lb(a~E=NBXVanK3iqeJ8q+rch@tgs?p&S5bG?Mer*7C^8d~bbj zsAI!aLiMMn;|3m8u5(lv8YrUooe2@IotC3jS)R*F&E~Ta?=4+)Do4u&%p4&|)0qf7 z0^A?Vdc*1VQL_Gg#A}na(PTIZ1}R<8h5Igln0m9J{YfV-8S&yYoyUPq@w8^u24#qw zZ3{?&5SmUcupcOow?QjjTn^C_v=aC_6JNmBQN_tmD*>oj(?!v=&a5NIi4o_@IQ+4G zKHg6*IGQ~h>zMRZC3R2yl2s%*f!~1h82dKn-dbM?zN2LX&gD^1ex3mmw-(g! ztQ*WGN8wLG!#PsWtm*uM5w(sQ{(TM(T~mj1?o=+h+lPDZ0Ipf5Ol?%a>&APioPicM zfdL0YeGdL@aWdHAAb2Xe^|EX25Yu1YpNVR0ybaFd5w{yOoj)a=g1dfN@SWUaqbPfWuBV9YQyMf~yCJ|^)euAo_R;Tv0vy?78k(R}A ziZPPBC@f~IJPo{J=81JYTaJHkV%46jX$a3^A0-QWvM$bMCRtKk$o&vemVx|jW$ofS zQefFj3-$8y+(C*Od=%FBD5&VY7$gO=l&hE$7d0IpP-ry*5W3D8MxHxpX`OVDVkBuX zR)QSBN5GxAu}q$O9d~ZFrqc*~Lt-*1b1={&g|XE=;vB`%*w4UXU|()r6Na5(-Yc>1 z_631f;AW-nBt~X_4zc5Xl2rn!Y}1v%a~L_?=~$Tu6Hs083~(1lp;;=?Aq90QsZrH* zYJhh!Qf5U4&EW5)F!BN;g}PGd93;X9nW?`MQm`7R1GZ&|>f10(&Um3Nl3Vi9nYJ=~ zB~iCyl$(2ONKUg9EVUXmPB6NpV2W)HvQVWPj{z%fQ2f;otdSzzdrBcm)n-+F!UjjU z+^gL6`V@xvbzn2_mJ}Se*w@x1I1a0%;43oWD439HwI+ISWjVDj6($pyh)mCqI void: ) assert(player != null) assert(catalog != null and catalog.candidates.size() == 316) - assert(LogbookCatalog.ordered_species(catalog.candidates).size() == 63) + assert(LogbookCatalog.ordered_species(catalog.candidates).size() == 313) assert(sale_service != null) assert(shop_service != null) assert(session != null and session.is_host()) diff --git a/tests/fish_catalog_content_validation.gd b/tests/fish_catalog_content_validation.gd index fb5f9e4..4a252b0 100644 --- a/tests/fish_catalog_content_validation.gd +++ b/tests/fish_catalog_content_validation.gd @@ -37,6 +37,18 @@ const PelicanBuyer = preload("res://economy/buyers/pelicans.tres") const StarterRegionScene = preload( "res://world/regions/starter_island_region.tscn" ) +const SharedFishPlaceholder: Texture2D = preload( + "res://art/exported/creatures/fish_placeholder.png" +) + +const ACTIVE_CATALOG_COUNT: int = 313 +const INACTIVE_CATALOG_COUNT: int = 3 +const FISHING_SPECIES_COUNT: int = 310 +const GENERATED_POND_COUNT: int = 33 +const GENERATED_LAKE_COUNT: int = 20 +const GENERATED_RIVER_COUNT: int = 53 +const STARTER_POND_COUNT: int = 106 +const OCEAN_COUNT: int = 204 const ORIGINAL_IDS: Array[StringName] = [ &"bluegill", &"bass", &"carp", &"sunfish", @@ -82,23 +94,6 @@ const NEW_FRESH_WATER_IDS: Array[StringName] = [ &"bowfin", &"sturgeon_lake", &"gar_longnose", &"paddlefish", &"sturgeon_shovelnose", &"gar_spotted", &"lungfish_west_african", ] -const GENERATED_POND_IDS: Array[StringName] = [ - &"bowfin", &"gar_spotted", &"lungfish_west_african", - &"catfish_channel", &"catfish_white", &"carp", - &"goldfish_bubbleeye", &"goldfish", &"bluegill", -] -const GENERATED_LAKE_IDS: Array[StringName] = [ - &"sturgeon_lake", &"trout_golden", &"chub_lake", &"saugeye", - &"walleye", &"goby_round", -] -const GENERATED_RIVER_IDS: Array[StringName] = [ - &"gar_longnose", &"paddlefish", &"sturgeon_shovelnose", - &"trout_cutthroat", &"trout_rainbow", &"catfish_blue", - &"catfish_flathead", &"chub_european", &"chub_flame", &"sauger", - &"trout_steelhead", -] - - func _initialize() -> void: call_deferred("_run") @@ -115,21 +110,35 @@ func _run() -> void: func _validate_generated_habitat_pools() -> void: - var expected_by_pool: Dictionary = { - GeneratedPondPool: GENERATED_POND_IDS, - GeneratedLakePool: GENERATED_LAKE_IDS, - GeneratedRiverPool: GENERATED_RIVER_IDS, + var expected_counts: Dictionary = { + GeneratedPondPool: GENERATED_POND_COUNT, + GeneratedLakePool: GENERATED_LAKE_COUNT, + GeneratedRiverPool: GENERATED_RIVER_COUNT, } - for pool: FishPoolType in expected_by_pool: - var expected_ids: Array[StringName] = expected_by_pool[pool] - assert(pool.candidates.size() == expected_ids.size()) - for fish_id: StringName in expected_ids: - var fish: FishDataType = Catalog.get_fish_by_id(fish_id) + var freshwater_ids: Dictionary[StringName, bool] = {} + for pool: FishPoolType in expected_counts: + assert(pool.candidates.size() == int(expected_counts[pool])) + for fish: FishDataType in pool.candidates: assert(fish != null and fish.is_fishable()) - assert(pool.get_fish_by_id(fish_id) == fish) + assert(not freshwater_ids.has(fish.id)) + freshwater_ids[fish.id] = true assert(fish.is_allowed_in_water(WaterType.Type.FRESH_WATER)) - assert(GeneratedPondPool.get_fish_by_id(&"pomfret_white") == null) - assert(GeneratedPondPool.get_fish_by_id(&"mackerel_atlantic") == null) + assert(freshwater_ids.size() == STARTER_POND_COUNT) + assert(PondPool.candidates.size() == STARTER_POND_COUNT) + for fish: FishDataType in PondPool.candidates: + assert(freshwater_ids.has(fish.id)) + assert(OceanPool.candidates.size() == OCEAN_COUNT) + var ocean_ids: Dictionary[StringName, bool] = {} + for fish: FishDataType in OceanPool.candidates: + assert(fish != null and fish.is_fishable()) + assert(not ocean_ids.has(fish.id)) + ocean_ids[fish.id] = true + assert(fish.is_allowed_in_water(WaterType.Type.SALT_WATER)) + for fish: FishDataType in Catalog.candidates: + if not fish.is_fishable(): + continue + assert(freshwater_ids.has(fish.id) != ocean_ids.has(fish.id)) + assert(freshwater_ids.size() + ocean_ids.size() == FISHING_SPECIES_COUNT) assert(GeneratedPondPool.get_fish_by_id(&"gar_longnose") == null) assert(GeneratedRiverPool.get_fish_by_id(&"gar_longnose") != null) assert(GeneratedRiverPool.get_fish_by_id(&"goby_round") == null) @@ -143,7 +152,7 @@ func _validate_weight_based_display_scale() -> void: continue assert(fish.is_selectable()) assert(fish.weight_min_lb > 0.0) - assert(fish.weight_max_lb <= 1000.0) + assert(fish.weight_max_lb <= 500000.0) var minimum_scale: float = fish.get_display_scale_for_weight( fish.weight_min_lb ) @@ -172,10 +181,11 @@ func _validate_weight_based_display_scale() -> void: func _validate_catalog_and_pools() -> void: assert(Catalog.candidates.size() == 316) - assert(PondPool.candidates.size() == 26) - assert(OceanPool.candidates.size() == 34) + assert(PondPool.candidates.size() == STARTER_POND_COUNT) + assert(OceanPool.candidates.size() == OCEAN_COUNT) var active_count: int = 0 var inactive_count: int = 0 + var fishing_count: int = 0 var catalog_numbers: Dictionary[int, bool] = {} for fish: FishDataType in Catalog.candidates: assert(fish != null and not fish.id.is_empty()) @@ -194,8 +204,13 @@ func _validate_catalog_and_pools() -> void: inactive_count += 1 assert(not fish.is_selectable()) assert(fish.display_texture == null) - assert(active_count == 63) - assert(inactive_count == 253) + if fish.collection_method == FishDataType.CollectionMethod.FISHING: + fishing_count += 1 + assert(fish.active) + assert(fish.display_texture == SharedFishPlaceholder) + assert(active_count == ACTIVE_CATALOG_COUNT) + assert(inactive_count == INACTIVE_CATALOG_COUNT) + assert(fishing_count == FISHING_SPECIES_COUNT) var chum: FishDataType = Catalog.get_fish_by_id(&"salmon_chum") assert(chum != null) assert(chum.get_season_text() == "fall") @@ -233,12 +248,12 @@ func _validate_catalog_and_pools() -> void: ) == chum ) seasonal_collection.free() - var inactive_fish: FishDataType = Catalog.get_fish_by_id(&"mudskipper_atlantic") + var inactive_fish: FishDataType = Catalog.get_fish_by_id(&"crab_blue") 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 + inactive_context.water_type = WaterType.Type.SALT_WATER var inactive_collection := CollectionLogType.new() var inactive_selector := FishSelectorType.new() inactive_selector.use_deterministic_test_seed = true @@ -424,11 +439,15 @@ func _validate_authoritative_water_filter() -> void: ocean_region.location_tags = [&"coast", &"ocean"] var stale_salt_pool_region := FishableWaterRegion.new() stale_salt_pool_region.water_type = WaterType.Type.FRESH_WATER - stale_salt_pool_region.fish_pool = OceanPool + var salt_only_pool := FishPoolType.new() + salt_only_pool.candidates = [Catalog.get_fish_by_id(&"bass")] + stale_salt_pool_region.fish_pool = salt_only_pool stale_salt_pool_region.location_tags = [&"starter_pond"] var stale_fresh_pool_region := FishableWaterRegion.new() stale_fresh_pool_region.water_type = WaterType.Type.SALT_WATER - stale_fresh_pool_region.fish_pool = PondPool + var fresh_only_pool := FishPoolType.new() + fresh_only_pool.candidates = [Catalog.get_fish_by_id(&"bluegill")] + stale_fresh_pool_region.fish_pool = fresh_only_pool stale_fresh_pool_region.location_tags = [&"coast", &"ocean"] var evidence := {"discovered_fish_ids": []} assert( diff --git a/tests/logbook_runtime_validation.gd b/tests/logbook_runtime_validation.gd index e411fef..8b19f92 100644 --- a/tests/logbook_runtime_validation.gd +++ b/tests/logbook_runtime_validation.gd @@ -49,20 +49,20 @@ func _run() -> void: assert(not hotbar.visible) var entry_buttons: Dictionary = logbook.get("_entry_buttons") - assert(entry_buttons.size() == 26) + assert(entry_buttons.size() == 108) await _capture_if_requested("-unknown") logbook.call( "_select_category", WaterType.Type.FRESH_WATER ) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 26) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 108) await _capture_if_requested("-fresh") logbook.call("_select_category", WaterType.Type.SALT_WATER) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 34) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 202) logbook.call("_select_category", WaterType.Type.FRESH_WATER) await create_timer(0.25).timeout - assert((logbook.get("_entry_buttons") as Dictionary).size() == 26) + assert((logbook.get("_entry_buttons") as Dictionary).size() == 108) player.collection_log.mark_discovered(&"bluegill") await process_frame logbook.call("_select_entry", &"bluegill", &"bluegill") @@ -110,11 +110,24 @@ func _validate_save_round_trip( assert(catalog != null) assert(catalog.candidates.size() == 316) var active_species := LogbookCatalog.ordered_species(catalog.candidates) - assert(active_species.size() == 63) - # This test intentionally round-trips one catch for every active species. - # Give the fixture enough combined capacity, then bypass per-catch carried - # inventory admission while constructing it. The inventory layout still - # reconciles and persists the resulting placements. + assert(active_species.size() == 313) + # Keep this runtime save fixture within maximum player capacity while the + # focused catalog validation exercises every active species individually. + var round_trip_species: Array[FishData] = [] + for fish: FishData in active_species: + if round_trip_species.size() >= 59: + break + round_trip_species.append(fish) + for fish_id: StringName in [ + &"catfish_blue", + &"catfish_channel", + &"catfish_flathead", + &"catfish_white", + ]: + var catfish: FishData = catalog.get_fish_by_id(fish_id) + if catfish not in round_trip_species: + round_trip_species.append(catfish) + assert(round_trip_species.size() == 63) player.inventory_layout.restore_backpack_level( PlayerInventoryLayout.MAX_BACKPACK_LEVEL ) @@ -126,7 +139,7 @@ func _validate_save_round_trip( assert(player.cooler_capacity.get_level() == PlayerCoolerCapacity.MAX_LEVEL) player.inventory.set_inventory_layout(null) for index: int in 4: - _add_test_catch(player, active_species[index]) + _add_test_catch(player, round_trip_species[index]) assert(save_manager.save_now()) var no_catches: Array[FishCatch] = [] var no_discoveries: Array[StringName] = [] @@ -135,18 +148,21 @@ 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 = active_species[index] + var original_fish: FishData = round_trip_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, active_species.size()): - _add_test_catch(player, active_species[index]) + for index: int in range(4, round_trip_species.size()): + _add_test_catch(player, round_trip_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() == 63) - for fish: FishData in active_species: + assert( + player.inventory.get_all_catches().size() + == round_trip_species.size() + ) + for fish: FishData in round_trip_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 7eca559..a621a8a 100644 --- a/tests/logbook_validation.gd +++ b/tests/logbook_validation.gd @@ -43,7 +43,7 @@ func _run() -> void: func _validate_catalog() -> void: assert(CatalogResource.candidates.size() == 316) var ordered := LogbookCatalog.ordered_species(CatalogResource.candidates) - assert(ordered.size() == 63) + assert(ordered.size() == 313) var previous_number: int = 0 var catalog_numbers: Dictionary[int, bool] = {} for fish: FishDataType in CatalogResource.candidates: @@ -171,7 +171,7 @@ func _validate_page() -> void: var entries: Dictionary = page.get("_entry_buttons") assert( entries.size() - == (26 if category == LogbookCatalog.Category.FRESH_WATER else 34) + == (108 if category == LogbookCatalog.Category.FRESH_WATER else 202) ) for fish: FishDataType in LogbookCatalog.ordered_species( CatalogResource.candidates @@ -222,7 +222,7 @@ func _validate_page() -> void: candidate.display_name ) ) - assert(silhouette_count == 60) + assert(silhouette_count == 310) page.call("_select_category", LogbookCatalog.Category.SHELLFISH) await create_timer(0.25).timeout