From 10c2b7364ef6ef5cc159f1564ec47af8b019785e Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 7 Sep 2024 01:50:28 +0200 Subject: [PATCH] The fishening v3: Fishing lures. (#86007) ## About The Pull Request Over half of the line changes are merely from splitting the fish_types.dm into several files since it was over 1k lines already. One of the small issues with fishing right now is RNG. You want to get some specific fish, and you go through all the micromanaging with hooks, reels and baits only for the random number god to say "nope", and that's only going to get worse the more fish are in the game. However, I've a solution: (unconsumable/reusable) fishing lures, each of which attracts different fish based on different conditions. The only caveat is that they require to be spun at set intervals (usually 1 to 3 seconds, depending on the lure, with a second-long window). Worry not, there're visual cues in the form of a green/red light hovering the fishing float, so you won't get screwed up by the server slowing down or whatever. The whole box of lures (12 so far) can be from cargo for the fair price of 450 credits. I've also added 5 new fish: monkfish, plaice, pike, another punnier variant of the pike, perch and squid. The latter is quite special because of the ink production trait, which lets players use it to blind others at a close range and when butchered, it yields an ink sac, which can be processed into a can of squid ink (one less item exclusive to the produce console), or thrown at people in a sort-of-similar fashion of banana cream pies (except it's ink).
Images Fishing lures (forgot to take my cursor off the veggie one before the screenshot): ![immagine](https://github.com/user-attachments/assets/8ba7a0f2-2a9f-4177-9c0d-ebeabd8a0ef7) The five new fish: ![immagine](https://github.com/user-attachments/assets/1c251079-3b39-48bb-af6c-0a35623953a7)
A table of fish catchable wth each lure (excluding holodeck) ![table](https://github.com/user-attachments/assets/dee95855-405b-4945-bfc2-70e816e46109)
A few more things in the CL, baitfish are a thing now. ## Why It's Good For The Game There should be ways to contrast some of the RNG fishing has. After all, it's only going to get more random the more fish are in the game. Furthermore, I find it disappointing that a lot of food stuff is exclusive to the ingredients console and there're no other ways to get it. ## Changelog :cl: add: Added fishing lures to the game. They don't get used up like baits and let you catch specific kinds of fish, though they need to be spun every few seconds. The whole set can be ordered from cargo for 450 credits. balance: The magnet hook now removes dud chances. add: Added five new fish types: perch, two types of pike, monkfish, plaice and squid. Squids have a fairly special ink production trait, which lets you use them (unless dead) to ink people face at close range, and can be butchered for an ink sac, which can either be processed into canned squid ink, or thrown at someone. fix: Refactored throwing a little. Some items (specifically components/elements) won't be triggered when caught. no more plates shattering despite being caught for example. add: Goldfish, lavaloops, needlefish and armorfish can now be used as baits. /:cl: --- .../signals_atom/signals_atom_movable.dm | 3 + .../signals/signals_mob/signals_mob_main.dm | 4 +- code/__DEFINES/fish.dm | 16 +- code/__DEFINES/traits/declarations.dm | 15 +- code/_globalvars/traits/_traits.dm | 7 + code/_globalvars/traits/admin_tooling.dm | 5 + .../subsystem/processing/fishing.dm | 29 + code/datums/ai/cursed/cursed_controller.dm | 4 +- code/datums/components/boomerang.dm | 7 +- code/datums/components/chasm.dm | 2 +- code/datums/components/explodable.dm | 5 +- code/datums/components/face_decal.dm | 42 +- code/datums/components/fishing_spot.dm | 25 +- code/datums/components/profound_fisher.dm | 10 +- code/datums/components/sitcomlaughter.dm | 2 +- code/datums/components/splat.dm | 74 + code/datums/elements/can_shatter.dm | 5 +- code/datums/elements/firestacker.dm | 4 +- code/datums/elements/food/food_trash.dm | 17 +- code/datums/elements/frozen.dm | 11 +- code/datums/elements/lazy_fishing_spot.dm | 24 +- code/datums/memory/general_memories.dm | 22 + .../mood_events/generic_negative_events.dm | 5 + code/game/atom/atom_act.dm | 4 + code/game/atoms_movable.dm | 24 +- .../objects/effects/decals/cleanable/food.dm | 11 + code/game/objects/items.dm | 82 +- code/game/objects/items/food/misc.dm | 27 + code/game/objects/items/food/packaged.dm | 19 + code/game/objects/items/food/pie.dm | 33 +- code/modules/cargo/goodies.dm | 8 +- code/modules/fishing/admin.dm | 2 +- code/modules/fishing/bait.dm | 250 +++- code/modules/fishing/fish/_fish.dm | 4 +- code/modules/fishing/fish/fish_traits.dm | 127 +- code/modules/fishing/fish/fish_types.dm | 1205 ----------------- code/modules/fishing/fish/types/air_space.dm | 95 ++ code/modules/fishing/fish/types/anadromous.dm | 62 + code/modules/fishing/fish/types/freshwater.dm | 213 +++ .../modules/fishing/fish/types/holographic.dm | 108 ++ code/modules/fishing/fish/types/mining.dm | 198 +++ code/modules/fishing/fish/types/ruins.dm | 73 + code/modules/fishing/fish/types/saltwater.dm | 275 ++++ code/modules/fishing/fish/types/station.dm | 80 ++ code/modules/fishing/fish/types/syndicate.dm | 256 ++++ code/modules/fishing/fish/types/tiziran.dm | 69 + code/modules/fishing/fish_catalog.dm | 2 +- code/modules/fishing/fishing_equipment.dm | 54 +- code/modules/fishing/fishing_minigame.dm | 167 ++- code/modules/fishing/fishing_rod.dm | 46 +- code/modules/fishing/sources/_fish_source.dm | 127 +- code/modules/fishing/sources/source_types.dm | 35 +- .../recipes/processor_recipes.dm | 4 + code/modules/hydroponics/plant_genes.dm | 6 +- code/modules/paperwork/paperplane.dm | 2 +- code/modules/research/designs/misc_designs.dm | 2 +- icons/hud/fishing_hud.dmi | Bin 4735 -> 4920 bytes .../effects/{creampie.dmi => face_decal.dmi} | Bin icons/mob/inhands/fish_lefthand.dmi | Bin 3131 -> 4684 bytes icons/mob/inhands/fish_righthand.dmi | Bin 3121 -> 4704 bytes icons/obj/aquarium/fish.dmi | Bin 39565 -> 41961 bytes icons/obj/aquarium/wide.dmi | Bin 1649 -> 6715 bytes icons/obj/fishing.dmi | Bin 17843 -> 25513 bytes icons/obj/food/food.dmi | Bin 77882 -> 76424 bytes strings/fishing_tips.txt | 4 +- tgstation.dme | 12 +- 66 files changed, 2501 insertions(+), 1523 deletions(-) create mode 100644 code/datums/components/splat.dm delete mode 100644 code/modules/fishing/fish/fish_types.dm create mode 100644 code/modules/fishing/fish/types/air_space.dm create mode 100644 code/modules/fishing/fish/types/anadromous.dm create mode 100644 code/modules/fishing/fish/types/freshwater.dm create mode 100644 code/modules/fishing/fish/types/holographic.dm create mode 100644 code/modules/fishing/fish/types/mining.dm create mode 100644 code/modules/fishing/fish/types/ruins.dm create mode 100644 code/modules/fishing/fish/types/saltwater.dm create mode 100644 code/modules/fishing/fish/types/station.dm create mode 100644 code/modules/fishing/fish/types/syndicate.dm create mode 100644 code/modules/fishing/fish/types/tiziran.dm rename icons/mob/effects/{creampie.dmi => face_decal.dmi} (100%) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm index 24d7cd0b170..925c7bc4e71 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -119,6 +119,9 @@ /// From base of area/Exited(): (area/left, direction) #define COMSIG_MOVABLE_EXITED_AREA "movable_exited_area" +///from base of /datum/component/splat/splat: (hit_atom) +#define COMSIG_MOVABLE_SPLAT "movable_splat" + ///from base of /atom/movable/point_at: (atom/A, obj/effect/temp_visual/point/point) #define COMSIG_MOVABLE_POINTED "movable_pointed" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 85e6a62d46c..1b2d82ca9c5 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -170,8 +170,8 @@ ///Called on user, from base of /datum/strippable_item/try_(un)equip() (atom/target, obj/item/equipping?) #define COMSIG_TRY_STRIP "try_strip" #define COMPONENT_CANT_STRIP (1<<0) -///From /datum/component/creamed/Initialize() -#define COMSIG_MOB_CREAMED "mob_creamed" +///From /datum/component/face_decal/splat/Initialize() +#define COMSIG_MOB_HIT_BY_SPLAT "hit_by_splat" ///From /obj/item/gun/proc/check_botched() #define COMSIG_MOB_CLUMSY_SHOOT_FOOT "mob_clumsy_shoot_foot" ///from /obj/item/hand_item/slapper/attack_atom(): (source=obj/structure/table/slammed_table, mob/living/slammer) diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index d6bcc2ec796..04557b4a8e6 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -67,9 +67,11 @@ #define FISHING_MINIGAME_RULE_FLIP (1 << 5) ///Skip the biting phase and go straight to the minigame, avoiding the penalty for having slow reflexes. #define FISHING_MINIGAME_AUTOREEL (1 << 6) +///The fish will fade in and out at intervals +#define FISHING_MINIGAME_RULE_CAMO (1 << 7) ///all the effects that are active and will last for a few seconds before triggering a cooldown -#define FISHING_MINIGAME_ACTIVE_EFFECTS (FISHING_MINIGAME_RULE_ANTIGRAV|FISHING_MINIGAME_RULE_FLIP) +#define FISHING_MINIGAME_ACTIVE_EFFECTS (FISHING_MINIGAME_RULE_ANTIGRAV|FISHING_MINIGAME_RULE_FLIP|FISHING_MINIGAME_RULE_CAMO) /// The default additive value for fishing hook catch weight modifiers. #define FISHING_DEFAULT_HOOK_BONUS_ADDITIVE 0 @@ -182,3 +184,15 @@ //Minigame defines /// The height of the minigame slider. Not in pixels, but minigame units. #define FISHING_MINIGAME_AREA 1000 + +///Defines for fish properties from the collect_fish_properties proc +#define FISH_PROPERTIES_FAV_BAIT "fav_bait" +#define FISH_PROPERTIES_BAD_BAIT "bad_bait" +#define FISH_PROPERTIES_TRAITS "fish_traits" + +///Define for favorite and disliked baits that aren't just item typepaths. +#define FISH_BAIT_TYPE "Type" +#define FISH_BAIT_FOODTYPE "Foodtype" +#define FISH_BAIT_REAGENT "Reagent" +#define FISH_BAIT_VALUE "Value" +#define FISH_BAIT_AMOUNT "Amount" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 11b1e0d2b31..3b1193247de 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -748,6 +748,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NEEDS_TWO_HANDS "needstwohands" /// Can't be catched when thrown #define TRAIT_UNCATCHABLE "uncatchable" +/// You won't catch duds while fishing with this rod. +#define TRAIT_ROD_REMOVE_FISHING_DUD "rod_remove_fishing_dud" /// Stuff that can go inside fish cases #define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile" /// If the item can be used as a bit. @@ -761,7 +763,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Baits with this trait will ignore bait preferences and related fish traits. #define TRAIT_OMNI_BAIT "omni_bait" /// The bait won't be consumed when used -#define TRAIT_BAIT_UNCONSUMABLE "bait_unconsumabe" +#define TRAIT_BAIT_UNCONSUMABLE "bait_unconsumable" +/// This bait ignores environmental conditions for fishing (like low light for nocturnal fish) +#define TRAIT_BAIT_IGNORE_ENVIRONMENT "bait_ignore_environment" +/** + * This bait won't apply TRAIT_ROD_REMOVE_FISHING_DUD to the rod it's attached on, + * instead, it'll allow the fishing dud to be there unless there's at least one fish that likes the bait + */ +#define TRAIT_BAIT_ALLOW_FISHING_DUD "bait_dont_affect_fishing_dud" /// Plants that were mutated as a result of passive instability, not a mutation threshold. #define TRAIT_PLANT_WILDMUTATE "wildmutation" /// If you hit an APC with exposed internals with this item it will try to shock you @@ -959,6 +968,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_RECESSIVE "fish_recessive" ///This fish comes equipped with a stinger (increased damage and potentially venomous if also toxic) #define TRAIT_FISH_STINGER "fish_stinger" +///This fish is currently on cooldown and cannot splash ink unto people's faces +#define TRAIT_FISH_INK_ON_COOLDOWN "fish_ink_on_cooldown" +///This fish requires two hands to carry even if smaller than FISH_SIZE_TWO_HANDS_REQUIRED, as long as it's bulky-sized. +#define TRAIT_FISH_SHOULD_TWOHANDED "should_twohanded" /// Trait given to angelic constructs to let them purge cult runes #define TRAIT_ANGELIC "angelic" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 8a3697eaa4b..c1bc27c25cf 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -544,6 +544,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, + "TRAIT_BAIT_ALLOW_FISHING_DUD" = TRAIT_BAIT_ALLOW_FISHING_DUD, + "TRAIT_BAIT_IGNORE_ENVIRONMENT" = TRAIT_BAIT_IGNORE_ENVIRONMENT, "TRAIT_BAIT_UNCONSUMABLE" = TRAIT_BAIT_UNCONSUMABLE, "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, "TRAIT_BASIC_QUALITY_BAIT" = TRAIT_BASIC_QUALITY_BAIT, @@ -604,16 +606,21 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, "TRAIT_FISH_FLOPPING" = TRAIT_FISH_FLOPPING, "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, + "TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN, "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, "TRAIT_FISH_RECESSIVE" = TRAIT_FISH_RECESSIVE, "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_SHOULD_TWOHANDED" = TRAIT_FISH_SHOULD_TWOHANDED, "TRAIT_FISH_STASIS" = TRAIT_FISH_STASIS, "TRAIT_FISH_STINGER" = TRAIT_FISH_STINGER, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, ), + /obj/item/fishing_rod = list( + "TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD, + ), /obj/item/integrated_circuit = list( "TRAIT_CIRCUIT_UI_OPEN" = TRAIT_CIRCUIT_UI_OPEN, "TRAIT_CIRCUIT_UNDUPABLE" = TRAIT_CIRCUIT_UNDUPABLE, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index afb87091098..926d2002c0d 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -339,16 +339,21 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, + "TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN, "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, "TRAIT_FISH_RECESSIVE" = TRAIT_FISH_RECESSIVE, "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_SHOULD_TWOHANDED" = TRAIT_FISH_SHOULD_TWOHANDED, "TRAIT_FISH_STASIS" = TRAIT_FISH_STASIS, "TRAIT_FISH_STINGER" = TRAIT_FISH_STINGER, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, ), + /obj/item/fishing_rod = list( + "TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD, + ), /obj/item/organ/internal/liver = list( "TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST, "TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM, diff --git a/code/controllers/subsystem/processing/fishing.dm b/code/controllers/subsystem/processing/fishing.dm index ca54141de82..a81ff0dec67 100644 --- a/code/controllers/subsystem/processing/fishing.dm +++ b/code/controllers/subsystem/processing/fishing.dm @@ -1,4 +1,33 @@ /// subsystem for the fishing minigame processing. PROCESSING_SUBSYSTEM_DEF(fishing) name = "Fishing" + flags = SS_BACKGROUND|SS_POST_FIRE_TIMING wait = 0.05 SECONDS // If you raise it to 0.1 SECONDS, you better also modify [datum/fish_movement/move_fish()] + ///Cached fish properties so we don't have to initalize fish every time + var/list/fish_properties + ///A cache of fish that can be caught by each type of fishing lure + var/list/lure_catchables + +/datum/controller/subsystem/processing/fishing/Initialize() + ///init the properties + fish_properties = list() + for(var/fish_type in subtypesof(/obj/item/fish)) + var/obj/item/fish/fish = new fish_type(null, FALSE) + fish_properties[fish_type] = list() + fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT] = fish.favorite_bait.Copy() + fish_properties[fish_type][FISH_PROPERTIES_BAD_BAIT] = fish.disliked_bait.Copy() + fish_properties[fish_type][FISH_PROPERTIES_TRAITS] = fish.fish_traits.Copy() + qdel(fish) + + ///init the list of things lures can catch + lure_catchables = list() + var/list/fish_types = subtypesof(/obj/item/fish) + for(var/lure_type in typesof(/obj/item/fishing_lure)) + var/obj/item/fishing_lure/lure = new lure_type + lure_catchables[lure_type] = list() + for(var/obj/item/fish/fish_type as anything in fish_types) + if(lure.is_catchable_fish(fish_type, fish_properties[fish_type])) + lure_catchables[lure_type] += fish_type + qdel(lure) + + return SS_INIT_SUCCESS diff --git a/code/datums/ai/cursed/cursed_controller.dm b/code/datums/ai/cursed/cursed_controller.dm index 4d0f6c6f5fd..aa32496f357 100644 --- a/code/datums/ai/cursed/cursed_controller.dm +++ b/code/datums/ai/cursed/cursed_controller.dm @@ -27,9 +27,9 @@ return ..() //Run parent at end ///signal called by the pawn hitting something after a throw -/datum/ai_controller/cursed/proc/on_throw_hit(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/ai_controller/cursed/proc/on_throw_hit(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - if(!iscarbon(hit_atom)) + if(caught || !iscarbon(hit_atom)) return //equipcode has sleeps all over it. INVOKE_ASYNC(src, PROC_REF(try_equipping_to_target_slot), hit_atom) diff --git a/code/datums/components/boomerang.dm b/code/datums/components/boomerang.dm index 23dd63d1467..954e752da1e 100644 --- a/code/datums/components/boomerang.dm +++ b/code/datums/components/boomerang.dm @@ -60,12 +60,11 @@ * * hit_atom: The atom that has been hit by the boomerang component. * * init_throwing_datum: The thrownthing datum that originally impacted the object, that we use to build the new throwing datum for the rebound. */ -/datum/component/boomerang/proc/return_hit_throw(datum/source, atom/hit_atom, datum/thrownthing/init_throwing_datum) +/datum/component/boomerang/proc/return_hit_throw(datum/source, atom/hit_atom, datum/thrownthing/init_throwing_datum, caught) SIGNAL_HANDLER - if (!COOLDOWN_FINISHED(src, last_boomerang_throw)) + if (!COOLDOWN_FINISHED(src, last_boomerang_throw) || caught) return - var/obj/item/true_parent = parent - aerodynamic_swing(init_throwing_datum, true_parent) + aerodynamic_swing(init_throwing_datum, parent) /** * Proc that triggers when the thrown boomerang does not hit a target. diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 6cae053afd1..0d65d2840f3 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -14,7 +14,7 @@ /obj/effect/constructing_effect, /obj/effect/dummy/phased_mob, /obj/effect/ebeam, - /obj/effect/fishing_lure, + /obj/effect/fishing_float, /obj/effect/hotspot, /obj/effect/landmark, /obj/effect/light_emitter/tendril, diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 439b1563521..9dc8db3bbc4 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -60,10 +60,11 @@ return check_if_detonate(I) -/datum/component/explodable/proc/explodable_impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/component/explodable/proc/explodable_impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - check_if_detonate(hit_atom) + if(!caught) + check_if_detonate(hit_atom) /datum/component/explodable/proc/explodable_bump(datum/source, atom/A) SIGNAL_HANDLER diff --git a/code/datums/components/face_decal.dm b/code/datums/components/face_decal.dm index f045a4f18df..df70f8a3f49 100644 --- a/code/datums/components/face_decal.dm +++ b/code/datums/components/face_decal.dm @@ -53,6 +53,8 @@ carbon_parent.update_body_parts() else normal_overlay = get_normal_overlay() + normal_overlay.color = color + RegisterSignals(parent, list( COMSIG_COMPONENT_CLEAN_ACT, @@ -113,37 +115,39 @@ SIGNAL_HANDLER qdel(src) -/// Creampie subtype, handling signals and mood logic +/// splat subtype, handling signals and mood logic -GLOBAL_LIST_INIT(creamable, typecacheof(list( - /mob/living/carbon/human, - /mob/living/basic/pet/dog/corgi, - /mob/living/silicon/ai, +GLOBAL_LIST_INIT(splattable, zebra_typecacheof(list( + /mob/living/carbon/human = "human", + /mob/living/basic/pet/dog/corgi = "corgi", + /mob/living/silicon/ai = "ai", ))) -/datum/component/face_decal/creampie/Initialize() - . = ..() - if(!is_type_in_typecache(parent, GLOB.creamable)) +/datum/component/face_decal/splat + ///The mood_event that we add + var/mood_event_type + +/datum/component/face_decal/splat/Initialize(icon_state, layers, color, memory_type = /datum/memory/witnessed_creampie, mood_event_type = /datum/mood_event/creampie) + if(!is_type_in_typecache(parent, GLOB.splattable)) return COMPONENT_INCOMPATIBLE - SEND_SIGNAL(parent, COMSIG_MOB_CREAMED, src) - add_memory_in_range(parent, 7, /datum/memory/witnessed_creampie, protagonist = parent) + . = ..() -/datum/component/face_decal/creampie/get_normal_overlay() - if(iscorgi(parent)) - return mutable_appearance('icons/mob/effects/creampie.dmi', "[icon_state]_corgi") + SEND_SIGNAL(parent, COMSIG_MOB_HIT_BY_SPLAT, src) + add_memory_in_range(parent, 7, memory_type, protagonist = parent) + src.mood_event_type = mood_event_type - if(isAI(parent)) - return mutable_appearance('icons/mob/effects/creampie.dmi', "[icon_state]_ai") +/datum/component/face_decal/splat/get_normal_overlay() + return mutable_appearance('icons/mob/effects/face_decal.dmi', "[icon_state]_[GLOB.splattable[type]]") -/datum/component/face_decal/creampie/RegisterWithParent() +/datum/component/face_decal/splat/RegisterWithParent() . = ..() if(iscarbon(parent)) var/mob/living/carbon/human/carbon_parent = parent - carbon_parent.add_mood_event("creampie", /datum/mood_event/creampie) + carbon_parent.add_mood_event("splat", mood_event_type) -/datum/component/face_decal/creampie/UnregisterFromParent() +/datum/component/face_decal/splat/UnregisterFromParent() . = ..() if(iscarbon(parent)) var/mob/living/carbon/carbon_parent = parent - carbon_parent.clear_mood_event("creampie") + carbon_parent.clear_mood_event("splat") diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index cc21f22eb4b..b825354d7be 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -44,15 +44,7 @@ if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) return - var/has_known_fishes = FALSE - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - has_known_fishes = TRUE - break - if(!has_known_fishes) + if(!fish_source.has_known_fishes()) return examine_text += span_tinynoticeital("This is a fishing spot. You can look again to list its fishes...") @@ -62,18 +54,7 @@ if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) return - var/list/known_fishes = list() - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - known_fishes += initial(prototype.name) - - if(!length(known_fishes)) - return - - examine_text += span_info("You can catch the following fish here: [english_list(known_fishes)].") + fish_source.get_catchable_fish_names(user, parent, examine_text) /datum/component/fishing_spot/proc/try_start_fishing(obj/item/possibly_rod, mob/user) SIGNAL_HANDLER @@ -94,7 +75,7 @@ /datum/component/fishing_spot/proc/start_fishing_challenge(obj/item/fishing_rod/rod, mob/user) /// Roll what we caught based on modified table - var/result = fish_source.roll_reward(rod, user) + var/result = fish_source.roll_reward(rod, user, parent) var/datum/fishing_challenge/challenge = new(src, result, rod, user) fish_source.pre_challenge_started(rod, user, challenge) challenge.start(user) diff --git a/code/datums/components/profound_fisher.dm b/code/datums/components/profound_fisher.dm index 947e9d26f51..5bd5af12943 100644 --- a/code/datums/components/profound_fisher.dm +++ b/code/datums/components/profound_fisher.dm @@ -111,17 +111,17 @@ var/datum/fish_source/fish_spot = fish_spot_container[NPC_FISHING_SPOT] if(isnull(fish_spot)) return null - var/obj/effect/fishing_lure/lure = new(get_turf(target), target) - playsound(lure, 'sound/effects/splash.ogg', 100) + var/obj/effect/fishing_float/float = new(get_turf(target), target) + playsound(float, 'sound/effects/splash.ogg', 100) var/happiness_percentage = living_parent.ai_controller?.blackboard[BB_BASIC_HAPPINESS] / 100 var/fishing_speed = 10 SECONDS - round(4 SECONDS * happiness_percentage) if(!do_after(living_parent, fishing_speed, target = target) && !QDELETED(fish_spot)) - qdel(lure) + qdel(float) return var/reward_loot = fish_spot.roll_reward(our_rod, parent) fish_spot.dispense_reward(reward_loot, parent, target) - playsound(lure, 'sound/effects/bigsplash.ogg', 100) - qdel(lure) + playsound(float, 'sound/effects/bigsplash.ogg', 100) + qdel(float) /obj/item/fishing_rod/mob_fisher line = /obj/item/fishing_line/reinforced diff --git a/code/datums/components/sitcomlaughter.dm b/code/datums/components/sitcomlaughter.dm index 62e9276b1d7..02ed818ea30 100644 --- a/code/datums/components/sitcomlaughter.dm +++ b/code/datums/components/sitcomlaughter.dm @@ -1,6 +1,6 @@ /datum/component/wearertargeting/sitcomlaughter valid_slots = list(ITEM_SLOT_HANDS, ITEM_SLOT_BELT, ITEM_SLOT_ID, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_DEX_STORAGE) - signals = list(COMSIG_MOB_CREAMED, COMSIG_ON_CARBON_SLIP, COMSIG_POST_TILT_AND_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT) + signals = list(COMSIG_MOB_HIT_BY_SPLAT, COMSIG_ON_CARBON_SLIP, COMSIG_POST_TILT_AND_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT) proctype = PROC_REF(EngageInComedy) mobtype = /mob/living ///Sounds used for when user has a sitcom action occur diff --git a/code/datums/components/splat.dm b/code/datums/components/splat.dm new file mode 100644 index 00000000000..5d47d17b98c --- /dev/null +++ b/code/datums/components/splat.dm @@ -0,0 +1,74 @@ +/datum/component/splat + ///The icon state to use for the decal + var/icon_state + ///The bodypart layer to use for the decal + var/layer + ///The type of memory to celebrate the event of getting hit by this + var/memory_type + ///The type of smudge we create on the floor + var/smudge_type + ///The moodlet passed down to the creamed component + var/moodlet_type + ///The color we give to the creamed component/overlay + var/splat_color + ///The callback called when a mob is hit by this + var/datum/callback/hit_callback + +/datum/component/splat/Initialize( + icon_state = "creampie", + layer = EXTERNAL_FRONT, + memory_type = /datum/memory/witnessed_creampie, + smudge_type = /obj/effect/decal/cleanable/food/pie_smudge, + moodlet_type = /datum/mood_event/creampie, + splat_color, + datum/callback/hit_callback, +) + . = ..() + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + src.icon_state = icon_state + src.layer = layer + src.memory_type = memory_type + src.smudge_type = smudge_type + src.moodlet_type = moodlet_type + src.hit_callback = hit_callback + src.splat_color = splat_color + +/datum/component/splat/Destroy() + hit_callback = null + return ..() + +/datum/component/splat/RegisterWithParent() + if(isprojectile(parent)) + RegisterSignal(parent, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(projectile_splat)) + else + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(throw_splat)) + +/datum/component/splat/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOVABLE_IMPACT, COMSIG_PROJECTILE_SELF_ON_HIT)) + +/datum/component/splat/proc/projectile_splat(obj/projectile/source, atom/firer, atom/target, angle, hit_limb_zone, blocked) + SIGNAL_HANDLER + if(blocked != 100) + splat(source, target) + +/datum/component/splat/proc/throw_splat(atom/movable/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + SIGNAL_HANDLER + if(caught) //someone caught us! + return + splat(source, hit_atom) + +/datum/component/splat/proc/splat(atom/movable/source, atom/hit_atom) + var/turf/hit_turf = get_turf(hit_atom) + new smudge_type(hit_turf) + var/can_splat_on = TRUE + if(isliving(hit_atom)) + var/mob/living/living_target_getting_hit = hit_atom + if(iscarbon(living_target_getting_hit)) + can_splat_on = !!(living_target_getting_hit.get_bodypart(BODY_ZONE_HEAD)) + hit_callback?.Invoke(living_target_getting_hit, can_splat_on) + if(can_splat_on && is_type_in_typecache(hit_atom, GLOB.splattable)) + hit_atom.AddComponent(/datum/component/face_decal/splat, icon_state, layer, splat_color || source.color, memory_type, moodlet_type) + SEND_SIGNAL(source, COMSIG_MOVABLE_SPLAT, hit_atom) + qdel(source) diff --git a/code/datums/elements/can_shatter.dm b/code/datums/elements/can_shatter.dm index be7e02e25b4..df19e4ef123 100644 --- a/code/datums/elements/can_shatter.dm +++ b/code/datums/elements/can_shatter.dm @@ -45,9 +45,10 @@ shatter(source, impacted_turf) /// Tells the parent to shatter if we are thrown and impact something -/datum/element/can_shatter/proc/on_throw_impact(datum/source, atom/hit_atom) +/datum/element/can_shatter/proc/on_throw_impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - + if(caught) + return shatter(source, hit_atom) /// Handles the actual shattering part, throwing shards of whatever is defined on the component everywhere diff --git a/code/datums/elements/firestacker.dm b/code/datums/elements/firestacker.dm index b7bad65cc6c..a512e5e89c7 100644 --- a/code/datums/elements/firestacker.dm +++ b/code/datums/elements/firestacker.dm @@ -27,10 +27,10 @@ /datum/element/firestacker/proc/stack_on(datum/owner, mob/living/target) target.adjust_fire_stacks(amount) -/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - if(isliving(hit_atom)) + if(!caught && isliving(hit_atom)) stack_on(source, hit_atom) /datum/element/firestacker/proc/item_attack(datum/source, atom/movable/target, mob/living/user) diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm index 6df36c82c4c..244de8d7e84 100644 --- a/code/datums/elements/food/food_trash.dm +++ b/code/datums/elements/food/food_trash.dm @@ -22,11 +22,14 @@ RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, PROC_REF(open_trash)) if(flags & FOOD_TRASH_POPABLE) RegisterSignal(target, COMSIG_FOOD_CROSSED, PROC_REF(food_crossed)) - RegisterSignal(target, COMSIG_ITEM_ON_GRIND, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_ON_JUICE, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_USED_AS_INGREDIENT, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_ON_COMPOSTED, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_SOLD_TO_CUSTOMER, PROC_REF(generate_trash)) + RegisterSignals(target, list( + COMSIG_ITEM_ON_GRIND, + COMSIG_ITEM_ON_JUICE, + COMSIG_ITEM_USED_AS_INGREDIENT, + COMSIG_ITEM_ON_COMPOSTED, + COMSIG_ITEM_SOLD_TO_CUSTOMER, + COMSIG_MOVABLE_SPLAT, + ), PROC_REF(generate_trash)) /datum/element/food_trash/Detach(datum/target) . = ..() @@ -38,7 +41,9 @@ COMSIG_ITEM_ON_JUICE, COMSIG_ITEM_USED_AS_INGREDIENT, COMSIG_ITEM_ON_COMPOSTED, - COMSIG_ITEM_SOLD_TO_CUSTOMER,)) + COMSIG_ITEM_SOLD_TO_CUSTOMER, + COMSIG_MOVABLE_SPLAT, + )) /datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder) SIGNAL_HANDLER diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm index d112ef31b5f..df857cdd6ef 100644 --- a/code/datums/elements/frozen.dm +++ b/code/datums/elements/frozen.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 organ.organ_flags |= ORGAN_FROZEN RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(target, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(shatter_on_throw)) + RegisterSignal(target, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(shatter_on_landed)) RegisterSignal(target, COMSIG_MOVABLE_IMPACT, PROC_REF(shatter_on_throw)) RegisterSignal(target, COMSIG_OBJ_UNFREEZE, PROC_REF(on_unfreeze)) @@ -54,8 +54,13 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 SIGNAL_HANDLER Detach(source) -///signal handler for COMSIG_MOVABLE_POST_THROW that shatters our target after impacting after a throw -/datum/element/frozen/proc/shatter_on_throw(datum/target, datum/thrownthing/throwingdatum) +/datum/element/frozen/proc/shatter_on_throw(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + SIGNAL_HANDLER + if(!caught) + shatter_on_landed(source, throwing_datum) + +///signal handler that shatters our target after impacting after a throw. +/datum/element/frozen/proc/shatter_on_landed(datum/target, datum/thrownthing/throwingdatum) SIGNAL_HANDLER var/obj/obj_target = target if(ismob(throwingdatum.thrower)) diff --git a/code/datums/elements/lazy_fishing_spot.dm b/code/datums/elements/lazy_fishing_spot.dm index 1ba296bfe73..b84826def1e 100644 --- a/code/datums/elements/lazy_fishing_spot.dm +++ b/code/datums/elements/lazy_fishing_spot.dm @@ -41,15 +41,7 @@ var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] - var/has_known_fishes = FALSE - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - has_known_fishes = TRUE - break - if(!has_known_fishes) + if(!fish_source.has_known_fishes()) return examine_text += span_tinynoticeital("This is a fishing spot. You can look again to list its fishes...") @@ -60,19 +52,7 @@ return var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] - - var/list/known_fishes = list() - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - known_fishes += initial(prototype.name) - - if(!length(known_fishes)) - return - - examine_text += span_info("You can catch the following fish here: [english_list(known_fishes)].") + fish_source.get_catchable_fish_names(user, source, examine_text) /datum/element/lazy_fishing_spot/proc/explosive_fishing(atom/location, severity) SIGNAL_HANDLER diff --git a/code/datums/memory/general_memories.dm b/code/datums/memory/general_memories.dm index b8c44c6fca8..eca745d3283 100644 --- a/code/datums/memory/general_memories.dm +++ b/code/datums/memory/general_memories.dm @@ -162,6 +162,28 @@ "[protagonist_name] [mood_verb] as they lick off some of the pie", ) +/// Witnessed someone get splashed with squid ink. +/datum/memory/witnessed_inking + story_value = STORY_VALUE_OKAY + memory_flags = MEMORY_CHECK_BLINDNESS + // Protagonist - The mob that got pied + +/datum/memory/witnessed_inking/get_names() + return list("The inking of [protagonist_name].") + +/datum/memory/witnessed_inking/get_starts() + return list( + "[protagonist_name]'s face being covered in squid ink", + "[protagonist_name] getting squid-inked", + ) + +/datum/memory/witnessed_inking/get_moods() + return list( + "[protagonist_name] [mood_verb] as ink drips off their face", + "[protagonist_name] [mood_verb] because of their now expanded laundry task.", + "[protagonist_name] [mood_verb] as they wipe the ink off their face.", + ) + /// Got slipped by something. /datum/memory/was_slipped story_value = STORY_VALUE_MEH diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 6ad0580e555..82cd275aef2 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -33,6 +33,11 @@ mood_change = -2 timeout = 3 MINUTES +/datum/mood_event/inked + description = "I've been splashed with squid ink. Tastes like salt." + mood_change = -3 + timeout = 3 MINUTES + /datum/mood_event/slipped description = "I slipped. I should be more careful next time..." mood_change = -2 diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm index c9951b92094..7b69f02340c 100644 --- a/code/game/atom/atom_act.dm +++ b/code/game/atom/atom_act.dm @@ -115,11 +115,15 @@ * Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is * deleted shortly after hitting something (during explosions or other massive events that * throw lots of items around - singularity being a notable example) + * + * Worth of note: If hitby returns TRUE, it means the object has been blocked or catched by src. + * So far, this is only possible for living mobs and carbons, who can hold shields and catch thrown items. */ /atom/proc/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) SEND_SIGNAL(src, COMSIG_ATOM_HITBY, hitting_atom, skipcatch, hitpush, blocked, throwingdatum) if(density && !has_gravity(hitting_atom)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). addtimer(CALLBACK(src, PROC_REF(hitby_react), hitting_atom), 0.2 SECONDS) + return FALSE /** * We have have actually hit the passed in atom diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index e4aadc639e4..8f8d350c927 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1283,16 +1283,22 @@ /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) set waitfor = FALSE var/hitpush = TRUE - var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) - if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) - hitpush = FALSE // hacky, tie this to something else or a proper workaround later - - if(impact_signal && (impact_signal & COMPONENT_MOVABLE_IMPACT_NEVERMIND)) + var/impact_flags = pre_impact(hit_atom, throwingdatum) + if(impact_flags & COMPONENT_MOVABLE_IMPACT_NEVERMIND) return // in case a signal interceptor broke or deleted the thing before we could process our hit - if(SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) & COMSIG_HIT_PREVENTED) - return - SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) - return hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) + if(impact_flags & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) + hitpush = FALSE + var/caught = hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum, caught) + return caught + +///Called before we attempt to call hitby and send the COMSIG_MOVABLE_IMPACT signal +/atom/movable/proc/pre_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + var/impact_flags = SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) + var/target_flags = SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) + if(target_flags & COMSIG_HIT_PREVENTED) + impact_flags |= COMPONENT_MOVABLE_IMPACT_NEVERMIND + return impact_flags /atom/movable/hitby(atom/movable/hitting_atom, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) if(HAS_TRAIT(src, TRAIT_NO_THROW_HITPUSH)) diff --git a/code/game/objects/effects/decals/cleanable/food.dm b/code/game/objects/effects/decals/cleanable/food.dm index 0fc4352c78d..23c266ecb59 100644 --- a/code/game/objects/effects/decals/cleanable/food.dm +++ b/code/game/objects/effects/decals/cleanable/food.dm @@ -58,3 +58,14 @@ name = "flour" desc = "It's still good. Four second rule!" icon_state = "flour" + +/obj/effect/decal/cleanable/food/squid_ink + name = "ink smear" + desc = "a smear from some inky substance..." + icon = 'icons/mob/silicon/robots.dmi' + icon_state = "floor1" + color = COLOR_DARK + +/obj/effect/decal/cleanable/food/squid_ink/Initialize(mapload, list/datum/disease/diseases) + icon_state = "floor[rand(1, 7)]" + return ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 816ccaf8e6a..97c7937f674 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -831,36 +831,30 @@ . = ..() do_drop_animation(master_storage.parent) -/obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(QDELETED(hit_atom)) - return - if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) & COMPONENT_MOVABLE_IMPACT_NEVERMIND) - return - if(SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) & COMSIG_HIT_PREVENTED) - return - - SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) - if(get_temperature() && isliving(hit_atom)) - var/mob/living/L = hit_atom - L.ignite_mob() - var/itempush = 1 +/obj/item/pre_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + var/impact_flags = ..() if(w_class < WEIGHT_CLASS_BULKY) - itempush = 0 //too light to push anything - if(isliving(hit_atom)) //Living mobs handle hit sounds differently. - var/volume = get_volume_by_throwforce_and_or_w_class() - if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) - if (mob_throw_hit_sound) - playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1) - else if(hitsound) - playsound(hit_atom, hitsound, volume, TRUE, -1) - else - playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1) - else - playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1) + impact_flags |= COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH + if(!(impact_flags & COMPONENT_MOVABLE_IMPACT_NEVERMIND) && get_temperature() && isliving(hit_atom)) + var/mob/living/victim = hit_atom + victim.ignite_mob() + return impact_flags - else +/obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(!isliving(hit_atom)) //Living mobs handle hit sounds differently. playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE) - return hit_atom.hitby(src, 0, itempush, throwingdatum=throwingdatum) + return + var/volume = get_volume_by_throwforce_and_or_w_class() + if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) + if (mob_throw_hit_sound) + playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1) + else if(hitsound) + playsound(hit_atom, hitsound, volume, TRUE, -1) + else + playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1) + else + playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1) /obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) if(HAS_TRAIT(src, TRAIT_NODROP)) @@ -1765,3 +1759,37 @@ RETURN_TYPE(/obj/item) return src + +/// Checks if the bait is liked by the fish type or not. Returns a multiplier that affects the chance of catching it. +/obj/item/proc/check_bait(obj/item/fish/fish_type) + if(HAS_TRAIT(src, TRAIT_OMNI_BAIT)) + return 1 + var/catch_multiplier = 1 + var/list/properties = SSfishing.fish_properties[fish_type] + //Bait matching likes doubles the chance + var/list/fav_bait = properties[FISH_PROPERTIES_FAV_BAIT] + for(var/bait_identifer in fav_bait) + if(is_matching_bait(src, bait_identifer)) + catch_multiplier *= 2 + //Bait matching dislikes + var/list/disliked_bait = properties[FISH_PROPERTIES_BAD_BAIT] + for(var/bait_identifer in disliked_bait) + if(is_matching_bait(src, bait_identifer)) + catch_multiplier *= 0.5 + return catch_multiplier + +/// Helper proc that checks if a bait matches identifier from fav/disliked bait list +/proc/is_matching_bait(obj/item/bait, identifier) + if(ispath(identifier)) //Just a path + return istype(bait, identifier) + if(!islist(identifier)) + return HAS_TRAIT(bait, identifier) + var/list/special_identifier = identifier + switch(special_identifier[FISH_BAIT_TYPE]) + if(FISH_BAIT_FOODTYPE) + var/obj/item/food/food_bait = bait + return istype(food_bait) && food_bait.foodtypes & special_identifier[FISH_BAIT_VALUE] + if(FISH_BAIT_REAGENT) + return bait.reagents?.has_reagent(special_identifier[FISH_BAIT_VALUE], special_identifier[FISH_BAIT_AMOUNT], check_subtypes = TRUE) + else + CRASH("Unknown bait identifier in fish favourite/disliked list") diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 53781e8a1ea..b2cf4d132c5 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -805,3 +805,30 @@ foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_TINY crafting_complexity = FOOD_COMPLEXITY_4 + +///Extracted from squids, or any fish with the ink fish trait. +/obj/item/food/ink_sac + name = "ink sac" + desc = "the ink sac from some sort of fish or mollusk. It could be canned with a processor." + icon_state = "ink_sac" + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/salt = 5) + tastes = list("seafood" = 3) + foodtypes = SEAFOOD|RAW + +/obj/item/food/ink_sac/Initialize(mapload) + . = ..() + AddComponent(/datum/component/splat, \ + memory_type = /datum/memory/witnessed_inking, \ + smudge_type = /obj/effect/decal/cleanable/food/squid_ink, \ + moodlet_type = /datum/mood_event/inked, \ + splat_color = COLOR_NEARLY_ALL_BLACK, \ + hit_callback = CALLBACK(src, PROC_REF(blind_em)), \ + ) + +/obj/item/food/ink_sac/proc/blind_em(mob/living/victim, can_splat_on) + if(can_splat_on) + victim.adjust_temp_blindness_up_to(7 SECONDS, 10 SECONDS) + victim.adjust_confusion_up_to(3.5 SECONDS, 6 SECONDS) + victim.Paralyze(2 SECONDS) //splat! + victim.visible_message(span_warning("[victim] is inked by [src]!"), span_userdanger("You've been inked by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index 0f08fd8f57d..b3578204a2d 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -156,6 +156,25 @@ tastes = list("seafood" = 7, "tin" = 1) foodtypes = SEAFOOD +/obj/item/food/canned/squid_ink/open_can(mob/user) + . = ..() + AddComponent(/datum/component/splat, \ + memory_type = /datum/memory/witnessed_inking, \ + smudge_type = /obj/effect/decal/cleanable/food/squid_ink, \ + moodlet_type = /datum/mood_event/inked, \ + splat_color = COLOR_NEARLY_ALL_BLACK, \ + hit_callback = CALLBACK(src, PROC_REF(blind_em)), \ + ) + ADD_TRAIT(src, TRAIT_UNCATCHABLE, INNATE_TRAIT) //good luck catching the liquid + +/obj/item/food/canned/squid_ink/proc/blind_em(mob/living/victim, can_splat_on) + if(can_splat_on) + victim.adjust_temp_blindness_up_to(7 SECONDS, 10 SECONDS) + victim.adjust_confusion_up_to(3.5 SECONDS, 6 SECONDS) + victim.Paralyze(2 SECONDS) //splat! + victim.visible_message(span_warning("[victim] is inked by [src]!"), span_userdanger("You've been inked by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) + /obj/item/food/canned/chap name = "can of CHAP" desc = "CHAP: Chopped Ham And Pork. The classic American canned meat product that won a world war, then sent millions of servicemen home with heart congestion." diff --git a/code/game/objects/items/food/pie.dm b/code/game/objects/items/food/pie.dm index 0cb5af860e8..6d73bc2f5df 100644 --- a/code/game/objects/items/food/pie.dm +++ b/code/game/objects/items/food/pie.dm @@ -74,32 +74,17 @@ var/stunning = TRUE crafting_complexity = FOOD_COMPLEXITY_3 -/obj/item/food/pie/cream/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/food/pie/cream/Initialize(mapload) . = ..() - if(!.) //if we're not being caught - splat(hit_atom) + AddComponent(/datum/component/splat, hit_callback = CALLBACK(src, PROC_REF(stun_and_blur))) -/obj/item/food/pie/cream/proc/splat(atom/movable/hit_atom) - if(isliving(loc)) //someone caught us! - return - var/turf/hit_turf = get_turf(hit_atom) - new/obj/effect/decal/cleanable/food/pie_smudge(hit_turf) - if(reagents?.total_volume) - reagents.expose(hit_atom, TOUCH) - var/is_creamable = TRUE - if(isliving(hit_atom)) - var/mob/living/living_target_getting_hit = hit_atom - if(stunning) - living_target_getting_hit.Paralyze(2 SECONDS) //splat! - if(iscarbon(living_target_getting_hit)) - is_creamable = !!(living_target_getting_hit.get_bodypart(BODY_ZONE_HEAD)) - if(is_creamable) - living_target_getting_hit.adjust_eye_blur(2 SECONDS) - living_target_getting_hit.visible_message(span_warning("[living_target_getting_hit] is creamed by [src]!"), span_userdanger("You've been creamed by [src]!")) - playsound(living_target_getting_hit, SFX_DESECRATION, 50, TRUE) - if(is_creamable && is_type_in_typecache(hit_atom, GLOB.creamable)) - hit_atom.AddComponent(/datum/component/face_decal/creampie, "creampie", EXTERNAL_FRONT) - qdel(src) +/obj/item/food/pie/cream/proc/stun_and_blur(mob/living/victim, can_splat_on) + if(stunning) + victim.Paralyze(2 SECONDS) //splat! + if(can_splat_on) + victim.adjust_eye_blur(2 SECONDS) + victim.visible_message(span_warning("[victim] is creamed by [src]!"), span_userdanger("You've been creamed by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) /obj/item/food/pie/cream/nostun stunning = FALSE diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index aa42b5cacde..f7ce106d580 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -237,6 +237,12 @@ cost = PAYCHECK_CREW contains = list(/obj/item/storage/box/fishing_lines) +/datum/supply_pack/goody/fishing_lure_set + name = "Fishing Lures Set" + desc = "A set of bite-resistant fishing lures to fish all (most) sort of fish. Beat randomness to a curb today!" + cost = PAYCHECK_CREW * 8 + contains = list(/obj/item/storage/box/fishing_lures) + /datum/supply_pack/goody/fishing_hook_rescue name = "Rescue Fishing Hook Single-Pack" desc = "For when your fellow miner has inevitably fallen into a chasm, and it's up to you to save them." @@ -252,7 +258,7 @@ /datum/supply_pack/goody/fish_feed name = "Can of Fish Food Single-Pack" desc = "For keeping your little friends fed and alive." - cost = PAYCHECK_CREW * 1 + cost = PAYCHECK_CREW contains = list(/obj/item/fish_feed) /datum/supply_pack/goody/naturalbait diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm index ba5c29a7fd1..f4643201a77 100644 --- a/code/modules/fishing/admin.dm +++ b/code/modules/fishing/admin.dm @@ -51,7 +51,7 @@ ADMIN_VERB(fishing_calculator, R_DEBUG, "Fishing Calculator", "A calculator... f temporary_rod.set_slot(new line_type(temporary_rod), ROD_SLOT_LINE) var/result_table = list() - var/modified_table = spot.get_modified_fish_table(temporary_rod,user) + var/modified_table = spot.get_modified_fish_table(temporary_rod, user, null) for(var/result_type in spot.fish_table) // through this not modified to display 0 chance ones too var/list/info = list() info["result"] = result_type diff --git a/code/modules/fishing/bait.dm b/code/modules/fishing/bait.dm index 8eb8911a864..8fb66ad4c3d 100644 --- a/code/modules/fishing/bait.dm +++ b/code/modules/fishing/bait.dm @@ -61,21 +61,239 @@ bait_type = /obj/item/food/bait/doughball/synthetic/super uses_left = 12 +/obj/item/fishing_lure + name = "artificial minnow" + desc = "A fishing lure meant to attract smaller omnivore fish." + icon = 'icons/obj/fishing.dmi' + icon_state = "minnow" + w_class = WEIGHT_CLASS_SMALL + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * This is passed down to the fishing rod, and then to the lure during the minigame. + */ + var/spin_frequency = list(2 SECONDS, 3 SECONDS) -/// Helper proc that checks if a bait matches identifier from fav/disliked bait list -/proc/is_matching_bait(obj/item/bait, identifier) - if(ispath(identifier)) //Just a path - return istype(bait, identifier) - if(islist(identifier)) - var/list/special_identifier = identifier - switch(special_identifier["Type"]) - if("Foodtype") - var/obj/item/food/food_bait = bait - return istype(food_bait) && food_bait.foodtypes & special_identifier["Value"] - if("Reagent") - return bait.reagents?.has_reagent(special_identifier["Value"], special_identifier["Amount"], check_subtypes = TRUE) - else - CRASH("Unknown bait identifier in fish favourite/disliked list") - else - return HAS_TRAIT(bait, identifier) +/obj/item/fishing_lure/Initialize(mapload) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_BAIT_ALLOW_FISHING_DUD, TRAIT_OMNI_BAIT, TRAIT_BAIT_UNCONSUMABLE), INNATE_TRAIT) + RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(lure_equipped)) +/obj/item/fishing_lure/proc/lure_equipped(datum/source, obj/item/fishing_rod/rod) + SIGNAL_HANDLER + rod.spin_frequency = spin_frequency + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed)) + +/obj/item/fishing_lure/proc/on_removed(atom/movable/source, obj/item/fishing_rod/rod, dir, forced) + SIGNAL_HANDLER + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + rod.spin_frequency = null + +///Called for every fish subtype by the fishing subsystem when initializing, to populate the list of fish that can be catched with this lure. +/obj/item/fishing_lure/proc/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + var/intermediate_size = FISH_SIZE_SMALL_MAX + (FISH_SIZE_NORMAL_MAX - FISH_SIZE_SMALL_MAX) + if(!ISINRANGE(avg_size, FISH_SIZE_TINY_MAX * 0.5, intermediate_size)) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/examine(mob/user) + . = ..() + . += span_info("It has to be spun with a frequency of [spin_frequency[1] * 0.1] to [spin_frequency[2] * 0.1] seconds while fishing.") + if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) + . += span_tinynotice("Thanks to your experience, you can examine it again to get a list of fish you can catch with it.") + +/obj/item/fishing_lure/examine_more(mob/user) + . = ..() + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) + return + + var/list/known_fishes = list() + for(var/obj/item/fish/fish_type as anything in SSfishing.lure_catchables[type]) + if(initial(fish_type.show_in_catalog)) + known_fishes += initial(fish_type.name) + + if(!length(known_fishes)) + return + + . += span_info("You can catch the following fish with this lure: [english_list(known_fishes)].") + +///Check if the fish is in the list of catchable fish for this fishing lure. Return value is a multiplier. +/obj/item/fishing_lure/check_bait(obj/item/fish/fish_type) + var/multiplier = 0 + if(is_type_in_list(/obj/item/fishing_lure, SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT])) + multiplier += 2 + if(fish_type in SSfishing.lure_catchables[type]) + multiplier += 10 + return multiplier + +/obj/item/fishing_lure/plug + name = "big plug lure" + desc = "A fishing lure used to catch larger omnivore fish." + icon_state = "plug" + +/obj/item/fishing_lure/plug/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + if(avg_size <= FISH_SIZE_SMALL_MAX) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/dropping + name = "plastic dropping" + desc = "A fishing lure to catch all sort of slimy, ratty, disgusting and/or junk-loving fish." + icon_state = "dropping" + spin_frequency = list(1.5 SECONDS, 2.5 SECONDS) + +/obj/item/fishing_lure/dropping/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/sources = list(/datum/fish_source/toilet, /datum/fish_source/moisture_trap) + for(var/datum/fish_source/source as anything in sources) + var/datum/fish_source/instance = GLOB.preset_fish_sources[/datum/fish_source/toilet] + if(fish_type in instance.fish_table) + return TRUE + var/list/fav_baits = fish_properties[FISH_PROPERTIES_FAV_BAIT] + for(var/list/identifier in fav_baits) + if(identifier[FISH_BAIT_TYPE] == FISH_BAIT_FOODTYPE && (identifier[FISH_BAIT_VALUE] & (JUNKFOOD|GROSS|TOXIC))) + return TRUE + if(initial(fish_type.beauty) <= FISH_BEAUTY_DISGUSTING) + return TRUE + return FALSE + +/obj/item/fishing_lure/spoon + name = "\improper Indy spoon lure" + desc = "A lustrous piece of metal mimicking the scales of a fish. Good for catching small to medium freshwater omnivore fish." + icon_state = "spoon" + spin_frequency = list(1.25 SECONDS, 2.1 SECONDS) + +/obj/item/fishing_lure/spoon/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + if(!ISINRANGE(avg_size, FISH_SIZE_TINY_MAX + 1, FISH_SIZE_NORMAL_MAX)) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + var/fluid_type = initial(fish_type.required_fluid_type) + if(fluid_type == AQUARIUM_FLUID_FRESHWATER || fluid_type == AQUARIUM_FLUID_ANADROMOUS || fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + if((/datum/fish_trait/amphibious in fish_traits) && fluid_type == AQUARIUM_FLUID_AIR) + return TRUE + return FALSE + +/obj/item/fishing_lure/artificial_fly + name = "\improper Silkbuzz artificial fly" + desc = "A fishing lure resembling a large wooly fly. Good for catching all sort of picky fish." + icon_state = "artificial_fly" + spin_frequency = list(1.1 SECONDS, 1.9 SECONDS) + +/obj/item/fishing_lure/artificial_fly/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/picky_eater in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/led + name = "\improper LED fishing lure" + desc = "A heavy, waterproof and fish-looking LED stick, used to catch abyssal and demersal fish alike." + icon_state = "led" + spin_frequency = list(3 SECONDS, 3.75 SECONDS) + +/obj/item/fishing_lure/led/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_BAIT_IGNORE_ENVIRONMENT, INNATE_TRAIT) + update_appearance(UPDATE_OVERLAYS) + +/obj/item/fishing_lure/led/update_overlays() + . = ..() + . += emissive_appearance(icon, "led_emissive", src) + +/obj/item/fishing_lure/led/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return TRUE + return FALSE + +/obj/item/fishing_lure/lucky_coin + name = "\improper Maneki-Coin lure" + desc = "A faux-gold lure used to attract shiny-loving fish." + icon_state = "lucky_coin" + spin_frequency = list(1.5 SECONDS, 2.5 SECONDS) + +/obj/item/fishing_lure/lucky_coin/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/shiny_lover in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/algae + name = "plastic algae lure" + desc = "A soft clump of fake algae used to attract herbivore water critters." + icon_state = "algae" + spin_frequency = list(3 SECONDS, 5 SECONDS) + +/obj/item/fishing_lure/algae/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/vegan in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/grub + name = "\improper Twister Worm lure" + desc = "A soft plastic lure with the body of a grub and a twisting tail. Good for panfish and other small omnivore fish." + icon_state = "grub" + spin_frequency = list(1 SECONDS, 2.5 SECONDS) + +/obj/item/fishing_lure/grub/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + if(initial(fish_type.average_size) >= FISH_SIZE_SMALL_MAX) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/buzzbait + name = "\improper Electric-Buzz lure" + desc = "A metallic, colored clanked attached to a series of cables that somehow attract shock-worthy fish." + icon_state = "buzzbait" + spin_frequency = list(0.8 SECONDS, 1.6 SECONDS) + +/obj/item/fishing_lure/buzzbait/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/electrogenesis in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/spinnerbait + name = "spinnerbait lure" + desc = "A versatile lure, good for catching all sort of predatory freshwater fish." + icon_state = "spinnerbait" + spin_frequency = list(2 SECONDS, 4 SECONDS) + +/obj/item/fishing_lure/spinnerbait/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(!(/datum/fish_trait/predator in fish_traits)) + return FALSE + var/init_fluid_type = initial(fish_type.required_fluid_type) + if(init_fluid_type == AQUARIUM_FLUID_FRESHWATER || init_fluid_type == AQUARIUM_FLUID_ANADROMOUS || init_fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + if((/datum/fish_trait/amphibious in fish_traits) && init_fluid_type == AQUARIUM_FLUID_AIR) //fluid type is changed to freshwater on init + return TRUE + return FALSE + +/obj/item/fishing_lure/daisy_chain + name = "daisy chain lure" + desc = "A lure resembling a small school of fish, good for catching several saltwater predators." + icon_state = "daisy_chain" + spin_frequency = list(2 SECONDS, 4 SECONDS) + +/obj/item/fishing_lure/daisy_chain/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(!(/datum/fish_trait/predator in fish_traits)) + return FALSE + var/init_fluid_type = initial(fish_type.required_fluid_type) + if(init_fluid_type == AQUARIUM_FLUID_SALTWATER || init_fluid_type == AQUARIUM_FLUID_ANADROMOUS || init_fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + return FALSE diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 35eb170e6a8..08d09188e6b 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -208,6 +208,8 @@ if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) . += span_notice("It's [size] cm long.") . += span_notice("It weighs [weight] g.") + if(HAS_TRAIT(src, TRAIT_FISHING_BAIT)) + . += span_smallnoticeital("It can be used as a fishing bait.") ///Randomizes weight and size. /obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = weight_size_deviation) @@ -255,7 +257,7 @@ inhand_icon_state = "fish_huge" update_weight_class(WEIGHT_CLASS_GIGANTIC) - if(size > FISH_SIZE_TWO_HANDS_REQUIRED) + if(size > FISH_SIZE_TWO_HANDS_REQUIRED || (HAS_TRAIT(src, TRAIT_FISH_SHOULD_TWOHANDED) && w_class >= WEIGHT_CLASS_BULKY)) inhand_icon_state = "[inhand_icon_state]_wielded" AddComponent(/datum/component/two_handed, require_twohands = TRUE) diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 3667a038bff..e51b810d16b 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -46,7 +46,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) return list(ADDITIVE_FISHING_MOD = 0, MULTIPLICATIVE_FISHING_MOD = 1) /// Catch weight table modifier from this mod, needs to return a list with two values -/datum/fish_trait/proc/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/proc/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) SHOULD_CALL_PARENT(TRUE) return list(ADDITIVE_FISHING_MOD = 0, MULTIPLICATIVE_FISHING_MOD = 1) @@ -113,8 +113,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) var/live_amount = max(round((source.weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * live_mult, 0.1), live_mult) var/dead_amount = max(round((source.weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * dead_mult, 0.1), dead_mult) var/is_dead = source.status == FISH_DEAD - source.RemoveElement(/datum/element/venomous, venom_path, is_dead ? live_amount : dead_amount) - source.AddElement(/datum/element/venomous, venom_path, is_dead ? dead_amount : live_amount) + source.RemoveElement(/datum/element/venomous, venom_path, is_dead ? live_amount : dead_amount, thrown_effect = TRUE) + source.AddElement(/datum/element/venomous, venom_path, is_dead ? dead_amount : live_amount, thrown_effect = TRUE) /datum/fish_trait/wary name = "Wary" @@ -138,27 +138,30 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /datum/fish_trait/picky_eater name = "Picky Eater" - catalog_description = "This fish is very picky and will ignore low quality bait." + catalog_description = "This fish is very picky and will ignore low quality bait (unless it's amongst its favorites)." -/datum/fish_trait/picky_eater/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/picky_eater/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return + if(is_matching_bait(rod.bait, SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT])) //we like this bait anyway + return if(!HAS_TRAIT(rod.bait, TRAIT_GOOD_QUALITY_BAIT) && !HAS_TRAIT(rod.bait, TRAIT_GREAT_QUALITY_BAIT)) .[MULTIPLICATIVE_FISHING_MOD] = 0 - /datum/fish_trait/nocturnal name = "Nocturnal" catalog_description = "This fish avoids bright lights, fishing and storing in darkness recommended." -/datum/fish_trait/nocturnal/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/nocturnal/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() - var/turf/turf = get_turf(fisherman) - var/light_amount = turf.get_lumcount() + if(rod.bait && HAS_TRAIT(rod.bait, TRAIT_BAIT_IGNORE_ENVIRONMENT)) + return + var/turf/turf = get_turf(location) + var/light_amount = turf?.get_lumcount() if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) .[MULTIPLICATIVE_FISHING_MOD] = 0 @@ -195,7 +198,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) mob.apply_status_effect(/datum/status_effect/shadow_regeneration) /datum/fish_trait/heavy - name = "Heavy" + name = "Demersal" catalog_description = "This fish tends to stay near the waterbed." /datum/fish_trait/heavy/apply_to_mob(mob/living/basic/mob) @@ -215,7 +218,28 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish can only be baited with meat." incompatible_traits = list(/datum/fish_trait/vegan) -/datum/fish_trait/carnivore/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/carnivore/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) + . = ..() + if(!rod.bait) + .[MULTIPLICATIVE_FISHING_MOD] = 0 + return + if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) + return + if(isfish(rod.bait)) + return + if(!istype(rod.bait, /obj/item/food)) + .[MULTIPLICATIVE_FISHING_MOD] = 0 + return + var/obj/item/food/food_bait = rod.bait + if(!(food_bait.foodtypes & (MEAT|SEAFOOD|BUGS))) + .[MULTIPLICATIVE_FISHING_MOD] = 0 + +/datum/fish_trait/vegan + name = "Herbivore" + catalog_description = "This fish can only be baited with fresh produce." + incompatible_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/necrophage) + +/datum/fish_trait/vegan/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 @@ -225,23 +249,10 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) if(!istype(rod.bait, /obj/item/food)) .[MULTIPLICATIVE_FISHING_MOD] = 0 return + if(istype(rod.bait, /obj/item/food/grown)) + return var/obj/item/food/food_bait = rod.bait - if(!(food_bait.foodtypes & MEAT)) - .[MULTIPLICATIVE_FISHING_MOD] = 0 - -/datum/fish_trait/vegan - name = "Herbivore" - catalog_description = "This fish can only be baited with fresh produce." - incompatible_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/necrophage) - -/datum/fish_trait/vegan/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) - . = ..() - if(!rod.bait) - .[MULTIPLICATIVE_FISHING_MOD] = 0 - return - if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) - return - if(!istype(rod.bait, /obj/item/food/grown)) + if(food_bait.foodtypes & (MEAT|SEAFOOD|GORE|BUGS|DAIRY) || !(food_bait.foodtypes & (VEGETABLES|FRUIT))) .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/emulsijack @@ -371,6 +382,11 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "It's a predatory fish. It'll hunt down and eat live fishes of smaller size when hungry." incompatible_traits = list(/datum/fish_trait/vegan) +/datum/fish_trait/predator/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) + . = ..() + if(isfish(rod.bait)) + .[MULTIPLICATIVE_FISHING_MOD] *= 2 + /datum/fish_trait/predator/apply_to_fish(obj/item/fish/fish) . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(eat_fishes)) @@ -647,3 +663,60 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) return change_venom_on_death(source, /datum/reagent/toxin/venom, 0.7, 0.3) + +/datum/fish_trait/ink + name = "Ink Production" + catalog_description = "This fish possess a sac that produces ink." + diff_traits_inheritability = 70 + spontaneous_manifest_types = list(/obj/item/fish/squid = 35) + +/datum/fish_trait/ink/apply_to_fish(obj/item/fish/fish) + . = ..() + RegisterSignal(fish, COMSIG_ATOM_PROCESSED, PROC_REF(on_process)) + RegisterSignal(fish, COMSIG_ITEM_ATTACK_ZONE, PROC_REF(attacked_someone)) + +/datum/fish_trait/ink/proc/attacked_someone(obj/item/fish/source, mob/living/target, mob/living/user, zone) + SIGNAL_HANDLER + if(HAS_TRAIT(source, TRAIT_FISH_INK_ON_COOLDOWN) || source.status == FISH_DEAD) + return + if(!iscarbon(target) || target.get_bodypart(BODY_ZONE_HEAD)) + target.adjust_temp_blindness_up_to(4 SECONDS, 8 SECONDS) + target.adjust_confusion_up_to(1.5 SECONDS, 4 SECONDS) + target.AddComponent(/datum/component/face_decal/splat, \ + color = COLOR_NEARLY_ALL_BLACK, \ + memory_type = /datum/memory/witnessed_inking, \ + mood_event_type = /datum/mood_event/inked, \ + ) + target.visible_message(span_warning("[target] is inked by [source]!"), span_userdanger("You've been inked by [source]!")) + playsound(target, SFX_DESECRATION, 50, TRUE) + ADD_TRAIT(source, TRAIT_FISH_INK_ON_COOLDOWN, FISH_TRAIT_DATUM) + addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_FISH_INK_ON_COOLDOWN, FISH_TRAIT_DATUM), 9 SECONDS) + +/datum/fish_trait/ink/proc/on_process(obj/item/fish/source, mob/living/user, obj/item/process_item, list/results) + SIGNAL_HANDLER + new /obj/item/food/ink_sac(source.drop_location()) + +/datum/fish_trait/camouflage + name = "Camouflage" + catalog_description = "This fish possess the ability to blend with its surroundings." + spontaneous_manifest_types = list(/obj/item/fish/squid = 35) + +/datum/fish_trait/camouflage/minigame_mod(obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/minigame) + minigame.special_effects |= FISHING_MINIGAME_RULE_CAMO + +/datum/fish_trait/camouflage/apply_to_fish(obj/item/fish/fish) + . = ..() + RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(fade_out)) + RegisterSignals(fish, list(COMSIG_MOVABLE_MOVED, COMSIG_FISH_STATUS_CHANGED), PROC_REF(reset_alpha)) + +/datum/fish_trait/camouflage/proc/fade_out(obj/item/fish/source, seconds_per_tick) + SIGNAL_HANDLER + if(source.status == FISH_DEAD || source.last_move + 5 SECONDS >= world.time) + return + source.alpha = max(source.alpha - 10 * seconds_per_tick, 10) + +/datum/fish_trait/camouflage/proc/reset_alpha(obj/item/fish/source) + SIGNAL_HANDLER + var/init_alpha = initial(source.alpha) + if(init_alpha != source.alpha) + animate(source.alpha, alpha = init_alpha, time = 1.2 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm deleted file mode 100644 index 81c716cecc2..00000000000 --- a/code/modules/fishing/fish/fish_types.dm +++ /dev/null @@ -1,1205 +0,0 @@ -// Freshwater fish - -/obj/item/fish/goldfish - name = "goldfish" - desc = "Despite common belief, goldfish do not have three-second memories. \ - They can actually remember things that happened up to three months ago." - icon_state = "goldfish" - dedicated_in_aquarium_icon_state = "fish_greyscale" - aquarium_vc_color = "#D8540D" - sprite_width = 5 - sprite_height = 3 - stable_population = 3 - average_size = 30 - average_weight = 500 - weight_size_deviation = 0.35 - favorite_bait = list(/obj/item/food/bait/worm) - required_temperature_min = MIN_AQUARIUM_TEMP+18 - required_temperature_max = MIN_AQUARIUM_TEMP+26 - evolution_types = list(/datum/fish_evolution/three_eyes, /datum/fish_evolution/chainsawfish) - compatible_types = list(/obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes, /obj/item/fish/goldfish/three_eyes/gill) - -/obj/item/fish/goldfish/gill - name = "McGill" - desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." - stable_population = 1 - random_case_rarity = FISH_RARITY_NOPE - show_in_catalog = FALSE - beauty = FISH_BEAUTY_GOOD - compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) - fish_traits = list(/datum/fish_trait/recessive) - -/obj/item/fish/goldfish/three_eyes - name = "three-eyed goldfish" - desc = "A goldfish with an extra half a pair of eyes. You wonder what it's been feeding on lately..." - icon_state = "three_eyes" - stable_population = 4 - fish_traits = list(/datum/fish_trait/recessive, /datum/fish_trait/shiny_lover) - compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes/gill) - beauty = FISH_BEAUTY_GOOD - fishing_difficulty_modifier = 10 - random_case_rarity = FISH_RARITY_VERY_RARE - food = /datum/reagent/toxin/mutagen - favorite_bait = list( - list( - "Type" = "Reagent", - "Value" = /datum/reagent/toxin/mutagen, - "Amount" = 3, - ), - ) - -/obj/item/fish/goldfish/three_eyes/gill - name = "McGill" - desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case. It looks kinda different today..." - compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) - beauty = FISH_BEAUTY_GREAT - show_in_catalog = FALSE - stable_population = 1 - random_case_rarity = FISH_RARITY_NOPE - -/obj/item/fish/angelfish - name = "angelfish" - desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood." - icon_state = "angelfish" - sprite_width = 4 - sprite_height = 7 - average_size = 30 - average_weight = 500 - stable_population = 3 - fish_traits = list(/datum/fish_trait/aggressive) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/guppy - name = "guppy" - desc = "Guppy is also known as rainbow fish because of the brightly colored body and fins." - icon_state = "guppy" - sprite_width = 5 - sprite_height = 2 - average_size = 30 - average_weight = 500 - stable_population = 6 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/plasmatetra - name = "plasma tetra" - desc = "Due to their small size, tetras are prey to many predators in their watery world, including eels, crustaceans, and invertebrates." - icon_state = "plastetra" - sprite_width = 4 - sprite_height = 2 - average_size = 30 - average_weight = 500 - stable_population = 3 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/catfish - name = "catfish" - desc = "A catfish has about 100,000 taste buds, and their bodies are covered with them to help detect chemicals present in the water and also to respond to touch." - icon_state = "catfish" - sprite_width = 8 - sprite_height = 4 - average_size = 80 - average_weight = 1600 - weight_size_deviation = 0.35 - stable_population = 3 - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = JUNKFOOD - ) - ) - required_temperature_min = MIN_AQUARIUM_TEMP+12 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/tadpole - name = "tadpole" - desc = "The larval spawn of an amphibian. A very minuscle, round creature with a long tail it uses to swim around." - icon_state = "tadpole" - average_size = 3 - average_weight = 10 - sprite_width = 3 - sprite_height = 1 - health = 50 - feeding_frequency = 1.5 MINUTES - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+20 - fillet_type = null - fish_traits = list(/datum/fish_trait/no_mating) //They grow into frogs and that's it. - beauty = FISH_BEAUTY_NULL - random_case_rarity = FISH_RARITY_NOPE //Why would you want generic frog tadpoles you get from ponds inside fish cases? - /// Once dead, tadpoles disappear after a dozen seconds, since you can get infinite tadpoles. - var/del_timerid - -/obj/item/fish/tadpole/Initialize(mapload, apply_qualities = TRUE) - . = ..() - AddComponent(/datum/component/fish_growth, /mob/living/basic/frog, 100 / rand(2.5, 3 MINUTES) * 10) - RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) - RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) - -/obj/item/fish/tadpole/set_status(new_status, silent = FALSE) - . = ..() - if(status == FISH_DEAD) - del_timerid = QDEL_IN_STOPPABLE(src, 12 SECONDS) - else - deltimer(del_timerid) - -/obj/item/fish/tadpole/proc/growth_checks(datum/source, seconds_per_tick) - SIGNAL_HANDLER - var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) - if(hunger >= 0.7) //too hungry to grow - return COMPONENT_DONT_GROW - var/obj/structure/aquarium/aquarium = loc - if(!aquarium.allow_breeding) //the aquarium has breeding disabled - return COMPONENT_DONT_GROW - -/obj/item/fish/tadpole/proc/on_growth(datum/source, mob/living/basic/frog/result) - SIGNAL_HANDLER - playsound(result, result.attack_sound, 50, TRUE) // reeeeeeeeeeeeeee... - -/obj/item/fish/tadpole/get_export_price(price, percent) - return 2 //two credits. Tadpoles aren't really that valueable. - -// Saltwater fish below - -/obj/item/fish/clownfish - name = "clownfish" - desc = "Clownfish catch prey by swimming onto the reef, attracting larger fish, and luring them back to the anemone. The anemone will sting and eat the larger fish, leaving the remains for the clownfish." - icon_state = "clownfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 7 - sprite_height = 4 - average_size = 30 - average_weight = 500 - stable_population = 4 - fish_traits = list(/datum/fish_trait/picky_eater) - evolution_types = list(/datum/fish_evolution/lubefish) - compatible_types = list(/obj/item/fish/clownfish/lube) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/clownfish/lube - name = "lubefish" - desc = "A clownfish exposed to cherry-flavored lube for far too long. First discovered the days following a cargo incident around the seas of Europa, when thousands of thousands of thousands..." - icon_state = "lubefish" - random_case_rarity = FISH_RARITY_VERY_RARE - fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/lubed) - evolution_types = null - compatible_types = list(/obj/item/fish/clownfish) - food = /datum/reagent/lube - fishing_difficulty_modifier = 5 - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/cardinal - name = "cardinalfish" - desc = "Cardinalfish are often found near sea urchins, where the fish hide when threatened." - icon_state = "cardinalfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 6 - sprite_height = 3 - average_size = 30 - average_weight = 500 - stable_population = 4 - fish_traits = list(/datum/fish_trait/vegan) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/greenchromis - name = "green chromis" - desc = "The Chromis can vary in color from blue to green depending on the lighting and distance from the lights." - icon_state = "greenchromis" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 5 - sprite_height = 3 - average_size = 30 - average_weight = 500 - stable_population = 5 - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - - fishing_difficulty_modifier = 5 // Bit harder - -/obj/item/fish/firefish - name = "firefish goby" - desc = "To communicate in the wild, the firefish uses its dorsal fin to alert others of potential danger." - icon_state = "firefish" - sprite_width = 5 - sprite_height = 3 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - average_size = 30 - average_weight = 500 - stable_population = 3 - disliked_bait = list(/obj/item/food/bait/worm, /obj/item/food/bait/doughball) - fish_movement_type = /datum/fish_movement/zippy - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/pufferfish - name = "pufferfish" - desc = "They say that one pufferfish contains enough toxins to kill 30 people, although in the last few decades they've been genetically engineered en masse to be less poisonous." - icon_state = "pufferfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 8 - sprite_height = 6 - average_size = 60 - average_weight = 1000 - stable_population = 3 - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - fillet_type = /obj/item/food/fishmeat/quality //Too bad they're poisonous - fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/toxic) - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/lanternfish - name = "lanternfish" - desc = "Typically found in areas below 6600 feet below the surface of the ocean, they live in complete darkness." - icon_state = "lanternfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - random_case_rarity = FISH_RARITY_VERY_RARE - sprite_width = 6 - sprite_height = 5 - average_size = 50 - average_weight = 1000 - stable_population = 3 - fish_traits = list(/datum/fish_trait/nocturnal) - required_temperature_min = MIN_AQUARIUM_TEMP+2 //My source is that the water at a depth 6600 feet is pretty darn cold. - required_temperature_max = MIN_AQUARIUM_TEMP+18 - beauty = FISH_BEAUTY_NULL - -//Tiziran Fish -/obj/item/fish/dwarf_moonfish - name = "dwarf moonfish" - desc = "Ordinarily in the wild, the Zagoskian moonfish is around the size of a tuna, however through selective breeding a smaller breed suitable for being kept as an aquarium pet has been created." - icon_state = "dwarf_moonfish" - sprite_height = 6 - sprite_width = 6 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 2 - fillet_type = /obj/item/food/fishmeat/moonfish - average_size = 60 - average_weight = 1000 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/gunner_jellyfish - name = "gunner jellyfish" - desc = "So called due to their resemblance to an artillery shell, the gunner jellyfish is native to Tizira, where it is enjoyed as a delicacy. Produces a mild hallucinogen that is destroyed by cooking." - icon_state = "gunner_jellyfish" - sprite_height = 4 - sprite_width = 5 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 4 - fillet_type = /obj/item/food/fishmeat/gunner_jellyfish - required_temperature_min = MIN_AQUARIUM_TEMP+24 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/needlefish - name = "needlefish" - desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish." - icon_state = "needlefish" - sprite_height = 3 - sprite_width = 7 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 12 - breeding_timeout = 1 MINUTES - fillet_type = null - average_size = 20 - average_weight = 300 - fish_traits = list(/datum/fish_trait/carnivore) - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - -/obj/item/fish/armorfish - name = "armorfish" - desc = "A small shellfish native to Tizira's oceans, known for its exceptionally hard shell. Consumed similarly to prawns." - icon_state = "armorfish" - sprite_height = 5 - sprite_width = 6 - average_size = 25 - average_weight = 350 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 10 - breeding_timeout = 1.25 MINUTES - fillet_type = /obj/item/food/fishmeat/armorfish - fish_movement_type = /datum/fish_movement/slow - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - -/// Commonly found on the mining fishing spots. Can be grown into lobstrosities -/obj/item/fish/chasm_crab - name = "chasm chrab" - desc = "The young of the lobstrosity mature in pools below the earth, eating what falls in until large enough to clamber out. Those found near the station are well-fed." - icon_state = "chrab" - sprite_height = 9 - sprite_width = 8 - stable_population = 4 - feeding_frequency = 10 MINUTES - random_case_rarity = FISH_RARITY_RARE - fillet_type = /obj/item/food/meat/slab/rawcrab - required_temperature_min = MIN_AQUARIUM_TEMP+9 - required_temperature_max = LAVALAND_MAX_TEMPERATURE+50 - min_pressure = HAZARD_LOW_PRESSURE - safe_air_limits = list( - /datum/gas/oxygen = list(2, 100), - /datum/gas/nitrogen, - /datum/gas/carbon_dioxide = list(0, 20), - /datum/gas/water_vapor, - /datum/gas/plasma = list(0, 5), - /datum/gas/bz = list(0, 5), - /datum/gas/miasma = list(0, 5), - ) - evolution_types = list(/datum/fish_evolution/ice_chrab) - compatible_types = list(/obj/item/fish/chasm_crab/ice) - beauty = FISH_BEAUTY_GOOD - ///This value represents how much the crab needs aren't being met. Higher values translate to a more likely hostile lobstrosity. - var/anger = 0 - ///The lobstrosity type this matures into - var/lob_type = /mob/living/basic/mining/lobstrosity/juvenile/lava - ///at which rate the crab gains maturation - var/growth_rate = 100 / (10 MINUTES) * 10 - -/obj/item/fish/chasm_crab/Initialize(mapload, apply_qualities = TRUE) - . = ..() - RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) - RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) - -///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities -/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight) - . = ..() - var/multiplier = 1 - switch(size) - if(0 to FISH_SIZE_TINY_MAX) - multiplier -= 0.2 - if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) - multiplier += 0.2 - if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) - multiplier += 0.5 - if(FISH_SIZE_BULKY_MAX to INFINITY) - multiplier += 0.8 - - if(weight <= 800) - multiplier -= 0.1 * round((1000 - weight) / 200) - else if(weight >= 1500) - multiplier += min(0.1 * round((weight - 1000) / 500), 2) - - AddComponent(/datum/component/fish_growth, lob_type, initial(growth_rate) * multiplier) - -/obj/item/fish/chasm_crab/proc/growth_checks(datum/source, seconds_per_tick) - SIGNAL_HANDLER - var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) - if(health <= initial(health) * 0.6 || hunger >= 0.6) //if too hurt or hungry, don't grow. - anger += growth_rate * 2 * seconds_per_tick - return COMPONENT_DONT_GROW - - if(hunger >= 0.4) //I'm hungry and angry - anger += growth_rate * 0.6 * seconds_per_tick - - if(!isaquarium(loc)) - return - - var/obj/structure/aquarium/aquarium = loc - if(!aquarium.allow_breeding) //the aquarium has breeding disabled - return COMPONENT_DONT_GROW - if(!locate(/obj/item/aquarium_prop) in aquarium) //the aquarium deco is quite barren - anger += growth_rate * 0.25 * seconds_per_tick - var/fish_count = length(aquarium.get_fishes()) - if(!ISINRANGE(fish_count, 3, AQUARIUM_MAX_BREEDING_POPULATION * 0.5)) //too lonely or overcrowded - anger += growth_rate * 0.3 * seconds_per_tick - if(fish_count > AQUARIUM_MAX_BREEDING_POPULATION * 0.5) //check if there's enough room to maturate. - return COMPONENT_DONT_GROW - -/obj/item/fish/chasm_crab/proc/on_growth(datum/source, mob/living/basic/mining/lobstrosity/juvenile/result) - SIGNAL_HANDLER - if(!prob(anger)) - result.AddElement(/datum/element/ai_retaliate) - qdel(result.ai_controller) - result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/calm(result) - else if(anger < 30) //not really that mad, just a bit unstable. - qdel(result.ai_controller) - result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/capricious(result) - -/obj/item/fish/chasm_crab/ice - name = "arctic chrab" - desc = "A subspecies of chasm chrabs that has adapted to the cold climate and lack of abysmal holes of the icemoon." - icon_state = "arctic_chrab" - required_temperature_min = ICEBOX_MIN_TEMPERATURE-20 - required_temperature_max = MIN_AQUARIUM_TEMP+15 - evolution_types = list(/datum/fish_evolution/chasm_chrab) - compatible_types = list(/obj/item/fish/chasm_crab) - beauty = FISH_BEAUTY_GREAT - lob_type = /mob/living/basic/mining/lobstrosity/juvenile - -/obj/item/fish/donkfish - name = "donk co. company patent donkfish" - desc = "A lab-grown donkfish. Its invention was an accident for the most part, as it was intended to be consumed in donk pockets. Unfortunately, it tastes horrible, so it has now become a pseudo-mascot." - icon_state = "donkfish" - random_case_rarity = FISH_RARITY_VERY_RARE - required_fluid_type = AQUARIUM_FLUID_FRESHWATER - stable_population = 4 - sprite_width = 5 - sprite_height = 4 - fillet_type = /obj/item/food/fishmeat/donkfish - fish_traits = list(/datum/fish_trait/yucky) - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - beauty = FISH_BEAUTY_EXCELLENT - -/obj/item/fish/emulsijack - name = "toxic emulsijack" - desc = "Ah, the terrifying emulsijack. Created in a laboratory, the only real use of this slimey, scaleless fish is for completely ruining a tank." - icon_state = "emulsijack" - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - stable_population = 3 - sprite_width = 7 - sprite_height = 3 - fish_traits = list(/datum/fish_trait/emulsijack) - required_temperature_min = MIN_AQUARIUM_TEMP+5 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - beauty = FISH_BEAUTY_BAD - -/obj/item/fish/jumpercable - name = "monocloning jumpercable" - desc = "A surprisingly useful if nasty looking creation from the syndicate fish labs. Drop one in a tank, and \ - watch it self-feed and multiply. Generates more and more power as a growing swarm!" - icon_state = "jumpercable" - sprite_width = 16 - sprite_height = 5 - stable_population = 12 - average_size = 110 - average_weight = 6000 - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) - fish_traits = list( - /datum/fish_trait/parthenogenesis, - /datum/fish_trait/mixotroph, - /datum/fish_trait/electrogenesis, - ) - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/ratfish - name = "ratfish" - desc = "A rat exposed to the murky waters of maintenance too long. Any higher power, if it revealed itself, would state that the ratfish's continued existence is extremely unwelcome." - icon_state = "ratfish" - sprite_width = 7 - sprite_height = 5 - random_case_rarity = FISH_RARITY_RARE - required_fluid_type = AQUARIUM_FLUID_FRESHWATER - stable_population = 10 //set by New, but this is the default config value - fillet_type = /obj/item/food/meat/slab/human/mutant/zombie //eww... - fish_traits = list(/datum/fish_trait/necrophage) - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+35 - fish_movement_type = /datum/fish_movement/zippy - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = DAIRY - ) - ) - beauty = FISH_BEAUTY_DISGUSTING - -/obj/item/fish/ratfish/Initialize(mapload, apply_qualities = TRUE) - . = ..() - //stable pop reflects the config for how many mice migrate. powerful... - stable_population = CONFIG_GET(number/mice_roundstart) - -/obj/item/fish/sludgefish - name = "sludgefish" - desc = "A misshapen, fragile, loosely fish-like living goop, the only thing that'd ever thrive in the acidic and claustrophobic cavities of the station's organic waste disposal system." - icon_state = "sludgefish" - sprite_width = 7 - sprite_height = 6 - required_fluid_type = AQUARIUM_FLUID_SULPHWATEVER - stable_population = 8 - average_size = 20 - average_weight = 400 - health = 50 - breeding_timeout = 2.5 MINUTES - fish_traits = list(/datum/fish_trait/parthenogenesis, /datum/fish_trait/no_mating) - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - evolution_types = list(/datum/fish_evolution/purple_sludgefish) - beauty = FISH_BEAUTY_NULL - -/obj/item/fish/sludgefish/purple - name = "purple sludgefish" - desc = "A misshapen, fragile, loosely fish-like living goop. This one has developed sexual reproduction mechanisms, and a purple tint to boot." - icon_state = "sludgefish_purple" - random_case_rarity = FISH_RARITY_NOPE - fish_traits = list(/datum/fish_trait/parthenogenesis) - -/obj/item/fish/slimefish - name = "acquatic slime" - desc = "Kids, this is what happens when a slime overcomes its hydrophobic nature. It goes glug glug." - icon_state = "slimefish" - icon_state_dead = "slimefish_dead" - sprite_width = 7 - sprite_height = 7 - do_flop_animation = FALSE //it already has a cute bouncy wiggle. :3 - random_case_rarity = FISH_RARITY_VERY_RARE - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - stable_population = 4 - health = 150 - fillet_type = /obj/item/slime_extract/grey - grind_results = list(/datum/reagent/toxin/slimejelly = 10) - fish_traits = list(/datum/fish_trait/toxin_immunity, /datum/fish_trait/crossbreeder) - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = TOXIC, - ), - list( - "Type" = "Reagent", - "Value" = /datum/reagent/toxin, - "Amount" = 5, - ), - ) - required_temperature_min = MIN_AQUARIUM_TEMP+20 - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/boned - name = "unmarine bonemass" - desc = "What one could mistake for fish remains, is in reality a species that chose to discard its weak flesh a long time ago. A living fossil, in its most literal sense." - icon_state = "bonemass" - sprite_width = 10 - sprite_height = 7 - fish_movement_type = /datum/fish_movement/zippy - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_ANY_WATER - min_pressure = HAZARD_LOW_PRESSURE - health = 150 - stable_population = 3 - grind_results = list(/datum/reagent/bone_dust = 10) - fillet_type = /obj/item/stack/sheet/bone - num_fillets = 2 - fish_traits = list(/datum/fish_trait/revival, /datum/fish_trait/carnivore) - average_size = 70 - average_weight = 2000 - death_text = "%SRC stops moving." //It's dead... or is it? - evolution_types = list(/datum/fish_evolution/mastodon) - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/mastodon - name = "unmarine mastodon" - desc = "A monster of exposed muscles and innards, wrapped in a fish-like skeleton. You don't remember ever seeing it on the catalog." - icon = 'icons/obj/aquarium/wide.dmi' - icon_state = "mastodon" - base_pixel_x = -16 - pixel_x = -16 - sprite_width = 12 - sprite_height = 7 - show_in_catalog = FALSE - random_case_rarity = FISH_RARITY_NOPE - fishing_difficulty_modifier = 30 - required_fluid_type = AQUARIUM_FLUID_ANY_WATER - min_pressure = HAZARD_LOW_PRESSURE - health = 300 - stable_population = 1 //This means they can only crossbreed. - grind_results = list(/datum/reagent/bone_dust = 5, /datum/reagent/consumable/liquidgibs = 5) - fillet_type = /obj/item/stack/sheet/bone - num_fillets = 2 - feeding_frequency = 2 MINUTES - breeding_timeout = 5 MINUTES - average_size = 180 - average_weight = 5000 - death_text = "%SRC stops moving." - fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) - beauty = FISH_BEAUTY_BAD - -/obj/item/fish/holo - name = "holographic goldfish" - desc = "A holographic representation of a common goldfish, slowly flickering out, removed from its holo-habitat." - icon_state = /obj/item/fish/goldfish::icon_state - show_in_catalog = FALSE - random_case_rarity = FISH_RARITY_NOPE - dedicated_in_aquarium_icon_state = /obj/item/fish/goldfish::dedicated_in_aquarium_icon_state - aquarium_vc_color = /obj/item/fish/goldfish::aquarium_vc_color - sprite_width = /obj/item/fish/goldfish::sprite_width - sprite_height = /obj/item/fish/goldfish::sprite_height - stable_population = 1 - average_size = /obj/item/fish/goldfish::average_size - average_weight = /obj/item/fish/goldfish::average_weight - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - grind_results = null - fillet_type = null - death_text = "%SRC gently disappears." - fish_traits = list(/datum/fish_trait/no_mating) //just to be sure, these shouldn't reproduce - experisci_scannable = FALSE - -/obj/item/fish/holo/Initialize(mapload, apply_qualities = TRUE) - . = ..() - var/area/station/holodeck/holo_area = get_area(src) - if(!istype(holo_area)) - addtimer(CALLBACK(src, PROC_REF(set_status), FISH_DEAD), 1 MINUTES) - return - holo_area.linked.add_to_spawned(src) - -/obj/item/fish/holo/set_status(new_status, silent = FALSE) - . = ..() - if(status == FISH_DEAD) - animate(src, alpha = 0, 3 SECONDS, easing = SINE_EASING) - QDEL_IN(src, 3 SECONDS) - -/obj/item/fish/holo/crab - name = "holographic crab" - desc = "A holographic represantion of a soul-crushingly soulless crab, unlike the cuter ones occasionally roaming around. It stares at you, with empty, beady eyes." - icon_state = "crab" - dedicated_in_aquarium_icon_state = null - aquarium_vc_color = null - average_size = 30 - average_weight = 1000 - sprite_height = 6 - sprite_width = 10 - -/obj/item/fish/holo/puffer - name = "holographic pufferfish" - desc ="A holographic representation of 100% safe-to-eat pufferfish... that is, if holographic fishes were even edible." - icon_state = /obj/item/fish/pufferfish::icon_state - dedicated_in_aquarium_icon_state = /obj/item/fish/pufferfish::dedicated_in_aquarium_icon_state - aquarium_vc_color = /obj/item/fish/pufferfish::aquarium_vc_color - average_size = /obj/item/fish/pufferfish::average_size - average_weight = /obj/item/fish/pufferfish::average_weight - sprite_height = /obj/item/fish/pufferfish::sprite_height - sprite_width = /obj/item/fish/pufferfish::sprite_width - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/holo/angel - name = "holographic angelfish" - desc = "A holographic representation of a angelfish. I got nothing snarky to say about this one." - icon_state = /obj/item/fish/angelfish::icon_state - dedicated_in_aquarium_icon_state = /obj/item/fish/angelfish::dedicated_in_aquarium_icon_state - aquarium_vc_color = /obj/item/fish/angelfish::aquarium_vc_color - average_size = /obj/item/fish/angelfish::average_size - average_weight = /obj/item/fish/angelfish::average_weight - sprite_height = /obj/item/fish/angelfish::sprite_height - sprite_width = /obj/item/fish/angelfish::sprite_width - -/obj/item/fish/holo/clown - name = "holographic clownfish" - icon_state = "holo_clownfish" - desc = "A holographic representation of a clownfish, or at least how they used to look like five centuries ago." - dedicated_in_aquarium_icon_state = null - aquarium_vc_color = /obj/item/fish/clownfish::aquarium_vc_color - average_size = /obj/item/fish/clownfish::average_size - average_weight = /obj/item/fish/clownfish::average_weight - sprite_height = /obj/item/fish/clownfish::sprite_height - sprite_width = /obj/item/fish/clownfish::sprite_width - -/obj/item/fish/holo/checkered - name = "unrendered holographic fish" - desc = "A checkered silhoutte of searing purple and pitch black presents itself before your eyes, like a tear in fabric of reality. It hurts to watch." - icon_state = "checkered" //it's a meta joke, buddy. - dedicated_in_aquarium_icon_state = null - aquarium_vc_color = null - average_size = 30 - average_weight = 500 - sprite_width = 4 - sprite_height = 3 - beauty = FISH_BEAUTY_NULL - -/obj/item/fish/holo/halffish - name = "holographic half-fish" - desc = "A holographic representation of... a fish reduced to all bones, except for its head. Isn't it supposed to be dead? Ehr, holo-dead?" - icon_state = "half_fish" - dedicated_in_aquarium_icon_state = null - aquarium_vc_color = null - sprite_height = 4 - sprite_width = 10 - average_size = 50 - average_weight = 500 - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/starfish - name = "cosmostarfish" - desc = "A peculiar, gravity-defying, echinoderm-looking critter from hyperspace." - icon_state = "starfish" - icon_state_dead = "starfish_dead" - sprite_width = 4 - sprite_height = 3 - average_size = 30 - average_weight = 300 - stable_population = 3 - required_fluid_type = AQUARIUM_FLUID_AIR - random_case_rarity = FISH_RARITY_NOPE - required_temperature_min = 0 - required_temperature_max = INFINITY - safe_air_limits = null - min_pressure = 0 - max_pressure = INFINITY - grind_results = list(/datum/reagent/bluespace = 10) - fillet_type = null - fish_traits = list(/datum/fish_trait/antigrav, /datum/fish_trait/mixotroph) - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/starfish/Initialize(mapload, apply_qualities = TRUE) - . = ..() - update_appearance(UPDATE_OVERLAYS) - -/obj/item/fish/starfish/update_overlays() - . = ..() - if(status == FISH_ALIVE) - . += emissive_appearance(icon, "starfish_emissive", src) - -///It spins, and dimly glows in the dark. -/obj/item/fish/starfish/flop_animation() - DO_FLOATING_ANIM(src) - -/obj/item/fish/lavaloop - name = "lavaloop fish" - desc = "Due to its curvature, it can be used as make-shift boomerang." - icon_state = "lava_loop" - sprite_width = 3 - sprite_height = 5 - average_size = 30 - average_weight = 500 - resistance_flags = FIRE_PROOF | LAVA_PROOF - required_fluid_type = AQUARIUM_FLUID_ANY_WATER //if we can survive hot lava and freezing plasrivers, we can survive anything - fish_movement_type = /datum/fish_movement/zippy - min_pressure = HAZARD_LOW_PRESSURE - required_temperature_min = MIN_AQUARIUM_TEMP+30 - required_temperature_max = MIN_AQUARIUM_TEMP+35 - fish_traits = list( - /datum/fish_trait/carnivore, - /datum/fish_trait/heavy, - ) - hitsound = null - throwforce = 5 - beauty = FISH_BEAUTY_GOOD - ///maximum bonus damage when winded up - var/maximum_bonus = 25 - -/obj/item/fish/lavaloop/Initialize(mapload, apply_qualities = TRUE) - . = ..() - ADD_TRAIT(src, TRAIT_BYPASS_RANGED_ARMOR, INNATE_TRAIT) - AddComponent(/datum/component/boomerang, throw_range, TRUE) - AddComponent(\ - /datum/component/throwbonus_on_windup,\ - maximum_bonus = maximum_bonus,\ - windup_increment_speed = 2,\ - throw_text = "starts cooking in your hands, it may explode soon!",\ - pass_maximum_callback = CALLBACK(src, PROC_REF(explode_on_user)),\ - apply_bonus_callback = CALLBACK(src, PROC_REF(on_fish_land)),\ - sound_on_success = 'sound/weapons/parry.ogg',\ - effect_on_success = /obj/effect/temp_visual/guardian/phase,\ - ) - -/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user) - var/obj/item/bodypart/arm/active_arm = user.get_active_hand() - active_arm?.dismember() - to_chat(user, span_warning("[src] explodes!")) - playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) - user.flash_act(1, 1) - qdel(src) - -/obj/item/fish/lavaloop/proc/on_fish_land(mob/living/target, bonus_value) - if(!istype(target)) - return FALSE - return (target.mob_size >= MOB_SIZE_LARGE) - -/obj/item/fish/lavaloop/plasma_river - maximum_bonus = 30 - -/obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) - playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) - user.flash_act(1, 1) - user.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) - qdel(src) - -/obj/item/fish/lavaloop/plasma_river/on_fish_land(mob/living/target, bonus_value) - if(!istype(target)) - return FALSE - if(target.mob_size < MOB_SIZE_LARGE) - return FALSE - var/freeze_timer = (bonus_value * 0.1) - if(freeze_timer <= 0) - return FALSE - target.apply_status_effect(/datum/status_effect/ice_block_talisman, freeze_timer SECONDS) - return FALSE - -/obj/item/fish/zipzap - name = "anxious zipzap" - desc = "A fish overflowing with crippling anxiety and electric potential. Worried about the walls of its tank closing in constantly. Both literally and as a general metaphorical unease about life's direction." - icon_state = "zipzap" - icon_state_dead = "zipzap_dead" - sprite_width = 6 - sprite_height = 3 - stable_population = 3 - average_size = 30 - average_weight = 500 - random_case_rarity = FISH_RARITY_VERY_RARE - favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) - required_temperature_min = MIN_AQUARIUM_TEMP+18 - required_temperature_max = MIN_AQUARIUM_TEMP+26 - fish_traits = list( - /datum/fish_trait/no_mating, - /datum/fish_trait/wary, - /datum/fish_trait/anxiety, - /datum/fish_trait/electrogenesis, - ) - //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone - electrogenesis_power = 20 MEGA JOULES - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/sockeye_salmon - name = "sockeye salmon" - desc = "A fairly common and iconic salmon endemic of the Pacific Ocean. At some point imported into outer space, where we're now." - icon_state = "sockeye" - sprite_width = 6 - sprite_height = 4 - stable_population = 6 - required_temperature_min = MIN_AQUARIUM_TEMP+3 - required_temperature_max = MIN_AQUARIUM_TEMP+19 - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - fillet_type = /obj/item/food/fishmeat/salmon - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/arctic_char - name = "arctic char" - desc = "A cold-water anadromous fish widespread around the Northern Hemisphere of Earth, yet it has somehow found a way here." - icon_state = "arctic_char" - sprite_width = 7 - sprite_height = 4 - stable_population = 6 - average_size = 60 - average_weight = 1200 - weight_size_deviation = 0.5 // known for their size dismophism - required_temperature_min = MIN_AQUARIUM_TEMP+3 - required_temperature_max = MIN_AQUARIUM_TEMP+19 - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - -/obj/item/fish/stingray - name = "stingray" - desc = "A type of ray, most known for its venomous stinger. Despite that, They're normally docile, if not a bit easily frightened." - icon_state = "stingray" - stable_population = 4 - sprite_height = 7 - sprite_width = 8 - average_size = 60 - average_weight = 700 - beauty = FISH_BEAUTY_GREAT - random_case_rarity = FISH_RARITY_RARE - required_fluid_type = AQUARIUM_FLUID_SALTWATER //Someone ought to add river rays later I guess. - fish_traits = list(/datum/fish_trait/stinger, /datum/fish_trait/toxic_barbs, /datum/fish_trait/wary, /datum/fish_trait/carnivore, /datum/fish_trait/predator) - -/obj/item/fish/sand_surfer - name = "sand surfer" - desc = "A bronze alien \"fish\" living and swimming underneath faraway sandy places." - icon_state = "sand_surfer" - sprite_height = 6 - sprite_width = 6 - stable_population = 5 - average_size = 65 - average_weight = 1100 - weight_size_deviation = 0.35 - random_case_rarity = FISH_RARITY_RARE - required_fluid_type = AQUARIUM_FLUID_AIR - required_temperature_min = MIN_AQUARIUM_TEMP+25 - required_temperature_max = MIN_AQUARIUM_TEMP+60 - fish_movement_type = /datum/fish_movement/plunger - fishing_difficulty_modifier = 5 - fish_traits = list(/datum/fish_trait/shiny_lover) - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/sand_crab - name = "burrower crab" - desc = "A sand-dwelling crustacean. It looks like a crab and tastes like a crab, but waddles like a fish." - icon_state = "crab" - sprite_height = 6 - sprite_width = 10 - average_size = 60 - average_weight = 1000 - weight_size_deviation = 0.1 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - fillet_type = /obj/item/food/meat/slab/rawcrab - fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/shiny_lover, /datum/fish_trait/carnivore) - fish_movement_type = /datum/fish_movement/slow - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = SEAFOOD, - ), - ) - -/obj/item/fish/bumpy - name = "bump-fish" - desc = "An misshapen fish-thing all covered in stubby little tendrils" - icon_state = "bumpy" - sprite_height = 4 - sprite_width = 5 - stable_population = 4 - required_fluid_type = AQUARIUM_FLUID_ANY_WATER - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - beauty = FISH_BEAUTY_BAD - fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/vegan) - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = VEGETABLES, - ), - ) - -/obj/item/fish/swordfish - name = "swordfish" - desc = "A large billfish, most famous for its elongated bill, while also fairly popular for cooking, and as a fearsome weapon in the hands of a veteran spess-fisherman." - icon = 'icons/obj/aquarium/wide.dmi' - icon_state = "swordfish" - inhand_icon_state = "swordfish" - force = 18 - sharpness = SHARP_EDGED - attack_verb_continuous = list("slashes", "cuts", "pierces") - attack_verb_simple = list("slash", "cut", "pierce") - block_sound = 'sound/weapons/parry.ogg' - hitsound = 'sound/weapons/rapierhit.ogg' - demolition_mod = 0.75 - attack_speed = 1 SECONDS - block_chance = 50 - wound_bonus = 10 - bare_wound_bonus = 20 - armour_penetration = 75 - base_pixel_x = -18 - pixel_x = -18 - sprite_width = 13 - sprite_height = 6 - stable_population = 3 - average_size = 140 - average_weight = 4000 - breeding_timeout = 4.5 MINUTES - feeding_frequency = 4 MINUTES - health = 180 - beauty = FISH_BEAUTY_EXCELLENT - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_SALTWATER - fish_movement_type = /datum/fish_movement/plunger - fishing_difficulty_modifier = 25 - fillet_type = /obj/item/food/fishmeat/quality - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = SEAFOOD, - ), - ) - fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) - -/obj/item/fish/swordfish/get_force_rank() - switch(w_class) - if(WEIGHT_CLASS_TINY) - force -= 11 - attack_speed -= 0.4 SECONDS - block_chance -= 45 - armour_penetration -= 20 - wound_bonus -= 15 - bare_wound_bonus -= 20 - if(WEIGHT_CLASS_SMALL) - force -= 8 - attack_speed -= 0.3 SECONDS - block_chance -= 30 - armour_penetration -= 15 - wound_bonus -= 10 - bare_wound_bonus -= 20 - if(WEIGHT_CLASS_NORMAL) - force -= 5 - attack_speed -= 0.2 SECONDS - block_chance -= 20 - armour_penetration -= 10 - wound_bonus -= 10 - bare_wound_bonus -= 15 - if(WEIGHT_CLASS_BULKY) - force -= 3 - attack_speed -= 0.1 SECONDS - block_chance -= 10 - armour_penetration -= 5 - wound_bonus -= 5 - bare_wound_bonus -= 10 - if(WEIGHT_CLASS_GIGANTIC) - force += 5 - attack_speed += 0.2 SECONDS - demolition_mod += 0.15 - block_chance += 10 - armour_penetration += 5 - wound_bonus += 5 - bare_wound_bonus += 10 - - if(status == FISH_DEAD) - force -= 4 + w_class - block_chance -= 25 - armour_penetration -= 30 - wound_bonus -= 10 - bare_wound_bonus -= 10 - -/obj/item/fish/swordfish/calculate_fish_force_bonus(bonus_malus) - . = ..() - armour_penetration += bonus_malus * 5 - wound_bonus += bonus_malus * 3 - bare_wound_bonus += bonus_malus * 5 - block_chance += bonus_malus * 7 - -/obj/item/fish/chainsawfish - name = "chainsawfish" - desc = "A very, very angry bioweapon, whose sole purpose is to rip and tear." - icon = 'icons/obj/aquarium/wide.dmi' - icon_state = "chainsawfish" - inhand_icon_state = "chainsawfish" - icon_state_dead = "chainsawfish_dead" - force = 22 - demolition_mod = 1.5 - block_chance = 15 - attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") - attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") - hitsound = 'sound/weapons/chainsawhit.ogg' - sharpness = SHARP_EDGED - tool_behaviour = TOOL_SAW - toolspeed = 0.5 - base_pixel_x = -16 - pixel_x = -16 - sprite_width = 8 - sprite_height = 5 - stable_population = 3 - average_size = 85 - average_weight = 2500 - breeding_timeout = 4.25 MINUTES - feeding_frequency = 3 MINUTES - health = 180 - beauty = FISH_BEAUTY_GREAT - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_FRESHWATER - fish_movement_type = /datum/fish_movement/accelerando - fishing_difficulty_modifier = 30 - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = GORE - ), - ) - fish_traits = list(/datum/fish_trait/aggressive, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) - required_temperature_min = MIN_AQUARIUM_TEMP+18 - required_temperature_max = MIN_AQUARIUM_TEMP+26 - -/obj/item/fish/chainsawfish/Initialize(mapload) - . = ..() - AddElement(/datum/element/update_icon_updates_onmob) - -/obj/item/fish/chainsawfish/update_icon_state() - if(status == FISH_DEAD) - inhand_icon_state = "chainsawfish_dead" - else - inhand_icon_state = "chainsawfish" - if(HAS_TRAIT(src, TRAIT_WIELDED)) - inhand_icon_state = "[inhand_icon_state]_wielded" - return ..() - -/obj/item/fish/chainsawfish/get_force_rank() - switch(w_class) - if(WEIGHT_CLASS_TINY) - force -= 10 - attack_speed -= 0.2 SECONDS - demolition_mod -= 0.4 - block_chance -= 15 - armour_penetration -= 10 - wound_bonus -= 10 - bare_wound_bonus -= 10 - toolspeed += 0.6 - if(WEIGHT_CLASS_SMALL) - force -= 8 - attack_speed -= 0.1 SECONDS - demolition_mod -= 0.3 - block_chance -= 10 - armour_penetration -= 10 - wound_bonus -= 10 - bare_wound_bonus -= 10 - toolspeed += 0.4 - if(WEIGHT_CLASS_NORMAL) - force -= 5 - demolition_mod -= 0.15 - block_chance -= 5 - armour_penetration -= 5 - wound_bonus -= 5 - bare_wound_bonus -= 5 - toolspeed += 0.2 - if(WEIGHT_CLASS_HUGE) - force += 2 - attack_speed += 0.2 SECONDS - demolition_mod += 0.15 - armour_penetration += 10 - block_chance += 10 - wound_bonus += 10 - bare_wound_bonus += 5 - if(WEIGHT_CLASS_GIGANTIC) - force += 4 - attack_speed += 0.4 SECONDS - demolition_mod += 0.3 - block_chance += 20 - armour_penetration += 20 - wound_bonus += 15 - bare_wound_bonus += 10 - toolspeed -= 0.1 - - if(status == FISH_DEAD) - force -= 8 + w_class - hitsound = SFX_SWING_HIT - block_chance -= 25 - demolition_mod -= 0.3 - armour_penetration -= 15 - wound_bonus -= 5 - bare_wound_bonus -= 5 - toolspeed += 1 - -/obj/item/fish/chainsawfish/calculate_fish_force_bonus(bonus_malus) - . = ..() - armour_penetration += bonus_malus * 3 - wound_bonus += bonus_malus * 2 - bare_wound_bonus += bonus_malus * 3 - block_chance += bonus_malus * 2 - toolspeed -= bonus_malus * 0.1 - -/obj/item/fish/soul - name = "soulfish" - desc = "A distant yet vaguely close critter, like a long lost relative. You feel your soul rejuvenated just from looking at it... Also, what the fuck is this shit?!" - icon_state = "soulfish" - sprite_width = 7 - sprite_height = 6 - average_size = 60 - average_weight = 1200 - stable_population = 4 - show_in_catalog = FALSE - beauty = FISH_BEAUTY_EXCELLENT - fish_movement_type = /datum/fish_movement/choppy //Glideless legacy movement? in my fishing minigame? - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = FRIED - ), - ) - fillet_type = /obj/item/food/meat/cutlet/plain/human - required_temperature_min = MIN_AQUARIUM_TEMP+3 - required_temperature_max = MIN_AQUARIUM_TEMP+38 - random_case_rarity = FISH_RARITY_NOPE - -/obj/item/fish/skin_crab - name = "skin crab" - desc = "\"And on the eighth day, a demential mockery of both humanity and crabity was made.\" Fascinating." - icon_state = "skin_crab" - sprite_width = 7 - sprite_height = 6 - average_size = 40 - average_weight = 750 - stable_population = 5 - show_in_catalog = FALSE - beauty = FISH_BEAUTY_GREAT - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = FRIED - ), - ) - fillet_type = /obj/item/food/meat/slab/rawcrab - random_case_rarity = FISH_RARITY_NOPE diff --git a/code/modules/fishing/fish/types/air_space.dm b/code/modules/fishing/fish/types/air_space.dm new file mode 100644 index 00000000000..f3b985edfa7 --- /dev/null +++ b/code/modules/fishing/fish/types/air_space.dm @@ -0,0 +1,95 @@ +/obj/item/fish/sand_surfer + name = "sand surfer" + desc = "A bronze alien \"fish\" living and swimming underneath faraway sandy places." + icon_state = "sand_surfer" + sprite_height = 6 + sprite_width = 6 + stable_population = 5 + average_size = 65 + average_weight = 1100 + weight_size_deviation = 0.35 + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_AIR + required_temperature_min = MIN_AQUARIUM_TEMP+25 + required_temperature_max = MIN_AQUARIUM_TEMP+60 + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 5 + fish_traits = list(/datum/fish_trait/shiny_lover) + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/sand_crab + name = "burrower crab" + desc = "A sand-dwelling crustacean. It looks like a crab and tastes like a crab, but waddles like a fish." + icon_state = "crab" + dedicated_in_aquarium_icon_state = "crab_small" + sprite_height = 6 + sprite_width = 10 + average_size = 60 + average_weight = 1000 + weight_size_deviation = 0.1 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + fillet_type = /obj/item/food/meat/slab/rawcrab + fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/shiny_lover, /datum/fish_trait/carnivore) + fish_movement_type = /datum/fish_movement/slow + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + ) + +/obj/item/fish/bumpy + name = "bump-fish" + desc = "An misshapen fish-thing all covered in stubby little tendrils" + icon_state = "bumpy" + sprite_height = 4 + sprite_width = 5 + stable_population = 4 + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + beauty = FISH_BEAUTY_BAD + fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/vegan) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = VEGETABLES, + ), + ) + +/obj/item/fish/starfish + name = "cosmostarfish" + desc = "A peculiar, gravity-defying, echinoderm-looking critter from hyperspace." + icon_state = "starfish" + icon_state_dead = "starfish_dead" + sprite_height = 3 + sprite_width = 4 + average_size = 30 + average_weight = 300 + stable_population = 3 + required_fluid_type = AQUARIUM_FLUID_AIR + random_case_rarity = FISH_RARITY_NOPE + required_temperature_min = 0 + required_temperature_max = INFINITY + safe_air_limits = null + min_pressure = 0 + max_pressure = INFINITY + grind_results = list(/datum/reagent/bluespace = 10) + fillet_type = null + fish_traits = list(/datum/fish_trait/antigrav, /datum/fish_trait/mixotroph) + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/starfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/item/fish/starfish/update_overlays() + . = ..() + if(status == FISH_ALIVE) + . += emissive_appearance(icon, "starfish_emissive", src) + +///It spins, and dimly glows in the dark. +/obj/item/fish/starfish/flop_animation() + DO_FLOATING_ANIM(src) diff --git a/code/modules/fishing/fish/types/anadromous.dm b/code/modules/fishing/fish/types/anadromous.dm new file mode 100644 index 00000000000..ecdbda1fde7 --- /dev/null +++ b/code/modules/fishing/fish/types/anadromous.dm @@ -0,0 +1,62 @@ +/obj/item/fish/sockeye_salmon + name = "sockeye salmon" + desc = "A fairly common and iconic salmon endemic of the Pacific Ocean. At some point imported into outer space, where we're now." + icon_state = "sockeye" + sprite_width = 6 + sprite_height = 4 + stable_population = 6 + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+19 + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + fillet_type = /obj/item/food/fishmeat/salmon + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/arctic_char + name = "arctic char" + desc = "A cold-water anadromous fish widespread around the Northern Hemisphere of Earth, yet it has somehow found a way here." + icon_state = "arctic_char" + sprite_width = 7 + sprite_height = 4 + stable_population = 6 + average_size = 60 + average_weight = 1200 + weight_size_deviation = 0.5 // known for their size dismophism + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+19 + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + +/obj/item/fish/pike + name = "pike" + desc = "A long-bodied predator with a snout that almost looks like a beak. Definitely not a weapon to swing around." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "pike" + inhand_icon_state = "pike" + base_pixel_x = -16 + pixel_x = -16 + stable_population = 4 + sprite_width = 10 + sprite_height = 3 + average_size = 100 + average_weight = 2000 + breeding_timeout = 4 MINUTES + health = 150 + beauty = FISH_BEAUTY_GOOD + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + random_case_rarity = FISH_RARITY_RARE + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 10 + required_temperature_min = MIN_AQUARIUM_TEMP+12 + required_temperature_max = MIN_AQUARIUM_TEMP+27 + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) + compatible_types = list(/obj/item/fish/pike/armored) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|MEAT, + ), + /obj/item/fish, + ) + +/obj/item/fish/pike/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_FISH_SHOULD_TWOHANDED, INNATE_TRAIT) diff --git a/code/modules/fishing/fish/types/freshwater.dm b/code/modules/fishing/fish/types/freshwater.dm new file mode 100644 index 00000000000..129b738fc0a --- /dev/null +++ b/code/modules/fishing/fish/types/freshwater.dm @@ -0,0 +1,213 @@ +/obj/item/fish/goldfish + name = "goldfish" + desc = "Despite common belief, goldfish do not have three-second memories. \ + They can actually remember things that happened up to three months ago." + icon_state = "goldfish" + dedicated_in_aquarium_icon_state = "fish_greyscale" + aquarium_vc_color = "#D8540D" + sprite_width = 5 + sprite_height = 3 + stable_population = 9 + average_size = 20 + average_weight = 200 + weight_size_deviation = 0.35 + favorite_bait = list(/obj/item/food/bait/worm) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + evolution_types = list(/datum/fish_evolution/three_eyes, /datum/fish_evolution/chainsawfish) + compatible_types = list(/obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes, /obj/item/fish/goldfish/three_eyes/gill) + +/obj/item/fish/goldfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) + +/obj/item/fish/goldfish/gill + name = "McGill" + desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." + stable_population = 1 + random_case_rarity = FISH_RARITY_NOPE + show_in_catalog = FALSE + beauty = FISH_BEAUTY_GOOD + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) + fish_traits = list(/datum/fish_trait/recessive) + +/obj/item/fish/goldfish/three_eyes + name = "three-eyed goldfish" + desc = "A goldfish with an extra half a pair of eyes. You wonder what it's been feeding on lately..." + icon_state = "three_eyes" + stable_population = 4 + fish_traits = list(/datum/fish_trait/recessive, /datum/fish_trait/shiny_lover) + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes/gill) + beauty = FISH_BEAUTY_GOOD + fishing_difficulty_modifier = 10 + random_case_rarity = FISH_RARITY_VERY_RARE + food = /datum/reagent/toxin/mutagen + favorite_bait = list( + list( + "Type" = "Reagent", + "Value" = /datum/reagent/toxin/mutagen, + "Amount" = 3, + ), + ) + +/obj/item/fish/goldfish/three_eyes/gill + name = "McGill" + desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case. It looks kinda different today..." + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) + beauty = FISH_BEAUTY_GREAT + show_in_catalog = FALSE + stable_population = 1 + random_case_rarity = FISH_RARITY_NOPE + +/obj/item/fish/angelfish + name = "angelfish" + desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood." + icon_state = "angelfish" + sprite_width = 4 + sprite_height = 7 + average_size = 30 + average_weight = 500 + stable_population = 3 + fish_traits = list(/datum/fish_trait/aggressive) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/guppy + name = "guppy" + desc = "Guppy is also known as rainbow fish because of the brightly colored body and fins." + icon_state = "guppy" + sprite_width = 5 + sprite_height = 2 + sprite_width = 8 + sprite_height = 5 + average_size = 30 + average_weight = 500 + stable_population = 6 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/plasmatetra + name = "plasma tetra" + desc = "Due to their small size, tetras are prey to many predators in their watery world, including eels, crustaceans, and invertebrates." + icon_state = "plastetra" + sprite_width = 4 + sprite_height = 2 + average_size = 30 + average_weight = 500 + stable_population = 3 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/catfish + name = "catfish" + desc = "A catfish has about 100,000 taste buds, and their bodies are covered with them to help detect chemicals present in the water and also to respond to touch." + icon_state = "catfish" + sprite_width = 8 + sprite_height = 4 + average_size = 80 + average_weight = 1600 + weight_size_deviation = 0.35 + stable_population = 3 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD + ) + ) + required_temperature_min = MIN_AQUARIUM_TEMP+12 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/zipzap + name = "anxious zipzap" + desc = "A fish overflowing with crippling anxiety and electric potential. Worried about the walls of its tank closing in constantly. Both literally and as a general metaphorical unease about life's direction." + icon_state = "zipzap" + icon_state_dead = "zipzap_dead" + sprite_width = 6 + sprite_height = 3 + stable_population = 3 + average_size = 30 + average_weight = 500 + random_case_rarity = FISH_RARITY_VERY_RARE + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + fish_traits = list( + /datum/fish_trait/no_mating, + /datum/fish_trait/wary, + /datum/fish_trait/anxiety, + /datum/fish_trait/electrogenesis, + ) + //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone + electrogenesis_power = 20 MEGA JOULES + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/tadpole + name = "tadpole" + desc = "The larval spawn of an amphibian. A very minuscle, round creature with a long tail it uses to swim around." + icon_state = "tadpole" + average_size = 3 + average_weight = 10 + sprite_width = 3 + sprite_height = 1 + health = 50 + feeding_frequency = 1.5 MINUTES + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+20 + fillet_type = null + fish_traits = list(/datum/fish_trait/no_mating) //They grow into frogs and that's it. + beauty = FISH_BEAUTY_NULL + random_case_rarity = FISH_RARITY_NOPE //Why would you want generic frog tadpoles you get from ponds inside fish cases? + /// Once dead, tadpoles disappear after a dozen seconds, since you can get infinite tadpoles. + var/del_timerid + +/obj/item/fish/tadpole/Initialize(mapload, apply_qualities = TRUE) + . = ..() + AddComponent(/datum/component/fish_growth, /mob/living/basic/frog, 100 / rand(2.5, 3 MINUTES) * 10) + RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) + RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) + +/obj/item/fish/tadpole/set_status(new_status, silent = FALSE) + . = ..() + if(status == FISH_DEAD) + del_timerid = QDEL_IN_STOPPABLE(src, 12 SECONDS) + else + deltimer(del_timerid) + +/obj/item/fish/tadpole/proc/growth_checks(datum/source, seconds_per_tick) + SIGNAL_HANDLER + var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) + if(hunger >= 0.7) //too hungry to grow + return COMPONENT_DONT_GROW + var/obj/structure/aquarium/aquarium = loc + if(!aquarium.allow_breeding) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + +/obj/item/fish/tadpole/proc/on_growth(datum/source, mob/living/basic/frog/result) + SIGNAL_HANDLER + playsound(result, result.attack_sound, 50, TRUE) // reeeeeeeeeeeeeee... + +/obj/item/fish/tadpole/get_export_price(price, percent) + return 2 //two credits. Tadpoles aren't really that valueable. + +/obj/item/fish/perch + name = "perch" + desc = "An all around popular panfish, game fish and unfortunate prey to other, bigger predators." + icon_state = "perch" + dedicated_in_aquarium_icon_state = "fish_greyscale" + aquarium_vc_color = "#9D8C64" + sprite_width = 5 + sprite_height = 3 + stable_population = 7 + average_size = 25 + average_weight = 400 + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = BUGS, + ), + /obj/item/fish, + /obj/item/fishing_lure, //they love lures in general. + ) diff --git a/code/modules/fishing/fish/types/holographic.dm b/code/modules/fishing/fish/types/holographic.dm new file mode 100644 index 00000000000..dfcdbeedb6b --- /dev/null +++ b/code/modules/fishing/fish/types/holographic.dm @@ -0,0 +1,108 @@ + +/obj/item/fish/holo + name = "holographic goldfish" + desc = "A holographic representation of a common goldfish, slowly flickering out, removed from its holo-habitat." + icon_state = /obj/item/fish/goldfish::icon_state + show_in_catalog = FALSE + random_case_rarity = FISH_RARITY_NOPE + dedicated_in_aquarium_icon_state = /obj/item/fish/goldfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/goldfish::aquarium_vc_color + sprite_width = /obj/item/fish/goldfish::sprite_width + sprite_height = /obj/item/fish/goldfish::sprite_height + stable_population = 1 + average_size = /obj/item/fish/goldfish::average_size + average_weight = /obj/item/fish/goldfish::average_weight + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + grind_results = null + fillet_type = null + death_text = "%SRC gently disappears." + fish_traits = list(/datum/fish_trait/no_mating) //just to be sure, these shouldn't reproduce + experisci_scannable = FALSE + beauty = /obj/item/fish/goldfish::beauty + +/obj/item/fish/holo/Initialize(mapload, apply_qualities = TRUE) + . = ..() + var/area/station/holodeck/holo_area = get_area(src) + if(!istype(holo_area)) + addtimer(CALLBACK(src, PROC_REF(set_status), FISH_DEAD), 1 MINUTES) + return + holo_area.linked.add_to_spawned(src) + +/obj/item/fish/holo/set_status(new_status, silent = FALSE) + . = ..() + if(status == FISH_DEAD) + animate(src, alpha = 0, 3 SECONDS, easing = SINE_EASING) + QDEL_IN(src, 3 SECONDS) + +/obj/item/fish/holo/crab + name = "holographic crab" + desc = "A holographic represantion of a soul-crushingly soulless crab, unlike the cuter ones occasionally roaming around. It stares at you, with empty, beady eyes." + icon_state = "crab" + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + average_size = 30 + average_weight = 1000 + sprite_height = 6 + sprite_width = 10 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/holo/puffer + name = "holographic pufferfish" + desc ="A holographic representation of 100% safe-to-eat pufferfish... that is, if holographic fishes were even edible." + icon_state = /obj/item/fish/pufferfish::icon_state + dedicated_in_aquarium_icon_state = /obj/item/fish/pufferfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/pufferfish::aquarium_vc_color + average_size = /obj/item/fish/pufferfish::average_size + average_weight = /obj/item/fish/pufferfish::average_weight + sprite_height = /obj/item/fish/pufferfish::sprite_height + sprite_width = /obj/item/fish/pufferfish::sprite_width + beauty = /obj/item/fish/pufferfish::beauty + +/obj/item/fish/holo/angel + name = "holographic angelfish" + desc = "A holographic representation of a angelfish. I got nothing snarky to say about this one." + icon_state = /obj/item/fish/angelfish::icon_state + dedicated_in_aquarium_icon_state = /obj/item/fish/angelfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/angelfish::aquarium_vc_color + average_size = /obj/item/fish/angelfish::average_size + average_weight = /obj/item/fish/angelfish::average_weight + sprite_height = /obj/item/fish/angelfish::sprite_height + sprite_width = /obj/item/fish/angelfish::sprite_width + beauty = /obj/item/fish/angelfish::beauty + +/obj/item/fish/holo/clown + name = "holographic clownfish" + icon_state = "holo_clownfish" + desc = "A holographic representation of a clownfish, or at least how they used to look like five centuries ago." + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = /obj/item/fish/clownfish::aquarium_vc_color + average_size = /obj/item/fish/clownfish::average_size + average_weight = /obj/item/fish/clownfish::average_weight + sprite_height = /obj/item/fish/clownfish::sprite_height + sprite_width = /obj/item/fish/clownfish::sprite_width + required_fluid_type = /obj/item/fish/clownfish::required_fluid_type + beauty = /obj/item/fish/clownfish::beauty + +/obj/item/fish/holo/checkered + name = "unrendered holographic fish" + desc = "A checkered silhoutte of searing purple and pitch black presents itself before your eyes, like a tear in fabric of reality. It hurts to watch." + icon_state = "checkered" //it's a meta joke, buddy. + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + average_size = 30 + average_weight = 500 + sprite_width = 4 + sprite_height = 3 + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/holo/halffish + name = "holographic half-fish" + desc = "A holographic representation of... a fish reduced to all bones, except for its head. Isn't it supposed to be dead? Ehr, holo-dead?" + icon_state = "half_fish" + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + sprite_height = 4 + sprite_width = 10 + average_size = 50 + average_weight = 500 + beauty = FISH_BEAUTY_UGLY diff --git a/code/modules/fishing/fish/types/mining.dm b/code/modules/fishing/fish/types/mining.dm new file mode 100644 index 00000000000..7614f259e59 --- /dev/null +++ b/code/modules/fishing/fish/types/mining.dm @@ -0,0 +1,198 @@ +/// Commonly found on the mining fishing spots. Can be grown into lobstrosities +/obj/item/fish/chasm_crab + name = "chasm chrab" + desc = "The young of the lobstrosity mature in pools below the earth, eating what falls in until large enough to clamber out. Those found near the station are well-fed." + icon_state = "chrab" + sprite_height = 9 + sprite_width = 8 + stable_population = 4 + feeding_frequency = 10 MINUTES + random_case_rarity = FISH_RARITY_RARE + fillet_type = /obj/item/food/meat/slab/rawcrab + required_temperature_min = MIN_AQUARIUM_TEMP+9 + required_temperature_max = LAVALAND_MAX_TEMPERATURE+50 + min_pressure = HAZARD_LOW_PRESSURE + safe_air_limits = list( + /datum/gas/oxygen = list(2, 100), + /datum/gas/nitrogen, + /datum/gas/carbon_dioxide = list(0, 20), + /datum/gas/water_vapor, + /datum/gas/plasma = list(0, 5), + /datum/gas/bz = list(0, 5), + /datum/gas/miasma = list(0, 5), + ) + evolution_types = list(/datum/fish_evolution/ice_chrab) + compatible_types = list(/obj/item/fish/chasm_crab/ice) + beauty = FISH_BEAUTY_GOOD + favorite_bait = list(/obj/item/fish/lavaloop) + ///This value represents how much the crab needs aren't being met. Higher values translate to a more likely hostile lobstrosity. + var/anger = 0 + ///The lobstrosity type this matures into + var/lob_type = /mob/living/basic/mining/lobstrosity/juvenile/lava + ///at which rate the crab gains maturation + var/growth_rate = 100 / (10 MINUTES) * 10 + +/obj/item/fish/chasm_crab/Initialize(mapload, apply_qualities = TRUE) + . = ..() + RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) + RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) + +///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities +/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight) + . = ..() + var/multiplier = 1 + switch(size) + if(0 to FISH_SIZE_TINY_MAX) + multiplier -= 0.2 + if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) + multiplier += 0.2 + if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) + multiplier += 0.5 + if(FISH_SIZE_BULKY_MAX to INFINITY) + multiplier += 0.8 + + if(weight <= 800) + multiplier -= 0.1 * round((1000 - weight) / 200) + else if(weight >= 1500) + multiplier += min(0.1 * round((weight - 1000) / 500), 2) + + AddComponent(/datum/component/fish_growth, lob_type, initial(growth_rate) * multiplier) + +/obj/item/fish/chasm_crab/proc/growth_checks(datum/source, seconds_per_tick) + SIGNAL_HANDLER + var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) + if(health <= initial(health) * 0.6 || hunger >= 0.6) //if too hurt or hungry, don't grow. + anger += growth_rate * 2 * seconds_per_tick + return COMPONENT_DONT_GROW + + if(hunger >= 0.4) //I'm hungry and angry + anger += growth_rate * 0.6 * seconds_per_tick + + if(!isaquarium(loc)) + return + + var/obj/structure/aquarium/aquarium = loc + if(!aquarium.allow_breeding) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + if(!locate(/obj/item/aquarium_prop) in aquarium) //the aquarium deco is quite barren + anger += growth_rate * 0.25 * seconds_per_tick + var/fish_count = length(aquarium.get_fishes()) + if(!ISINRANGE(fish_count, 3, AQUARIUM_MAX_BREEDING_POPULATION * 0.5)) //too lonely or overcrowded + anger += growth_rate * 0.3 * seconds_per_tick + if(fish_count > AQUARIUM_MAX_BREEDING_POPULATION * 0.5) //check if there's enough room to maturate. + return COMPONENT_DONT_GROW + +/obj/item/fish/chasm_crab/proc/on_growth(datum/source, mob/living/basic/mining/lobstrosity/juvenile/result) + SIGNAL_HANDLER + if(!prob(anger)) + result.AddElement(/datum/element/ai_retaliate) + qdel(result.ai_controller) + result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/calm(result) + else if(anger < 30) //not really that mad, just a bit unstable. + qdel(result.ai_controller) + result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/capricious(result) + +/obj/item/fish/chasm_crab/ice + name = "arctic chrab" + desc = "A subspecies of chasm chrabs that has adapted to the cold climate and lack of abysmal holes of the icemoon." + icon_state = "arctic_chrab" + required_temperature_min = ICEBOX_MIN_TEMPERATURE-20 + required_temperature_max = MIN_AQUARIUM_TEMP+15 + evolution_types = list(/datum/fish_evolution/chasm_chrab) + compatible_types = list(/obj/item/fish/chasm_crab) + beauty = FISH_BEAUTY_GREAT + lob_type = /mob/living/basic/mining/lobstrosity/juvenile + +/obj/item/fish/boned + name = "unmarine bonemass" + desc = "What one could mistake for fish remains, is in reality a species that chose to discard its weak flesh a long time ago. A living fossil, in its most literal sense." + icon_state = "bonemass" + sprite_width = 10 + sprite_height = 7 + fish_movement_type = /datum/fish_movement/zippy + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + min_pressure = HAZARD_LOW_PRESSURE + health = 150 + stable_population = 3 + grind_results = list(/datum/reagent/bone_dust = 10) + fillet_type = /obj/item/stack/sheet/bone + num_fillets = 2 + fish_traits = list(/datum/fish_trait/revival, /datum/fish_trait/carnivore) + average_size = 70 + average_weight = 2000 + death_text = "%SRC stops moving." //It's dead... or is it? + evolution_types = list(/datum/fish_evolution/mastodon) + beauty = FISH_BEAUTY_UGLY + +/obj/item/fish/lavaloop + name = "lavaloop fish" + desc = "Due to its curvature, it can be used as make-shift boomerang." + icon_state = "lava_loop" + sprite_width = 3 + sprite_height = 5 + average_size = 30 + average_weight = 500 + resistance_flags = FIRE_PROOF | LAVA_PROOF + required_fluid_type = AQUARIUM_FLUID_ANY_WATER //if we can survive hot lava and freezing plasrivers, we can survive anything + fish_movement_type = /datum/fish_movement/zippy + min_pressure = HAZARD_LOW_PRESSURE + required_temperature_min = MIN_AQUARIUM_TEMP+30 + required_temperature_max = MIN_AQUARIUM_TEMP+35 + fish_traits = list( + /datum/fish_trait/carnivore, + /datum/fish_trait/heavy, + ) + hitsound = null + throwforce = 5 + beauty = FISH_BEAUTY_GOOD + ///maximum bonus damage when winded up + var/maximum_bonus = 25 + +/obj/item/fish/lavaloop/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT, TRAIT_BYPASS_RANGED_ARMOR), INNATE_TRAIT) + AddComponent(/datum/component/boomerang, throw_range, TRUE) + AddComponent(\ + /datum/component/throwbonus_on_windup,\ + maximum_bonus = maximum_bonus,\ + windup_increment_speed = 2,\ + throw_text = "starts cooking in your hands, it may explode soon!",\ + pass_maximum_callback = CALLBACK(src, PROC_REF(explode_on_user)),\ + apply_bonus_callback = CALLBACK(src, PROC_REF(on_fish_land)),\ + sound_on_success = 'sound/weapons/parry.ogg',\ + effect_on_success = /obj/effect/temp_visual/guardian/phase,\ + ) + +/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + active_arm?.dismember() + to_chat(user, span_warning("[src] explodes!")) + playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + qdel(src) + +/obj/item/fish/lavaloop/proc/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + return (target.mob_size >= MOB_SIZE_LARGE) + +/obj/item/fish/lavaloop/plasma_river + maximum_bonus = 30 + +/obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) + playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + user.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) + qdel(src) + +/obj/item/fish/lavaloop/plasma_river/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + if(target.mob_size < MOB_SIZE_LARGE) + return FALSE + var/freeze_timer = (bonus_value * 0.1) + if(freeze_timer <= 0) + return FALSE + target.apply_status_effect(/datum/status_effect/ice_block_talisman, freeze_timer SECONDS) + return FALSE diff --git a/code/modules/fishing/fish/types/ruins.dm b/code/modules/fishing/fish/types/ruins.dm new file mode 100644 index 00000000000..da9e8388c0c --- /dev/null +++ b/code/modules/fishing/fish/types/ruins.dm @@ -0,0 +1,73 @@ +///From oil puddles from the elephant graveyard. Also an evolution of the "unmarine bonemass" +/obj/item/fish/mastodon + name = "unmarine mastodon" + desc = "A monster of exposed muscles and innards, wrapped in a fish-like skeleton. You don't remember ever seeing it on the catalog." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "mastodon" + base_pixel_x = -16 + pixel_x = -16 + sprite_width = 12 + sprite_height = 7 + show_in_catalog = FALSE + random_case_rarity = FISH_RARITY_NOPE + fishing_difficulty_modifier = 30 + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + min_pressure = HAZARD_LOW_PRESSURE + health = 300 + stable_population = 1 //This means they can only crossbreed. + grind_results = list(/datum/reagent/bone_dust = 5, /datum/reagent/consumable/liquidgibs = 5) + fillet_type = /obj/item/stack/sheet/bone + num_fillets = 2 + feeding_frequency = 2 MINUTES + breeding_timeout = 5 MINUTES + average_size = 180 + average_weight = 5000 + death_text = "%SRC stops moving." + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) + beauty = FISH_BEAUTY_BAD + +///From the cursed spring +/obj/item/fish/soul + name = "soulfish" + desc = "A distant yet vaguely close critter, like a long lost relative. You feel your soul rejuvenated just from looking at it... Also, what the fuck is this shit?!" + icon_state = "soulfish" + sprite_width = 7 + sprite_height = 6 + average_size = 60 + average_weight = 1200 + stable_population = 4 + show_in_catalog = FALSE + beauty = FISH_BEAUTY_EXCELLENT + fish_movement_type = /datum/fish_movement/choppy //Glideless legacy movement? in my fishing minigame? + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD|FRIED, + ), + ) + fillet_type = /obj/item/food/meat/cutlet/plain/human + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+38 + random_case_rarity = FISH_RARITY_NOPE + +///From the cursed spring +/obj/item/fish/skin_crab + name = "skin crab" + desc = "\"And on the eighth day, a demential mockery of both humanity and crabity was made.\" Fascinating." + icon_state = "skin_crab" + sprite_width = 7 + sprite_height = 6 + average_size = 40 + average_weight = 750 + stable_population = 5 + show_in_catalog = FALSE + beauty = FISH_BEAUTY_GREAT + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD|FRIED + ), + ) + fillet_type = /obj/item/food/meat/slab/rawcrab + random_case_rarity = FISH_RARITY_NOPE + diff --git a/code/modules/fishing/fish/types/saltwater.dm b/code/modules/fishing/fish/types/saltwater.dm new file mode 100644 index 00000000000..0271c7f3008 --- /dev/null +++ b/code/modules/fishing/fish/types/saltwater.dm @@ -0,0 +1,275 @@ +/obj/item/fish/clownfish + name = "clownfish" + desc = "Clownfish catch prey by swimming onto the reef, attracting larger fish, and luring them back to the anemone. The anemone will sting and eat the larger fish, leaving the remains for the clownfish." + icon_state = "clownfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_width = 7 + sprite_height = 4 + average_size = 30 + average_weight = 500 + stable_population = 4 + fish_traits = list(/datum/fish_trait/picky_eater) + evolution_types = list(/datum/fish_evolution/lubefish) + compatible_types = list(/obj/item/fish/clownfish/lube) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/clownfish/lube + name = "lubefish" + desc = "A clownfish exposed to cherry-flavored lube for far too long. First discovered the days following a cargo incident around the seas of Europa, when thousands of thousands of thousands..." + icon_state = "lubefish" + random_case_rarity = FISH_RARITY_VERY_RARE + fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/lubed) + evolution_types = null + compatible_types = list(/obj/item/fish/clownfish) + food = /datum/reagent/lube + fishing_difficulty_modifier = 5 + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/cardinal + name = "cardinalfish" + desc = "Cardinalfish are often found near sea urchins, where the fish hide when threatened." + icon_state = "cardinalfish" + sprite_width = 6 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 4 + fish_traits = list(/datum/fish_trait/vegan) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/greenchromis + name = "green chromis" + desc = "The Chromis can vary in color from blue to green depending on the lighting and distance from the lights." + icon_state = "greenchromis" + sprite_width = 5 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 5 + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + + fishing_difficulty_modifier = 5 // Bit harder + +/obj/item/fish/firefish + name = "firefish goby" + desc = "To communicate in the wild, the firefish uses its dorsal fin to alert others of potential danger." + icon_state = "firefish" + sprite_width = 5 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 3 + disliked_bait = list(/obj/item/food/bait/worm, /obj/item/food/bait/doughball) + fish_movement_type = /datum/fish_movement/zippy + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/pufferfish + name = "pufferfish" + desc = "They say that one pufferfish contains enough toxins to kill 30 people, although in the last few decades they've been genetically engineered en masse to be less poisonous." + icon_state = "pufferfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_width = 8 + sprite_height = 6 + average_size = 60 + average_weight = 1000 + stable_population = 3 + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + fillet_type = /obj/item/food/fishmeat/quality //Too bad they're poisonous + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/toxic) + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/lanternfish + name = "lanternfish" + desc = "Typically found in areas below 6600 feet below the surface of the ocean, they live in complete darkness." + icon_state = "lanternfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + random_case_rarity = FISH_RARITY_VERY_RARE + sprite_width = 6 + sprite_height = 5 + average_size = 50 + average_weight = 1000 + stable_population = 3 + fish_traits = list(/datum/fish_trait/nocturnal) + required_temperature_min = MIN_AQUARIUM_TEMP+2 //My source is that the water at a depth 6600 feet is pretty darn cold. + required_temperature_max = MIN_AQUARIUM_TEMP+18 + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/stingray + name = "stingray" + desc = "A type of ray, most known for its venomous stinger. Despite that, They're normally docile, if not a bit easily frightened." + icon_state = "stingray" + stable_population = 4 + sprite_height = 7 + sprite_width = 8 + average_size = 60 + average_weight = 700 + beauty = FISH_BEAUTY_GREAT + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_SALTWATER //Someone ought to add river rays later I guess. + fish_traits = list(/datum/fish_trait/stinger, /datum/fish_trait/toxic_barbs, /datum/fish_trait/wary, /datum/fish_trait/carnivore, /datum/fish_trait/predator) + +/obj/item/fish/swordfish + name = "swordfish" + desc = "A large billfish, most famous for its elongated bill, while also fairly popular for cooking, and as a fearsome weapon in the hands of a veteran spess-fisherman." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "swordfish" + inhand_icon_state = "swordfish" + force = 18 + sharpness = SHARP_EDGED + attack_verb_continuous = list("slashes", "cuts", "pierces") + attack_verb_simple = list("slash", "cut", "pierce") + block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' + demolition_mod = 0.75 + attack_speed = 1 SECONDS + block_chance = 50 + wound_bonus = 10 + bare_wound_bonus = 20 + armour_penetration = 75 + base_pixel_x = -18 + pixel_x = -18 + sprite_width = 13 + sprite_height = 6 + stable_population = 3 + average_size = 140 + average_weight = 4000 + breeding_timeout = 4.5 MINUTES + feeding_frequency = 4 MINUTES + health = 180 + beauty = FISH_BEAUTY_EXCELLENT + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_SALTWATER + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 25 + fillet_type = /obj/item/food/fishmeat/quality + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + /obj/item/fish, + ) + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) + +/obj/item/fish/swordfish/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 11 + attack_speed -= 0.4 SECONDS + block_chance -= 45 + armour_penetration -= 20 + wound_bonus -= 15 + bare_wound_bonus -= 20 + if(WEIGHT_CLASS_SMALL) + force -= 8 + attack_speed -= 0.3 SECONDS + block_chance -= 30 + armour_penetration -= 15 + wound_bonus -= 10 + bare_wound_bonus -= 20 + if(WEIGHT_CLASS_NORMAL) + force -= 5 + attack_speed -= 0.2 SECONDS + block_chance -= 20 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 15 + if(WEIGHT_CLASS_BULKY) + force -= 3 + attack_speed -= 0.1 SECONDS + block_chance -= 10 + armour_penetration -= 5 + wound_bonus -= 5 + bare_wound_bonus -= 10 + if(WEIGHT_CLASS_GIGANTIC) + force += 5 + attack_speed += 0.2 SECONDS + demolition_mod += 0.15 + block_chance += 10 + armour_penetration += 5 + wound_bonus += 5 + bare_wound_bonus += 10 + + if(status == FISH_DEAD) + force -= 4 + w_class + block_chance -= 25 + armour_penetration -= 30 + wound_bonus -= 10 + bare_wound_bonus -= 10 + +/obj/item/fish/swordfish/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 5 + wound_bonus += bonus_malus * 3 + bare_wound_bonus += bonus_malus * 5 + block_chance += bonus_malus * 7 + +/obj/item/fish/squid + name = "squid" + desc = "An elongated mollusk with eight tentacles, natural camouflage and ink clouds to spray at predators. One of the most intelligent, well-equipped invertebrates out there." + icon_state = "squid" + sprite_width = 4 + sprite_height = 5 + stable_population = 6 + weight_size_deviation = 0.5 // They vary greatly in size. + average_weight = 500 //They're quite lighter than they're long. + required_fluid_type = AQUARIUM_FLUID_SALTWATER + beauty = FISH_BEAUTY_GOOD + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/ink, /datum/fish_trait/camouflage, /datum/fish_trait/wary) + +/obj/item/fish/monkfish + name = "monkfish" + desc = "A member of the Lophiid family of anglerfish. It goes by several different names, however none of them will make it look any prettier, nor any less delicious." + icon_state = "monkfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_height = 7 + sprite_width = 7 + beauty = FISH_BEAUTY_UGLY + required_temperature_min = MIN_AQUARIUM_TEMP+2 + required_temperature_max = MIN_AQUARIUM_TEMP+23 + average_size = 60 + average_weight = 1400 + stable_population = 4 + fish_traits = list(/datum/fish_trait/heavy) + fillet_type = /obj/item/food/fishmeat/quality + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|BUGS, + ), + ) + +/obj/item/fish/monkfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + name = pick("monkfish", "fishing-frog", "frog-fish", "sea-devil", "goosefish") + +/obj/item/fish/plaice + name = "plaice" + desc = "Perhaps the most prominent flatfish in the space-market. Nature really pulled out the rolling pin on this one." + icon_state = "plaice" + sprite_height = 7 + sprite_width = 6 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + required_temperature_min = MIN_AQUARIUM_TEMP+2 + required_temperature_max = MIN_AQUARIUM_TEMP+18 + average_size = 40 + average_weight = 700 + stable_population = 5 + fish_traits = list(/datum/fish_trait/heavy) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|BUGS, + ), + ) + diff --git a/code/modules/fishing/fish/types/station.dm b/code/modules/fishing/fish/types/station.dm new file mode 100644 index 00000000000..8dd459452ab --- /dev/null +++ b/code/modules/fishing/fish/types/station.dm @@ -0,0 +1,80 @@ +/obj/item/fish/ratfish + name = "ratfish" + desc = "A rat exposed to the murky waters of maintenance too long. Any higher power, if it revealed itself, would state that the ratfish's continued existence is extremely unwelcome." + icon_state = "ratfish" + sprite_width = 7 + sprite_height = 5 + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_FRESHWATER + stable_population = 10 //set by New, but this is the default config value + fillet_type = /obj/item/food/meat/slab/human/mutant/zombie //eww... + fish_traits = list(/datum/fish_trait/necrophage) + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+35 + fish_movement_type = /datum/fish_movement/zippy + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = DAIRY + ) + ) + beauty = FISH_BEAUTY_DISGUSTING + +/obj/item/fish/ratfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + //stable pop reflects the config for how many mice migrate. powerful... + stable_population = CONFIG_GET(number/mice_roundstart) + +/obj/item/fish/sludgefish + name = "sludgefish" + desc = "A misshapen, fragile, loosely fish-like living goop, the only thing that'd ever thrive in the acidic and claustrophobic cavities of the station's organic waste disposal system." + icon_state = "sludgefish" + sprite_width = 7 + sprite_height = 6 + required_fluid_type = AQUARIUM_FLUID_SULPHWATEVER + stable_population = 8 + average_size = 20 + average_weight = 400 + health = 50 + breeding_timeout = 2.5 MINUTES + fish_traits = list(/datum/fish_trait/parthenogenesis, /datum/fish_trait/no_mating) + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + evolution_types = list(/datum/fish_evolution/purple_sludgefish) + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/sludgefish/purple + name = "purple sludgefish" + desc = "A misshapen, fragile, loosely fish-like living goop. This one has developed sexual reproduction mechanisms, and a purple tint to boot." + icon_state = "sludgefish_purple" + random_case_rarity = FISH_RARITY_NOPE + fish_traits = list(/datum/fish_trait/parthenogenesis) + +/obj/item/fish/slimefish + name = "acquatic slime" + desc = "Kids, this is what happens when a slime overcomes its hydrophobic nature. It goes glug glug." + icon_state = "slimefish" + icon_state_dead = "slimefish_dead" + sprite_width = 7 + sprite_height = 7 + do_flop_animation = FALSE //it already has a cute bouncy wiggle. :3 + random_case_rarity = FISH_RARITY_VERY_RARE + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + stable_population = 4 + health = 150 + fillet_type = /obj/item/slime_extract/grey + grind_results = list(/datum/reagent/toxin/slimejelly = 10) + fish_traits = list(/datum/fish_trait/toxin_immunity, /datum/fish_trait/crossbreeder) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = TOXIC, + ), + list( + FISH_BAIT_TYPE = FISH_BAIT_REAGENT, + FISH_BAIT_VALUE = /datum/reagent/toxin, + FISH_BAIT_AMOUNT = 5, + ), + ) + required_temperature_min = MIN_AQUARIUM_TEMP+20 + beauty = FISH_BEAUTY_GREAT diff --git a/code/modules/fishing/fish/types/syndicate.dm b/code/modules/fishing/fish/types/syndicate.dm new file mode 100644 index 00000000000..a3e9a8519b4 --- /dev/null +++ b/code/modules/fishing/fish/types/syndicate.dm @@ -0,0 +1,256 @@ +///Contains fish that can be found in the syndicate fishing portal setting as well as the ominous fish case. +/obj/item/fish/emulsijack + name = "toxic emulsijack" + desc = "Ah, the terrifying emulsijack. Created in a laboratory, the only real use of this slimey, scaleless fish is for completely ruining a tank." + icon_state = "emulsijack" + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + stable_population = 3 + sprite_width = 7 + sprite_height = 3 + fish_traits = list(/datum/fish_trait/emulsijack) + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + beauty = FISH_BEAUTY_BAD + +/obj/item/fish/donkfish + name = "donk co. company patent donkfish" + desc = "A lab-grown donkfish. Its invention was an accident for the most part, as it was intended to be consumed in donk pockets. Unfortunately, it tastes horrible, so it has now become a pseudo-mascot." + icon_state = "donkfish" + random_case_rarity = FISH_RARITY_VERY_RARE + stable_population = 4 + sprite_width = 5 + sprite_height = 4 + fillet_type = /obj/item/food/fishmeat/donkfish + fish_traits = list(/datum/fish_trait/yucky) + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + beauty = FISH_BEAUTY_EXCELLENT + +/obj/item/fish/jumpercable + name = "monocloning jumpercable" + desc = "A surprisingly useful if nasty looking creation from the syndicate fish labs. Drop one in a tank, and \ + watch it self-feed and multiply. Generates more and more power as a growing swarm!" + icon_state = "jumpercable" + sprite_width = 16 + sprite_height = 5 + stable_population = 12 + average_size = 110 + average_weight = 6000 + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + fish_traits = list( + /datum/fish_trait/parthenogenesis, + /datum/fish_trait/mixotroph, + /datum/fish_trait/electrogenesis, + ) + beauty = FISH_BEAUTY_UGLY + +/obj/item/fish/chainsawfish + name = "chainsawfish" + desc = "A very, very angry bioweapon, whose sole purpose is to rip and tear." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "chainsawfish" + inhand_icon_state = "chainsawfish" + icon_state_dead = "chainsawfish_dead" + force = 22 + demolition_mod = 1.5 + block_chance = 15 + attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") + attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") + hitsound = 'sound/weapons/chainsawhit.ogg' + sharpness = SHARP_EDGED + tool_behaviour = TOOL_SAW + toolspeed = 0.5 + base_pixel_x = -16 + pixel_x = -16 + sprite_width = 8 + sprite_height = 5 + stable_population = 3 + average_size = 85 + average_weight = 2500 + breeding_timeout = 4.25 MINUTES + feeding_frequency = 3 MINUTES + health = 180 + beauty = FISH_BEAUTY_GREAT + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_FRESHWATER + fish_movement_type = /datum/fish_movement/accelerando + fishing_difficulty_modifier = 30 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = GORE, + ), + ) + fish_traits = list(/datum/fish_trait/aggressive, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + +/obj/item/fish/chainsawfish/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/fish/chainsawfish/update_icon_state() + if(status == FISH_DEAD) + inhand_icon_state = "chainsawfish_dead" + else + inhand_icon_state = "chainsawfish" + if(HAS_TRAIT(src, TRAIT_WIELDED)) + inhand_icon_state = "[inhand_icon_state]_wielded" + return ..() + +/obj/item/fish/chainsawfish/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 10 + attack_speed -= 0.2 SECONDS + demolition_mod -= 0.4 + block_chance -= 15 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 10 + toolspeed += 0.6 + if(WEIGHT_CLASS_SMALL) + force -= 8 + attack_speed -= 0.1 SECONDS + demolition_mod -= 0.3 + block_chance -= 10 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 10 + toolspeed += 0.4 + if(WEIGHT_CLASS_NORMAL) + force -= 5 + demolition_mod -= 0.15 + block_chance -= 5 + armour_penetration -= 5 + wound_bonus -= 5 + bare_wound_bonus -= 5 + toolspeed += 0.2 + if(WEIGHT_CLASS_HUGE) + force += 2 + attack_speed += 0.2 SECONDS + demolition_mod += 0.15 + armour_penetration += 10 + block_chance += 10 + wound_bonus += 10 + bare_wound_bonus += 5 + if(WEIGHT_CLASS_GIGANTIC) + force += 4 + attack_speed += 0.4 SECONDS + demolition_mod += 0.3 + block_chance += 20 + armour_penetration += 20 + wound_bonus += 15 + bare_wound_bonus += 10 + toolspeed -= 0.1 + + if(status == FISH_DEAD) + force -= 8 + w_class + hitsound = SFX_SWING_HIT + block_chance -= 25 + demolition_mod -= 0.3 + armour_penetration -= 15 + wound_bonus -= 5 + bare_wound_bonus -= 5 + toolspeed += 1 + +/obj/item/fish/chainsawfish/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 3 + wound_bonus += bonus_malus * 2 + bare_wound_bonus += bonus_malus * 3 + block_chance += bonus_malus * 2 + toolspeed -= bonus_malus * 0.1 + +/obj/item/fish/pike/armored + name = "armored pike" + desc = "A long-bodied, metal-clad predator with a snout that almost looks like an halberd. Definitely a weapon to swing around." + icon_state = "armored_pike" + inhand_icon_state = "armored_pike" + attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "lacerates", "gores") + attack_verb_simple = list("attack", "poke", "jab", "tear", "lacerate", "gore") + hitsound = 'sound/weapons/bladeslice.ogg' + block_sound = 'sound/weapons/parry.ogg' + force = 20 + sharpness = SHARP_EDGED + wound_bonus = -15 + attack_speed = 1 SECONDS + block_chance = 25 + bare_wound_bonus = 15 + demolition_mod = 0.8 + armour_penetration = 10 + stable_population = 3 + average_weight = 3000 + breeding_timeout = 5 MINUTES + feeding_frequency = 4 MINUTES + health = 180 + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + beauty = FISH_BEAUTY_GREAT + fishing_difficulty_modifier = 20 + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive, /datum/fish_trait/picky_eater, /datum/fish_trait/stinger) + compatible_types = list(/obj/item/fish/pike) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + /obj/item/fish, + ) + +/obj/item/fish/swordfish/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 11 + attack_speed -= 0.4 SECONDS + block_chance -= 25 + armour_penetration -= 15 + wound_bonus -= 15 + bare_wound_bonus -= 30 + if(WEIGHT_CLASS_SMALL) + force -= 6 + attack_speed -= 0.3 SECONDS + block_chance -= 20 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 25 + if(WEIGHT_CLASS_NORMAL) + force -= 4 + attack_speed -= 0.2 SECONDS + block_chance -= 20 + armour_penetration -= 5 + wound_bonus -= 10 + bare_wound_bonus -= 15 + if(WEIGHT_CLASS_HUGE) + force += 3 + attack_speed += 0.2 SECONDS + block_chance += 10 + demolition_mod += 0.1 + armour_penetration += 5 + wound_bonus += 10 + bare_wound_bonus += 5 + if(WEIGHT_CLASS_GIGANTIC) + force += 7 + attack_speed += 0.3 SECONDS + demolition_mod += 0.2 + block_chance += 20 + armour_penetration += 10 + wound_bonus += 15 + bare_wound_bonus += 10 + + if(status == FISH_DEAD) + force -= 5 + w_class + block_chance -= 15 + armour_penetration -= 10 + wound_bonus -= 5 + bare_wound_bonus -= 15 + +/obj/item/fish/pike/armored/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 3 + wound_bonus += bonus_malus * 2 + bare_wound_bonus += bonus_malus * 4 + block_chance += bonus_malus * 4 diff --git a/code/modules/fishing/fish/types/tiziran.dm b/code/modules/fishing/fish/types/tiziran.dm new file mode 100644 index 00000000000..a39e82ce6c4 --- /dev/null +++ b/code/modules/fishing/fish/types/tiziran.dm @@ -0,0 +1,69 @@ +//Tiziran Fish. + +/obj/item/fish/dwarf_moonfish + name = "dwarf moonfish" + desc = "Ordinarily in the wild, the Zagoskian moonfish is around the size of a tuna, however through selective breeding a smaller breed suitable for being kept as an aquarium pet has been created." + icon_state = "dwarf_moonfish" + sprite_height = 6 + sprite_width = 6 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 2 + fillet_type = /obj/item/food/fishmeat/moonfish + average_size = 60 + average_weight = 1000 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/gunner_jellyfish + name = "gunner jellyfish" + desc = "So called due to their resemblance to an artillery shell, the gunner jellyfish is native to Tizira, where it is enjoyed as a delicacy. Produces a mild hallucinogen that is destroyed by cooking." + icon_state = "gunner_jellyfish" + sprite_height = 4 + sprite_width = 5 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 4 + fillet_type = /obj/item/food/fishmeat/gunner_jellyfish + required_temperature_min = MIN_AQUARIUM_TEMP+24 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/needlefish + name = "needlefish" + desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish." + icon_state = "needlefish" + sprite_height = 3 + sprite_width = 7 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 12 + breeding_timeout = 1 MINUTES + fillet_type = null + average_size = 20 + average_weight = 300 + fish_traits = list(/datum/fish_trait/carnivore) + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + +/obj/item/fish/needlefish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) + +/obj/item/fish/armorfish + name = "armorfish" + desc = "A small shellfish native to Tizira's oceans, known for its exceptionally hard shell. Consumed similarly to prawns." + icon_state = "armorfish" + sprite_height = 5 + sprite_width = 6 + average_size = 25 + average_weight = 350 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 10 + breeding_timeout = 1.25 MINUTES + fillet_type = /obj/item/food/fishmeat/armorfish + fish_movement_type = /datum/fish_movement/slow + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + +/obj/item/fish/armorfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm index 49a84413ded..f0880804f8e 100644 --- a/code/modules/fishing/fish_catalog.dm +++ b/code/modules/fishing/fish_catalog.dm @@ -90,7 +90,7 @@ if(source.catalog_description && (fish_type in source.fish_table)) spot_descriptions += source.catalog_description .["spots"] = english_list(spot_descriptions, nothing_text = "Unknown") - var/list/fish_list_properties = collect_fish_properties() + var/list/fish_list_properties = SSfishing.fish_properties var/list/fav_bait = fish_list_properties[fishy][NAMEOF(fishy, favorite_bait)] var/list/disliked_bait = fish_list_properties[fishy][NAMEOF(fishy, disliked_bait)] var/list/bait_list = list() diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index 5408e411876..645ebed875d 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -52,7 +52,7 @@ */ /obj/item/fishing_line/auto_reel name = "fishing line auto-reel" - desc = "A fishing line that automatically starts reeling in fish the moment they bite. Also good for hurling things at yourself." + desc = "A fishing line that automatically spins lures and begins reeling in fish the moment it bites. Also good for hurling things towards you." icon_state = "reel_auto" fishing_line_traits = FISHING_LINE_AUTOREEL line_color = "#F88414" @@ -163,6 +163,20 @@ rod_overlay_icon_state = "hook_treasure_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/objects +/obj/item/fishing_hook/magnet/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(hook_equipped)) + +///We make sure that the fishng rod doesn't need a bait to reliably catch non-fish loot. +/obj/item/fishing_hook/magnet/proc/hook_equipped(datum/source, obj/item/fishing_rod/rod) + SIGNAL_HANDLER + ADD_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD, type) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed)) + +/obj/item/fishing_hook/magnet/proc/on_removed(atom/movable/source, atom/old_loc, dir, forced) + SIGNAL_HANDLER + REMOVE_TRAIT(old_loc, TRAIT_ROD_REMOVE_FISHING_DUD, type) + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) /obj/item/fishing_hook/magnet/get_hook_bonus_multiplicative(fish_type, datum/fish_source/source) if(fish_type == FISHING_DUD || ispath(fish_type, /obj/item/fish)) @@ -171,7 +185,6 @@ // We multiply the odds by five for everything that's not a fish nor a dud return MAGNET_HOOK_BONUS_MULTIPLIER - /obj/item/fishing_hook/shiny name = "shiny lure hook" icon_state = "gold_shiny" @@ -364,5 +377,42 @@ new /obj/item/storage/fish_case(src) new /obj/item/storage/fish_case(src) +/obj/item/storage/box/fishing_lures + name = "fishing lures set" + desc = "A small tackle box containing all the fishing lures you will ever need to curb randomness." + icon_state = "plasticbox" + foldable_result = null + illustration = "fish" + +/obj/item/storage/box/fishing_lures/PopulateContents() + new /obj/item/paper/lures_instructions(src) + var/list/typesof = typesof(/obj/item/fishing_lure) + for(var/type in typesof) + new type (src) + atom_storage.set_holdable(/obj/item/fishing_lure) //can only hold lures + //adds an extra slot, so we can put back the lures even if we didn't take out the instructions. + atom_storage.max_slots = length(typesof) + 1 + atom_storage.max_total_storage = WEIGHT_CLASS_SMALL * (atom_storage.max_slots + 1) + +/obj/item/paper/lures_instructions + name = "instructions paper" + icon_state = "slipfull" + show_written_words = FALSE + desc = "A piece of grey paper with an how-to for dummies about fishing lures printed on it. Smells cheap." + default_raw_text = "Thank you for buying this set.
\ + This a simple non-exhaustive set of instructions on how to use fishing lures, some information may \ + be slightly incorrect or oversimplified.

\ + + First and foremost, fishing lures are inedible, artificia baits, fairly sturdy so that \ + they won't be destroyed by the hungry fish. However, they need to be spun at intervals to replicate \ + the motion of a prey or organic bait to tempt the fish, since a piece of plastic and metal ins't \ + by itself all that tasty. Different lures can be used to catch different fish.

\ + + To help you, each lure comes with a small light that's attached to the float of your fishing rod. \ + For those who don't know it, the float is basically the thing bobbing up'n'down above the fishing spot. \ + The light will flash green and a sound cue will be played when the bait is ready to be spun. \ + Do not spin while the light is still red.

\ + That's all, best of luck to your angling journey.

" + #undef MAGNET_HOOK_BONUS_MULTIPLIER #undef RESCUE_HOOK_FISH_MULTIPLIER diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index f53437e3559..fc30d2aa697 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -1,4 +1,4 @@ -// Lure bobbing +// float bobbing #define WAIT_PHASE 1 // Click now to start tgui part #define BITING_PHASE 2 @@ -53,12 +53,14 @@ var/phase = WAIT_PHASE // Timer for the next phase var/next_phase_timer + // The last time we clicked during the baiting phase + var/last_baiting_click /// Fishing mob var/mob/user /// Rod that is used for the challenge var/obj/item/fishing_rod/used_rod - /// Lure visual - var/obj/effect/fishing_lure/lure + /// float visual + var/obj/effect/fishing_float/float /// Background icon state from fishing_hud.dmi var/background = "background_default" /// Fish icon state from fishing_hud.dmi @@ -110,7 +112,8 @@ src.reward_path = reward_path src.used_rod = rod var/atom/spot = comp.parent - lure = new(get_turf(spot), spot) + float = new(get_turf(spot), spot) + float.spin_frequency = rod.spin_frequency RegisterSignal(spot, COMSIG_QDELETING, PROC_REF(on_spot_gone)) RegisterSignal(comp.fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge)) comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_COMPLETED, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) @@ -122,7 +125,7 @@ var/movement_path = initial(fish.fish_movement_type) mover = new movement_path(src) // Apply fish trait modifiers - var/list/fish_list_properties = collect_fish_properties() + var/list/fish_list_properties = SSfishing.fish_properties var/list/fish_traits = fish_list_properties[fish][NAMEOF(fish, fish_traits)] for(var/fish_trait in fish_traits) var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] @@ -178,8 +181,7 @@ //Stops the line snapped message from appearing everytime the minigame is over. UnregisterSignal(fishing_line, COMSIG_QDELETING) QDEL_NULL(fishing_line) - if(lure) - QDEL_NULL(lure) + QDEL_NULL(float) SStgui.close_uis(src) user = null used_rod = null @@ -187,8 +189,8 @@ return ..() /datum/fishing_challenge/proc/send_alert(message) - var/turf/lure_turf = get_turf(lure) - lure_turf?.balloon_alert(user, message) + var/turf/float_turf = get_turf(float) + float_turf?.balloon_alert(user, message) /datum/fishing_challenge/proc/on_spot_gone(datum/source) SIGNAL_HANDLER @@ -204,11 +206,14 @@ /datum/fishing_challenge/proc/start(mob/living/user) /// Create fishing line visuals if(!used_rod.internal) - fishing_line = used_rod.create_fishing_line(lure, user, target_py = 5) + fishing_line = used_rod.create_fishing_line(float, user, target_py = 5) + if(isnull(fishing_line)) //couldn't create a fishing line, probably because we don't have a good line of sight. + qdel(src) + return RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(on_line_deleted)) else //if the rod doesnt have a fishing line, then it ends when they move away - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_lure_or_user_move)) - RegisterSignal(lure, COMSIG_MOVABLE_MOVED, PROC_REF(on_lure_or_user_move)) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_float_or_user_move)) + RegisterSignal(float, COMSIG_MOVABLE_MOVED, PROC_REF(on_float_or_user_move)) RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), PROC_REF(on_hands_blocked)) RegisterSignal(user, SIGNAL_REMOVETRAIT(TRAIT_PROFOUND_FISHER), PROC_REF(no_longer_fishing)) active_effects = bitfield_to_list(special_effects & FISHING_MINIGAME_ACTIVE_EFFECTS) @@ -219,19 +224,49 @@ RegisterSignal(user, COMSIG_MOB_CLICKON, PROC_REF(handle_click)) start_baiting_phase() to_chat(user, span_notice("You start fishing...")) - playsound(lure, 'sound/effects/splash.ogg', 100) + playsound(float, 'sound/effects/splash.ogg', 100) + +///Set the timers for lure that need to be spun at intervals. +/datum/fishing_challenge/proc/set_lure_timers() + float.spin_ready = FALSE + addtimer(CALLBACK(src, PROC_REF(set_lure_ready)), float.spin_frequency[1], TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(missed_lure)), float.spin_frequency[2], TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_DELETE_ME) + float.update_appearance(UPDATE_OVERLAYS) + +/datum/fishing_challenge/proc/set_lure_ready() + if(phase != WAIT_PHASE) + return + float.spin_ready = TRUE + float.update_appearance(UPDATE_OVERLAYS) + if(special_effects & FISHING_MINIGAME_AUTOREEL) + addtimer(CALLBACK(src, PROC_REF(auto_spin)), 0.2 SECONDS) + playsound(float, 'sound/machines/ping.ogg', 10, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + +/datum/fishing_challenge/proc/auto_spin() + if(phase != WAIT_PHASE || !float.spin_ready) + return + float.spin_ready = FALSE + float.update_appearance(UPDATE_OVERLAYS) + set_lure_timers() + send_alert("spun") + +/datum/fishing_challenge/proc/missed_lure() + if(phase != WAIT_PHASE) + return + send_alert("miss!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for not spinning the lure. /datum/fishing_challenge/proc/on_line_deleted(datum/source) SIGNAL_HANDLER fishing_line = null - ///The lure may be out of sight if the user has moed around a corner, so the message should be displayed over him instead. + ///The float may be out of sight if the user has moed around a corner, so the message should be displayed over him instead. user.balloon_alert(user, user.is_holding(used_rod) ? "line snapped" : "rod dropped") interrupt() -/datum/fishing_challenge/proc/on_lure_or_user_move(datum/source) +/datum/fishing_challenge/proc/on_float_or_user_move(datum/source) SIGNAL_HANDLER - if(!user.CanReach(lure)) + if(!user.CanReach(float)) user.balloon_alert(user, "too far!") interrupt() @@ -258,8 +293,20 @@ if(!HAS_TRAIT(source, TRAIT_PROFOUND_FISHER) && source.get_active_held_item() != used_rod) return if(phase == WAIT_PHASE) - send_alert("miss!") - start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. + if(world.time < last_baiting_click + 0.25 SECONDS) + return //Don't punish players if they accidentally double clicked. + if(float.spin_frequency) + if(!float.spin_ready) + send_alert("too early!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. + else + send_alert("spun") + last_baiting_click = world.time + float.spin_ready = FALSE + set_lure_timers() + else + send_alert("miss!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. else if(phase == BITING_PHASE) start_minigame_phase() return COMSIG_MOB_CANCEL_CLICKON @@ -298,30 +345,33 @@ user.client?.give_award(/datum/award/achievement/skill/legendary_fisher, user) if(win) if(reward_path != FISHING_DUD) - playsound(lure, 'sound/effects/bigsplash.ogg', 100) + playsound(float, 'sound/effects/bigsplash.ogg', 100) SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_COMPLETED, user, win) if(!QDELETED(src)) qdel(src) /datum/fishing_challenge/proc/start_baiting_phase(penalty = FALSE) var/wait_time + last_baiting_click = world.time if(penalty) wait_time = min(timeleft(next_phase_timer) + rand(3 SECONDS, 5 SECONDS), 30 SECONDS) else - wait_time = rand(3 SECONDS, 25 SECONDS) + wait_time = float.spin_frequency ? rand(11 SECONDS, 17 SECONDS) : rand(3 SECONDS, 25 SECONDS) if(special_effects & FISHING_MINIGAME_AUTOREEL && wait_time >= 15 SECONDS) wait_time = max(wait_time - 7.5 SECONDS, 15 SECONDS) deltimer(next_phase_timer) phase = WAIT_PHASE //Bobbing animation - animate(lure, pixel_y = 1, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE) + animate(float, pixel_y = 1, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -1, time = 1 SECONDS, flags = ANIMATION_RELATIVE) - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_biting_phase)), wait_time, TIMER_STOPPABLE) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_biting_phase)), wait_time, TIMER_STOPPABLE|TIMER_DELETE_ME) + if(float.spin_frequency) + set_lure_timers() /datum/fishing_challenge/proc/start_biting_phase() phase = BITING_PHASE // Trashing animation - playsound(lure, 'sound/effects/fish_splash.ogg', 100) + playsound(float, 'sound/effects/fish_splash.ogg', 100) if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) switch(fish_icon) if(FISH_ICON_DEF) @@ -356,13 +406,19 @@ send_alert("bottle!!!") else send_alert("!!!") - animate(lure, pixel_y = 3, time = 5, loop = -1, flags = ANIMATION_RELATIVE) + animate(float, pixel_y = 3, time = 5, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -3, time = 5, flags = ANIMATION_RELATIVE) if(special_effects & FISHING_MINIGAME_AUTOREEL) - start_minigame_phase(auto_reel = TRUE) - return + addtimer(CALLBACK(src, PROC_REF(automatically_start_minigame)), 0.2 SECONDS) // Setup next phase - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), BITING_TIME_WINDOW, TIMER_STOPPABLE) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), BITING_TIME_WINDOW, TIMER_STOPPABLE|TIMER_DELETE_ME) + ///If we're using a lure, we want the float to show a little green light during the minigame phase and not a red one. + float.spin_ready = TRUE + float.update_appearance(UPDATE_OVERLAYS) + +/datum/fishing_challenge/proc/automatically_start_minigame() + if(phase == BITING_PHASE) + start_minigame_phase(auto_reel = TRUE) ///The damage dealt per second to the fish when FISHING_MINIGAME_RULE_KILL is active. #define FISH_DAMAGE_PER_SECOND 2 @@ -403,6 +459,8 @@ var/diff_dist = 100 + difficulty bait_position = clamp(round(fish_position + rand(-diff_dist, diff_dist) - bait_height * 0.5), 0, FISHING_MINIGAME_AREA - bait_height) if(!prepare_minigame_hud()) + get_stack_trace("couldn't prepare minigame hud for a fishing challenge.") //just to be sure. This shouldn't happen. + qdel(src) return ADD_TRAIT(user, TRAIT_ACTIVELY_FISHING, WEAKREF(src)) phase = MINIGAME_PHASE @@ -410,10 +468,26 @@ if((FISHING_MINIGAME_RULE_KILL in special_effects) && ispath(reward_path,/obj/item/fish)) var/obj/item/fish/fish = reward_path var/wait_time = (initial(fish.health) / FISH_DAMAGE_PER_SECOND) SECONDS - addtimer(CALLBACK(src, PROC_REF(win_anyway)), wait_time) + addtimer(CALLBACK(src, PROC_REF(win_anyway)), wait_time, TIMER_DELETE_ME) start_time = world.time experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT +///Throws a stack with prefixed text. +/datum/fishing_challenge/proc/get_stack_trace(init_text) + var/text = "[init_text] " + text += "used rod: [used_rod || "null"], " + if(used_rod) + text += "bait: [used_rod.bait || "null"], " + text += "reward: [reward_path || "null"], " + text += "user: [user || "null"]" + if(user) + if(QDELING(user)) + text += ", user qdeling" + else if(!user.client) + text += ", user clientless" + text += "." + stack_trace(text) + #undef FISH_DAMAGE_PER_SECOND ///Initialize the minigame hud and register some signals to make it work. @@ -475,6 +549,11 @@ fishing_hud.transform = fishing_hud.transform.Scale(1, -1) SEND_SOUND(user, sound('sound/effects/boing.ogg')) COOLDOWN_START(src, active_effect_cd, rand(5, 6) SECONDS) + if(FISHING_MINIGAME_RULE_CAMO) + fishing_hud.icon_state = "background_camo" + SEND_SOUND(user, sound('sound/effects/nightmare_poof.ogg', volume = 15)) + COOLDOWN_START(src, active_effect_cd, rand(6, 8) SECONDS) + animate(fishing_hud.hud_fish, alpha = 7, time = 2 SECONDS) return ///go back to normal @@ -487,6 +566,10 @@ if(FISHING_MINIGAME_RULE_FLIP) fishing_hud.transform = fishing_hud.transform.Scale(1, -1) COOLDOWN_START(src, active_effect_cd, rand(8, 12) SECONDS) + if(FISHING_MINIGAME_RULE_CAMO) + COOLDOWN_START(src, active_effect_cd, rand(9, 16) SECONDS) + SEND_SOUND(user, sound('sound/effects/nightmare_reappear.ogg', volume = 15)) + animate(fishing_hud.hud_fish, alpha = 255, time = 1.2 SECONDS) fishing_hud.icon_state = background current_active_effect = null @@ -647,21 +730,39 @@ icon_state = "completion_[FLOOR(challenge.completion, 5)]" /// The visual that appears over the fishing spot -/obj/effect/fishing_lure +/obj/effect/fishing_float + name = "float" icon = 'icons/obj/fishing.dmi' - icon_state = "lure_idle" + icon_state = "float" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * If set, an emissive overlay will be added, colored green when the lure is ready to be spun, otherwise red. + */ + var/list/spin_frequency + ///Is the bait ready to be spun? + var/spin_ready = FALSE -/obj/effect/fishing_lure/Initialize(mapload, atom/spot) +/obj/effect/fishing_float/Initialize(mapload, atom/spot) . = ..() - if(ismovable(spot)) // we want the lure and therefore the fishing line to stay connected with the fishing spot. + if(ismovable(spot)) // we want the float and therefore the fishing line to stay connected with the fishing spot. RegisterSignal(spot, COMSIG_MOVABLE_MOVED, PROC_REF(follow_movable)) -/obj/effect/fishing_lure/proc/follow_movable(atom/movable/source) +/obj/effect/fishing_float/proc/follow_movable(atom/movable/source) SIGNAL_HANDLER set_glide_size(source.glide_size) forceMove(source.loc) +/obj/effect/fishing_float/update_overlays() + . = ..() + if(!spin_frequency) + return + var/mutable_appearance/overlay = mutable_appearance(icon, "lure_light") + overlay.color = spin_ready ? COLOR_GREEN : COLOR_RED + . += overlay + . += emissive_appearance(icon, "lure_light_emissive", src, alpha = src.alpha) + #undef WAIT_PHASE #undef BITING_PHASE #undef MINIGAME_PHASE diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 1c47b8f7ee3..28ae51d4236 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -42,6 +42,12 @@ ///The name of the icon state of the reel overlay var/reel_overlay = "reel_overlay" + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * Inherited from baits, passed down to the minigame lure. + */ + var/list/spin_frequency + ///Prevents spamming the line casting, without affecting the player's click cooldown. COOLDOWN_DECLARE(casting_cd) @@ -69,9 +75,11 @@ /obj/item/fishing_rod/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - if(currently_hooked) - context[SCREENTIP_CONTEXT_LMB] = "Reel in" - context[SCREENTIP_CONTEXT_RMB] = "Unhook" + var/gone_fishing = HAS_TRAIT(user, TRAIT_GONE_FISHING) + if(currently_hooked || gone_fishing) + context[SCREENTIP_CONTEXT_LMB] = (gone_fishing && spin_frequency) ? "Spin" : "Reel in" + if(!gone_fishing) + context[SCREENTIP_CONTEXT_RMB] = "Unhook" return CONTEXTUAL_SCREENTIP_SET return NONE @@ -170,6 +178,8 @@ RegisterSignal(fishing_line, COMSIG_BEAM_BEFORE_DRAW, PROC_REF(check_los)) RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(clear_line)) INVOKE_ASYNC(fishing_line, TYPE_PROC_REF(/datum/beam/, Start)) + if(QDELETED(fishing_line)) + return null firer.update_held_items() return fishing_line @@ -419,23 +429,20 @@ if(user.transferItemToLoc(new_item,src)) set_slot(new_item, slot) balloon_alert(user, "[slot] installed") + else + balloon_alert(user, "stuck to your hands!") + return /// Trying to swap item else if(new_item && current_item) if(!slot_check(new_item,slot)) return - if(user.transferItemToLoc(new_item,src)) - switch(slot) - if(ROD_SLOT_BAIT) - bait = new_item - if(ROD_SLOT_HOOK) - hook = new_item - if(ROD_SLOT_LINE) - line = new_item - user.put_in_hands(current_item) - balloon_alert(user, "[slot] swapped") - - if(new_item) - SEND_SIGNAL(new_item, COMSIG_FISHING_EQUIPMENT_SLOTTED, src) + if(user.transferItemToLoc(new_item, src)) + user.put_in_hands(current_item) + set_slot(new_item, slot) + balloon_alert(user, "[slot] swapped") + else + balloon_alert(user, "stuck to your hands!") + return update_icon() playsound(src, 'sound/items/click.ogg', 50, TRUE) @@ -445,16 +452,23 @@ switch(slot) if(ROD_SLOT_BAIT) bait = equipment + if(!HAS_TRAIT(bait, TRAIT_BAIT_ALLOW_FISHING_DUD)) + ADD_TRAIT(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT) if(ROD_SLOT_HOOK) hook = equipment if(ROD_SLOT_LINE) line = equipment cast_range += FISHING_ROD_REEL_CAST_RANGE + else + CRASH("set_slot called with an undefined slot: [slot]") + + SEND_SIGNAL(equipment, COMSIG_FISHING_EQUIPMENT_SLOTTED, src) /obj/item/fishing_rod/Exited(atom/movable/gone, direction) . = ..() if(gone == bait) bait = null + REMOVE_TRAIT(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT) if(gone == line) cast_range -= FISHING_ROD_REEL_CAST_RANGE line = null diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 5aa03ae8c0c..a63c087fcc6 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -31,6 +31,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) /obj/item/fish/jumpercable = FISH_ICON_ELECTRIC, /obj/item/fish/lavaloop = FISH_ICON_WEAPON, /obj/item/fish/mastodon = FISH_ICON_BONE, + /obj/item/fish/pike/armored = FISH_ICON_WEAPON, /obj/item/fish/pufferfish = FISH_ICON_CHUNKY, /obj/item/fish/sand_crab = FISH_ICON_CRAB, /obj/item/fish/skin_crab = FISH_ICON_CRAB, @@ -139,8 +140,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) // In the future non-fish rewards can have variable difficulty calculated here return - var/list/fish_list_properties = collect_fish_properties() var/obj/item/fish/caught_fish = result + var/list/fish_properties = SSfishing.fish_properties[caught_fish] // Baseline fish difficulty . += initial(caught_fish.fishing_difficulty_modifier) @@ -148,18 +149,18 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(rod.bait) var/obj/item/bait = rod.bait //Fav bait makes it easier - var/list/fav_bait = fish_list_properties[caught_fish][NAMEOF(caught_fish, favorite_bait)] + var/list/fav_bait = fish_properties[FISH_PROPERTIES_FAV_BAIT] for(var/bait_identifer in fav_bait) if(is_matching_bait(bait, bait_identifer)) . += FAV_BAIT_DIFFICULTY_MOD //Disliked bait makes it harder - var/list/disliked_bait = fish_list_properties[caught_fish][NAMEOF(caught_fish, disliked_bait)] + var/list/disliked_bait = fish_properties[FISH_PROPERTIES_BAD_BAIT] for(var/bait_identifer in disliked_bait) if(is_matching_bait(bait, bait_identifer)) . += DISLIKED_BAIT_DIFFICULTY_MOD // Matching/not matching fish traits and equipment - var/list/fish_traits = fish_list_properties[caught_fish][NAMEOF(caught_fish, fish_traits)] + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] var/additive_mod = 0 var/multiplicative_mod = 1 @@ -173,8 +174,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) . *= multiplicative_mod /// In case you want more complex rules for specific spots -/datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman) - return pick_weight(get_modified_fish_table(rod,fisherman)) +/datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman, atom/location) + return pick_weight(get_modified_fish_table(rod, fisherman, location)) || FISHING_DUD /** * Used to register signals or add traits and the such right after conditions have been cleared @@ -198,7 +199,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) return var/obj/item/fish/caught = source.reward_path user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = initial(caught.name)) - var/turf/fishing_spot = get_turf(source.lure) + var/turf/fishing_spot = get_turf(source.float) var/atom/movable/reward = dispense_reward(source.reward_path, user, fishing_spot) if(source.used_rod) SEND_SIGNAL(source.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) @@ -259,23 +260,6 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) caught_fish.randomize_size_and_weight() return reward -/// Cached fish list properties so we don't have to initalize fish every time, init deffered -GLOBAL_LIST(fishing_property_cache) - -/// Awful workaround around initial(x.list_variable) not being a thing while trying to keep some semblance of being structured -/proc/collect_fish_properties() - if(GLOB.fishing_property_cache == null) - var/list/fish_property_table = list() - for(var/fish_type in subtypesof(/obj/item/fish)) - var/obj/item/fish/fish = new fish_type(null, FALSE) - fish_property_table[fish_type] = list() - fish_property_table[fish_type][NAMEOF(fish, favorite_bait)] = fish.favorite_bait.Copy() - fish_property_table[fish_type][NAMEOF(fish, disliked_bait)] = fish.disliked_bait.Copy() - fish_property_table[fish_type][NAMEOF(fish, fish_traits)] = fish.fish_traits.Copy() - QDEL_NULL(fish) - GLOB.fishing_property_cache = fish_property_table - return GLOB.fishing_property_cache - /// Returns the fish table, with with the unavailable items from fish_counts removed. /datum/fish_source/proc/get_fish_table() var/list/table = fish_table.Copy() @@ -285,7 +269,7 @@ GLOBAL_LIST(fishing_property_cache) return table /// Builds a fish weights table modified by bait/rod/user properties -/datum/fish_source/proc/get_modified_fish_table(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/proc/get_modified_fish_table(obj/item/fishing_rod/rod, mob/fisherman, atom/location) var/obj/item/bait = rod.bait ///An exponent used to level out the difference in probabilities between fishes/mobs on the table depending on bait quality. var/leveling_exponent = 0 @@ -305,9 +289,9 @@ GLOBAL_LIST(fishing_property_cache) else if(HAS_TRAIT(bait, TRAIT_BASIC_QUALITY_BAIT)) result_multiplier = 2 leveling_exponent = 0.1 - final_table -= FISHING_DUD - var/list/fish_list_properties = collect_fish_properties() + if(HAS_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD)) + final_table -= FISHING_DUD if(HAS_TRAIT(fisherman, TRAIT_PROFOUND_FISHER) && !fisherman.client) @@ -317,37 +301,17 @@ GLOBAL_LIST(fishing_property_cache) final_table[result] += rod.hook?.get_hook_bonus_additive(result)//Decide on order here so it can be multiplicative if(ispath(result, /obj/item/fish)) - //Modify fish roll chance - var/obj/item/fish/caught_fish = result - if(bait) final_table[result] = round(final_table[result] * result_multiplier, 1) - if(!HAS_TRAIT(bait, TRAIT_OMNI_BAIT)) - //Bait matching likes doubles the chance - var/list/fav_bait = fish_list_properties[result][NAMEOF(caught_fish, favorite_bait)] - for(var/bait_identifer in fav_bait) - if(is_matching_bait(bait, bait_identifer)) - final_table[result] *= 2 - //Bait matching dislikes - var/list/disliked_bait = fish_list_properties[result][NAMEOF(caught_fish, disliked_bait)] - for(var/bait_identifer in disliked_bait) - if(is_matching_bait(bait, bait_identifer)) - final_table[result] = round(final_table[result] * 0.5, 1) + var/mult = bait.check_bait(result) + final_table[result] = round(final_table[result] * mult, 1) + if(mult > 1 && HAS_TRAIT(bait, TRAIT_BAIT_ALLOW_FISHING_DUD)) + final_table -= FISHING_DUD else final_table[result] = round(final_table[result] * 0.15, 1) //Fishing without bait is not going to be easy // Apply fish trait modifiers - var/list/fish_traits = fish_list_properties[caught_fish][NAMEOF(caught_fish, fish_traits)] - var/additive_mod = 0 - var/multiplicative_mod = 1 - for(var/fish_trait in fish_traits) - var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] - var/list/mod = trait.catch_weight_mod(rod, fisherman) - additive_mod += mod[ADDITIVE_FISHING_MOD] - multiplicative_mod *= mod[MULTIPLICATIVE_FISHING_MOD] - - final_table[result] += additive_mod - final_table[result] = round(final_table[result] * multiplicative_mod, 1) + final_table[result] = get_fish_trait_catch_mods(final_table[result], result, rod, fisherman, location) if(final_table[result] <= 0) final_table -= result @@ -371,6 +335,63 @@ GLOBAL_LIST(fishing_property_cache) return final_table +/datum/fish_source/proc/get_fish_trait_catch_mods(weight, obj/item/fish/fish, obj/item/fishing_rod/rod, mob/user, atom/location) + if(!ispath(fish, /obj/item/fish)) + return weight + var/multiplier = 1 + for(var/fish_trait in SSfishing.fish_properties[fish][FISH_PROPERTIES_TRAITS]) + var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] + var/list/mod = trait.catch_weight_mod(rod, user, location, fish) + weight += mod[ADDITIVE_FISHING_MOD] + multiplier *= mod[MULTIPLICATIVE_FISHING_MOD] + + return round(weight * multiplier, 1) + +///returns true if this fishing spot has fish that are shown in the catalog. +/datum/fish_source/proc/has_known_fishes() + for(var/reward in fish_table) + if(!ispath(reward, /obj/item/fish)) + continue + var/obj/item/fish/prototype = reward + if(initial(prototype.show_in_catalog)) + return TRUE + return FALSE + +///Add a string with the names of catchable fishes to the examine text. +/datum/fish_source/proc/get_catchable_fish_names(mob/user, atom/location, list/examine_text) + var/list/known_fishes = list() + + var/obj/item/fishing_rod/rod = user.get_active_held_item() + if(!istype(rod)) + rod = null + + for(var/reward in fish_table) + if(!ispath(reward, /obj/item/fish)) + continue + var/obj/item/fish/prototype = reward + if(initial(prototype.show_in_catalog)) + var/init_name = initial(prototype.name) + if(rod) + var/init_weight = fish_table[reward] + var/weight = (rod.bait ? rod.bait.check_bait(prototype) : 1) + weight = get_fish_trait_catch_mods(weight, reward, rod, user, location) + if(weight > init_weight) + init_name = span_bold(init_name) + if(weight/init_weight >= 3.5) + init_name = "init_name" + else if(weight < init_weight) + init_name = span_small(reward) + known_fishes += init_name + + if(!length(known_fishes)) + return + + var/info = "You can catch the following fish here" + + if(rod) + info = span_tooltip("boldened are the fish you're more likely to catch with your current setup. The opposite is true for smaller names", info) + examine_text += span_info("[info]: [english_list(known_fishes)].") + /datum/fish_source/proc/spawn_reward_from_explosion(atom/location, severity) if(!explosive_malus) explosive_spawn(location, severity) @@ -388,7 +409,7 @@ GLOBAL_LIST(fishing_property_cache) explosive_spawn(turf, exploded_turfs[turf], multiplier) exploded_turfs = null -/datum/fish_source/proc/explosive_spawn(location, severity, multiplier = 1) +/datum/fish_source/proc/explosive_spawn(atom/location, severity, multiplier = 1) for(var/i in 1 to (severity + 2)) if(!prob((100 + 100 * severity)/i * multiplier)) continue diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index 52388685687..6aea78b9943 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -1,17 +1,22 @@ /datum/fish_source/ocean fish_table = list( - FISHING_DUD = 11, + FISHING_DUD = 10, /obj/effect/spawner/message_in_a_bottle = 4, - /obj/item/coin/gold = 7, - /obj/item/fish/clownfish = 15, - /obj/item/fish/pufferfish = 15, - /obj/item/fish/cardinal = 15, - /obj/item/fish/greenchromis = 15, + /obj/item/coin/gold = 6, + /obj/item/fish/clownfish = 11, + /obj/item/fish/pufferfish = 11, + /obj/item/fish/cardinal = 11, + /obj/item/fish/greenchromis = 11, + /obj/item/fish/squid = 11, + /obj/item/fish/stingray = 8, + /obj/item/fish/plaice = 8, + /obj/item/fish/monkfish = 5, /obj/item/fish/stingray = 10, /obj/item/fish/lanternfish = 7, /obj/item/fish/zipzap = 7, /obj/item/fish/clownfish/lube = 5, /obj/item/fish/swordfish = 5, + /obj/item/fish/swordfish = 3, /obj/structure/mystery_box/fishing = 2, ) fish_counts = list( @@ -46,13 +51,22 @@ FISHING_DUD = 4, /obj/item/fish/goldfish = 5, /obj/item/fish/guppy = 5, + /obj/item/fish/perch = 4, /obj/item/fish/angelfish = 4, /obj/item/fish/catfish = 4, + /obj/item/fish/perch = 5, /obj/item/fish/slimefish = 2, /obj/item/fish/sockeye_salmon = 1, /obj/item/fish/arctic_char = 1, + /obj/item/fish/pike = 1, /obj/item/fish/goldfish/three_eyes = 1, ) + fish_counts = list( + /obj/item/fish/pike = 3, + ) + fish_count_regen = list( + /obj/item/fish/pike = 4 MINUTES, + ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 /datum/fish_source/sand @@ -85,6 +99,7 @@ /obj/item/fish/goldfish = 10, /obj/item/fish/guppy = 10, /obj/item/fish/angelfish = 10, + /obj/item/fish/perch = 5, /obj/item/fish/goldfish/three_eyes = 3, ) catalog_description = "Aquarium dimension (Fishing portal generator)" @@ -103,6 +118,8 @@ /obj/item/fish/pufferfish = 10, /obj/item/fish/cardinal = 10, /obj/item/fish/greenchromis = 10, + /obj/item/fish/squid = 8, + /obj/item/fish/plaice = 8, ) catalog_description = "Beach dimension (Fishing portal generator)" radial_name = "Beach" @@ -141,6 +158,7 @@ /obj/item/fish/armorfish = 5, /obj/item/fish/zipzap = 5, /obj/item/fish/stingray = 4, + /obj/item/fish/monkfish = 4, /obj/item/fish/swordfish = 3, ) fish_counts = list( @@ -185,13 +203,16 @@ /obj/item/fish/donkfish = 5, /obj/item/fish/emulsijack = 5, /obj/item/fish/jumpercable = 5, - /obj/item/fish/chainsawfish = 3, + /obj/item/fish/chainsawfish = 2, + /obj/item/fish/pike/armored = 2, ) fish_counts = list( /obj/item/fish/chainsawfish = 1, + /obj/item/fish/pike/armored = 1, ) fish_count_regen = list( /obj/item/fish/chainsawfish = 7 MINUTES, + /obj/item/fish/pike/armored = 7 MINUTES, ) catalog_description = "Syndicate dimension (Fishing portal generator)" radial_name = "Syndicate" diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 3ff29e194c7..14f93b45cd8 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -139,3 +139,7 @@ output = /obj/item/popsicle_stick food_multiplier = 3 preserve_materials = FALSE + +/datum/food_processor_process/canned_ink + input = /obj/item/food/ink_sac + output = /obj/item/food/canned/squid_ink diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index f59adad7839..aa63f5d41f1 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -202,7 +202,7 @@ return RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(squash_plant)) - RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant)) + RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant_if_not_caught)) RegisterSignal(our_plant, COMSIG_ITEM_ATTACK_SELF, PROC_REF(squash_plant)) /* @@ -239,6 +239,10 @@ qdel(our_plant) +/datum/plant_gene/trait/squash/proc/squash_plant_if_not_caught(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + if(!caught) + squash_plant(source, hit_atom) + /* * Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. * Applies other trait effects (teleporting, etc) to the target by signal. diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 7b734c15306..1d913f4a236 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -91,7 +91,7 @@ /obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(iscarbon(hit_atom) && HAS_TRAIT(hit_atom, TRAIT_PAPER_MASTER)) var/mob/living/carbon/hit_carbon = hit_atom - if(hit_carbon.can_catch_item(TRUE)) + if(hit_carbon.can_catch_item(src, skip_throw_mode_check = TRUE)) hit_carbon.throw_mode_on(THROW_MODE_TOGGLE) . = ..() diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 22306cffe71..90b8acee031 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -1012,7 +1012,7 @@ /datum/design/auto_reel name = "Fishing Line Auto-Reel" - desc = "An advanced line reel which can be used speed up both fishing and casually snagging other items in your direction." + desc = "An advanced line reel which can be used speed up fishing or casually snag other items in your direction." id = "auto_reel" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3) diff --git a/icons/hud/fishing_hud.dmi b/icons/hud/fishing_hud.dmi index db36e241a2f33509fcf4e8027d306059a74f2daf..f9d2d2ff9c4570781f123e4b92feedec8d478bcf 100644 GIT binary patch literal 4920 zcmc&%dpOi--=7&Yb_RoTsAOn6I1Hmrh>TORR;&sk4E0#4mdPP!GojcdHX`IuYHL%W z!zMK2oHf;igq&t#9C8>2!yL>!_l(`%-RIipy59G%*LD5O?{|NX_vd@M@1I;<9OMz3 z5D*AN-tpW0hrur$0)ZLHt^;o+mxIP35U5?On`gxS!0;1c!Gwt5&=3eD`o^_uw2($4 zxmMcD5jR57FRD5@O@`}Felqfd=70FnvQv8dy5@dtze0aN+tM3HoQN%2Fpe7}&v5$2 z67u{y;9(|lzpK(>3I^^ma3*6b+^a|&|0IuM9b zrQ?1Zx9E>EgEnc$me0SM7pX@@HH;YLY_#jV9nf$<9er+o@7%t-$34G0sSUO3x9fwa z_c|r?HT_`s8*aMARmaZePU;T<$x^dBT#YWg>qu^Vr+H?eP`%04(dV1p>Pl4l9r|p5 z!x66qv@T&XQSd?ZpqY2vPe?0qej^%*BBKpN`Ygel_X4Zc zx!|XQe=W7Y7o2(L`;!;>;lsl9)b0>GS|{Meje&??{R#)n_a!BMO`i@b_v{@o*pqy zEeo=H&35>(t5|6l747vZ`am;=_^&M^8YM_NFU0YTJ1j({2AV`+Q{E|haWQl$l>))}I{w&G92m1k`>Pzv| z_l#J5;BSXq`8>QDzOpFHL>9HuOURt1xon!yb;5XED1|*pm}2lRxSTNJZ8GX|>3AoD z@ow})dOl65Qms7s)d>Ut4rQ@B5);6kQknmYm!*G78qhn>E?(WhBJ-(@*q`Qx;zX`I zr*GmH(Ja-s#0C72zNJWQSX4<6K2PL$Omgx3Zi?z#(e!51x^4Dds)Xt!dw{9W^WeKx z>W})Lc6rM6{P68yn-B_a8OeOe3iX*qp#&x2dh zm89#gWb?Ca!B7MI8|H%TK~;ioek$9`R;Kxe#yP#4FvA(`$vQLb4Fp|ZBi4xLzUtN1 zUE@>>6rwkJxx75(Ug|bS-UvEVc%**QcWF#afFI*{jw|$g9Y(a0O8DM9qZCE+B9|Ox zy;65MZGnjTCXXBQguM_o`(TlUlf%cbd)AAVShxo>Eiqlj8EjG9;*g^DhB#uHIt#h$ zb{pTWIU1j)Z9jzG+RC?;(`5@41IgItEC$~$MbRZb6V&H%GIoDa#bryM=NRgT9R|L+ zfu}nVY0SWaT-nR0toLA2E#mO{RDZB7BSZTLO)+gq)P6E$5^y0Q(wy*m10vp3ji z73F%s*zE_wc@){;f{Pex7-hNRbq6gy(jn`Y$*Kj5BA1iTyidCi=&;G6`yo;b1cw{H zOxnl>Buw8*cDeh+k3*xspSXsr`;@(HGRnMYJaMHg&zT2pse?AZ)$rqv4D% zs6CSrSA_EE_!i!nFRiJf>{3a?#E)kL_zWgeJ7vk(8PzV_cti7LR3Rs$)u*(h;^vh& z1_(!|@l58>M5nQQS>Qe&%7ng=ca2_tL{a9D?(N`@nK4@q)<~HN%y}w4qABf^m_ zS!&TkkJB@^mo{qdXsK2{5dI1!Rjy}Sq+pULTM#96nY(9$hzoAFB_3*7GD-|m z*Wdk|1QD|J?_R%PHFIj+4vTbwcLMw{reuq6q$=N1V9mxhm!=p^=Dt$HYwU`;SmkX6trk%DO`{wGPHt-(yotTbLh zmS7Fh$dYOwC(*6hK#hhX$<9?Ql$3lHP!#EF`pnef(m>~$zQ2>;qy7^8Yx>%tdjTsb z6yVF%3X+B^4lZq`1p$Js&;}?o+?pf>13H1oe<5jPC3pWU;=Kwj{=Ig3x@>hPq7BM) zcq?k?SF`igJaggvlW3^r{)lQ*Cc_hhwj9Lp{b=uzu-02rtx!AM7%Y zFfU3h_~jL@s%uit>Mr_;T=u1sZH|;r%8xRO!s>Oo<3j$a*}!qVb`d>0V`q9U@ilaz zJ*tx{zi-sXis8cW_v@()f%n(07!OpRo9yK-bIvu+9Q&TBW> zTVssja5ST`RKX0>_f+NeW6TdEWKz1W&$*LM)xGcHVN(tNF$8(^F%g$HuxFZd32Kg%THP z1REEQ)(p-L3|_yO*?OhKV=}2Mef($F=HrG)Sqw5!3HAQlUx}AKg!Dwo8RCUo$4U%$ z$H(zqW&;ZgkHV`eq`7RhU6e(u*0+3n!nL+M%C}q%#gj==vABYG?jEw?z45Z&^H`BK z=P%fT{LsPU;G+=spK%tyC}@E-Ne=w4h!)Z^;(QVF=3qhY(m^V%Y2<>u28l!vYZQ(O zdaM!`4h{tdp=YcZB=$e2NI`-u0%NhfOjK(`z;kGS%aLFKEDXX;p8%;yC)J0UtBV;< zMHqqPUrT+B%Ti%l3cu|GiNp*Cr9_g{ghFe>DA?2viEA1M!FK&Mz6JlaB;K{zNQii$ zkC_%cOYA>&lB8ix7Hry*CDoQkgEFb(BnT)xE-1RceZL8>N8$R~Rtst2Dwb$hvcR5- zeMpK^E4jG2$8d{EIJHxC%DsHyr{++@42S;o`?$ z9un_mJ2TE%-QNpkb3QO=a`Z3#P^F4XESLRq(JllQ{@eXHn5+H z4(MJIK-HBDdYafh+CP0uSU~{(l2L0>`b#uGv?Og&lDFa%T(eXEKl;S>{!xk8_!?21 z_z;ORo&xoiKB{$qv-4;X zLql6HWXkQ7cydhXGK!5Wx4RK1t{JLrZDA*zOk_T)+wB zrGYFkEp`mF7RejzFJE8S|Eo(9Qw!&0FNKK@jckTZZs2&{Qq9Ct>?%^tFy+Wymxu0x z-O-A+o+#}UFlfeVNE(%Of*Pu6Y*YEv>1fV$Uq>W?(RiVS8saVJ z@RBq8z|0#cTm4Ssfi5@IYQr$R$QG!yDxzTD#d&|~q_ z(%N97)=Cvj!DfBqH--4rMobGpS72}+-t8dzJGavwPYc@Q{Vm;SyvySb26$QR>Dk$f z9_8+RjF79_;O+xo@hs^#zTrusk2UKl)HY7=G7^25J>S$My6^Jo11G@5>exe>*54hg zcPgQ%&d$sntizZ%Q_*MZ@1tx|^`i*UUu&q&mA2b!8VoXc?w=A~`c+uP_HMC=y3;?C z%OQUFOV;XF=yIE`{W^7sHqU;QxXp;A7!eh<+^gsARqs*$%!Ef#1IL(C=F+}yk9=Ny z@*sT#CvYPya-~HLFNpa_oa=PLa>GxQPRn2plf7`LdZb3u(95{x7e^o}s&i~6l~x41 zS4zrOr76QyHV`^LdD+&(V5*ANw_#VX#Z0MFI;9Svfg#tc2t=vImEtT5 zaBDT4+^AHHl10jbD-n3=!JSSl|4ys}Tvx$E0=FcRj5N5ZN@GBt8fY0Uz*K#$^kw(! z(3#Y{roq}MWDzW_l4S2BD={r*)`Ez&LB#S9u@qFS8U`+E&^1eL?Hx{sBWed5v5se% z?J8JDXwC~#lL{sbp=AqwsVN5}kYAW3vSLT1#mj#&LQ4AM8gj3Sq!|r8g(-#mkv1XB zg6A>XV5>U~{Cu5y!36iHr=*3l#={#3 z@$;WO$xZAFij6gBrQFA)$bE={qht*A0lENRe~Y#3+Q7GcppVYIP-YsGuXYht=jM(J meVb&y*D@5J)!p>XJn^@6ezm^|d%_{$&(Ypx|07%fq<;g6BgRDl delta 3847 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 F{{r1KT^RrX diff --git a/icons/mob/effects/creampie.dmi b/icons/mob/effects/face_decal.dmi similarity index 100% rename from icons/mob/effects/creampie.dmi rename to icons/mob/effects/face_decal.dmi diff --git a/icons/mob/inhands/fish_lefthand.dmi b/icons/mob/inhands/fish_lefthand.dmi index b61231c6b9d1194bd80f9d0fa2cb7f0e0b326cb2..bd712791b92da9ca60c1a79b2413f183bdaae06e 100644 GIT binary patch literal 4684 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 JE;mBN{s+m&4eS5_ diff --git a/icons/mob/inhands/fish_righthand.dmi b/icons/mob/inhands/fish_righthand.dmi index 48ede802899ae975bd7df4ea8ab27f257810eef4..09e97a319691388a01ad1b4f965f36411af7fbf1 100644 GIT binary patch literal 4704 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�>;z+*>h#cOmH9a?x1g;RQPYP9YY@1Z8lSYQrUd&ojyLCfxp&&)Ms&3Nil1X&_ zinW=W%ZcDrw1Vrk?b?Qm7uqTnu@%0{8S2p-qbJDZYh?GhOc!Xq+9_?yH8U8qAYyM| z7i)jk;^ifbku->dj)oYA_=1KjqLXn@-eY|wL`@;khz^KmuiIY6tF%8M2NrP06QBB} z3-MpS50r4^6Nc>LY+14ZfZ_U?9ucy&qi8>w4u_n0e+voFrJ#oPjD!vVkn5w^ziud4 zTU5VvQ0>3Xgjdp@DZoM@1p^@6o`&UAx?|j-0Vq*w_F?RPXQ5FvZ_x4Tw`N!UvBdm~ z?X!OCrgfsQZ!-6ELP{bcz&WD>1Gwq%mhl#PB_#kx_V!;)UTMlPdhpubS<<}tYf&n1 ze!Cp(;3CB)GIiP_&UGiibuPlobz!76?tO6O(M2 z4tk_DYQfgYzsIlnBa~FRCVDtBw3*CD zX2Gp<`03HuNg{*)(?%EdLIWf8C@Ec}xshcKR*+j1r}DCQzKSR)wS+f@M_yPXg**L; z$I7%TMbw#*<89QDSYEFJo-Y2Iq5XKMesF7y*z0_Jv3y{*`GucEE@cJ=pi|RMNTiXF zln3pHt-5=sKV3Y`?7S9(*0`?ZxZC#i^>4~O=urqINv_FbTwE1oeT9Lpz5&DmkNG*! zpE}vTUEpIrq4Jl%<}OcWABD$cjlUphS_+Ws|4Q9TxTN&u;v#a^1c^BxBk{v}U45Mf zA!|VK1n1LF9Izq+&s>ll!$?%Ud1f3DeK)JlG~s}O(wBB)Ytc4v@}%_aVbvZ3;r+y&P}8s2q}t2HDOi^cW_ zpQ+W@`V)+l`p3bn{wC{yaCy?ZTn?S;73SgfP*CDcS9fkw{u<{}N{@9saon2h!y0DU z!o~=`PP)U~T>00`>7MgDLF?>QB?CDTnX(V=r)>-OsM5@(op6Nc2kt#scA*#vTSE{u z>K6YrFVaisu`x&^V_siy>+yUC#aR0|xMXVFr@kbfI^qO=yE&5iTVJ1;loVWCOsi3C z+CCJ5gq2l~E2KQTKd83p~K|qM@)!jS(L|B$U4MuD9`6dh_oYVFhT$fIx#AFy}*m>&Y zo|2U5hT3Y?!9O;TTEF6fu6|Idp(5vpcsahxkHV+JLHbZQ%Ta`H`>WE!1R97IIm__k z(I`HmZbt8S-z}DRn)4p{0i85Yi-<8q+~M(*Wudk3VV5xmbzD~SU!-MZscHF<_1M?C zl6KK#l+wgr>q{{A*jBCK zAQU>7eSNBl=vIlN=rHy}1e;(;29_n5FIu>@a@h@JW%W7i*_6rd70ycFN^2#{fB!BG zN2p96w5-YqKX8VRug*KyFQc_881x&N7o}@yX^D}MF)%HSzz3QOsAy=}&$61Ym_5*d zqI(qvXSgOeQ-l;hEIQNkA_WD_ky%uuzmKS+y6cTrPTtr`hR--4vD(>|hEkN>RYyxN z^fTf6yXKp2ybc*3C5zQnjPs5AZxlK2{-~*$Yn2xYw93B37IJ4M=l8wSfX!G!ck+a(72Stbt;Oo$# z>rTj(xTD0N&Veu|!Zbjh$GSnjtF>OtdzW1-W#JqEsnES+h|nQwNYfoTKC!{M4^_8> zaNywsbeB+EN&{`K^lJL@cB9|yk8OA~<^rQqMZT;UbKdK4T<878iCEx(VFzq8SN0vY z_h2;>U=tezl;Lv<@%rc=-VFhPF_ujR*8p?SQ`M&@R~Yf6TudWC4F|_=)MHqwSz^d_ z4Q+$;&xAj$IjQNZEh~CUHszx;B9PC@6aAV;-~Lr7D!L`@6S<_KMUtBwEFZZyP<z4L$tUONR^R-`CwkB&I&Ny8Jl z2r1VqpFNFHpm5)uY2R}#l9b%IgNWrn+5oRiq#defXWZw5!>eQ-6F#VwUC0`ml0&g> z8HSj>pxyj;qxkjDDzHxG=J`X@(@B81rY256tAJn)#N=PhO(*vD*?@lKXBcZKD}E9e z)y7K~So(CXz_^C0!7NB!Uc7$VPofX69c02WRwA%Q_ca?M-cTDx^U9DQOa zGG0!t^ysnkxdQ>30}@;9^7_rNbTTsPGqXD|#_1;~sen_Wv}P1@x`tx+qwqh~4*=xm z)dK+BI!G|Z5k#(e0wsC z&;Uk0vWQ}TNAVL;0Io$$MhswxUvboY;`BUFqux~CF1=^wB-8S2t2vM7*$B=wf8PkZ zwU-?N{&|i-&RCd1-KD#&8d@0{>d;V-kidpQLk=i2hP;v!`J9bokb@eVw32+&rI2AP*Vs1kl(2q~#nRXJ z_B{+RY=z=Ed+dM?-N&?&SWS3M*q#WGeSgJuYxCpTB*D2#Lij99V6m97kVr({`)vO6 zr`^@{=x--|Hue5Y8{q(@mF(EulFqkKMRT@m%Htf2(lv>A=igd;&~_*W~g-bd@B zPgd8Wsuds0PA z8~cw2_7{@fl!lASX=JO%F1KFQ-SfMN6m4C}$KN`PkUb-a8wExkgC5xE=k>ReU#L*t z4F2{+A*OiJs!=qQp3Yvck7TU$x$F9QQdc+pn~Y5K*Uqvclca;~x>ALPR6$X9_r8uD z(h45e#Gsm}+=`hmW1vr{7Vl(=SDvt-BrKti4h%vB8$&b?E-}@zV6;FB=`fCM@1)lP zykUD>X???uo)|IjD(n84_2YVu1cSAsM}v3I#e4)o{Q+bl-`)8bF^HlYubD}HypBjM zF8w0GQb#ocoS^I}jqL{s`Q}`-5E1!e7`D{F?14?Tumu$i@L)J9W@fnWw2MEQp5!QM z1|x)oyV8~yM*C_nKdQW01V`noGk&9yl@#)K3{QXgkOtaLtxPus;b%r$Brh3p4lm+4 z_fk=soc8dpQ!oI23q;*dbM;_u_Pg=k#&= z>T0+)PPT=}*^3w#@{ZFSUjW8oMtdqxWbS$%9ISc97NMvV?Q$G}u zfhPd&v|5*HqxBpH@caGCE8;HNEzl-12}jW9KLdM5=yaRnp1n(pjVHY^Q{!8TmY4H<%*h3{D2`5$g^)1c zJ98PIDN1A+<;Etp;XwI#W68zwKlj(xo%pS5Wt+%Y^&h#zt-I`YhMWY^R0?W?b3#Ek zk{K-)5^`DSPGUw}@`w$1H9!`^e-F}1W7ja+#GX=oBA?z8TiIlP3(86BB|Y|UK84B> ze}~tg(9vnq(*}3lJIpdl2F+&fN7_W461q1;yUgzfOPe^C&e*U3M{`b;3gXgS7D0vN|>>wl_7c!^%5;ld<6|yieE<aI+dhnSf{o^x1j!kw-@7DXC!l7#P>j9Ghuy#>DTORODN9jvv8ILJ`rep?5;R=|v zNrQ6jk)7*s_)|Zd0FEkuq@<}N7I^!Z%0i_0gG4HvR_tUpEPcd$&6bcKje#js&Khs!Z!Zx?IB_g9H;H-3b>d|b37z(p-vlJA(;~yaRQd=qLf_Hf#iJzdr|NNFrlG7P18aZ*HNfV9(KNp9 zr#SYP%>qi-;y2f*3#3ZS(}cgL7|auEFSA-pQUKTfJn_B{(Et7(r{3aTU z6v>+|)jxB=M^k2GENN>I1~4AQfDzP>BR_1mb^YEy!8U154(j-j#Tsr7y~$Fu*iENo zmcM35$P(3}B#wbV;(u-|64ZnJzfSD`-@VzgZzn6w?zW{I&3|XoQ*oibEx=P>Qpo<5 zMr407G_#${qtd9K68cGCY}QaQHdUPE2u9P2j!|*KS|~KCJXr~9&E6JixcbSo&R0^) z4Brn8dB23I>Wz6tWE|L2(UgMhv7RQv3%Hr29}KeX#(t$(HTC7568A@A^w~r#HFFXIDursN4UG_ydmBS>pa`@ug~^4;ACSeXv6*!v(T%Xg9b4w+7G}=LJcHN}0;ObQ%Bi?SOpjZWRGpx?a@c zx8WMkdT|XG(Lz_3e56m%A$8X`if&ypU%ZsAf47Tf6J1(q%dG1&q6Yy@I5!olO}Rh# za>iV}zwcKr5IsNq*H~N{3m5Qe;fp>SQ57Puh6R|@?rHLpps8GIwk}YwV>>!JW@1i% z+ur`AHkZ!ev3ULy)PdJlAH>f~g9Ie}&=?b6QFbpwhcp`N{dtlS0ou9t(;tN+g?Lh! zlwrDhfBSr{nAJx)ack{yXyRozRS{<&DM0!(<}-*}UW=3Q9|;XREd~i82R&ZH+xu-5 zLCwtRcYK~TDwXlrB7!)2RngBwDntEv6g;Fx{8@e4M3&QWz3v^R%3)ML@PM`4510ot zp6IV$c^y_x%(#@z%?G>G;U)SxW*)b-WH5owtJ`>&?NjUKGVlJx9oq`MbaZwGL_DhQ z5vI)p9ASTQOHfBfXFtxXVLq^@1vS|osq273uCHr0(;u5sv!iz@ZU^pF=Di-Hzi@vH z7tr+=LvRd8T(wnfgyx-$%@`<4|S#zUy>%>$vn5vuaO)aw?_h_$fZ$b8ZhzrU( zJod_{iqOi`eOiYvlGdj?m(_M*3U59z&xpo6QF+ffvPu-LXyOgxLu$haax`&hE}#6$ zqOmvFC}E#*qNhP{Q7bu%KBu|_a}6UYv9>F0?GnG9fGSv!vrFO+-a!A#!w2eRHb5CZ1U zj|>T3eyA;K?N|?sB|2DO$oblV=#6Oj80TOrh8~2`a)JZ#<7C8tWJh>T3oSYy%Ua8o zX8`~TD$cr^p3-%4M4-Zmm#iD6`^o3-Y#-dr5yo+v;ySxfUCS!SP^ysQ{@03)k1E}> zfeSx8-{3qh(!oi6WUJsuc0x26_G*HuevmiPtAqA8vGWc&jQSV|y9a`^Ggj85;nF2(BQL~)x{F@*Fie2D@DF4@v&}8J4RBP&Xh5WNA+t9n z8V!>82i%fTAw|4`ym}^GB_$-EEN0$6<~~LTDPcY-2|;5kI0pIqV!bmsg-*y6FFu|L zxlt&9`AINJ?ifrX$d}@El|+Mz3ZhoTAZrQHLmMj!(Dp(RXOP?|(Eg z3gme<(mxmmQV!(jPYf}A!SjWpc2BK<$@iw>hOC<7ci z__Au4sj_mIBva|PkD<1Rq<1^5_&j}h(EEW++zp+UTl#k^LBsmQ0Y8+2Xqj<+;1jDZNrluJO5Kf*vyWa+jYzPt zAFbYhQW%G1i8eU?A^)s!?ppJ~CNamlqFiC#_&E0N0g?I3BZsL<*MJER*WlvPE)8s>vP`CbfS9}f#B5NDO)E7V`%FL zZ87k>s~SQn4}HdyGFaGgKyFV^+@arrRYxlPlaSrjkEiGAPBjl3e!R;o=;H*=MW;jo z65MZb`ThBc9~$-`+s3GC{+UAH62%d!s1a$&B^h54i~Jr@r27?JS{xl-#1=AQRA?Vs zT1R9pViKEN5tXBBHON818xI{0&#smd4HT9W zDu}??vO_FZS}F}sJM04WrG;Z*kiIQbiYg(7Frzcw#jp&3r*}W4U;lYl{OT|*hCehR zHG(}KO+l5MRv@q-7qf7S8(L54aYck#$^%=naJYjzqQBapJNqw}=U2x$-a7rc4OOZ} zfgG>sk(YWHZ&HCMe3Cu;@Y-B;eJ6VbM6c;z4c7x21d)Lb$c24a5ag*rE40OhX-B3K z(LDKI5ekB1IcW;seYcp4(a3(wBYi6krMSm^xY=0|t4Me}-A7|1dE}}u@_?N|2{J^m zxfM>K`N<0EPw9W7)}vbHP}upSEy4%~yrtuT1Tl-hFTTB)&_t_o76#gO*pj%?ab%IJ z3t*eW8R!$i-g!08>f+$UbX|LyFJh!GIM3~tBC;CG&&>&1 zfgkEh>uKcrX+z6L7%>UVm~r*0Q7M7k?kOu&A~rN5;i1qBtZcT^J z$jXe^)h|P=!l)PR<%GJgB^m_k&{{KyvFdajnC+-8%$p@f>sIPU2FT~16S5P7ddn!ZP$5WY&0RRp=QG^5BvI3lRZ6cl-kdt z_3KZ8O4~@Ai~%Kp71m72&NG`i1s`SAH4EXIM@iy@9+}eEA%9q|F}* ziU+OMl(+h6e`(H$W#xa^4lp1K#?XK+qFomJ1#lg%|2uluQe&2uO%V45)6!iT3EOQCR{tj+1&7<$-<%L?$ zvDFS~C0M}qYn2|62+`3YB~N29CM5V3%LeSwR9z&hSx+#Fx-~Q=N8UO1Dhk=p))N6J z_m*GL2==-@SajDM3h5)Z^~C5Ocwhyz3q^{)JX`+`$vO^wE4RLuXeZBcGy{F`-6)>6 z*(wh|vUL#tB@uH19aRhVN62kXvrKdINBQGqYh>Q6l2^Cxk^@5S)QAdYT^0o1e1_9ddqJn&o9_7E(!V_saY9W4p*+(`oXWD0zfq|G z4ag;LX>!^C+*HCTIkpjddix{se-|-66PqQ?r;J4IHJN+6rwDG8DC%E`uU3za9)AR~ zf7N%beI^10jPs>QHnIO}+IXDQMXJ15jc&E*hCKEW_+D%;mi;lw`jv-~%=={pBDIP;b& zrw{K1FE9h?RXU_1aM5J!{lehb3~@So_$4i0al&=z#mBGR&)VfBek6D#3ay^rWcB3# zE|V|hX)>h>EVmiwK&Vd4efO4u5IbADp*}204WyNfiKe$_`&j+iw3lpVFf^VAXbi@k z80%Qy!j>}P-$)NPaurB-8{#4hMt2Hf1csW-P&d+keAnb33=vM)9UV2q>A~v*C~E_v z0#1&b;f!v+QJT@L{9{+2Kv`(}$YqElX^}2! zDRG`0V)EB=K&ZGZktbE-Zuwo|MTir5B=*Litwk$?nmkKnq)ygb3lB*Y`w-hFaSP?& z6z>YB4oDHr5I1hoEPxC?D@2%INFQfQ=i5-jXXam}^@^`vVU7EHQ^SgeYmzL9Zr%@` zohL8OahQUTJ+-z)Ki@Bzv8lxRn1!U3an&LhO7-JPZfMpw+IMla>nFm8ak_UVRRsG8 zZP>tLzss4~U`9qXr>Cbc5u{Yk;X*jBOF~8W;PGcS-mbnM=s3`ThvUS>P3{R|9cK1& zpo7;!YNf@-#npNwU}Kw^o)zzFR=dX(s_Xe$i#K(#;A>S5=l}1H(DiMF8QWH9817|L zTiZmgEav-P=I&kpTX@D+JfPgs`+v=k*Rd)D3($$7+Q^=v{C{k5>_6^Aze6A%Bo;|y-w{AvUoSCsy zppW0@n&Q1>0t<-v7|k`ufqLR!w%OxzGDpS<=Cwf_BCojEf+o8}Y;M_QsK8M4M6gRt z8oIt1_&G2|2(QPQ(zARlf!$&yh^ExO@|aI|lAu${(xs(fGKdX*Pgxngs}jykiA1H$ z_K5G9S2K_IU60b_tMu%*fh&Nl>=?GQiv=WTC;imE=|18R8o5df zD+EPX3Or2u=8?%~EE!{*g$jA|M*V2ZlK$}G9MOg>M1R%S+BcQZTBWa`p_*(ar}RjC zUPywvULfL@*w_f0$>(};y{-vCFb(==E&@R(g~{ICwr0*$KHr0 z!zi*E(_6*>u&@*k`_|FF{+75NXL}>d-w!+ zfT-+PvlrjK&@tq;n-Po7IIA}DTA)S-FL?$-yu(d_FI0)bad>iL;>83W2=@^*zup`&~8; zVT&#w<>aUj)CufHLwl`RsWBha?jKd6SZ^zC=`@I=0N^W`yZ#bU0dr1B$yZ0Yr;Eo< zd0jSHMN8)Q^>Z59U}eM+Xj*Q3?D=%d-moG=LX%r;KC#e2Z9!UaK(tkw7>xq3wzl1e z#qi1c58W6UzkD(%U3@W$-b=dpoW_V8-8FDl<-{T1rys%{`DhCVXrm9p0V97@T{|yY z5h9tq!aL_o!2hAI=v0P_0lRt&IK$3Lt9%FvzrCYNz}Ds-FA9m_NibMMgJ8 z3L$+iDm)=h(Vn#r^cp2?H8hLvAq3Ddl>X7VK)p2PeKnc-?gi@&V)Z_jIALXB^b1QC9l%DZ%2%@#bg})Wtf9CC3NC1o%3pd*vZl7SQXP2?>zHoW& zVys;#ruxyNA2v3#I7cEe_ICXQ1sZydy&9LT?X0NyhB*+YOGLGL|sk1KtfYWZ#-M#utn4SPlm09HD_VSW0EVhrzj>>J_U^EPKIXgJtE^pLSk z*wE8=BvuvRCJVp+a~=LB>{Un8JYf#EuT0*9#do^5&~8^T+9?~^fNvM#)Q*`Ui&c%j z?b16uUjhYup#<3E{tOT3%36<0Obf0ltUGv{HJpbJh&lEzLOYhB?@PVL<`J6j^;E3U-Qa74O{;vf}#&fJHPl~=Bx8AL~5CE_x z5Q7Djlf|SSPF>b8@*3h3 z-3_u)wNEVN;M8P(&g8eo1b&iQ^P z1@fdZ87JNP2uP)J%BLJzk78`}A3WY*O(GKhyzo;a%a3yJs0N-y!%MY02fTQcewe;b z9~#8If#qkX!ieBl?HL(gwg+yD8Xu!=L`l;V5Fa|_#+3_o+#mWZD#0xVwa@l(&Lb!>LQ{1z}{4~J%8QaU6)vfh%<7c(&W+U(7sZryj zpXF3Y%%%F)=JCgIm^-Le-Hg&pfMz>lb(4g!IPqcQsKtiTpb~?hyjW*BRPlVR18%u47+hgSqrcsc zcZUiG=7FGUNX0Mk`!scA3!{XL6yZ-91CYCpl!Y_X8G}o+!)FNrMflZ&Us>U0%p99Q zMG1ulV;4jGl~r-wk-2g*b2dJ#lc74# z*wWz`uOJTGg`?O&`FHHiP*PZzOG*=h2{I$Q3JG9j zQP}`izMtu7RJ%ht$7SN|1^M_1Y$86m*cho{jF)B=Tp64k57aWyfM?Z0t{Q3HK*Z?Ne|%ObwEHw7hchGROxl_Lf{aC7w=vgB z$Q=a_J(_~HVdxI>9Yx4qOWLIMab>Zv7HFvZkZKzZ+gT2z!Jkte7Q9+aO_5K%uNkNd zM%PXu+_v?=nXT_<^fwHQ`HLf-d~8z9EFbtw5rOp!>(ozsLh)IA+1rqWbRyKEGpT%A z8#rDJIL2~Ysxu3I+CzoNDD;q3rJL7-Fq(}}IQ9dl9hV46#z7m4z9lRH(D6Hq?T%;0 z5zN%I{2-*-C;Qn_4lyB#hU^Eu{Z`=CV}Io6v)G>OgUlJ)w#13>XzZltCl?E#MsEP8 zdRaI$zP%-*?Tf(>TvNkHq|l>h;u|-0zCp#B3VyP#Y2fWKN`BaOHpisS`w7N|T9hIp zek$Z$J^S-ICbQ)8q^*UAF1{H~*3;L3C&oZpXNJor3?Z;$fs=fzNTCpu8$MjYSwxL__egf@A}qn`T! zFKEJ&Us4h`J&j|NAs``V7Bf;h3=LyXB9BgE*q7+ zx$60CZEf-eiUjNaN{vWPa~P@ErTGlw{xFnx=_pf=U_8WY*Zx5NswTg5*Y5g$T+~&6 zN5{g;O{R|Ly@tWmA2$OLaui@n4Bf-;k9ulSA9vC5Xt&PKbe$S%5vp>-oAN$PpA$H( z-}x_zf1y`2Zm;2bL3tw*g-tyfR07V{}4$I8vLDFUe;-PU>q`y8AYU@OH%z0FgCZiuvtykhJ~)JUpY)N)P^jqlcR}r0_a0J5&C?0dHWE$L+b*8bcYxZ`yOk6`(pxH!l^Y=D z7wqlQI3jRJx3U(;KX-YQ7y1t>G`2LI_}c0@aa`M50&`>Xl%{(|)57@Ei|ODt-ca_! zvragE{}2G#+@Qals~!b8-@qC_-1Ly}EcD)I;=ctpk3p+;Z=VO~>b-%A%OofqozATK z2SF%m-1g`yxmWeo2YR*yPdol@$-gN5p`G|Y z6E4`bY7p`oKqF5~pt#G1Y6hjv7aUuk%lnS=2)MrerRwOJdlQAC!jQ3pH^Z8f?qmF%hJ|ZxYmh$62{X1#p{?@j_)Ni(6Up5cr6?NM4(yUibpg z&+Tk!sZIiqcfUlI*?V4e-dlkuZ~qd6I4T7`TYLlo`J8-cx2k>xrH(NUEhU_K6j9UG z0-QXDLF|gmWsJKk>19fUZW@|FSq&)S(o-MYD{xP~gUILzGYEseE1N^9i1y7pcuIZx z5^xA!j|fv}kn+xlvRF~1hDeVNXz3#z?CzUZjfi0D(&5)%IuwVpjxCsx8Z3X^?R&Sf z%RHmJ&C0MNdBZ2nfF zLy0x|?U9ya#L8PQgW47!e#5ahOA<@XS9HaGKl1VN5o_*Afy>A1dmpU+m$btx59q2@ z$51{Ty^$kDo7+&@v^1P@*QKSkO1pcf-M6wqQFO#+@ew+#T1?&H?{y;5K-+ZU0?4Fz?6c}vHd`-O zncft-#zK>bu>TLV!m8EXSGX>?!}Rm(|B(4Hjw9;V^G-n9r?Db?QJPvj30cg6Kg-Z^ zMcJeXb==F2v!rHqh(kecIvP@X_`J|)ZFblk`KbS!`ic*EKroe%DWOY=N!k$bqGo?; zkRAB%<>>LZJhYLSU*fNVTnA!ZDWpaW#cDOgy|!0hE;t0Dx<9=~V7njQI<6MWmd3b=lO z@_1T3#zrqZ(A6_Lwg^$EGyx6mAEIIW5$;jLk!Q`=j2Dt;6EB!#1yWgk{y`AKf}{@ng9b$&QNA%=Wr_$c{t zH)gGOkVc3K7ja&e=zW@NUuk@9m!Iv^#+O-=Lr*ky5J3?1{>+AVCxNFGD$bB;wit^2 zV5CIj(syBO&uUkTP4HDTUrz5BhF|yMyO++@lG5CIzC)LR7Oz2~Z>M64CM=BLRw-`%S&e`+b#lINwh_ zF?>ThRwk4rK+?wYZ$i~ldKiQ#&aU=yBJ*5+^6__R+WzWmF=m zxqE%n()uhdz#LeMnxKaar5V(<`KyR(a!h5dyI1C=7SAB}Q})nTTc(T}m%<{Im1Li7 zhApn4?1&n5pK$uvU=AP*$PnCgz}2}wWLiG5Ba$36($j&?* z<}q7D?9o4~@Bn5_8ll;;CbQ3N642TUIk*s6?C5`fc|8+^E;GoVOg}D^Ib?eK4e7d7HSmsH8j$Q z0_uA^KNAessowSfXpOBvu|PHZbwvj+gs6k1CR=M8@o=`Fd#tp2`c+_oC6q&Fxbn*D zaGUMv&lcwG^4-)NEGkaHS#dX3RmQ`-!iuXAO31|;C;utd!bK6}e6En!?E6_xhcsgB zoveo>y>ah6cv8!AI`EqZb-vN#d8*2gX*^oPpZbVe{e}(0HS7haPEBwFyl(dOy_W*uF1pas$y4*(#<%-F43|A4o$wo`8kpSE>sTL^mjdrekCUW3Tb) z7h?GcX&3Nqb4`I%1`evZcMSpLJTxhjhk|eDH~$_YGzJByB6^6^jpu7p&SMx(&Ju%D zX{qap<&)GK`IVTT{tstw9Trve^@|_6yQEVD=}zfVK|oYG1?i5VLmC7WNu^U%QaXq3 zmXI7ehoKwh9=`8;-{1Z3cc07ioH^&r40HBgd+oJ8Yws0r{gQqgMKkK&Ka2rBjTEi` z$rtG`1lS8YqYT%*+s8^hvhCLPGLduNL^$~3Hmp^D*$XmwY1B(vidv>~9QA14mWX0h z5?7oxY^9J7hrY$~#NxpkjU{xXqT1efH;etDDRp`KO$wo?W+~uB`3L~K@O^ta#j6w~ zZ!0Nv2l>eAR~uPk&&%c^h+JsU69872PK-L!n;{;W0QVv>6;g zU=N^JyBj{rIPV1;rCM7(7otM&rf$TvBd0Q-e`yZ8?$r(J{21YvBNjP&&yG}-`VeAX zPTnLRqa}(N%%!wGe!%;nudXPD@L7?&Jje2c1!LOBb$9d7s1dl7t`sfvm(N~h$y2z7 zxjz((;;HL`8|LWu*ls(vWLPBY%4;u-mfEK=4AT*Xf0=c9{l~NY;^J}5cOyuU=>JM~ zz&Y9pRUd+MpuiXtqN9|~uf9>c23U|Np;1688-Mq=|0|vL%$Zw;=V;W)X zI(M$<;Z@6N8)05QaGWR4!Uk=Ww zIZf^kB}gLvAwXr{mZkSnzK-|VU0wCkzu`3UwTSQwPL}{)2V&(H##Og>eKCSEd3s(x zijnvJ>+R1&1{>DZSoXd(+)$K!@mCtxFN+_4Z9!NcYJ0U<7}j9I&b}F(J|_pyod}7J zj+Xe(z7%08uLIS8d}slohr9;=_4?nZhnpHc3`|V+mOi-9!yQl?%|`k>F(HAd)_FPW zl%;lApAY~yp74X|$>jjp=4J#{<=u!I@ZhWq?3)3JYHZKJfJPO0d6fPAeS-kTYR{X@ z9RLap0e!%1J3vlFHB+?QRO{3Ru42rI1X~|mrwlEeIY!o3JV9eZGqY##_)}$BE-_;O zZUM|A9I%4Duwdy;t&b5I_n_z68PAU0PxO4|58hj+M7ZHDw>2W`>nr~u0Ifg0pET_*j$l393jAml`{|1hYjUXDQTm6bcbXS6*tj^6!xhQ&UMd2ZP%5n8 zkdTn)LLY`;2x}{=+?*W1LICodZmw2Kr$}9U*3V||TSDSGQ(LSP{_&a0!QUGWb2gqw3ZEUasFtX75;H1l< zQejEaunx&W2Yf>}+n6z71$RU?kV&R~rTR?Y8};_n%X z2@C%{97yJh*xA{^z1g3yx}#bF#yEgw1L4$L!8HOmaM>H&in(0|RpWo|?Z+2XLdC(K zw*bdL!j-gHh|n7`LXaVO^f>Uk&AEd0O6Dgj!|LsbSOwV82MQMZF-GCBTFM#e3d^I= zKk|wh+g@26*U90n=Opz07y8T+JPK-7z>%{+;RpYs59V9^E@)o)Y5Yz}P1QxXA0Hp{ z-x0XiR8;UQUjGyJd|*nx0hAnVfPuF^G_s7c=exeb{BSsu*7*a@f2}Ty__B8DSX3;l zJdo+OIz04{pp#ZF)f3~|t0zs=1g8o4EJkLN5FCg0gP;T!>BkXRmEeHLe9K`fLOxr( zVdCE>C!ta~JS5bNmS=RwvQ$D&+F&*Bw=*PGZobGokODuq#kmv&TD<{uz|qkW2+qo4 zAY^>OIX*R23JEYaHl~wFdYxBXT>KefVpxmJqXTI0VLV)ItN?MIWBA7k>`NK%;NuCs zhZA@gW@Fg@d*%`R{(?hBgbwt@0+y(I?~Fa^G0A$7%+ilBS39r)s2^GJ5fdRU&X)Xd zd+Tt9Rcr;667T|t(3m)j6z#h?m$Jg=HZfO&eA!QTq87jFWl#~H&?ah(#uVw~SIbM8 zRl2R!h+NUZp2>aLa0KU^C{SW#WK^Z{>Cu;|I_G6>px$jGW@t+eaRHwf8|?4r9Gshz z{3TTVz=|{*!R0i29W6{Gv`tMN;68}`KvO4pdbk7M)Q$6$CuOB=sSFsRC-%Og^-s$T zskt*%9mgT;YRkqjML`LM{Qi6NIxV8O3-(5xf|uc0c&w@>GY1>p3a7wjCm+MZpgfau;bEh?{+AAOkgC{6sHXtg7X zMy{a3q}4(V0?0-uCntS#bMuIYLot$2 zqp)sqVWBDvJ~4lNeI0jCC|rGau-H_mcEdLTP69&ju7x@!DM3saXqG(^_96$&#%8ta zJ?}}qEb*aH4bCDsa$k!O6ys4aaMnH0S-3M()a1NlShVw9%qxa04R(!XE=eD6(cIDe zEBm4zE*9LK!=yBW`GKhWNay@#u_zS*XcdnEwl8XlMe6AtLFc;VCdztxX+x3^Ew!i= z=K{$Jo?f;(0)74cD{DV`=%Q#RTTjm@=I&#?0Gm^*oekz+A9yI^(r!`|0=NIlM=)k- zc&WNOrOL3QmyZ!lB1J(W9)%m-(?0OAFI`FA`;RFpv9T{xqz@mM^Knp{^Kz?x%q~h9 z0#B`Nf2Q12j8@Xa=II?OZV-C)*NO(f!^P$EmHap(6EMce6wutt2)n&H;h{y#`Td)_ zptyK#cj}kmJnM3b9`^`oZ1)cWIgprwfZeuV4t?nxG3TXq=b7o97xR>5Tie^S>*l+T z{{sDHk)>C6I(7+A9|m#9h*I)yQ$xk|#lr_~IGUOM9FM7oDTgVyVvkd|wK@EqxD|1| zkm2$yCJ;VF{z<<&*)ntjHD3StI0@K5keu=!9>R9>b)c?S)6^`lBp7xy4V3+RHm6~W zRF(obLQ0HF9s_D^_4vVXMmdGP>9e_x4bRdwINTUvFI;>V(fmPY-g*1pIZCnvMQ$B| z82vF558H#mpg}gmV?hjnJz8OYKC4PRo&K6<)`fDx!S_Iv1bV6Ibw1d7|5t4-t>Dws zQ<`#}Y!E?=AOTuDKJ%Lv-!r>odtnNbn7}xyw~jSPilasQA;@QxdU_Qi^1zw^7Y!7q zfYJ!LiW)H2R|$vr^;4<^j(a^+V^N&35Y@A8_PrAr%tPYDUmr}j0QRG*`Flqvt? z_o71^ZJhKK1U%6wY5(8r|I1AYrHH)@3<`x7grH$nJ%2Z+=71Ec(RGv+$exX&N10;2 zeJ>O6Oqp-s99g?bLp>Hmmx#|h({!id1tpDU>+kI?*4JHpiymz9m(Lqy1xKFzRiUul zvb&HOKH(_!Y-#G&mqchlvuZOsf`qS~Px!}VkV#u*)P(5|;Opqxp{XGLbx=amq)?(*D+3bb%OKPtVpL%5D^w2oH(U6O%RG82h z)gLV1&Wli@tBw07ijrslX{UgnKEV>JNk^L4FikZWjb5R|@|;H6n;#b!7X(c+Ma2Fj zAWX7F){%R!fg*n}mACV_a1aLKf+s|y?B7MXnZV$i!29SnLbCw=GJ+*_g0F}Vs%teZW)S=w!)Wz!%OV1H4HUexD^-tJ~5u(n)#zU^dLb9doBG&}33 z=goI?SbcrHsO(+f7b3v11!?&D;Srz?IGm`)>5F~2&X}M%4XxDqVhk{WqFw>I+5PyK zU-YR=XJ>t+_{Xr~uD)PnY}=K9qHm;9oAQQ#@Q-l(vhWxY&kyRq`x9X(KfSfB3-S;K z$sE?=SN#5bzcUzO5;+(6o?gnvK85+r==q;oB&@jjaI+CdOCYfD3MeXG)YsRqDrPLj zZl?mF9>aOi%MQo{fCoVHHriGP9j!l8rD7XPaRJaIoRPN=GZ~c9T~F+xgM%;0K>>to z1dcQt2U|v@07iXkYU(zKQP*3dCy9d`2?Uv7m7rvxY`awt0PIQ!m%6&Ur~F)pQWg$s zmyimJO%OgDSefPg!c0tCZN#h|c_)a1TNk`AMJcDQ1Xt^o7=!p}0e-Nvr$<<|Z-KGi1(cgsTEjC?Yk`0b%d_iAU1odYhM#g=K!Wre zQ0_f&tk&$HLvKYgE*vfk>I(f<59)3C4Um?gu9JCqgpsr_?gJ^m)_pa9ul?ykkv}LG z5SHg~BHrIbU$H$ipjtisCUo zK!Vhnp5KMm$d zoa}n;g3)Cw_(AQ+J?&2&?4|GG1cRo_u`{ypSgAJYj*b?cE6<&Czs3uBP#NbH1;-&r zGLcvoz0#mySaC*!t}5RgAxZ!S;d@PJ`vEyv>iP zwJ+ya)(C*smouWj2v*J`=>q|9(xkQg?pekRzMAiuo(&xLJlI3j43MBKt905Y=MOy) zQC?l&vJ?St00{B%)xQb6kNC9azf^NT>qmVYfm$vAyk;W~pCTlX05}@qwF}6zhUJyc z$o!m~oPW^bcnxfoT#jH{N_A#+V@8ZB;(7%p9dAtD`5NTYCiSACgKq_Y2IlwGqCAF=Qu0{mCF}!I|zB5q_Lo>r36w z|NQFm*%17wiUi&+14=j+s`zx%AvJ zyZLaEKriF^F;?PLgm43W<6UKt?r}}i@xSthcSL&PXL4?TSqsQzPyzgH*?7||OP7Z6 zc~idNorLVCTwHq%vVqD9!IHALixH@5U*Kp^a9-w?mM+53g7b`A4H3v|n3UB3xlAk( z9-jU2vPM`$W0wXkCGqvW%@z!N57vZHet0DmfY5k$R{qkoEbTb}oh-#eoG+i; zVm5`gcGPUluT+`QvD9X6AXD-AosVx0jhj9~fsy8VsTS zsVE+NvuDxzF%QdJU4aPGu5nU35%S1BVC_4>RZTX0tu9;A1a~Q^LzRDK7X|!Jo($i= z-f`<3ghQ4#q_0PlbJX36mf%57m>J2*7@&E*zt}XR_3|ZNz|HyaPy5BOF|AHet&2-Y zSaA+qX=@*ffNKo=Rs%`w)}0TgGkJ3d8W2EaQTd2`otZYp3KjFG~<%zo|G ziCSfOWg_#j;!B5bKYuse9(O6{v&+bMWSHXcAU3ERaS98pL+?0hn&&noJRb; zq5%rW<(_-|F@!6D^RUg%@oux?G?qWg-CZ=HQ{E*;aAkW?!1J@Yv zc3u@uC#`-E^Q&J)n10hc_1zQ%2@~prKk}e2!@T;&d&wKxo`A;1wc9*(Mswz;MeDrE z8+GC39{Zp>-YV+a*GkAi*>e5jYp&^-FkWw%oa)jMA>B4MZ6zyVws^ZL5m|BBy1f5o z7mkzh6tfx?S4P|6&K@W3sivww6D-J*Xmv7wPhW23k~ zN1+mkvHuQNBbDc}LvRJCB2#=8L&RIF9B?xL|D>Du^f;IL5xVXx#vdV2)&4GsQaauDkt!#^Xb(KL`2IPrf;?`y3YjgzfyQ;5*|Ro+gM#q6tU=v;--Z@1U_$6!|Zt33u$EPyH zH{@*eJ|)k-!we654=y|9#Qy~`$#$Q_!_q`YqG-_;6taV>U>_7NfoKaV5BYZBao<{( zz$bf*2P|JHWx7V6e$wAhi-bSf{2E_yL;ch$AE8|^x}H_6G#MWi^XzOhPq!mO;UI?+lWL4ixGFhO(7 zFxPk&v5)L&T<+ON#+|ko2LgFV)Q{e==j|0&WHPZ-4~AUKRf*rrFfm%;ssikVNy%$^ha0s-+2eDj=A!D1WHJXqEHrkF zjcN%AJ?sCLf_I6XUPb*op)g6DPMqg!bmG(rQ~^2YAAf-QW4**GKL+WVrU;|Is&j~_p(H)|OwDKW*w#KPgBDRW45b^Cy=*mvB zm2`FS@jsP)frILtb%>ANg0^>eAgq6C@3PETzAN63AGrn3i?6w37Mx#>^G2B#`LhVB z@A|KoWDXuC8+%d9%AU-ZbED^9k~$N1r7!lwC z?!%r*sUmL(zI}>(Fx8(QS?DT*SwAcu5{CTG>;M0a(_5>6=6Fl+X#N4;Di>Ec)}`|S z!#DOGo@>PExh__2`sQ4ru3R?<1Nh-9|6iY+c1Xg0HY}4o`@_ARZk20y09jYIZyWsh zM``d9wfYlZ4tU9DbOYL?>1if5z?RKVxqN3$y-}l2bQ;OEw#!{;(?T=V&u<#$!pHd2 zvG>y3n01>f;^vmIGt*P&3+`&~Z&5&taBv*7I&2K@FhR@d+Q-L7!>RK;($~kQWhMfi zaCCfZ(9RMi`r36{ku6LH-E3MEZjH`r9^^t>i{v9cN8*`j(bgbIDi|GS0%?QpQBY9E z9k1?)u(9j$U{18PLG;iwQ3oVyFdi7YUsWYzqPkzBW%e#yzU7iSor!J9o67MSg*4y6auAT zXONS(IV~cKJ_GbRre~TF-{6a=-_CGU{P5M}Al@a?_0{_Q_d620XPpI@gdk6ZXO- zJui1SIxp!gNX9bgp~^8ABvE<)gw-6`#F6v~1&~RY(!cTLs%|40cz?qbgzTeqZYz~V zHZtKuD{59)K?j3h!NI{~jvK)!;+W{@`%YX~_&KI>a?rVWJGOa|;6ET?wuwe=DbUCx zW!4vo?p9EO&xX4DK8f@Fk={@jMTR=;CTJJkwTg0#U~ew+Verk|(^zK7vj35OEZq9< zKRm^8sBZLEE8~a{5yplrj3? zqteyzp>BCPJ18Jt7u$q0s>)!31kbok+PhFdDbJ-LkG^tjV<1$QMo|ebmFqf(&7wn)c6kKS{Igz%XP|z`qC&1EzAs<)NT?q6M&IAEirFijwK>yMAy?5) zsUbWqna$>orEo)T)As*-ftyy(LI3HlT6T~l?}ZQ8O$#3mu8s|v(IZ@WZXzq?`h_hC z6XvLm+~3$>qL*GS^h)U@DUAR03^dgN0892+xY&#a42c#D>c0uRf1E1TMZ-_tJq;(m zC*DbTS_{SJHOY{Q#pXbVCy|u7-)Xax4ptuyj29UbYZV1>`g6W{k2eIH2t||Y%6~KV zN@7KF*b%uo|0^olS0Ie3NK1p88eP?%6_E2#V7DpGaLEMwq~>1~(jMeLUvRFtd?jn~ zw-oQ;n;UaM8guuiIhk%9o-BVHK3`Si1_UAX{*uTd=j6B%9wEDSQFGJU9t%tek3#rz zsXe`NFTwFE-MRa-#{YTS^oM=swD?Qs5$bpO^cCR3m?dl$*)HhEhMWa;pZR$e&8=nx z2RXFnj=0pCSEb{AIEsf~(LhBUfc`BY0w?d4Rm|@HzQoMs-y%%y-MxrRp5qDBcW*ajjPm?oqH=%##pp)a*68M2QN`<~Za#Zn@A>&H z)0q9t`^%8#Q?{SPKR|E?tJsB-btZ%iTp8RwA4q zFCB+PEXtaTO3(XZ*=P#5D*KkYn_~^sKG*!+x+`SqWF7U+~bbv`|Rqwgzpq$ z!Xhd4Z7cjhpAwNqH0?K@EP>c-xp3H;46f!?)6?HK@5&%gRHa^SAv(%ar7-V~6#O|<~7qK*0{2)L0X{7W& zWK!CiPLczc>a$%NR(jl~A-8v|xze=>Lz0QaWwLSb zjLP40)s9+spw7&f*PIyc`tGFb{Zb>|Ixo!3uR zQaBXt2S-h}1NYn-OSOrNOv4rJ|Dx4}Vi%3zM#k$AEv$cWX$3XrblD=WL6cY0_F{6U z5)Y1PPUHPoN&0V13$J3c zC6k5JE=DT2%Q6p*syo}_^JvpBD&oJG@3O*m|DVfDJg6gcTS39obZyb#7ZigI1BJDGRC&??`w4Dy5?Q?u}7d<+`t{-c$wFDTQMVD3|Ajgmp{j zy|1*rZ?3rFiFwxWnmeCS{dzn({sC;0w&g&;5{5mssn+%aes#dE%N^NoOUXIzT5gJN ztAaybz3~SkEUQJ%C-Tm|kl(8gyKy9-TF{i=;|Ii4Y^hh8ZzLY+zqa=o=TfbUB~(c{ znGaPTw;{lg!NJYY{O_O?>Op)ln z32l@OF*l z%2=t!`X3y`O1EjOqz{B*s2uyI_+nb93%q1g`}2rMq5GE=@lOS zfg}WCX7&LSO-RV-`i2Ai+FAl~?SrYIaGo3LfC(o)Qi4l1+<>$WJ6DXg`f(2qX3yf49c?UY}p5_!AR@BOwd&@f%G-Pw9O+ zUZX~6>%KY7 zJH&p&I5E}MFzFvZuDAKMlCZvS&`#^M$L-a2L|EHp&D56nF_NE5C(;E95#zaO>y~*Y zvun3VR^f$8nx~ZxH72h7RdYJQH~orOLL=2D>xC{w(%Y2w<>j_+6lp=;^f%qgs3l@3 zz`c-e-P2S38=jfg=9|K^7H6c#$JlTJRP`K4a%Vz_ZSyr8mW3)h@z4_&N0{1 z!^mvYQurNa-y0Qvss+@;OguB|z3Q#x<`h7#GQ~5_iY6Qf2nJ#)=y&C`%F$$64mkAN zWZHfrUU9EHvM<-s|iL^9!oyx7QaFEXWu6ynV?eLDZP{l$Z2AzZYDoyJS`R*_Y(&TIi`n%n$jcjHj z7y|=Yu1H+}@-%I~`4V-@n@8{b>M?Mck=9^_(M|<;O(TMdcu&}Y!%fXNDb^w=5BESs zN)Zat67RPjk?GQ>iHA%@dk}P{8G9_z>}3pC05DTf7lM)!U}v1#AtoY4G3_g=cQ=Ze zF20K9|978J`Ysnu?j0TfL>X5}Ol$;lyE5+!fM_KrUY82|BMH94xWb8CvZ2htzO<$0|24AU4}IIKi=% z=MXqUFL+h2H%MbF9Jc~ex!M|gW-qt}KePWy_VqD8FM(!z=Hx|%{|znxor14bc#G75 zImdy|Y1z@UHE6lQ2>w(&Q9-=c3{f9Y_=$D&42b`S~@>sCWmUcLhH6h zS>DH;0XZrX3$c5FA&r7&%>IfB3ZN5m_+hDf6CSW_H%CNan>%(O_G@H|Vqp>M@noyu zXzrL(IdRzx%CB>Q-qlJ38c-Gx6d%clvA-&kJ_~w|5rO`qK6i}{tojZ9KA~`ORMqcGhitXaWHxJX7|FK4l~x5Hy^Zah!{U-Q6@N&-|FAY1Ass! zW9PV=-mhBC75m9Wl%*;plRpn)b7xmt9o?m~a0ebwWPp%Vp~6J_+&I?&cr|v;({?S($}!Iy>m|jNp@OM9 zXmTC}zeu=lQ+@iZC-0{kDvt&lIi;0iK0iwL#LQj=b;Tz%Zx^iStMplje>pbrp+)k$ zx(9XSFjpM^T`YgWhhi21S+XOshF_|&8AWTJ7tfo8?!6G#zOp&=*0Sufd|M;7*XQ&j z^aRUpT_1HtP=J~2q+m%QAPwd;jAn7P>7FKbfK)oBwtDY{>6l$hPvcARQf$a^>KyI< z)8;(p*e-m~IY@oK_x3o&i4idJ_^BqwDkMF;-YRsI@V>&lKhB!!O}X3+_|w;eZn!G6yU+9{EJ9}CRnjK? zJMWq=#LbqG4*pEvs9pzH^Oih`$8L{rIQfYX=|J(@WMoOUh2$=DVr?YcUf$Nl776^V z?(&o=FW{$tt4u0`_3mH=t)`lZ++LqmZHpir&RV`+gHA~HlQBwS$}-Zp9If>Z7C#ig z?2lr$eAJSsUp~VAT>vkVs2SyZJJ+RWKpTF~-oaNFwsp(U%$dz@zWf&lM;PUHt8dg4 zN{c%|a>1^@#y+z96)_xZ+H+0zr>}l#AwghEUe~+VmG?LE?wRu zoI1e$hrT$A)T!VxTe=JVdOTPytvl#fpqyiTs)E}EEkc^A$1}Nf3d2-#B|(1q%jI}w z)(b1;(;{g7u zh714Dy8ITMPN)Bd#n#f)US1M2Uxs}>9V4xd_$a{A7P~z$?fiUpn6|$9%ZyWp1P+<_@!HMB!V}MA8PvM)1tLT+-D;w0{}T2+STHpnN%$z%!ZZN?>PPJ9VxT zxL-sOzngc|x|q`1QZ|hpn24D#;WM}ay=pjvn`~@WKq9zq9ebWKN|58=WT5e>4Z@zR z=T@SIKaE2N{*kyUo{3n!7^RG3)Rff0nFGORzC-dZ6c{ZmH|t^XHkP4Gz}KG*`j2lzx(g;`UqWyz~0Pw#8#31ynV6 zwX;Z{M0J@9FxTBjVP3;hyjI~?QBr=vL$qR{&d$Bxb#THF1!7BKnI8JGSbML~mf!x7 zWu93LHL&apk{ivgN3-v%qS05(JkVvD3a}Fox^Ipm?6CPQtZuCB4dF}jyUa;@rzCwG z>PEz9glNTm3_ zi;+$J3qze9g5pQEK{`+QI=nAlzMQZdjHmteph?&p-=;~|-(L@w*x{f9Rj*VBB?P7e z{T$msedkIm9VTUeccA*fk09E&g!=j2bKgg*{~`+0cbd)0jv9pC+t}dfftT0;jztlJ z^M*Rt67@5<=2HPi(aWHN+f@M9Z>)o>P0i88Ee~`$0BVj3juu9NSu&@_S4p#PZ3Em0 zG1@4Jw*hjt#hy@Hw8P|4__*h#CGfcT~7gfA7Pl@Y_h9sgKlq@W`FDf=pZAmartjBRKui!X8@P2l@76#Gzse5f_ zldRJRz=<@hCFth=UC;-?C^xG!%& zK`9k~`N+P_6|RbGhz1kmC~9VN9guX?iSp3MW?|FwmwI^5cjWXKwUbW=J8aPz_mriL zzoFVEeEU`;DP;-RY!t)ph@-&Z$8h*OLYwz6F;}FCI<8m_B+ICLK-KBr;-ZRmD4UHa z{jwZZsJwb>_*AR13LQv#?DqBOmRf`wG0cOS*m2nJisvBSRP(kd|My_{TjS-aT^*sS z^Y2T6r`g~8PM};Ke>(8>^!~}EYU3+YrGONEe@Kwy6e0?5!AI5QUxU%S^ zST+67h~1dM@8c5Fo520nNlVw%--e#Gi;4Pvy+FDv?5FQiyzRGy#OF={K#!QLSx6L} zM?kXpxoP6NZ{NPuELXva_IcTn_l-C`d@Unyqnjm?`$qAYJ!%1$98<{crFa9T{|562 zuwaCZ7A!?Bg5MyTgK9&r_Wd}+3&RZ86pRhwNLqH245UDL;`K^){V;c*a!HP%H*5igz`UrK?UdItZ5?KkNP<|cS zpCgj6ifT26<~PR|D9JP@iu{*?HDND8>wQq{_QVHoHmw8iP0gFN3=2CK)6f_090Y8K zGKj&NlZ0UE{f!eNN!hM*tOME$`sKmk!N03C_P=MCBDp+j9;`VCMgqdy{b?@QpGo@x zFt}q7JMZxaJqrsvjsAphWT@BYxB3OSa@H1ho?x_xC*|GwKMS|V(h(aiV1g|$>6p5D z#{XIN^1oBA{~afS{Z2AYjfhpiamL8R102O5OkRKPr17kG6@+Ij( zqfURqDgaPE+aGJ<6T`CewGj1f(Bmf-s!98ZY*uF*ApPX$c#U`RjBK+(;2%X=b=5)1 z3(c~BN-5mcy$zi>QT=6dM!wu&Hgf^?d27N;i7FZ!&MH)~3xVcHRDkecZZt@ux%X4= z-RGMy`LvQk7#G7czyh#FN~+t19zGN>0r+{vB6;l1``>b8~ zwK{sbWBX5XcB!t2Wk#Nnq%OJE)=de*dQFFz>~(*$WUin5k;YydkoXNgk>GZGYBU&qNatb}9M6e@YEz8@zKrw1zKdhkWn3=Li1ux~K zeF3n$3+A$+V7Ab&ViER7U?6{LvEdp>>qFOr=!bV37s}ZbCYb9Q^Z}D53ksa(fK0mC zs+J|9J7@~r^17lw^PpE=UY$APQQBz-3dikKU9^riFJSiKCpvyd%v6V_4B5s~)5qX3 z8-@FW(tMu^6*9n2k)6(T0PhUK1`@ z0_Db)G2U&Glx1ZtSxpDf>OF5Sq(brC7dEiMs-#6s+pC5= z6GJQG5R(x?! zw7>aAO}y(l4QQ*}Z)Uh8q+3d863V!NSe#HqsS-g8(qmn=Pw9bRT~pPxbo({S5&DPv zkouSX)_H$|=-JEiB_QgI_K5i=%iL#-QUDZW;>)vC*IUQj$vf9g)Ya`-vL4=^&q`{N zmiLBy!M4A(sDv4@7Pp*l7-jj;_9*PzC~y|bZ7=%0r*Ycx08zW?D8A=%VsTDDuoKPV z=j26+_Yv(&f3A8H6A9l}Y_PFCrr*qPcHqquK64owdNf%$O8x%$6QoDs(qQfvN@YXT zgy@H)QpL^)0#;4@pDhWFe4HWL0dI+MO=#r3D zbEh}b^3E6M{$#evnz>xz0{m?{A!4m;C=r;V6`oZaGnKU-J?+Lf{ofIz`@{zae>A6w z6?^4x?*xj26q9NN89B8sU(ez)t1IX3zUgWgdtpf32jrB*%eWnC#PG;Rv=C$n9!u?C zm<`4gqXMy;4Y9ihCNouA{T;!d&F@sqkRemj{*h<2U>?{YGZDl`POzj#@N7jB)oUGG zyST@5zdn^VuGIBK>IwXzs$Gs+&#b776dgFRsPf82fXW}7ydc|bI*Va-$d;LMUhjVuVFREET88L1?mz#Z3@BC;PI-XZPuBg@x#hM^-a7GIN6vOs@x#TpnuH;b`)Hr0suLD@ZDSqN!+-`yA*?iRh z3;V8oN6|tS>B3yL*z)lSQ5jgeQo4R%nW)*9%0i5O0Z$wQESXeKb%hkm*hVW7F?46dJUsG%8GWVpG)Yz#)4&wyfmLdcCy#)?Jk6ZMR&WpEtz;XIoNhM&tyi2 zjA)(HE>!JeSYMyt#U!m4AJT0Ux?rbT6_bHgvzi66ZtmL5mlz=jMPKgk)W0u8AZ05T zTvpX_uCa~y(8mhL73nO@pVX%IhldM<`EQ`pzugjc&Q;Ss4De|bv8a6q3nd!u7_YSc zYWlJWpJ!*(b{*8qY)laHs)XUr$zOYx1e!~>9vAy@N$U!q;3PyfH<3ABNaFj{94ZCH=F_S>Q24EVEpC}rErt-8wAniOTtJHW@ zCx}k)+x5FanZn(!w337!nN7C-nCdHr0TF(9Vp$X?hZOh4#6>~W=c4sHZMy7?n=5#( z8d!@;E&k|K!TD(PDTiN)=ppUE#)eOfu2=^MV;}iH99mc0}V_#(HT5)^;RsH1%)$7g3*v zUrqgekw zB!pjUb+NM9B+IF^V&`eNDxy4gl*PRzTjzUU>uxFhy{tuyv;#TG?sO4fJsj z^fu=iDWPDClDz-)T#~o>TGZAKf4nWbWc&Ogo77-{QaXsF(jk1v`5-Sr*>IZiNp65K z31o{Zy*K=*3$iTwjB@U5UPhfpjK&}58+lL9Mh|h*PTy}@eH+xc3@L!l9-~TSgr1`j z-Ep|cS*bn9gdOEE%lgtuq)D_Iv%XLq0pW8jLu_l&KVtbvcxNK$Xlzk1JK8>VojHgTE4A3agWtbG+Gpz_gfZC7gJm;zg>fC zU_szd{-p4z?uQeTdy+A8No7Gg6}J4$_CBZyI-4)XyNfp?02|(yGfj+cjElmJ%*>pm zF~9L->g{EzcRM69_DFQc7BbSkx_G=1Z|^G|n-W;Lt|`N&NXTbnadoU1@?nMg{G~_3 z+)pFFeDEwqfY?5fvxHR1cK1kIMF(YJ+U`}dqGF9(zb=^JmT)J0Jipm>6oJy^B&kL; zsG9th48*-Ku-bae+0Bf18AwpD1UqCK$Nv?Gbbp*sj1Zx?pz+z%gocKYE>mA1;`$6w z{103{4qXpNv*vj@JO*u(OJ8gLz&k6t5&Bm@#+|;RaQ|K7`#=n6!QaM&G?pJF?5P<4 zCTmn|a+lZ!`4`SmO%TmILH5TA7-BRs$~@d@PDKH-f8SvxC^8N}#khnBl(qFA;5(Y3 znBsV*tMHuG`d%5R0D@d|J86guDhl@S-iK{^{LM^iG^Tkb zjL|xZQ9<1GxPMOT5A2nz^xrpTWo2QkBrimmZZ2b~yA(Ar+8fhJ?iA~?6wl{Yx3FL;*)RC8}uWT#%8 zgShiEvts0m`8(y(mNjtIoc*KlXwF}-NpUz}PMQM%5r@;nd6Y+oX(v}H} zN0AN6Vu9D~+dJjDwz=fb>34l-PN`yO@J9VfE!fHQ`*t94oEH0kg#ZNESB6MMY->YVw z2NEF9jTDc-=LbEOT2H|+bGX$QPxn9Qcc@X@lNGwVfRnnadAMA~OvP>EF8l@KjC%+B z?`fiui04|E%zU$0D-%Q}Me{mG*(pk(70HzAGZj-zoC*BBVtnTQTX5H8cvYw_x zIGsnguyW2ss+<`6N!l1rbCGA90MIA|W`!mlX1sSyF8|O3q_JWf7bU;HZ<_>O`!3{i zu<({gkj&$Z5_hDE_0fX$i4IRQFq%FhQ)N?1>e(WwX*;yt>6CXvHZ7pLS$n1L|3j=Z z*8)N?hMLUilr%(_SHZ3XAZ>0oSC;2iUl9rWZ-J_$26Y2|D!9=g)Be|cs)32JBXu3$ z<`s1uK4LnlG^sn+w zqZJ`fhJ)y%?gM~f=ih|B7q06o3l#ry?H22-9Lf$;jQ4a&C08n6%ufYnI_vex;&1z= zkYSr~QpvhM4fVT)y#4Yh*{wsuxHKOJ08fJCggxqj9mBU((v=+LVC#VeFsz+2zN)n~ zE9(=wBk)o6hw^{fE|M#_)fsdD`>Op;WRm*V8tFey%19W_fQHRih(-}h+G_3o&?E%^ z7VPrZ>+-?iCJ|OBco-2AC34sGG{95)@(^fEQ793ZZ5su|?AL8w?|5prsotX@bg@Dr z#-I=uPnsB5)NA9&$qD_Sig!}WRHFt5bCP6;KvHlGlfej9_NlS*9moyjN{bMGqMCz_ z)y_VlCAm^{wIs3D;z8a4=qx6gy2Gg(f_ffIoZ>i208UDV=YicD2CoFe?{?^Bg<@#{{8~gJF{M)HI1KItR1?}7eC!@Ah zXw@?p7RNC0F6&eXNIvQT2N10$*RPr)iP+NV0cQ#XNN;_27{pl+? zk%D^U3@N7ldUCd4Re0Da0Lnpb@sCWK#+CbUUTELS1SZkII|To{ywm;psohc%>Nba! zN3IiI4_#)_J-wbs^!X0uHr8(lgnTRrJVZl5Rahle+}1Xmm&_vQQ9W1w^)`kYFdyLg zsdg+~QYyUyAL+s2^4R~EwZ|Z_mGb^AY*+tgOIr|)T4P<``+(5eW*OI(2?_nd{?if#*%^rFj{vH97o&l93(aH(Z+*dn+3 z2(!zVkP(9d58j__KXot*1t}Y8w{nG?T&|feUx~zxq5{{3ZM{9V1Jx>lmsTJ2bv`hBjJKp_gbDObG7;d} z&_{AO1~70SdP)VWPFJauL10(kTzVUj)TV{Ad17_h8@ZQZ^R333$gl=XeWspJ7h@izd(s`crM z50=?fgmZs^vK94^Fq;&IojyIG5K=dh>+FRKU;=q32+%Tq2~!Tqz_c1S8IyFPj{Q27biKKkZ)!h`m9%A6JGQDTfUp-k-&*O(;~ z!T{-Ma+3z?cxJFHaGDgH9= zR>#dOe23GD9z)lE^eCsMmB~8V;)=P(h_S)d8wwbBJ43J$NvUg2tXSTOlyUJ)KV?vy#+woB9V@JJy&>kh2pqBwAy7` z0tb#^YcDMG=njDjbQL#uus-Y2n~{TpG*b{Kw{8KUOV`->8m!~AbjJkE`{~Qn2E;|V zf@;2DBG||z>RtHD2D8rM>_)wl(nA7(7=;^L?{@>phyOuqhJyIHolxx`m3?H8VfelG zEoS%Mj>sskwR4}XG<&#`yT<<)ZHNMO=r|eI5(EsXen0jlQ8yHe9!nR4n))^414rXt z=u;9V`#r)%%)LJq%x|y_+e938?MM|Ufurq?&Ot7A-OlVgaVL9?Fn+^Y*a|skWC%>% z(G5j_4vvHj*A4lAtf%hd%VHOZu*+{x(mN}$2sjvMKdPUD!MTY`rjjsRkI9J~4?U@l zh+l4~%-H%Ho!^JJ7zlN6JO)CPEPqn;D462k`6yu%pnx&iKd>Up?Y?h&QI}V7>%+?M0yB^uS->XWqzla8n7xms^*T%FNqOY|`}Nq9x8y>F zfB42yBPchl+#0zxC;9sa2~Okik$WL3eA-TNr;PS{(L)jXJO;uT1Lid!AVqYb*lehM zSlnd{>TH9?BpNHRqXTRv#-gn#`=uxj!noA+Up)6d5Bd@%1#*e)rumRlSc98-vOGwE z@t{H88>-{a#0klW!jn?pQ$Njx;8q+URi>?E>T#>2r@V_9hZbDpn8%QNE0uc?puZLDVbm*D5tD7sT zxN1^ftI7DpMb+sjDg2$g8j&Z1*nKhyr%(8?_N=}Ow=U4^ww3IF@_g$N4+&HYstmnK z34a}C@%0G}u+{t|w4+s`Qw_A@+iYDKqw%@WYKgoFJ^{zSOYx*N5g#HdRzjteP-<3= z6#`~?Qk@;wwa8Hn=6)%qE=f0QXKnTn^$h#WW@rd3l?Wb#ANkWPgPc4%FyLQsw_h_+ zY4Do=+#`}AH_E7$%=oIDn693@&tg6zX;q#(&Nh)>8b2cTt5zbs8G*8#3;M{4X;US15Ws%-gy`N=wxW3jOC zj#&3h@S>vNv8zwWQ8ak{;`)M)=RLk=B3!3T-tma`g$c(hontTxxtrQo-{}8EX2vM7 zSJRXkWN(tD=)Ds4#i~q6Uf0B#Imi{+fkl$X{{3Q9pg(1 zM>yp{_?t2sFY9Eu3bg1XpY-mgm*(h@5(c7ApK|;1P^u%jmN!mNeh%}qGmn(%V*S^? ztPynWk#olMp?!V_6xiZ4T2s_)f=j=~g742nmFGIolUNJjy^%n&%$@^RG{K{J7K+^ZlNs!14%c~sI z?8HArFGqr|a+BfgS7(lS(I{apNgv51gb%31#C+PdVXv3!m-9^`pb(`>nETn zdmE`U;d8d45Bc!cK&wT4H)IYl_9IaI&uBd2XRC?ii*@9pcKf(l7(}aYQJV$OiY&u^l9wuJt;H}%0 z$%NL_OHFi~%bdO22$(}*9UZ4gUTC`W8fVR)qhN9y5hJ2&dM^wIW0|?oZ6dkzRv4d& z*`&B5(TUuTN}RRe(f2vw#MTCHhrZI`rW_K13JOU-Q4#ZL#mU-@MMx?b?glx?_{3M4 z)<1y#WKr(sy60$|H(B!lrqH$F>+P|y{<*Y((bz+WT9`8|rzVnBt#eal7(i8(#bN+e zglHJKC{8!`2UGjeKsQa3UJOw^cg_}2jGx+>mw3T04sC}Hm7j7aW~d$_KK~bB4Z7HP z6a8t+L2hDmEAB&iUUlKHdL7YKLQ`CCU~P`sk*DmzAxltkN^QcW5}pZ*W$30IV>>JB zniuV{{uiQ;T%DLe6D?iz#SGMHUi{PxC~Bt72QQ!}t{IVrNfJ-uO5B{#OK-0)T+A(t z@g01~(*})OB#&Ml1@Cc9JM0t~q(HjR0a-mIAGvZ1hy84P36cc5+JQ#-y1lW$O)~{X z0kEyY$Lcm^6EODp3P(R$#TtponW44h;iq&sT&l7UW( zi+ekHd-ZMVn1c(xDV8iT0k6nK-WP4zS$x#pv%%)P9R9QP9-YD)g=#6V#%%M5l{Kzz zkOt1%0OthP>+*^gvzd7hRtzI3M$_Ch#u7=IOq7YAXC=rGn^wsTxK+6C#3<|sTIbz5R3eSNh`KmRaJ}Cy z;y7QK_))qyPu)CLyjyJUFz=-E{qvl7CdkqEe5-q6Fg`FqaCs{c(VjxUy<);I+|bvG zKThJ?K*qGua&jB6^e#|_Ehp21V(g?w)oIhVXV6u1!hiN${I!J7D+`Gk+Z%o)RWyr< z!p_$hEK=-bU?9prK2FmuOKe$GMqwfw49kZbdL}OB!l)V8hLa)*C;q}XAj|j^KV0c| z$wYYFEsYp&)EW6gwG<`$vp~k3%j`n9eGYw z{Ur?LqmEj)=iaC^%yX-RV}QiH^{WwWKIsLlCWju}Z5(Mj&iLkpft<>WUNFKASzJkr zW$y4K^!1u81-qSLG1|`wH^8hBH4c0gAa!URvsprr3@T9pH%R*WGIMu+S z-B8b&rJf%`ZYtVKy!H>iO^Xrgw%=~~Gmqh&MzTvgK?gzC0aF)pzwo{Eg?-?I{VV1n zVNnaFj^LIpi%;nS0hEMz<_5UOs3{r2<34h$UZR7rB}g%-pX1wEjErq^)a6jC)w%6F zhN@=u;4}xka>623ma8}a0(Pa`3aG4eG!kO_+Mpz!x+97t)8e%Y$JQt-;PB{mGPJt2 zg2mN5&!sv_O2+kYyj0)0Wh4hGw%E_~Mz?=N%m#aXtDn>(Db>SrJY7Iug63Iv_~-nN z4%KD3a4HCrDbY$|K7=uT_COFN2zW^VtxI$xNa4HVuTW-8n`rP|vr<^=j&Du8q0Wx- zzpZb5Roi1ctTCSQK40Ee1365&`T3CbfHKmprVX+#Y?-@uu>jZ( zOlVY)g(@l@>@#pGbF7Sqz4JC6_I+-$xo{i_Cb{~6Wyd4WIrRJ5+FFD4^sFo*u){!{ zQI1O0?lzI~Z&rdn@NuGgu+nET-rLP9AuSEp&+o<{m-{+9JDWJ3Nh8VVW}!dmie4M_ zY;o1{uKL?Ko&I0`XrC-3HtG92^|AIetpv7W3 zJLEKM8D%%a$uM&DF^=nS8bT%WerW7lqw9VUdm4WJQOYaNpzG-Ky=A;aN3%?Ie{1;_ z<+eooqog^B)c5288S;Uu_z@>;38iKdk@wsFKvf>qHzwP5)NGzNZ4AY3bY%OUjtgb` z%AfE?@@RFGt=A7M^qc-_5W4Ke3cm;VO9#ZmnXc1yt0?v+Q~36rk27hjHRleh8x)fq zjnC)V3@45K$tzz^;{7UfzyOS@JRrcbfXMeswAC)nQi#grJHD(VFkE63Q1!LpPgSO62 znUT@acriWl;alhP64JKPRgK9=t{WO*xm zW+GG?qhq&|`k#=yS=^gTNdtVW{XeVPug|Mgj(?dHhHKl!CGrLJz#&Cpt?}Y-ml@A@KjlB&Mm%nMbPpizOHQswSM2<1xQ~RxDm-k^i0s@iq zm1r2O6K;LeX>2-FdEUeYytW?;Zd9*5aD`hi5q0{EOp%cg}u#Y6=+<5dpRC0_~z&pNHo5Ii^vs z#&s8aaf=_%&5WXh}t<-I~&76nC|aIm*NY< zxWJPW*JlT`h#q|@Ag68&`8=N#h!ghsRBLyxoR`<5RIAuR7t)sy-pGyij`O(A|qPwM?^3=T*Gi!S+P?iA}~1rkK@i#cy*wjc^9&4f zQc{SjLLcz|H=gNNUyXXl{QMbtenz?Cc>NRF=q={S%BnbtjQ#m@crj%1HEl}hV*ehB zd@DL(G&gTPC)~kP7wj$3oZyvxdN!(-;{WZ}Nz;eHioBtR7PN33ZXid-2$i_G=QR*z z!i-L|YTZ&zZs`{aiN#K`=}LBaC5H3bF_GBw-~rt4_mX!nLAJC3YG6xw<|V!XL{M(l zsDmN>A%NPX#sm0e>Q(EPvQ4U=FK2fU0JiPxK|V!+Luy9FyO+%GSmBo)J{KQ1Fx z1+pBm0N<>viV-p8e@!|gpY{Nt@pgqER`M{lUc3G3wTgcj0YOvD7&TmD_VmFIZmmLo z7R~z2z4Oc4XX?mVKG<5b2A|M8MX4asLdGyAu$i*7PMm}C4rLz*JJzYD!*DL=@8%j? zvJ0+6OY!y5t$ne2eqnTFRruyCy;MOzW<0U2Q-tkpouo4zU+%`4s^$-A#Kpj$s4u_B zsOfO)hzDiHwn1qs_3V&eBq-*JBw43aoDt$w0xD%z-OqH&(N}b-nqs( z@aeXT?+Ca2k2?eyyJ11N9~1m?X=bb}tZ+pq$q4nttYVRBTuIY$t1i~(6U@L_kHTZ$ zMSW_$??{SGB5tM=0iFqq{eFV&#gQT=Fr2?)=D3exVL{9u>xp*HWRoh3R`9uSvn387 z5}5pKUdmyVW{<0Qg@^wJNVd=`vaGu&I%(bwG<6G++5SEkO@Gn zFFymi4!^pU_Io*hHQ=z@@%+zgb`t9LasH8gKQ+LALV(yBquz!GW=Z*!)b3;#jmv#4 zuxmI~RFQOc_0}NvH7YREY<=;Nho^3j*v-Tg1{}Fhy-u|6iIet8g=hW6UjA-m7hTh9 z3Y$fft2b`N;LsA~ti@3~E{K4D_f;hI-~FltuiC9By=<;ygRK$g)`{~=F07r@b1EvT zhxYqHLk5>wbs3jj0|DsdgIe6mb1@3bB|n nxQhQVO@S_j|K}*R`Varvl0?ZP?Z-yb6^@Srgz(_F2&<|nOBe>2jk;R-eUawj4tUtB{#NcLdZ z&<x!G1cOR|UqFh_{KnhI8HHj>;}{V4b|0W)K7JbLrO4#+~*Ey7}5>J@6tE*ff~|cWLyt*|NaK zm0_5p#;0mmtFX{C$SPMNHxwTQDYP2m|7kFH{4A!&DHTQ~PzayzY(8S1*?cU6+Z=z* z`+;wLpJ=t-W_jY@tMRt>`{~F3Twu`jZ^0|PvFTYIj@`m9pl6%Q_XZ+PC%Ixd zVsAgF_p;m89lV>AO*nHIBOF!_YgpGetd<$#WTQ{*kj)Yn_GZBx@kw>SCU@?Sw?!}W z-uzN^IGZy1p^g0y?CGPVprVFGXhH&Ze}nI4`!VYBTFKfqT@~ded7N6TNPP~P|Eu-A zd?_DP=}7y>$le-yl-X9)ZmFn+2J^7Kw{E$w)zJKX)m%R|DqiS!&efmhDGKe{4~40? z53!ojS0%I?71`I=k4c$gwziBF6%{kBvN1y@6A(qC!No%+r(+Xo6X_jsGKcRO_$-Gc zBaIKfQ0{vw1O(TuCYtfO663iNee^IahM9h4aFLhAXPV;g^X@Sf=<@VBpT1!bMFLNA zjHYBh&t|>1-Ay-p;0LGp7r2*~m3?Mn5(m#GBqgaH%|Rf@hW;EMOFOjkLK{SVDW2ON zx273FmBp18YF_+~?~lxZ78d48?6XmpvksaMqvLZu)V-(G97b-Mgo-PAOySE%egAHc zHnGd0=KOwZ#$;^t3!>HivvwU&xK!4wEKl^twkq$W*Z`MgVQMBjz8g=BvuD{Pdsodc z&3d0cB;k(gnn8x~wtVL(yQ`}!2UmxUEy&@1!{0wE7~I@a$A1kpFM2U478H6X_9mGaYOW3}BZnyP~L|y0GoB4+eTr|DO*@yVV>+&q% zzD{X+yt(<~N&|7})<1mJVAsxL3*P-$rFDU~8Jm}*e9NjqlIXTw!z%M#W(z1hblM2j zUYcpQBY|oj3*4cuf8(ol3louW-Uo*msQ%U8Q}C%5xfK@nVDgrF$mW~DZg%i&mGc-; zG@QY>{GurJ0y9@_#=#rHe(=**_3LALnAl(R2e-TCX1q|;U&3srR6YPw-TfW>tGYxv zc7)NHgptZZxItr{87S3USMyywVy)(O&gD|>ebM-n)2a^zHG#C6;p(?nuz@io-+(X% zEwnno0d!QNVthAno^7sHYQ!E*{S^{TlKRB_{qMe3hPQg#V|8pbTXLm?n05lHskzLl z8%C2*(%D76Ah)VQbk)ee4(HW2Aq^o+L2A2+CcCh)x@wN!VccHwvn#8sx6U_vBEyK0 zI`v-%cVYyg1_u*4CT3<^M@OY=D5Nte3sboWkPg44&qjD?15HQdjq;vJm;-G+n-y-C zbuPG|ePx@$iV|ng^AmR|%i8lHhHCfOsHbM+G0(e>HPXXoUcZMWvNy+u%%R8F)Sz<| zq)yhs^_`3R^@h?IkB_?FZuQM2Br7Obn|S7yCvA}ApH8SLo8kdbm7Z2Wor8H^BV?Oa zl8UdkV!?S7XThaVbdN& z$^CKBnKqlyM+eyjJO zPWMRVg`Qb+yyTwk1ZC>a z2yc|^gB%d)%3^4#5_q4OPvt>?LnbVcG3U?T7tA$GReXxd#vLJL)r@smOTIV~U>^4R zv`ct%?*sDoKIhWMFFTkLNOOv|`L3_>-H}erS_db9Z1wXpTwuzL4c5b$?rV$xAy+Ta zvXAitZIx{g=Y5pw8!!7+$LPoF2&MLS&>5-6xB-nIw^|0!=tFQYsGDqOD@NyXM$ z%ib5iO})Ddi<_C=2NDb!W#LX^8YNcDU($eH?Y%`)m{GQhv zN2cozN6ORqTkF>WHXnJMH;xx;xOjM`0Ea26sLUMLWIZwlXa3klld2>Ae#HQyhZJMf zaApos^E5xowmMWY<(v*-Qf)e8Xe&>jJKmU#TsQ+otz_2jv5Vri0BUgy-KbrFWqi)+ zKWxuhsd+!CflN3&-{C}Zn)dR^_%w6KqD9-P+^efA9qac;g)C0khAfbSyNjw(sGO^* zGfy+3f8WtVa`h)otIN6v~?(9eiDb zp5nF3$|;Hh{!y&AA+XeysCf0@3qR%xjYsr)%=+E7ExFVH&Y$og+rNH-3C-1N2OZ75 zTGZbg{^KW~NbEM<@hWzK!DAd3#mLJVX&H&eW6!E5W0^PfyXgr@Vp5hL8f1P^k9_3T z(AF+}wG0Y|H@2~1=pMk#Q$Gv#gPMwN?BdCM&1SZJc>0X6_Wa&TKNGVIugOBmOz1zEuHW)L!7|BK-`*|Z(xhR4}IOCgeSUB3OPNn5f^K)U6qiO z>{?v>6&M)EvyJ%BI3`BmPuS>{XfcEacu8x%SeY6oHZCs5cO73Krd68rY8Erd++03+ z!G&UGH9^6xV5;rh>jUTLv9tw~Jl3V-{lyjBvpZi13C#G|5Yxg&SG%aVc|0Jvw7SOc z%}GFshw~Yi>|<%KneB?tZc`?!$qXc6r`O+STx;Yrep}rgK9Trd;{tw@ddzwA?Ai6O zWpqqL1QP2^A^Y6Opirz<_*)e7@~J=GfUC5}9=9@>S1^A$lTGTNe^7|S-wpai43cAt zd}DpEm4+_ndblkBH9!AcO+Nq1S2VT4wZD+eDC$&ksD7xT=I4pnQk(?lu368jAdW@A zn_4*^kvDYv9l{(Em{(7-xmc7%L21kxhKy{zroo@7;cG{~0wmGjc|ZRTLS-JW(mTJ? zGm`lL&D5Q-XeTBXWV@Mw+B<~vN_n~I=d?5UPIqQ*m5iEBnynTV14tV{=h3rfSC4q> z>0jdlP8*NW_l{@?0YjR<(>%C)Ef{Zy(r%?SfP%wW8#P)sox6gkn|@^s4yn?u19jRZ z_Ov>{zPMo*rA;rUrl#ft|NHmvQ+u(L+Qnmtcjt-<>%tjB{a$MoK|4h1mwMx4Svy4I zT{Sh-PE>SoR#qIu%yFAe%30Ww+q^7SjnVJ0Z7E+2u>6-w)M|Kh3mmTZv-?7Sz+IqS zQa6{!`$gHiQC`L9Uwq`jDBYUQU}8k*9P9ew3O}TO-fV=l&9~49n|wElgO{3)!)p{s zq>?VEQ>;TQ3;j6%k#r|UMk(;fU9XKlX-|z|t7LcGG!lNpH3b!P?Rrz@WKdDyIGpIQ z)rFWu(}$X^^Ys{tuUfXb9ReeT)37hf03tZQ#!PJX=% z$MKV_)bw)CeE#DJ&XR0Wb&fE^r%h)$=V&8>E4{cMFe*b>tqCWj9_k-aM_AuJs=tT z##LI2CumH)H>EKo5Ho>Z&}9ihck=U#u@EXg>(l6lakFj|ngJQ@Fuq=B&nzfDYA+pK zV88H+24{m%3FiAY>Tk6s=xWPMxn9--Xcrqq*&P4^T-JND5eDTwWWSEvlCK5ULJtkE zJL zMN>+u0A~eEm;fbYUS8h3`6DK}&8z)!){7qw8knWN6&Z<>A9k!p{s|REo+EdkgD9$j zo0Y`<-p)?BLEKulywAA>>Rs`9g0I$Ce*@h;)A$&*rx|DAy2U&tQu>t9(8)(ek0(g7K8*Y8-WMK)%bhi!Yus5FMQlw-VL>)IV83wB z&xgBhd1muH{trt)E;`wR1T0$XGJy1S{ zDcm12c9o1x?=BCJZSza^p{L`jzTfgUNj1ikYhpmFmCQO4@`?jf7su-Ag(@bkB>OhG zer$jPF*X1a>`S6G$V8=L-PB5Vr(}Qfjf&&0?A7`Bc0Sw|n_ACNpC1h&=N9Jmg=!_b zU|Ut3_N5H|~L!lcqt_N|6CjL}Rj)K1T z86%tazOZhhk$DZJ)Y^C7A};vhoJqvxCSl4Js?-zlZNvrEWI|k3B_!7XuS-bEk^|G* z-oQ6?v&VqIcfQ)^r;1F`MIqpqc-KH-0=Bc%`jAjKt{|H6JM>$8ZC-b<%#Irdb+3(jIQFt8Vmiv5fLJnD)U;D3%|kK`uioA1 zR1X*!a6<-HNU5!)nRgS&=l+3gKI_zV2OZK3xu`Zf@+On5rwv**RM2Xe^)r0YYQ*YK zV2Y$R^>=)fRG`ut99qDq(N$nE8fVNIdLS#IT?NEIs`ZhIP}9<0vaXtN0DPH)spVc* zvKqXVim^9iXfuV?^F1)bi3le+jBp72^yK&YbSWK~j-Qi|z{z2^GVw=mWv^4CQ_!bI z4PP2N@ox`|Pxl~Xh$ReHE_2l2U{LZ9;t^T8n|4|L;Mu<)F(Eg&Ci-mNQ{kB(_|!5nV}K?SUYnqAd9?z>ts`UhZTGv*V~sqIA0@u zV7iNX{!h!Q&%y&sCOM>EDgv$al94PF1FZH;c2Q%HvoSJ}0H3_Z<;@yD1Cw~+aPEDL zpAh34A?(WF;NWlMu~_XoyIwTF8jFR61sk>&!v9%&`A>VAKRX*6TN<)#=Lg_58c1b; zjt(qV2xHsR8EHQ&|9eLXaJK~q_tyylZHB=8mffp&HXL<$x|cfe(ZevR4K@G7vpu{0 z%k#vfa!1-f!QZSzfxes9q~(vZ6P0XiFxp(zk5Nxn9cnL@78>|z{tT%&gkVfy|2w7J&kg_XHT z%~v(+(Dy!YL=v?0xVkWYFRD}h;0~#!g_S3Vat&Zq z`0DNIxpg=2m^IOxEs0mh75JUCpLop%dMj!8bllxObX~1xTAUn(mmwC z#1YS7k`EQHkIb4?Ug=(LX&HBJ{A7igMExtvoGf>@QG*pBx4ygXcWK&IJ~aA8jCUH| z0VCj|xnS`vheWlA~|-o3+B ze>b~hBHHWX^X#VL2If)FI%#eWL`^a7Slu@Y?5m zi&HEknC3p!+nv)|UnZS6?o>lW2Cu%f%^sO1E(-!N>YCNvA5NDH6+S%!jc* z>wT;dDH|`d5g@b|M@)Y$_&FVp{xf`VRB94L?p4N;-gz~7M7XV&zkh3DenQ2TyjLR!M1!5O*1W-uWVOhgMlr%55u zzo^N1zBp(x+Oxv;`0Ye%w~`{>S4&MW^N{h_2zB=Y&H1(6_2(6fS;I{-OuX~gwnHtx zd1Rq(zp0OfM6EVhjpF^q3?sbRRM!Ew>2qJ5LBmJa$I5GHZBg1K{3KRR@5~aAe9dRh zwn&t1g^S=wAC+B~7I!YHr{U|e$Wx*uAA{CKs1#gzf&)xVovp(^zTx{w6li;HQ0@0J zdwljI@oc9f+?};Jweu}v!hm-7g;x|IwWu>2cVC~GpfAn(*ffUIa|_gZ-S$xNC}XKE zPv;iGz__C5q90e6-sFa<;0qmgz1=x&pF|gcmg1iOQ&T=XuA6`=SR-!tZn%_<1K9e% zlWw~M-#`ES${1ZFZG3~x%{!XXUS1yMKgM96O(Ob8))Hm2^Tcydy~qQ zruF7)QX=Q7x0U=Yu^lG@?EE@eYJtxgthxY^1iNn5U%N-hFxEYME&y5|otUT71 z3CGJ%EyVBcR@#G^T*tm+Aq&=+VAJdUd>f13lKrXw*AwN3$fAG%q%?Mntu zh;hm~WrWY23}lZdBqNu4*QI5>bIZTV*M>;4ngf@0BrXtwxeS)UBtkii|LNlS>~{N% zdjPpO^Nhz|t~O$mM?}0(`t~+E(lJLi7-qaA`!yt3Z;LTSMBU|Cozg&a*K@JHXSoND za6sw#qwd8((n`FeRJ9}6%&G4Fv6SM=+FKE!gMm)7OJ7ewewTw~d&_I^%%jcW6tdEb z*0L%d1(@7{waJc!OqHSdO}yM&z2=EqI^n$;x- zGr-u(^$b-lHRq>nu#28%GEN^m<{KS^!{_h$&z0@OXSA{~2_ll> zl9E%y1pyjmfgu%v5j_VhMFMqDMZGnXIStz>@=|?wSm^+gM)$hIxu)Tm=YO_@nMq& z$arFmQ(e%eE4LSW^)I5M3L458iY14vJ7W;gem9g)(K!B=CA4MR_T7DtcN7|hBlK+; z%h(v=@r0NOpk1cMI+~#OIU?UC@YJ56IXu%495F zupS_(;|ssm9rCjatExH{m`LD&88Y5P?NNOE;Z=S7*M-9Ma^M?D_bJ>^cA)8cfnlC{ zI70!eQDT#;^vi>>^EL3Pm0hK>r;Sd7AH%aYXC>4|Wu7;th8b5-KmmXG{)kqCWC5wx z_~N<5h2SC}{#=Ii^_`_`q^Y(;OgttSs2(hy_;#U&rNf}6$HIYZ{O+~w69OEg%0@K& zjVN}fUNL#fyDWYOw%@&|l0l|2BwUd|VmjIDb6oA0O$yzJqH{}E6eDb{t>1*E@;=v5 z5$-GlMGll&?@Rz9(QEt~^2#^7xSvIxd&T9gly`sL4G;2MUfKepQak#!L{7rp@L1zw z#IA#V5z20gfHnkO|867OF(mbS_oJV(S*QQfB(r7OCAG8G>TrS$WlO&z|; z=#zCD*iHbO%3tlG3^7X7CZa11y4D_UDhbeM!gQF1#$WdOen}J{TcAvTRdtP6vMoI0 z3@uw|E3p=Wcml9}qPOwEB>L z{8O#pNW)8-rq%7gq&2%KI9~k{Q~fIFlhn8tqaW^m z+899pvV;P{^s5!#7BIYqx99Z9aL$3*xM1P)GGqM!`cOx=w8jZ>k zxsb<7Ba!^igWMr>_LDXIC%R?71nlwG+V-j+mYZCpZeMg`K9j6a;qKH4hyMY>@`aX8 zb+eV(wJcWHa&+1Oe7BuKRzDfSY~qfm+W79y22W`)nd4(qAIiOBZE*OlrADn;v<8cL zlx<(I#08-9c(yGy_IhMj&z7y|emY(B^jFWyOT`1id>U#*nLn7bzE6}*SVTl5@7DzF|7hp`C~(#sWR3r}|Nm{z8LV@=GbY@Qwhj#|^QnJ3 zphhxpGVYg`bB}y#&XI3TZs^7>vHr6)DlGHHo0c1KpqD&DYAom8#L(#^0Z{e*Et zz6-nR4=a8rP`2!dBHR7pMhImAqS%zBZy4uTpfBRU4SK@JRGFVOv3}5TrL9h^Otg-z z!4c@n0<47jRImXH36aBEDJActM&(Y+jzOJsZ{nFMEuy1=$7|fL+L!GmH;xEV*SbaS zy|I&h2T}|xNJ%_;^fC|i>KSt=xTy$sBlgpCMn_USdvzg0e%b{8c2cYeImuC1D)5iS zxUS?inLN8Fz~}d@g@7({AT)<}52(`&x2aLPbbZ<>q4K8taP}-MZze>oAvzcFqDqCJ z7jf0>Uq>pA7(!!eZ=$ZvkD}SoR5pIHyNwWc7Vi*w|Kyhp;~xzllpr;2A!AW`b9X2K zSR_A^!9dT>DfbW0nDee!GXu*&%%i<1Y{{h4mFKl3X<~V$0^U`^i!`NHT{z)`Rkxqb zt#0ec)`Red%oF4?F#&6OKF3AdLa+u(`|l&Xv#qw8SI)vSxhsZWM8Q!)hc7nE^_nYH zc(_TkSm4C!hyZk)U0153>_`t%0=9SBWGNY;RgX#LL6HPXD2x++Dt>aAGW#Hh5y~h^napu`v*z*a@#Wmqm7p*9%Fm%l#WWXoJQvASlb7g z#FbY!=hMx+u&?Ur>5GomJ2^O*jXqAri?1m)DKjLP(S!kqM!tW?=?0hB>h?Gq@cw~n z|IgNHhfl``alni?wClsamSpQ9Ay+^UjRUDsnq&u<^fRM;!Si597ndQf*JC@dy`>FO z{m;DnmbdZlL&xB|N5l|Ou>V^O;`^ZMXt(Xf>41!09ljQI%o!6mw0zFkEUOKbXiP-R ztm3ux1Sxni^P00IcEjs~$!;zqi_d^Pft0=2EJx)uh7WDtGF=29dG&{5`rplD$rect z!v)Fy>K&J5wCkHMt=zlT1w-|(f1rG~&srco4_Abz26g=~A+_56OLpQvtjT9NJrDSQ zEG`4AXmy@-CG=9nRg7p9rCB9PocHz60^J(++e(J+)|kC?o|96^il;Kma)(NNGv@`l zC_Ggus!jStU9GkH>^gkE^0=|udw-&q!^NIZpwFPY5xvQv z&y&*a(v;1`#vP_7FkiW{ps1@a!mrkw6cW}8O|kC zqYH42PLBtVXPt5i0g5yv+Jm&IPSX7(7t=_mwH1_l-=KxDb)r@j5+)ZNOdH6h9-{7F5{8u zc&6ldzHdFK7&_FMLOS{t00PLOz}iuA!0ciu$DyM_#Zf&Flv|G64zd|-!Bso&1T$I$ zem>=^KiIGET2FbrJ)Vu;DA8vjk+%|9&XANdVq{#UN^q|}PLsI1b8A;yPXPSww4a!Z z`*1a)pIWh8Z?Eli_N@&9P-h1ImGEV!-p3!(1Me=?1hNwJ{aYd~Thgq!z(Wi1Uy{p6 zdDC~Ueu3UBKWuI7ihW(rAzHZfaXK~1D^`WETaD`vpRH-U%3^Q5JVw*=hWdp|Wa>WH z&oc2n?K*+1egBdN-(4XnlxopzZj@lkUqFQGSdv+fh@m^Fv3Od{jzX za*O}*^I&LKT{g}`6&_O7p>1`vm7trB5tD%gE9f>hHH1_)jK&o|W0JR9BBiv&eeZ~b z2#Yk&4u%CZ`1Dt?nco?;;zzr8J$HiN%P5||GB?f+#a_ItCtXA#T07Ml8F-+(BQbzpYEANv{M7_pmu2*Y_*Z6 z?*u>@5jtJmzr9y8{gob?Z)Euf9NOf2dmqV(^e(MF%E%%HJzu@50OrP zIet~W@OeBJ5lSq1qk`_*kH%kORASRrA!GN#0F%Y(%!cpG6n+#RyTbyq3r=?V!QS^d z!5a1-a;4+gS}HeQ40#B@PB|+ zb7fyd<$PhXD#l`8T^%bn`EYz+IZ8wQe7!_Q{Mz*wJ6c{r-JUX=>7%cIJ2u-sv!C%f zY+%-rC2wV3^(uXhy9$Hz`?IX|cps1NU!<>R!tw6)`4$02N)?0I7_y2EU7RoRcbZCS zSH&xXald$Y-TcWe-}>yP=lSeaH^A!@}-wJI`e7b1Wt{uFau zdE(h@Z7y=akGgb&{wRS~T;A-|^^V?kFZ_vkT)&cZf?ZwHAh9K zQmy9jF{5G2(tU&*yK*4b?2~&5?|wiI?8UWER*nrd@+;FU4c#u8Kdj*CYt z-g;JSeLUSPzd(Q|8IiA;mda^Vp>&!1*k+wP2}ijsLQPkT29vUz(b)}>fmkgFy8N<+F; z9$BDrH0B#^LTEbCZG-wx81L{kISzG-xLB{U*YrDv)z?Q7-bXkJ{@3*vg-kfa-V^HI zX9~ZyTKfsA9O_zJClS9mK1>ay^s?1sahRCbyoNL&tzGg<>ggTJKPk7H1qhe}+ay?i zUfQkDNs@nbDWG!`LCe7&{FT5zp}H;6J8B%A)ReKoG#Y|;HW|0}*q||!W zgEys=>pRC-Mz?qyId;;vYLwjuz#@mhT@WKe+vq{hu(! zIous9o5PCRcZi*3P*HCN)IPr3Hwy4DoPv{{6S77%VA_{0;SX(3avOl=j4w+RG=pDk znRUtc4vBt3{F)Hfz}>jgMDqLQ8b&|7xn#rmyVTe(D=zuFPfS?KiBCX@xn9H=&TVNsuM^>at9_)jaF-K04)t>)lW*G z)~Pgmmhi)d8Fq;p52liDh11x9xa~L_8JmE??<*6Xlp*SuW832q85bGPZ>n55a**@(l}A8Kb}$W^l|(hO0C3j?EnnwUK<2v!56pmlAYyATCmCc*8WQ; zrY?p$FIq~y6AJl}yE9vHjPQpBI_D~Gm&Q!zQ~j4zNtOLKVO4=v-!R$fHinTkF#2^% zgy$MvXDmg$jP|S*y_4X~svp~kV=n^AJQHYFk@qt^eM2{jPXnzXE!}EtY!$@YYX;0G zFG;JIH=CW4-m>isfm$Lt)!|9ydX8JYyB6h>BD&7{H>HdvhtD0qo%uvZ38}wjFaetf zOeFN96BWKWlP37mjcu8iUrHCBjt(YHtCwRLEP>;vrr=ORnNbX6$PJkuFjxQPI)VyO z>aKnqh46YU!f+{&g~EwnF%+WavMbyD+ZC(ji!8#Et^#U^i3Q0x-Ox?%SRX{|{bcLE z^T`%s5~TY(nQcbYf#0s2AktXhEi5#MtLsK4b3R_AlPDt||KmRdv59}FfKUKyo7FZG zYk^Z4{Ed!+cQ43f8~ZZwTBWqD9o`RnV*lNvW6d%B-@9)A zT{$q!s$tPLS2=cHF_~&BO=n?f`g}d9#!q(+?Yl!=Ce4KTEZ_w4$ArqKBNyjPDzL%K zV;leVyk96CZi)2LdVwAks>6SU{^BbWZ(p(Ob$;D?g6~|=9HNoRL)~)t&1C8oJ+F0l z%4A-0mf#Zas8r;J+c9mqhKi2vl}C<*&S26zDnTxcV9G`RK8oMbAf0t%MW$dr#?qz zFvMRjPd{BX(BI;-X%VOSGl`sHx`oNXU@UOYY&UPDEcF*F0S7vNX6s|$>dJ${zasL6 zR8jIs`Lr@V3|R{HG$uR)!$`Xh_oO358Bn>gzU?9#Xqm0$I@lv$BcuT3|~yef|F6qU||8gF=6 zdLKU$811* zFiGns-JE_s+|iVF|6%J{OFupg(~dQaG;$ts;;FU@33{!tEH4;{KZJZjTiPR%-4(&!d4+}3>c25XI{z&5<06%L;{p5uYU?Z?v= zBhi$^?;(FJwib%3a^k$xiibB(@N)F(AGi4nc;QdHjTgq4w?bfJ7Wvkd14xuY-G0vk z_DjlO;O--qbR_*8y(T?Y%{0tHJifSvogkxGSEQZ~((z){xWHpvLOo?;BhSV}SJqa| z&{?S8Z^UtaZh2tUr=TT;#S9DgVA!1GMFOzQ3726Gasr2TEKs5u4K8-Kk;w+QUgGm0bGugqVQb=&j*&rL7sBv1Wr_N|x2L4e z#~dgz6;e2LPA4_F1(F)y;FOY+nle9gd4i58#H~Y|)r^CNR^;5#+P;dlj$V??t4d7oq4P)$2+ke!#byX;s=-Y0+B*i7&Okn1iSce^^YYPjrs z^ud=(9DjP5?s+)QBVlSm55c$%yuBsA9F;#f-8ENwkb3xlx~LSl6-D&>c`{n|Gimus zW|(WUr}TX_EXJie?HZx@=Z=hqd#{>{qI*xsU2#hxY~^u}i!82c*?JtQE%746dRd_H zG25sUL^2e9rShPr-XNu_qhu6Rc`16f9#f+kb}&>TUu+2=D)t=)GA2$xRJntm@)W9o-v#t+7?HT{;%=E09bg%izE5UJmG8l2{!!bZ-NIJ&&mPIT;_`5a z9+zho_Xo>!o)vZFaIPN{!!?KIW7C631($VN7AX>;1%vah66V2f4rZMb=?mJisGSqU z%!3}ulS_itN2x582!*qZsp0Cj`ze?y7hPM)%fZQqb7GMv;AcL0H}7Ak&~SVGS7SuD z#yHmWE&G-#%txU)fT%jl)8i4P+ci|B&PpPdZY#7nUeACyz_i1?{B}cj#nm0rB zH9pxDxUz~c%M`YFyQ|{53FC9g$f#li^*H%SE%Uz2q?mr`SX5hjU|Jx`lH=hi5jonE zR8Motj6soy#m^gmO5%s7#9WSl&!Y20+zu|%BxoSN#qKlzb8f2BrZz3P8n?aq$Zx!CU;^?88GPKfL;PKCXw zNmSbj+h0J4c)Nlqf!vHeZ)e4;|t#x?+pJP$4%y`*~TfsoB%4#&m^+I)A)Q**& z!M1}P0H&2P3Eg$*|V6}))*fz&p+0DNB7@B89Vk+8MMeJW%*YUCp{|Z*8Ong0oV^O(|eM- zX16CFGDHdNm3cnN!GtG9(dmX@NQsiB5L`z55^zWQR~CyyVlKzx`;5kN`bMt-AYQ4H9)CV4NNDZUt&T{0~J{vwhbG*%fW-U%m)rr4PzpUEUg_OKifjqTtJ<9%&4vUXq}99q7w z%ReWi-N<-33oC=`U;(xQiB_Iz_|s)g#gO;MObphAAoHB%yEL@vcLW)^@?JV7@F8#V_W)-;qi_N@G>#yHhaJ+shjm3`~!@$+NR|dG&}* zIN%4K;)%2qH9-aUh@SROqj22BnexKl3qO1T9eP$1cDrki${~Fn^|irjh|v8aiJlhu zPx)-M*)=$Bj~E_Sk6bJBv3OvCWOd=^-&cO=XSr>FkOOp`JsvUaDmGJ!x&_p+xwcy8 zHVGNQ(fGcrnG*GQI!Bq)J0utNT?^X>;gg|O@jtwTewO$C`eV?$-kIe+1AM_>Ke0RD zCTOf#{)V_=@tM3Y2wGIhkm`e!VDa*L4GoP=j}`ICRd_OH@P>^I5ocGBe`cWXZ5a?< z;{IFZHkD^(yryiEp?AlWa~G)Ha{?JsM1bap%7dR$&a)mh^Vav9DO~STSc7_EOQ5SI zp~7nYHYF@ZKy5_8#2|0}MEob5YAp4R?`=S4Pve5f!?s{7sf^&d2qH88hAi$LlZA?% z?Qgv+&sMjxI?q%nJr71? z&37=ruME`dKXOSL7XL`^>2W{GTj$o+SWR2(f)I=NRxL%V%^x=c${%&{Zh4kg+gmM( zoRb2TSm0A2pxjIfv%BZVLwXz}0S#Aqt3ae|m${yQ=>ur9`-^TNj%H_-6j_c8lRRnh z$DsN=eG6U*g?PZc`otyKX+Hi%=uiV3C3=4k!5=e$ z+1NS^%S2a6#2=J>O~5$)@jjcb@YtJROPBy-EK8@=9R|;h1f@oPW9Qvh!!gN~7m=#! zs)7DBNeF96ERMaWC5u4M2fczi{+j^%YDIx(4{^?|HJj>34Z|k>B!LFDzlaKIU59+CJw^0g zgT6|s&cibx?I?B|_HR9IffA!o@VRtjlpvaF{JZTfFx?oGa$cRc3k}&@7kiG@M{3DI zY#8-SnppE)AtLU_JGzTYE{Q~xXd22|pIDpSmz3m6)!Uyj`2~+j@>Z#op`4WOZijDk z>#$QKMlbz46dV=y9{a>OkwGu?WNY`((E~W8_#(VK8&1in4nMEm$>NrzT3!{pTW+oR zG~k1MI9oEOG`RShb$)RH`+G1}-2Se;vC(sCtt&dhv>-8Q&v^epGQFNdC7A|xrtZ54 za5;n!hym0U7u)67l&DRaWX(5d;emGeTq7on*-x(e*bmW}v)Knf-Cg`ojABSd`7a73 zWgKXbwY#}L{nknZW&X^V*}c?x3;b0Pq6@ICqc$2mv&%LIX9*guu9J(|KSkj0_b|NE z4-t*iT+wYXgBZnm2&9Cb`rK1_Vt!?)8X|BsN0lbvDd7x)50*y3FQGQjFhX6jGA0wV z&?XG7;~hPXKYV!Gf5%&2&J6J@2qa`M;NGYQ}Xt}3bihH_5qX2A$x&%!T868d~*&I3YP{g3N z!sS9Do9UDbC+8Lqk~_PB(CTD7Lezuaze-(4)$*Y>Kb%O#Z| zcxif#E>%YwKOWnNkP`Nv*!!_ewege^*{`$;y32_J36|F-Gx^OUBgstmmVu=LXN?7J z3WTv{@rEOSSTpSsSvO}XRkpcumHiRr#ux){gB85ity&xQ#N}#1hlxxEjvdV(D*UKL z+unFz4azm+WS?LIb?r?F;%;+HR4eSO)UuxTE;Ox~()^S&+msPHz&kUJ=A?_$v zF6=S@XUXk#rLz*LhG}GWU97%ToF8bVq};F6s=%P{q~0+Kd5Ji~8*{5KSnm^f zzWobTQ$9%}-0tF%PP8>%1T+QdlOK3?2gylE9nADusk{^=IcC@ei+0$3}gy6v;Kp?mV2=4Cg?ykXQaQ8qUxNC5C3l^L}aCf)C zWq@tIeea!j-tIZOf7I#e>h9^PYxTQTb#KQ2GkvgP%v+Ek1j0oFcY?qb_CeHuO3srXk4E{iDPw zOB+*raC2~AcvJBA`s?9j#rUa^S-MpKRM_SovWVbUYzC$i5U|DDnbcyEZ6@z<1CA$R z(hl#%qx1?+{@IQfa3Tt=)uoz9WN+%lUlllVTR_&tbmU{kIV?0?)-Lp>8Gq7r({mHH z)D@V0=J9`IM)==$=MxCJxVYpiJmkIJ-Al$C1|pP} zmzNh86@@$Ne6-KM`ESp^c#tIutS!CI0}$_a$p*|eYEq|x2${M=zyJ90gV|+YaXgDp zMp02QfAx(WtrL>PM3A$bJd}02;?~uhID<}nSJfb&p;sdnzuW-QP+56h)$hv=U#Bj> z1mf@5(*nG>BH{Pvg~|HE&A>|!`2`Nya=74A5)$&>pKEs_(9qBz6LC+|FIlT$pQnWB zW10|qjpZ?dJ-BXoIW=T&4*CW&V2ye1VE!6SW^Tqp+~8I#i;tjf2i!0A;;}cz+m=k+ z^sOpz+PEKY zQC<2}ULuCutB=0JU z_0d65aUYGsidp|jZ{eq^_&3;nVL$x=Lp`x1>A5NnvR$S!u_Kf%mi=8n<>BVRU3WK# z@x!jcrN9M-H}w8|Feq!gczc~-+p2NywHbJSt2jD*L`ECOY+@({FA>kJ^*Ok?xj&PU z1?J>@`tj%C>Y(=x8gF;oS!epUhDW1GSRkS%`*=3?S(5He3h1l~Q@F3izXbzD zQ9la_@m(zRso%t)Go>KagDk1@b=g3KoWXhT=}#bG?s-<0V*lsy*kdN@ytRcZ93~?g zgSk%%vtxHWaV=q&{l$S2#8>3*w=^JLX?C^;yth|Ja-~H?1e$S)fz+(AK?K7V* zI`Ciy3f|XtSNKT`k4#znoIG8kvo}7^wZCUi4mRPrt0~Zw2(5~pNA*1f5egpSY8Ci? zJBSLL1uuIL%0#+a$1ZD@7c1ZbN>S#krI5W^Vv^nP;JHDt9bxmG>RZj@FU|DsswQe? znbT7h-Q{Q8HxJk5(vpPo$GViYAA9}FFl(ZTaTq;M9d)3^;G8#9`kHNjF&@MMXqq>Gns8BDZ_~nKUgb-|?;CDa2mz;;K`oW( zGC-V!xN$!2JMYT~70gN?LC{4H>3gjucZWX<%^pAYeAAagfxCIZP{sVxbw0FlY=`l7 zx#M#eb5r?%hlbvNsT>xolmxXW07VhwjQ9cB{o?&$xx;~j(AOh$?)mZKStjpj|A`;u z^05i>J8ta*ruTQ4C$D^_NDd4L5THY|zu$}^ERLqrwc=kMNT>`W;A9%(u|1e(^N>0R zH}3-5{^3F(21rdX@AG(ba+<7j+a2)cR7pwcR7*>v)2X#U3AU1EZ8x0k?aJS>pV1>D zQ#R7Isr2JV8H2n!)Of``r9elz> zZ4BsZVFZQg-JxWK<0iODDf|lVfrsb9&YlpEFHB3l`SqtC@dKvW@-F+BMZR)32L<9p z8Y90)$@x+KZV_w`**MUASUu@X*SN@YM7h|`{;_lc^mb~ABN&h|{yT^csyXE^vK#7! z0&z^`z6&?Ou2s=LcIXdz9%`!ytUvZo2!(GZU-Vqzp@Z>kWZqg>itg7$L`}bsv)SbQ z<>KKTWVi-q-Ni`}5DxtY^l(U)Dr3ypw&T`6B2(J!5M zH#4etjq+?*;maGqV9F&vK@-yMPXU3|F@G$(Kg%KXN|kJ;!DsWTudcb?TYf~FE$t!f z$wJtRRE*2wy|Sx}7)3psm$XF?0K`OdvITd~I|f$JPXyt*<>K+OL%b%>nF+WOezN{& zgJ{?=6KhXoZTG|BWSx*&^~b&_pc;@M91<>JF)bFrB5v5~wi7sfHLX4iBI(*;zI9aV z0o75_81Q(-beAm&aHgaNcS`;`KI=TlE)6#^Mk^(AL%qn4;@9^llid3xP!wFhVQBsV z=5y8*eiZaH{n@jjZKxQ=D{CHm{8;My4xTu!Py4IEJf~hDZ{6Pt>7*uhZfvrGwe^D0 zk3}U)T%*HHez7@&+C0T0YW+)y)z-;@Oma_MC;AH^r>)Q&a1OpzTj+tTm$L-?0qa6%YjZR? zMd+`;aMecefAPRRK9`|rBw2fBXW0nV-naH0XF}kc+uMoDo11ZGcXtl%&lL?I@6Knm zq04JO$s+|#+O65_YE!qD5!rL5%9BHDF)L~AA3-=uX$h6kh>3owM{Lr!vI$A*1AgP~ zNzcxmW%ak~=4Q*QLFpKsE_(6GTS=%*$6F!u_qsVYM`PY}<>T{x{oV z|FuY(_?dO9n3k}*KHF=fH*qA$j~`yHW7=h`t+#Js0^eODBL+=Xl)ZrngSoF^O$m)h zT2VmDL|`Vj)67AI7XR_FF#TTfAK6YYJh$?%^&p*DJH=y!Z268setk)!W13h!+Nmft zolpgD;U-#(PY6vfrG2eDclxOIFG*@#Z}9m~BDn2dn*TaxR=;zrTp9&L&i{Br{$qt- zQ~RI4@U1ZzDh1ziH(rnAH5umyOq%>9m}ErB@v2tk8GYG_cyjo1AUb1fnDXc!R0>7+ z_xChJnf|r<0s>v_^YfaIuZ5V;%QVsmsNr?hWnQi^`D3jRcxFz{gvIyJ`>|_2cH>@Ja}~do!J}u9G8A8^7n77qEl*|M7ISW6AgKe8V%zhaD^64FalS z@*a5xuP2M$e6TYU&boNC?Q> z!eZ;-K+4D{chxNdd2Mo%nTdyIiMU%4G&5~Z65fV)cr<^B(SXIDjo(%moAK(ZFabW$|Q|HT#LIL@yYsCAg7s$;wkXH|n z%_Jc=_1WDAVdV4km>7Ru!uE0rhl1%lbJETMW9r7xP21C(8C*FKp#+F7s%q7|raY%L z?7UsJv79~eshDwG-Z*}aNF!6A3=rBUrIwllDY>qA|O z8tX={A z-0V_+jRE3n;C6`n4#NX#t5!n*muF&I?@fhjA3?U(NeCI@wv3|e9E1CIZ*x~or1CDO zM$6I}L(t@lIEc<?U;?8@*{x0{^oZ`P7ISdizPvXe0k?_0Gl>gNL5%I6lJt#m_&+8tY(A2+huhBid zKr+MEz%E{Hv%jkdyZnI2hW=Lxgx>0GEC`&PxZ~)pIkR zhFJrA0+*AUt7LFU-o2SS6cQ5Rax_~pDK@wanOPpD0s$|7P@;li2kYvan4I1%A_|I+ zbdN=$?1<##{LxJZ0XWwoFcwj35u z<2C?S410sh zFt>*L+Gv#W|7+>V5LLD+f7Gp5gu9&DO=Kb>CS}U8gwg3;9?BwO&PQj9bvY^j(QmL{ zfSuivKbcZ#t`9bc1|v+GT^QByvoq|69>yR|Fdt(g=t#QU<6RDPOUVWRVkq@B7jMzf zFn*Rwbq87?7R`hGLiS4_J<1whlff704oJLXYiM$ElAO%)^e)uSU*{Gs#~x{U5ht2U z0VHSi!htoCJeoLw;sRqhyR6`8vcsgyog690!2zO-hP0%%yT@ZC$BR0(QUnA9ydtFF zbvN2)F>V6P;_w>u^X_iJm4R@Ysp%R_sns^gLse)L`K*<_HJHXiU!NFweQ;RVl8%4nC}|uBwfz=#1j8ox>U4HO`kRW`hnNX>lgse(Rpug)kfY- zKu#`-;TMpdO%jBFX1+6=g!255dI(oiqwk&1f53(#XZBLY<#}OBFvv7je%6|B%b38c z8+kzTH;hC5IWSCy8NiOT|Nfx3kTQObh{yc%<%5>4Mi(YnWfT(+uO$8Q7z;#+@b++* zcj=l^Fq<)}+?VQZ7w8BV0cO}>I7cNk1a~)d?$D0Qny1%fANIAM3FzJ(CwQ&h``7BJ zF#pLPbg-wl_k@an)AHNFRH3zo+rbotFv*cI1|gvh+Kz)UTO+d^O{d_;{f&){8-NWr zGh^PHeTa`MZSG4NH|%q*f3Ye-qCBIS0UX#!10V4%RpwukHum=i`=fA=I7@C{Cf^uav06!Q5Oc z3E$r6p_9?#;S%VZJO=x~P#@ho(wGBXKh~wn=C%E(AjLD+uhx_%{cAE1bbft3!;=FH zDs}?kyK~;&iRb5M&!XYyG-0UD6P%$vlDMfa89N@8AgjeVIRG`tA!5i7oiDp^pNvJG zf`MEaU9|F9ys7L)J#hU|RTF2nfR;&x(+(Q*0$3OO<)%bh5N6gPw##n3PR}7WgEO=_ zx{$nBCm|y%HcX}_>u=odbi(BE!URCG3!Q)U znUT|^HryEymezmz|BsZ*-m)d#S-*NJ!QDahcZUa?bzNP4SpcHWYHMqgVo?NG;eSt$ zN6IgJZf)}W-JwZuIA%`nj?pNh;JX|e+fTiiam-&uKNJ)-H>Wu7jUN!%xblqyw8!q! zm`CTCvwLd_IRW$u0RIqx!pnlV>aY6Kar|nFVhHzp0BuQ{czW|d-78_TdG1I<31mJa zz$K_81d7Wtz77wxXE~{L+eL<*Sl$9KFMw+OL2}kOT-CfsdiBl#G2LW#39#3-Y_{Lp zxYD-sD})7KY!7`E5D@5)VW_Elf2{fTV%~h?!e{fj)p)?-no}Qkr{4nnV%8`thDk>_lAE~&x7dxw~tHm*}?9j81XnPKy3F@`bewGmk$7<+m&snWVE!Uvo*oZh)P)aRd){iD+6Za%&$HY3jkOx z5r-=RfWuHxdOBGv2vD$TI-%DNV`|yiEz&#(hd^FC{R;diNvQ^A%pd9AIojLXF9suG zCLY^NWbpwCbvU-Qx0k%Pzn`LUBQn8?B_PPWM?^$qb1hOL2d%wM|H^Mk1qx_kacsB~ zT#*MElT2#_N5|-C5$5NG9d1_*vS)uIa6N|^Z;`#NLzS07kq4ux=_ zT*iB5Bx0krvP>Cm{yf@yy&J}?xmJb|@>ykK5Ae+P$XuNVaH;&;+j(p2>K5uO(ERnq z3vqNLB>wOM2I66!`y0zw+5aAZIu>->FY2x zee?T*f|cU_!&<_(TqGBsxuHUvPfOU&2H;c*lHo$5S9Gwd$)e)*N&~PZY=m<9QcO&&P)kQ=?qOp zCB!8IsF?m5F{ky8l$4Z`3+5xIV>b;aCmzVaV2%E|K5dhSi))9Ai|e3*iIh~xfoMQ+ z=DEu1QMUdi9WFHaGBkT;2ANpIOb91Cvv8o79RSr_EOt)~u58E247^(-wd?XzoYYj5uDSzO#DkmED-%$&R& ze(8U9kdH<}nfukD7Y9)Cn_2cuuN=Ofs;X)srZsIovpDETCDJ64C9AdaGd;a57tFMH z`-~_+x)lJnHt2_O-u1!M`#wEzXM+afNED2WNMGAJtAf4Bz66NJ4%}PS{b^;AV>Yw( zfzvm=^M{ynK8~$2uC6$gJlWpT$)*71Zp$P`cS|&NZU!#yZ#%5?H_3q#)$m_cdcP_oFp19--sJ(JZ24 zVX2n6;x95K5!Jia7)H||vi^^ULLrzRK4g6O@S*mQP=K8s2e2(aPJ%)gUkG-EM*P{X z-XS5$)KynIwtm}s3wU%@p9C97X=!O0xVRSfT~k@y^cHhsUq)FcQs}u5(a@OK{_vNa zyf*(U%I7tCv41|WwN5QV?;f8yr2KwTX{9( zcJ!u?&iPLl?+e1g1(d{o;cj>JrAW{lCs@3$a4X5C$pyS5Ob4=`{bC>!<8b=q@V*{d zGhfTed66ff!kM^n+;chOMn2y{XgAhxX|y6iZI4LPb@jI$YtyO|WUS*wP7GN3tVUri z7!)Cqj;D&H_1m>qF}aw@>rjTilxrW~7}&18m3iU$mi;w7>SQT}s#8Q@nTml$1`2yb zMo%=b$$voizC3Ca%MYK3@`ObO?Ckdf0-&KjP(%*vVsR{lg6&dBJ(~qY_U|CU$l8NF z3Iddtcak77_p?M{=p)CF#*dW9Dx8y~jI*ZojlWcQ*UhX*0xL7dOv%xqa6zeX{S)H#0M5jQkA#x zHRlU^Ne4=VCIkgBC{lKf2H_5W&*P)LmRrPZ{mizhCL=8C#WgN?HlcST)Z?BJBR1lO2i4_}t@QgxG-Twf z$kM*# z14Pz);ITtM6wf5U@N`!2!{G~!4S(Jiwzs{!x5NkEoF{~;lxgc<=m1}SqCV|o@dhNa zArbI)4t}vis;KUd+{}>EIrmVW<&Cl1piXH~``~LE)*r|22u-eb(G)*g=hxL| z&HKHT{`km2{>nsIkCXiT{M#8j!2CdD1n2H%BbA8gMIm0LJooj(5D?C!II8{wqMe=~!kt+ zH28vYuF%H~|g>U1`T!7yE=zCRTsYEZ&d$&AJ3rtN#%65bJ+FdI^rh9y*G<4@X z16~P7sxU!QCQDt-SXzg7_{UH52FyT>xq1(f3wBm8OscJVnONf6xQrPjIhDM#rOS_v zYzw=$B)DlbbWlZsW0r*dFb0qCbCD!44C4FC>?yxGaqX;^Lbk0fHGpT}Nt}e|0Kj~} zp^N~=#D>-LSN%U0CHz?T+vH*mZ##P;ENX|HF{4Wp*K@O^9#EqQY1u?EwjG(^Gr|V% z;;9Yt@Wl>H|Lqw8=B?g-N-ibQEY8xo)I$3o{e?2uk&svGak}F?4^8s_v)#3kCJ;Er zqXGKzvND9-DB!Gv*mG-#xWvSH-G@2#JuCC7_9OGhwmTl%%u7xkYWGf;rtyML|A@Qp zfo=s@4|Mj`RbIp(LmI+D)D0VphDP?J;z+x@D(Zs<QPSM-IHc;W4#;1!iV~Pp6bY~#hBA) zXj6KtZ8US@nuYZAi&Zkq$Lzg;kx1O5#+R|HC!}d(9hHGH9Agos%18ouk5{)InC=F% z>`0uZd}4Mz7Tx717|*Y|bKc%!<;8ujW;vTo;RFFQ02_fjK@F>h4RfBBj|!Y#dOf{Q z_-1&9H|1=$iytfA$xWYTp3nJ$0)=sC-Gb1G{kIdDq++j4AU*ikAHoJPB`7d7YS@OK z-_V1&hh}VFQq$J1CLdbM04lVXLx1Z@uD&6c0|0)IUjbt zjGaG~VQfYT6(Q}+peK!~V2WFG1GpKkyC|Jd<*}t z99j-zhtKi1aCX6AKI*cNX2U2^H*)S3X~uHtEKNWd-~Db-ePOrc&y7ad!>cr=C$f=zYy6v9{_#HeZ2NE6>1^uo zR~2Fp>@6lTv#~(h&5?hyLTdx=Xh}fF#oXJEUt5EeUDvEzkqB zSvb~@LMC=?6_Fz%xKj_N5Y-ZU=fUm1k$$;Ekt;54rj&)2P2@A&fk0N zD=tLr#d@2<#MLq{6gGXb?M0T#K&H19rfI?Yy%{oejgt+SN%ckp)AmnD4&syet(wH7Spe zxYOG(bD;!08^Py*SMq})G=-BMmZt`oGlRN{N(^;##(tzJGBx~2>?{z^)BnBBJWiY4 zd;{u~i*C$IJ&2JLct>eL#S-oW!|y^JpYuHgnE*@a#tWJn{8|385!EpMSs~4 z)b$~^V3loQ)X%-P_DMMUNiPtFHvF}}y41MqSHY}sod@s&!&_6gLb!CC**a(DYTfs~ zNb^({omOr*`yX_3$!D(ukR6@&-cbX42um!4o0Lxcb&GfSpXJuM>> z0u?ZPrXJ<@^iE=G%x#hV2quvGvdF#%mkd8vQcV6F#cQKewSx(Tr)Ns~H9j%k=E{D@ z{EKPuy&^2&9_@RUW9Ym~%cVV}tc*e>%2C9jiQBX*J;?zZuxDl zMJyGhSqX)GXjy{8X(ma3n9^s_Apj2P4y=uK|FH>E{A`7&cRDb(nZq*H_;+|)ff^H{ zgK!(bMooMkQpWLHD3BP)^&v}Y%{Is3-py>5;U+Lh;CiAGq* zjVUp~n;%`;^-T-5erf>blNwHo0}T#G^xiHxxS~}e{WII?11w6*@3Y8SmwgEUJIwSs z%(ra<@HzoN2Oz+L{NAZ6Z2i5~UP0ID5j>sHMhLCslnFC)I$=_Dp+HK;Wv-0U$ z6U3~6EEv8T87*Bewa87w@{O&_*mLCYc*Fg5bt7<~!ha03PPr@-J-E1aR?c73*(K;U zKd&X`#)ai4A1|?g4)%Ee8#~h;!H+9%RAu2NDxGE8rRI?4v2iT1o$E{ra3@?YlAg}b zHf653wZUCa>h7F!{6?-9C(U0hLvQ#pZMn%e{7;D?20}60rWUqv8w# z;NI@|=|Yf)i^n^^WW!TmN6?zjmB)`YUz8Y~7)pxnPf_3Ta6+C~&7+fTZ9hWr3IwW} zg+8;h5K5p`Nqg_&0yc!pOV4<~Ahch*26Y1A?0 z{~UB}Sh>pguX*pb)P?>(R>uBcJp9Aa)VNq_j#wPYMy)0~z`gzvD(;+jz!xo%ujRO# zpFj1Yd?OSI{hpR>(p0lGN3^KtNkGsb2)rntvlF_5)_2ZSeClC!c5mYKuWF@v;Pu}? zE2pOc9Z^utY1m@IG-?}5)c{})VTLUDw(ua|pf%npZR3RtNw?Tz2aevNa&Hmk{+cOU z!6W-6$*h-*&e!cgCJpGJsz^r`JO&=#Jg#FD;8Pmb;><8Uqj%GBb3Y)l_LIP0#Q+(} zY-8_G#vnUPeqVSB_GFsc)(}ruzbACZVBLp=H?<{qJoK*+X1bTGI@#Gf^fnOAg-1qO zLtuF~bz5C7b$LyRL7%Lrx(Hp<8}4>v3=HbSAeO2_-~SmUkagy~JBP-&wF@li$6HtmebGS09FAq z3S396<*}|aoK^h5%9WEcT$S(yeSCg;_vVbC`%xzB0{GWqC{^9&P=|Uq@W1zSYr6?4 zy3gP5ews>@pgo5%C>KO^t&NX4Lqu0_%ip|vSaXv?wt?vAgH@C*U{HZ?X%P|;`7Ap& z*SteU{z$euSwL*xcbA`+pYM)`+C(nC!XuqV1Vsb!FFtdD-stV%vJ$+nMqe9+$|^G% zd@B5eZ;9^~%(>nlz}Q@o9_O^qVR};tG#wf$I^utX+a+ev9dN@x)vkd9TMK%@PW~Ow zK$S|!PU6pJg!biejRq8X2V0=u*}c#oWXZ+{o3jvc_Ip&LATWvxH1Fo}H(lM4IgAbZ>-lEo-Yxf4rl(^)g8x82juhs)?Xc2A~Gqbio3ah?q4{vUkc{odHEcy-Tgpp2sn?N%5|KV`i z$J%;2WUgk~h4~2xAMPNPKXd6Ke7Vo1nbKTCxU&?Z5;llagX6sSZ})at&E+NdB0m(p zhU&LgfY1wwm~z}{RE zVo|uD8Ifp11e0+#XH6JxvaHSY-Q*f2ZB2l9oI~@Il*JzPKSFL_J-ly>dW$n-Vj3E2 zE$aAR)98evkAlWAR=g!hyW+SMQpaC+=O6?s_XC10A zlnW7W=V4wx81<+s!wV6Wg6%V^pf(QTATt}X`)*^L&Tr+yYQZ!W;iSdA1yxN5p!2xv z%fpV-pwuc!m9Us?bHaN)Z(%s!yBd;o6Vvqm#{8fxQ259esUE|*6VdP^;p~NA)l4hK z-V{a7a@E&7QE8$zMSlWT-|T>q#CgH|KOA#6bD?TFdy-TyWVq-9wmD*XmzA3@^>JokhjA|$Ok z7EW%!G^M)yN5DI`Q6}}}f%@nvDt?Dsw?9%60>dP9Wsl-!Hy}(Uj^0Mi{mZeHch^Bv zexDHW=*whEnmQbq(lr^|+x3!+0TWQ9NhBa<&Qfrsf0Ma31c+AocORIHXa@LW5a*9f zB-7gC1$z*<#)7Jmi0FztdYCnDUAtc+%E080-}94x34_0m+2c_UK!Mt$K@?(Fs6WPN z{B#oDfO4^Xa~kh@Xb~k^GsdRI5ex^8r&-St;JJkk2ih3FGJ)nZ@qn0<;bA=;7^3A} zNQt-pw}lgErj@gI`dd%+zE_iL6ZH*Wg_IH}%ja&YqY*VXMQBPDU>&jtKYGkKs=7Bm# zML!wK%F@b{q-?C(Ktw`)sF!TvuQFO%5mQb&zpT$(^UH91rF$!Y+TEV(agh7BGeF=n zqmuJZk!EN1*5@|UIebM_%8=(%kef*B3{6;;Lq`K+h8!IV=`~HeL2U*{<0riXZ>VR` z1q+GX8Ss^U!Z|UNa%2A6Y=Yi36gE2aIkHajy7rHVUQQ=%V(>L|gGb_(0hyi@Y+@qY7rZP=mLvC(-K5Ntu; zw|x@v7C*0jj1Ds1BLPbh`@lvY@j~d8b~Ba^WjDZ2*e}!h0=}i?cPkhc@1AecRvCu> zBzHjrC_4!V268(v<@1$|>o&1Bui4N@HEacIDiEN!sI!rrG$g z=P2jM_Vq9vKqqR-Y7%L)zl(B>2)?5I-}{NCZ~ohOgo1);ln9UUxT8F@Fc#uXlJ&0p z*GLmhat`|oScztKElcOqgn>uW!P--aUJ(GyELDRhar$EJI+T6QDdV7P#oO8Qh0y}8 z_w1Qt0tSh}cc{oZ6^KBKLPIg8hu`3kAv>P+V%A)e2t7yW!J!h3L^9}n-IxIuYf9k7 zy}MuE!tJ{M&TV{ro{Q)5DDG%bpeD+J|9f^5i_O(O@({Aw)7m|v~GcJ)Ikt;lpaN>74S=I(?&ea=)!NfUtoN|uq~ zQq%0&nVNdP`FOUVV7w;~_-oCtf}^w0br#qnCoLp&qBG5Im69c(@29NI`!a?D;qio$ z{BY?F4Bela$oOpi2geKkYV%g*fWdg_Pp3}s5mwz6yY^CB=qa6=u+)uCRbR$xB|Bwf+*18U zOogNNx@h3}utrHF{I-U)SWA~r8|Zop(86N({**Ki*y;ye-U(0+Rhh2Uh`lFZOWWov zF3=gnjrHEA8G4k4;ne&>%9oNVcSG$)uRZYG8>UlgVs69>h<#Q+X%DKsfmlRPtpDYVu`vZmwAFs(*@}8e0Z__H z^Y3?@`^+HvX2jWw5edyE%HOT5nB%*!>v|p?>PKbD{$j2{+F+jwhQx7p*WI$y63iZ+ zYFoa|#vLErD$tjaULi=d4jh|l*ILI%a(Fnnukt#wl7xtFYD?WbhGB z?2-b77WacK(Ivk8OOoB7l-vU4hB=R>>X3bb?&J+RR6#& zJD2;rLo!b9wHU8QJJ}!q+HyC7b1jgNkff5*g#a-V;c9^vPvv>@g%9cbuy8$1Pr9_n4nE zw#T9ykT$|zTacEnYN)b{q5kb;@EP94*i3h849++u_Sn;{r0(t{vX?&bg8OzYT*SiI zsMy(_va=!RXtDHup|S*tSaPR?)j)~Mh#t6&c4VBTnh{XBy;|icXh=O7mxOGBxhH2e z8CUTzYR{n}QdPb58vkFpIGBf_+1~ovg`$WZShYZ+-cl`(?dQMgD&2YQb1oO`41orek8~rvi*~7^$AYXS_wV4dL zl7NH7Q1S@phOyYy1VZZh=;!8^7MSm8X_4vaguj0MiY6u!wzj6FQg}wq3BLx+O)v0W zo-!WaZEGJw3-jRf*0zV7Hb*fGeUJnPPhCTCr+OIrnxG$3?Z4;sgI~9oNj`L^3pa02 zEq=h@ef%2oMrmW)<@T?Rx-5d0zh0Y;BeF#M1m&B?$Z#rIU+oLVcGMHQZ#xQ3t=@m* zY~B7gUa-`&6SW!c3BdZxwBYXhxPxvxo(L4B)DB_@ zk~Wq$ipUp@0E=C$dz>hsq=QVI4NoQld|2vzff|ft8La7Vlz09hPtEA6M61#lT1ZSp z1hW-_E&%PxU*Hc<93~eu4D3yb{*<0!Exd>c1ToMISGwR|doaI@(Y35|i4PUX2?4fc zsQP{W{IK4^m-4w*U@zAQ$w+{c4k;U3(j$Z4+fOgX1UikPw8rUaY0}UAUw2;iCrPhP zeQ-e?-fLoU&mH@|R!GII*pr2JbPrnfzZ@{JU(F3r{?XYzZe3H!>A!EJvd*pt%Jhf; z$X$a(d1@0I;_6bDuOY~E%)Ai%+2l6 z4Ga%|925IFiWz)-pT&!lVIJL@X%?GN)@#bt2&;7UZ>pc5tV~X4Z_VOa5TB?RS4I~ z3&CyYYZ4rC33+lv+{f)|8aI$tRZWcj$0P#>_lbxOSNT9QwP&EuP|-+(=AQu1K&jQ! zyLaz^ktc{;C8F9gOnwFi4-1Prm1T>OW_X~MI)sdRB6x&lVYt#DShI}PVk8esn)X*p z37VM3MGfqOS=FXy8~TG@%r zxlkF(NXW{b4S90biX*^{;nl$7X|OTcNsq(dcNAOLJ#^H=bT4M%OF!jeIPpcF-HAx! zWDAmg{Igb+bdI)WJfjNS*9>yJU02BtQfUzGS-=Ne|!kWtgf>~%;P7+^K#6#Gj#&A$tYV5_0yFzWwxk{bqra4V!lg;b#r zLrWhQ8scC+hkj2WyR|)Axr*9^yw}MUDO10)UdsY><&KiifKg3F3sr=>QG-4VTc>f~ z+WT|p;zY;Qtm50i)i~QvJF{V4`YQL`psT3(7ZMw?8RREp!=%H@ugxY6@P_RQT0~7e z*Zq0rrMYa5PqO5|iJG;~qgj=4+?I>kvyqwcJH_MaK%-sBeZt3LXm?{`!5zKM;evl?`1>fYEZy zw4Z}{8f+!~c74a*T5s2{;)yy6jBck*L#&08#jxNBEy&V#s&dr~-O=?DxQ8PihJr-N zu^S;hIP(gD5rt@IW()sXtD?s}yDDCoI8{A>FUE)QLT>)3_>TPvLm+s!HHBcw{3AzgtcvYUY)I1Qxd~BVc$6PE&wQY3 z=oXGsdpu=;)ZT-1rWJ)MyuD(VHNEXL|YWR^};1?YrEqj83z`VVHpx$hQzim#;HM zAl80oV$IF)NA(XAin+TDRk}igyt%`q))5}=Z>2g)PwpV6B4UU!<0JxmZB0%JiF^au z*6)Z`;AYucUqF?r&$fe4d$1!fqz6Y7-mVJ^)vSVJ<=Hv87tjF^Ujuv>Q&U02^!KJG zmW{xD_$A^VSGHr;;7g^6=3jI@y0{*g-qWMFWEf58m?`bkm`B`etW0X2%>%pIrTI7>DycC>nqB4g0PM@~%YOJwo4wLYu zocz4X6x$9T%snY}pJGK9-i%p3k*ncJ?OSA}T}-W7L6`ZJ)9K`;MfacmZMJ+x=#p%C z^<&c%_OC`Mps{OsfoWZXz+bLM-j{PG5;dO@wC+7Fo!TX{bP+We1K*!mphK69!n(3X zIgv<9xHf%vddc>Gb#xs-O*~(is7P<3lpi3yNmEdY2q=W!l-{LCQ+h86AWeD^0Vz@p zML>G*-9REBAUy;E1dKrFUC96V-^|V3?A+Vg{odQR`@Y$CJF%9z;pL}FX*`bu@HYBR z+PGbFoR&P)>5+0`zxQFFM=i-1vm}&;J@81Mx`Y zagzo^Wqe%R3V`Ua`>q_o5$8Sixh248)a3i#)%3Dylh*grnu7c zSB2iD?LYpueJ_MISuAma?4nQxmB2ZmM_Nle&0-2q-(nC_bz`OZ(53HW`KdCKcd2S0 zk^|c%5Bj%c#x|tbAqSOW5RD=_tann%Y^uB-r$Log70pmM5aRxI99PL|mRVi?JDMK( ztmc4&SLD7wLiw~gjjW^jEej)gTw?M)trhus)b*K|&4dJnk*pZfT z$n3?y+Qa5=vODwo0;xHQ0MCB%3zMNcYT~uO5!}#k*VYw#z;on%|MytDH2$coih$iI z1_scNKE(K&qgHK@4Lgw!lkfW!VRK1_yFy&9($!I#HpP?K^js8OA5-Aze)}arpi~;; z;rF&nT*n_1S7#CI9?WX7XxiyR_UoaovreQvUC<%_F~L;Jo@OaEDu?`rOUw$0KcwBF zTs?qT(ISepg1w5nge;P%g1rlNoSL(#6!@D<_;j=SQbYyv;yB#=gt8ZCjuX4_DV$e% z&O(9S*=uLUg6X{3c}eHf)%j(TgIL{@!s7^#atvtxwTORtGaq#l60e}cqjwRoE|IM;DUMbM5Q}JUO+(Ye7Eco>(vp*^Ymu=*POEgu$)FR68t?MXAesVex(x)*6O-k87576;?$9`}Pti`>w7I^K5Ew7LC;+-hC0i=>l%}wB2ct&=vS+kep0{>40EPR!k zagY>nEpG-SAH119P4A)uWB@75_$?FIU`oy3wA+EiNzp1w*9>F4_3Bsb#APAg#iGH2 z-X_r@0-yy&;=Jb^M;32UQNgZdly_$zo{8LBWNpuBOTQSImW@MxT~{G}Ah6^v zqv)VwQ_R(I)J>bf_FWr(fn9^**qgx|fU6K8yt`M=AsoEXfdq zj2sfMl$~Z)o6A%IZ^>pWpu)0~)_QkGs{n73G5KyoI?UfKQVgL9%r1>-y(n6)RM`EO zq)Tg?vx|aG{GPD{eO73rx>hVb#vz)oM?3fMl*xI$!IQE%W$1!C`)7jU`I2m`E;`gW zPR#3Nq|`Z>ij0Ft3^Z~+5f8PO30VXbsm#PxRQ}c``0?4icAp@VEyq-GKk31VjgD? zPdcF**z0 zeBg(L>&>)Br&FbOr}O+;qSz3fCem=&LJgYL@`+2V8N(clUb{B<&7>D}`#PF~$wyz{ z->4J|pxyCh7Pcz{9>Hz{y4it&$*^3icwBgfwF2p$@1g?ZSfG??s}22(Raa&@O9(MX zAi`Stvz(VD?i}A4HWaz@%X|z_TPu@ygd7RJr+vH`4CBkLB&s&K#|`?Keg7qnTh#b_ zTxxmt^l#7Fw4y@jhkA$YZjdSD!!a9mPj(~0p!(Xa2Qp zVy=?y^JJ(>&e*Uk&(zuwMTy-LQY$vmH+d{mT^gAZ)*8MSz|<;`bN!|_Vt1cIjJQjj4Ycd;F5j!LCG4dV2T*Dt(;4zX}X`(&Hmt=aoa%jG}tC_seq)xcM z_tl9UQ7!?Rynps9Z&mu-clphsLl8+4=FLCmtzc;(q)NWp!2SxI_(b)@U@@CHfrV3U zSMA$ycjmjZxru!$vRmiDbWpC;z%j~d;{;@Bvl^$o{{x0w1&%KQ<{P34Ry!R7 zZ3DiJlDh*4HIt**y8y^o_vCOnWxm(lFhik_rIfd=6=Nib1&Mv~t&?4UQYCG)i36s> zX(@YK9eb<5e{N$7_f@M?!D&yEUM@un}v+2v#M-67OH z<~#qC=rEj?5d}gW-RGC%qdwT!VH)@GLLuT)zoTTBz8-R+etBfroKnJ`3JN5V1I}W3 zC+gj}r^Q*CorHt>vn|YUtriM55aP$RdchkovI*&UU>DSBN@=zPz|hyg&=lhP%*&mv;X@od_jNHxh({pR`8 zDH)aDx{la|Sh2MU)$}8BVC3D~#IQQz)@Lop7^A&d`f9uspYe_apL_Gok&so$r{ZaR z`EhA_dC(9cD=YtL;1`Ls41JNbXK;}LA@Pw4!=h~w*`H5QU}v=%juqW6_P|M7K7KyGkzvG2ZMQM23zi~nVk6m4RNV6- zf|HW2E+o=2EQLhy&VOA3{(ask!o2qfKKgPIu9Q7!Xl4IfJ&fegcY;kOk9TC7zzS=E zD2Mw#y8N#IcJ!tB1Jl+lC!}fRCeEEg{*BhAll>ODMd8$|U$BiTAn)7Ahro?(nYL>y zUzDZ3^pGx?2p_x^?sfjfB z&4GFGtms=`(}@T8vIaYNS8KSh*{E(eUt;)YN{a~R`y4dd#pF`(=6RRlhHsMjZaDs; z?!P6t!KyL|s@28RM-FO+gC-?p%C3PKgzM~pGdO%57s_>c^kY2qLIh7TshVq@qe?A> z&|e;TaTv>Ru?8mqK^ITkk$+~UF@agSO>|ua;BSK$&Z7S_4>09_I)Sp#_ z@c36&KagMkPh%eycqTPfSs`op!_RnKDwm;C=)Bl_L;v&|*etzBDVM9FxwxwAr@=jd zIpC-XOG0|#zVEIV?6TLM;4LDe$E813Dtn1~hA#WA+tWB^z(HvPXa6dufNV_p+f;KgQU7u~T&g){n$>0}EIqrLqlx05%PCeQaSzhXa@ zeNR40&59#6j&1=d9S0)CF2sJI1nSwY)|N={&kdBBxVzE|8T5}@v_|^_13LJDM3W;VA0Kku@e-Eo)C%X( zJby-)uT3z7xmiEjo={Zd!wQ9}=nwsIx;IG~8XmduQa|RZS1hLVAXTkcDmTFJ?`EHh zQSE84807ec7z4qsnD?p5j}niHZQB`0kXtfIUZ-icf7n2Uh7p^tcQypX@UWhICdd6h zDnq#a-21mZm-MjNE<&Wmz-QLra7M9Gt)+@C|MaT5*kTgVo|9%^l=_`wK<9>KGQcuEM zebe#3Y=fAw60D~$(LNv88=0cjtIG~me7Kyx^Ks|n9~Rw0NU4KaU%@=kL=Cqw`wizL zMlp^xO)SaVru283*xNxFYOy7Do2mJArv8oF@Mt8BIaNFH7D73p5`2nylKhQ0haTUF zUs!3iKeusHy%)!^9@ed$v|LLeiD~1agYmt5Z`~8mkx@iJx;J6MT)a4+lC++|iRuBJ z9-j?NH4Ns^?#+qIaK6}Ylw3!J9n~Zmew%i%b=Mzq>NC#z$n4)kHjC+io}x|-O$BG- zK%XNu5}yV+T+WO9Iuh5YW~XO=NRaEaRiX-WDF>wtGlf~8UP`TrFLGQk{yM5VdOYbA z!qiie!Fk2MrPCv9{egblMal`$E8@>4NztgnN*SOn(Kn5amr%XQ1X1YJTA_s5HiwGULQI(2&t z7aYBQLZz=BKJgHlX-d&f|B&Ldr^w@oioOZ^>4?P}>w=^|8f#pboBN+wN82#vSc4=e b`)3E-^P3^ou%9IcM8Ku4tOKr6v=09tcAHUQ diff --git a/icons/obj/aquarium/wide.dmi b/icons/obj/aquarium/wide.dmi index 61dfbe1271830516d020f88e1ac35b1ae57e9605..5334fcf1808c8ffea711eaf4e1450c6c48545ab9 100644 GIT binary patch literal 6715 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 E53O1JsQ>@~ literal 1649 zcmV-%29EiOP)C0001WP)t-sz`($K zin}~Lgj89Lpo2!$wsmo6Ag#{cE+#(Z*ppFAD$eHiJUAYBV^3-pAxRAth$$mlR8GC5 zd#Fq+%Sl0d7e@NipZneT|MuXD7HxYN7)mTAr8pYne-BY!UpYTi#8(qD3MF}km*Qp_ zo2|Fe($~Piz|p`0M*si-0d!JMQvg8b*k%9#0HAtQSad{Xb7OL8aCB*JZU6vyoKseC za&`CgQ*iP1Oy)gplv4pU3K~M5Qk&p*{ z|7tKEr1{~ENg&)?wRc7U`Vk-%48Vo#o>8Q9+{sIQE%dlW5s?0k0ar}=^^JUlF{i%j92&T;2UEz)9s?M0%03Lcp3QZnl0@T`ma~K$AQDd!ak^M|p3#GP z8c_Fz34(!n8KiW*#{l{-6Z9NXI{AWuUvyf=aH1pz<(a<0VzHQtbhS!@f5J(6a6rmI zuwJiM&<`dLmZnS41n?t79br)46oKV8#DC$Kt4PJS3HZpwG)*U=8$b}F5Om_}6>P1< zLIjU)4i`Wd5o9{SLHw;Ey-Z?h3@nil@p&%3_Am)n>vcL^t&ifsYJsMoY z{A^PcoE~ubrURydvaCMA&o*_DHN@YRV>-g+QwK}~;8)ED_%wnhi>qxHz+zZN{Q$qF z7-o6Z`L8$akU);$BT~mB&+1LFYr(1EJ8ulX?&-jp?u_H__vN-b^19s=+h&gzHXGAK zR=mMK(#ui&YPUV1%<6jAG`qUMqichr`JeKUt7u^d;Jhu{w%G3qGGEkn-L?p2&#KDh zQv+2=4d9FhHf>Q53y;z-wu%cu3CY0ATqH+g&F=S_u`q^Nrau`16EjNv%t;ktq0{9EJ|`cbqLx$bT<@Y4mC@0b-dt6Q4BRX+S~!sR=;@rz^{`Jsl(KcdNb zAM3b$3kwSiix0!@57_+yyFc)E?GId(_uEnR{lx~u7(PboSl(~P?GK#jY?+;Ym{ehBM-*fp?Ui0evin~8>Rp5`>A2^ZAQTqco1^$@&{?x!o{x$6W zfZZRku&}VO_$|P#@44XC_gt{+doH;3Js0fyo(pb$&jq)>{{em0{=f*_e19OzhVBnA zar6CwY`@P2)%RT7?hoXTnEhW53s@h v{=iRzUEg!TuJ5_{srsG^Ti;t){Mq;y`{@ls?|f!a00000NkvXXu0mjf=<_lf diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index b1d5a787b202f1f718616c9eefa52bbc9a0cea41..2344d2b8ed9e6d87c0a7cead2e122ee85a09ba16 100644 GIT binary patch literal 25513 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 literal 17843 zcmd74Wl&sE*DiQ)2p%Lj1QJLf!Gb%%65QS0-L(S**AU!2xVw9B3+^tByEBLPyLV>p z%>05s;qE`R_pnv}+EDr!My5NrhG9vhn?{J0^9?)1@A$m?0f1-N+HBHF+um2$MS z9%(e8KI$MoFH9D3#m;#}xNF3aQK*WH#`vY>?9jcDSBczwq~P>v|pz5l#oedXD=Lw2UZ(0_qywRt~m zQ0KPw!^2qHxA?+f=V3eLJY~o1D`SE(Z;EMdE-HJYg*V=(%dMG(j1|`rhqUvy(Zo

4&KrVB1&SxXTE;9S&Xxs<&6CNWQ(ED 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 diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index ad7421dbf6d3add4efa96ad4e7a1abab5b6f86e8..7b6afcc37ffbe29bcd1c01aa1661b85cc39551f3 100644 GIT binary patch literal 76424 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 literal 77882 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

wyFo-3;NuqzWTT~uA0L=P$ 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 KY^}6K`2PTUNpr~n diff --git a/strings/fishing_tips.txt b/strings/fishing_tips.txt index 66e52a2ba88..eda70bb4252 100644 --- a/strings/fishing_tips.txt +++ b/strings/fishing_tips.txt @@ -39,4 +39,6 @@ The sludgefish from the toilets can be used as a steady supply of cheap fish and In a jiffy, you can scoop tadpoles from ponds with your bare hands, place them inside aquariums and quickly raise them into frogs. The legendary fishing hat isn't just cosmetic. Space carps (as well as young lobstrosities and frogs) do truly fear those who wear it. Have you ever heard a lobster or crab talk? Well, neither have I, but they say they're quite the fishy punsters. -You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. \ No newline at end of file +You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. +If you have enough credits, you can buy a set of fishing lures from cargo. Each lure allows you to catch different species of fish and won't get consumed, however they need to be spun at intervals to work. +This may sound silly, but squids and their ink sacs can be used as weapons to temporarily blind people. \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index e2e1a44bf54..f8e32dacc97 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1233,6 +1233,7 @@ #include "code\datums\components\spin2win.dm" #include "code\datums\components\spinny.dm" #include "code\datums\components\spirit_holding.dm" +#include "code\datums\components\splat.dm" #include "code\datums\components\splattercasting.dm" #include "code\datums\components\squashable.dm" #include "code\datums\components\squeak.dm" @@ -4165,7 +4166,16 @@ #include "code\modules\fishing\fish\chasm_detritus.dm" #include "code\modules\fishing\fish\fish_evolution.dm" #include "code\modules\fishing\fish\fish_traits.dm" -#include "code\modules\fishing\fish\fish_types.dm" +#include "code\modules\fishing\fish\types\air_space.dm" +#include "code\modules\fishing\fish\types\anadromous.dm" +#include "code\modules\fishing\fish\types\freshwater.dm" +#include "code\modules\fishing\fish\types\holographic.dm" +#include "code\modules\fishing\fish\types\mining.dm" +#include "code\modules\fishing\fish\types\ruins.dm" +#include "code\modules\fishing\fish\types\saltwater.dm" +#include "code\modules\fishing\fish\types\station.dm" +#include "code\modules\fishing\fish\types\syndicate.dm" +#include "code\modules\fishing\fish\types\tiziran.dm" #include "code\modules\fishing\sources\_fish_source.dm" #include "code\modules\fishing\sources\source_types.dm" #include "code\modules\flufftext\Dreaming.dm"