From ba4fa8fe0760d3b1b39ebee4b2b1ccb4bf526ed2 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2024 00:33:04 +0200 Subject: [PATCH] What you wear and on what chair you sit on can now influence fishing difficulty (#86646) ## About The Pull Request A foreword, I had to refactor a few bits of shitcode my past self added first. For context, the "gone fishing" and "actively fishing" traits only had one source, which is the fishing challenge itself, ad there was no way to access the challenge from outside its code, except for a few weakrefs which were being used as sources for the aforementioned traits (the shitcode in a nutshell). There were also a few signals that I didn't like because they were being sent to the harder-to-access challenge datum rather than the user. So I scrapped the traits for a couple signals to send to the user, then added a global list as a mean to easily access the challenge datum, and lastly changed the code to accomodate the titled feature (and allow the challenge to recalculate its difficulty DURING the minigame phase) Moving on to the actual feature: I've added a component that can be added to objects on which mobs can be buckled to or items. When equipped in the right slots or buckled to, the object will adjust the difficulty of current and future fishing challenges by a certain amount (more often than not positive, but there're many exceptions) as long as the object isn't equipped or the user is unbuckled. I've been having some fun adding component to a ton of clothes in the game as well as chairs. Way too many objects to enumerate, so I'll give you the general idea: - each carp-themed article provides a slight positive modifier (easier) - some (not all) doctor-related garbs provide a marginal positive modifier each (fish doctor jokes) - floortile camo clothes have positive modifiers - Tuxedo, laceups, gowns provide negative modifier (more difficult) - utility garbs such as bio/bomb/rad hoods and suits are quite bad. Riot armor too. - boxing gloves are very, very bad. Insulated gloves and haul gauntlets are also very bad, to a lesser degree. - **tackle** gloves are good. (pun intended) - wizard garbs are good, because wizards are good at casting. (also a pun) - magboots slightly bad. Space suits bad. - Blindfolds and welding protection are also bad. Gas masks marginally bad. - Pirate attire is nice to have. (I just vibed a little on this one) - plastic chairs are quite versatile because they can be carried around, but the mime chair is the best, followed by ratvarian chairs. - Fishing toolboxes, analyzers and the fish catalog are a plus, because they can be held. - And the fishing hat, obviously (not as great as you'd think) Some of these may be subject to change depending on what people say. ## Why It's Good For The Game A hundred lines of fishing challenge code made ever-so-slightly less awful, and a way to modify fishing diffculty beside skills and bait. ## Changelog :cl: add: Your current clothes and what chair you sit on can now influence the difficulty of fishing minigames. Having a bare minimum of fishing skill will let you distinguish which objects can help and which won't, so keep an eye out. Holding fishing toolboxes, fish analyzers or fish catalogs can also help. /:cl: --- code/__DEFINES/dcs/signals/signals_fish.dm | 10 +- code/__DEFINES/traits/declarations.dm | 5 - code/_globalvars/traits/_traits.dm | 2 - .../components/adjust_fishing_difficulty.dm | 111 ++++++++++++++++++ code/datums/components/fishing_spot.dm | 2 +- code/datums/components/profound_fisher.dm | 10 +- code/game/objects/items/storage/belt.dm | 1 + .../objects/structures/beds_chairs/chair.dm | 28 ++++- .../objects/structures/beds_chairs/sofa.dm | 1 + code/modules/clothing/ears/_ears.dm | 1 + code/modules/clothing/glasses/_glasses.dm | 31 ++++- code/modules/clothing/gloves/bone.dm | 4 + code/modules/clothing/gloves/botany.dm | 4 + code/modules/clothing/gloves/boxing.dm | 1 + code/modules/clothing/gloves/color.dm | 1 + code/modules/clothing/gloves/combat.dm | 8 ++ code/modules/clothing/gloves/insulated.dm | 14 +++ code/modules/clothing/gloves/punch_mitts.dm | 2 +- code/modules/clothing/gloves/special.dm | 42 +++++-- code/modules/clothing/gloves/tacklers.dm | 9 ++ code/modules/clothing/head/collectable.dm | 12 ++ code/modules/clothing/head/fedora.dm | 4 + code/modules/clothing/head/hardhat.dm | 4 + code/modules/clothing/head/helmet.dm | 12 ++ code/modules/clothing/head/jobs.dm | 8 ++ code/modules/clothing/head/moth.dm | 1 + code/modules/clothing/head/pirate.dm | 5 +- code/modules/clothing/head/soft_caps.dm | 1 + code/modules/clothing/head/welding.dm | 12 ++ code/modules/clothing/masks/animal_masks.dm | 36 ++++++ code/modules/clothing/masks/boxing.dm | 4 + code/modules/clothing/masks/gasmask.dm | 39 +++++- code/modules/clothing/masks/hailer.dm | 3 + code/modules/clothing/neck/_neck.dm | 4 + code/modules/clothing/shoes/boots.dm | 8 ++ code/modules/clothing/shoes/clown.dm | 1 + code/modules/clothing/shoes/costume.dm | 2 + code/modules/clothing/shoes/galoshes.dm | 7 ++ code/modules/clothing/shoes/laceup.dm | 4 + code/modules/clothing/shoes/magboots.dm | 26 +++- .../clothing/spacesuits/_spacesuits.dm | 12 ++ code/modules/clothing/spacesuits/freedom.dm | 2 + code/modules/clothing/spacesuits/pirate.dm | 2 + code/modules/clothing/spacesuits/plasmamen.dm | 2 + code/modules/clothing/spacesuits/santa.dm | 2 + .../modules/clothing/spacesuits/specialops.dm | 2 + code/modules/clothing/suits/armor.dm | 12 ++ code/modules/clothing/suits/bio.dm | 5 + code/modules/clothing/suits/costume.dm | 28 +++++ code/modules/clothing/suits/ethereal.dm | 12 ++ code/modules/clothing/suits/ghostsheet.dm | 1 + code/modules/clothing/suits/jobs.dm | 8 ++ code/modules/clothing/suits/labcoat.dm | 8 ++ code/modules/clothing/suits/moth.dm | 2 +- code/modules/clothing/suits/utility.dm | 11 ++ code/modules/clothing/suits/wiz_robe.dm | 19 +++ .../clothing/under/jobs/civilian/curator.dm | 4 + code/modules/clothing/under/jobs/medical.dm | 8 ++ code/modules/clothing/under/miscellaneous.dm | 4 + code/modules/clothing/under/skirt_dress.dm | 8 ++ code/modules/clothing/under/suits.dm | 8 ++ code/modules/clothing/under/syndicate.dm | 12 ++ .../modules/fishing/aquarium/fish_analyzer.dm | 2 +- code/modules/fishing/fish_catalog.dm | 4 + code/modules/fishing/fish_movement.dm | 10 ++ code/modules/fishing/fishing_equipment.dm | 4 + code/modules/fishing/fishing_minigame.dm | 74 ++++++++---- code/modules/fishing/fishing_rod.dm | 6 +- code/modules/fishing/sources/_fish_source.dm | 18 +-- code/modules/mod/modules/modules_general.dm | 11 +- strings/fishing_tips.txt | 3 +- tgstation.dme | 1 + 72 files changed, 702 insertions(+), 83 deletions(-) create mode 100644 code/datums/components/adjust_fishing_difficulty.dm diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm index a3dc7ac91b2..45f90e9b9b2 100644 --- a/code/__DEFINES/dcs/signals/signals_fish.dm +++ b/code/__DEFINES/dcs/signals/signals_fish.dm @@ -36,14 +36,20 @@ ///From /obj/item/fish/interact_with_atom_secondary, sent to the target: (fish) #define COMSIG_FISH_RELEASED_INTO "fish_released_into" +///From /datum/fishing_challenge/New: (datum/fishing_challenge/challenge) +#define COMSIG_MOB_BEGIN_FISHING "mob_begin_fishing" +///From /datum/fishing_challenge/start_minigame_phase: (datum/fishing_challenge/challenge) +#define COMSIG_MOB_BEGIN_FISHING_MINIGAME "mob_begin_fishing_minigame" +///From /datum/fishing_challenge/completed: (datum/fishing_challenge/challenge, win) +#define COMSIG_MOB_COMPLETE_FISHING "mob_complete_fishing" + /// Rolling a reward path for a fishing challenge #define COMSIG_FISHING_CHALLENGE_ROLL_REWARD "fishing_roll_reward" /// Adjusting the difficulty of a rishing challenge, often based on the reward path #define COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY "fishing_get_difficulty" /// Fishing challenge completed -#define COMSIG_FISHING_CHALLENGE_COMPLETED "fishing_completed" /// Sent to the fisherman when the reward is dispensed: (reward) -#define COMSIG_FISH_SOURCE_REWARD_DISPENSED "mob_fish_source_reward_dispensed" +#define COMSIG_FISH_SOURCE_REWARD_DISPENSED "fish_source_reward_dispensed" /// Called when you try to use fishing rod on anything #define COMSIG_PRE_FISHING "pre_fishing" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 0df50317268..1fb47c9704f 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1134,11 +1134,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// this object has been frozen #define TRAIT_FROZEN "frozen" -/// Currently fishing -#define TRAIT_GONE_FISHING "fishing" -/// Currently fishing, and it's the active minigame phase -#define TRAIT_ACTIVELY_FISHING "actively_fishing" - /// Makes a character be better/worse at tackling depending on their wing's status #define TRAIT_TACKLING_WINGED_ATTACKER "tacking_winged_attacker" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 506ec8b365b..cacce9b1c68 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -124,7 +124,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, "TRAIT_ACT_AS_CULTIST" = TRAIT_ACT_AS_CULTIST, "TRAIT_ACT_AS_HERETIC" = TRAIT_ACT_AS_HERETIC, - "TRAIT_ACTIVELY_FISHING" = TRAIT_ACTIVELY_FISHING, "TRAIT_ADAMANTINE_EXTRACT_ARMOR" = TRAIT_ADAMANTINE_EXTRACT_ARMOR, "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, "TRAIT_AGENDER" = TRAIT_AGENDER, @@ -260,7 +259,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GENELESS" = TRAIT_GENELESS, "TRAIT_GIANT" = TRAIT_GIANT, "TRAIT_GODMODE" = TRAIT_GODMODE, - "TRAIT_GONE_FISHING" = TRAIT_GONE_FISHING, "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, diff --git a/code/datums/components/adjust_fishing_difficulty.dm b/code/datums/components/adjust_fishing_difficulty.dm new file mode 100644 index 00000000000..abb7c768653 --- /dev/null +++ b/code/datums/components/adjust_fishing_difficulty.dm @@ -0,0 +1,111 @@ +///Influences the difficulty of the minigame when worn or if buckled to. +/datum/component/adjust_fishing_difficulty + ///The additive numerical modifier to the difficulty of the minigame + var/modifier + ///For items, in which slot it has to be worn to influence the difficulty of the minigame + var/slots + +/datum/component/adjust_fishing_difficulty/Initialize(modifier, slots = NONE) + if(!ismovable(parent) || !modifier) + return COMPONENT_INCOMPATIBLE + + if(!isitem(parent)) + var/atom/movable/movable_parent = parent + if(!movable_parent.can_buckle) + return COMPONENT_INCOMPATIBLE + + src.modifier = modifier + src.slots = slots + +/datum/component/adjust_fishing_difficulty/RegisterWithParent() + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_item_examine)) + else + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, PROC_REF(on_buckle)) + RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, PROC_REF(on_unbuckle)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_buckle_examine)) + + update_check() + +/datum/component/adjust_fishing_difficulty/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_ATOM_EXAMINE, + COMSIG_MOVABLE_BUCKLE, + COMSIG_MOVABLE_UNBUCKLE, + COMSIG_ITEM_EQUIPPED, + COMSIG_ITEM_DROPPED, + )) + + update_check(TRUE) + +/datum/component/adjust_fishing_difficulty/proc/update_check(removing = FALSE) + var/atom/movable/movable_parent = parent + for(var/mob/living/buckled_mob as anything in movable_parent.buckled_mobs) + update_user(buckled_mob, removing) + if(!isitem(movable_parent) || !isliving(movable_parent.loc)) + return + var/mob/living/holder = movable_parent.loc + var/obj/item/item = parent + if(holder.get_slot_by_item(movable_parent) & (slots || item.slot_flags)) + update_user(holder, removing) + +/datum/component/adjust_fishing_difficulty/proc/on_item_examine(obj/item/item, mob/user, list/examine_text) + SIGNAL_HANDLER + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) + return + var/method = "[(slots || item.slot_flags) & ITEM_SLOT_HANDS ? "Holding" : "Wearing"] [item.p_them()]" + add_examine_line(user, examine_text, method) + +/datum/component/adjust_fishing_difficulty/proc/on_buckle_examine(atom/movable/source, mob/user, list/examine_text) + SIGNAL_HANDLER + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) + return + var/percent = HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH) ? "[modifier]% " : "" + add_examine_line(user, examine_text, "Buckling to [source.p_them()]") + +/datum/component/adjust_fishing_difficulty/proc/add_examine_line(mob/user, list/examine_text, method) + var/percent = HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH) ? "[modifier]% " : "" + var/text = "[method] will make fishing [percent][modifier > 0 ? "easier" : "harder"]." + if(modifier > 0) + examine_text += span_nicegreen(text) + else + examine_text += span_danger(text) + +/datum/component/adjust_fishing_difficulty/proc/on_buckle(atom/movable/source, mob/living/buckled_mob, forced) + SIGNAL_HANDLER + update_user(buckled_mob) + +/datum/component/adjust_fishing_difficulty/proc/on_unbuckle(atom/movable/source, mob/living/buckled_mob, forced) + SIGNAL_HANDLER + update_user(buckled_mob, TRUE) + +/datum/component/adjust_fishing_difficulty/proc/on_equipped(obj/item/source, mob/living/wearer, slot) + SIGNAL_HANDLER + if(slot & (slots || source.slot_flags)) + update_user(wearer) + +/datum/component/adjust_fishing_difficulty/proc/on_dropped(obj/item/source, mob/living/dropper) + SIGNAL_HANDLER + update_user(dropper, TRUE) + +/datum/component/adjust_fishing_difficulty/proc/update_user(mob/living/user, removing = FALSE) + var/datum/fishing_challenge/challenge = GLOB.fishing_challenges_by_user[user] + if(removing) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING) + if(challenge) + UnregisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY) + else + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING, PROC_REF(on_minigame_started)) + if(challenge) + RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, PROC_REF(adjust_difficulty)) + challenge?.update_difficulty() + +/datum/component/adjust_fishing_difficulty/proc/on_minigame_started(mob/living/source, datum/fishing_challenge/challenge) + SIGNAL_HANDLER + RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, PROC_REF(adjust_difficulty), TRUE) + +/datum/component/adjust_fishing_difficulty/proc/adjust_difficulty(datum/fishing_challenge/challenge, reward_path, obj/item/fishing_rod/rod, mob/living/user, list/holder) + SIGNAL_HANDLER + holder[1] += modifier diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index 659eaff8550..5f0fd143444 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -63,7 +63,7 @@ var/obj/item/fishing_rod/rod = possibly_rod if(!istype(rod)) return - if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.fishing_line) + if(GLOB.fishing_challenges_by_user[user] || rod.fishing_line) user.balloon_alert(user, "already fishing") return COMPONENT_NO_AFTERATTACK var/denial_reason = fish_source.reason_we_cant_fish(rod, user, parent) diff --git a/code/datums/components/profound_fisher.dm b/code/datums/components/profound_fisher.dm index 6f656cd2542..61f6543bd12 100644 --- a/code/datums/components/profound_fisher.dm +++ b/code/datums/components/profound_fisher.dm @@ -84,26 +84,26 @@ return COMPONENT_HOSTILE_NO_ATTACK /datum/component/profound_fisher/proc/should_fish_on(mob/living/user, atom/target) - if(!HAS_TRAIT(target, TRAIT_FISHING_SPOT) || HAS_TRAIT(user, TRAIT_GONE_FISHING)) + if(!HAS_TRAIT(target, TRAIT_FISHING_SPOT) || GLOB.fishing_challenges_by_user[user]) return FALSE if(user.combat_mode || !user.CanReach(target)) return FALSE return TRUE /datum/component/profound_fisher/proc/begin_fishing(mob/living/user, atom/target) - RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_GONE_FISHING), PROC_REF(actually_fishing_with_internal_rod)) + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING, PROC_REF(actually_fishing_with_internal_rod)) our_rod.melee_attack_chain(user, target) - UnregisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_GONE_FISHING)) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING) /datum/component/profound_fisher/proc/actually_fishing_with_internal_rod(datum/source) SIGNAL_HANDLER ADD_TRAIT(source, TRAIT_PROFOUND_FISHER, REF(parent)) - RegisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_GONE_FISHING), PROC_REF(remove_profound_fisher)) + RegisterSignal(source, COMSIG_MOB_COMPLETE_FISHING, PROC_REF(remove_profound_fisher)) /datum/component/profound_fisher/proc/remove_profound_fisher(datum/source) SIGNAL_HANDLER REMOVE_TRAIT(source, TRAIT_PROFOUND_FISHER, TRAIT_GENERIC) - UnregisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_GONE_FISHING)) + UnregisterSignal(source, COMSIG_MOB_COMPLETE_FISHING) /datum/component/profound_fisher/proc/pretend_fish(mob/living/source, atom/target) if(DOING_INTERACTION_WITH_TARGET(source, target)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 5386718d947..40d35a334d0 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -515,6 +515,7 @@ . = ..() atom_storage.max_slots = 1 atom_storage.set_holdable(/obj/item/clothing/mask/luchador) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) /obj/item/storage/belt/military name = "chest rig" diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index e1581422d05..73020ba93bb 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -16,7 +16,17 @@ var/buildstacktype = /obj/item/stack/sheet/iron var/buildstackamount = 1 var/item_chair = /obj/item/chair // if null it can't be picked up + ///How much sitting on this chair influences fishing difficulty + var/fishing_modifier = -3 +/obj/structure/chair/Initialize(mapload) + . = ..() + if(prob(0.2)) + name = "tactical [name]" + fishing_modifier -= 4 + MakeRotate() + if(can_buckle && fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/structure/chair/examine(mob/user) . = ..() @@ -24,12 +34,6 @@ if(!has_buckled_mobs() && can_buckle) . += span_notice("While standing on [src], drag and drop your sprite onto [src] to buckle to it.") -/obj/structure/chair/Initialize(mapload) - . = ..() - if(prob(0.2)) - name = "tactical [name]" - MakeRotate() - ///This proc adds the rotate component, overwrite this if you for some reason want to change some specific args. /obj/structure/chair/proc/MakeRotate() AddComponent(/datum/component/simple_rotation, ROTATION_IGNORE_ANCHORED|ROTATION_GHOSTS_ALLOWED) @@ -134,6 +138,7 @@ buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 3 item_chair = /obj/item/chair/wood + fishing_modifier = -4 /obj/structure/chair/wood/narsie_act() return @@ -151,6 +156,7 @@ max_integrity = 70 buildstackamount = 2 item_chair = null + fishing_modifier = -5 // The mutable appearance used for the overlay over buckled mobs. var/mutable_appearance/armrest @@ -226,11 +232,13 @@ desc = "A luxurious chair, the many purple scales reflect the light in a most pleasing manner." icon_state = "carp_chair" buildstacktype = /obj/item/stack/sheet/animalhide/carp + fishing_modifier = -10 /obj/structure/chair/office anchored = FALSE buildstackamount = 5 item_chair = null + fishing_modifier = -4 icon_state = "officechair_dark" /obj/structure/chair/office/Initialize(mapload) @@ -245,6 +253,10 @@ /obj/structure/chair/office/tactical name = "tactical swivel chair" +/obj/structure/chair/office/tactical/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -10) + /obj/structure/chair/office/light icon_state = "officechair_white" @@ -436,6 +448,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) desc = "You sit in this. Either by will or force. Looks REALLY uncomfortable." icon_state = "chairold" item_chair = null + fishing_modifier = 4 /obj/structure/chair/bronze name = "brass chair" @@ -445,6 +458,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/bronze buildstackamount = 1 item_chair = null + fishing_modifier = -12 //the pinnacle of Ratvarian technology. /// Total rotations made var/turns = 0 @@ -484,6 +498,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) item_chair = null obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION alpha = 0 + fishing_modifier = -20 //it only lives for 25 seconds, so we make them worth it. /obj/structure/chair/mime/wrench_act_secondary(mob/living/user, obj/item/weapon) return NONE @@ -505,6 +520,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/plastic buildstackamount = 2 item_chair = /obj/item/chair/plastic + fishing_modifier = -8 /obj/structure/chair/plastic/post_buckle_mob(mob/living/Mob) Mob.pixel_y += 2 diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm index bf9a221929b..04bb0b1e25e 100644 --- a/code/game/objects/structures/beds_chairs/sofa.dm +++ b/code/game/objects/structures/beds_chairs/sofa.dm @@ -19,6 +19,7 @@ path/corner/color_name {\ icon = 'icons/obj/chairs_wide.dmi' buildstackamount = 1 item_chair = null + fishing_modifier = -4 var/mutable_appearance/armrest /obj/structure/chair/sofa/Initialize(mapload) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 5ae5b628808..bdc294f5366 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -26,3 +26,4 @@ . = ..() AddElement(/datum/element/earhealing) AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + AddComponent(/datum/component/adjust_fishing_difficulty, -1) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 4ed35997680..3bb50a5e6b1 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -344,6 +344,7 @@ /obj/item/clothing/glasses/sunglasses/Initialize(mapload) . = ..() add_glasses_slapcraft_component() + AddComponent(/datum/component/adjust_fishing_difficulty, -1) /obj/item/clothing/glasses/sunglasses/proc/add_glasses_slapcraft_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsunsec, /datum/crafting_recipe/hudsunmed, /datum/crafting_recipe/hudsundiag, /datum/crafting_recipe/scienceglasses) @@ -444,9 +445,21 @@ visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT glass_colour_type = /datum/client_colour/glass_colour/gray -/obj/item/clothing/glasses/welding/attack_self(mob/user) +/obj/item/clothing/glasses/welding/Initialize(mapload) + . = ..() + if(!up) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + +/obj/item/clothing/glasses/welding/attack_self(mob/living/user) adjust_visor(user) +/obj/item/clothing/glasses/welding/adjust_visor(mob/user) + . = ..() + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/glasses/welding/update_icon_state() . = ..() icon_state = "[initial(icon_state)][up ? "up" : ""]" @@ -465,6 +478,10 @@ tint = INFINITY // You WILL Be blind, no matter what dog_fashion = /datum/dog_fashion/head +/obj/item/clothing/glasses/blindfold/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/glasses/trickblindfold name = "blindfold" desc = "A see-through blindfold perfect for cheating at games like pin the stun baton on the clown." @@ -502,6 +519,10 @@ flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red +/obj/item/clothing/glasses/thermal/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/glasses/thermal/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) @@ -614,6 +635,10 @@ var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC, DATA_HUD_SECURITY_ADVANCED, DATA_HUD_BOT_PATH) var/xray = FALSE +/obj/item/clothing/glasses/debug/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -15) + /obj/item/clothing/glasses/debug/equipped(mob/user, slot) . = ..() if(!(slot & ITEM_SLOT_EYES)) @@ -700,6 +725,10 @@ /// Hallucination datum currently being used for seeing mares var/datum/hallucination/stored_hallucination +/obj/item/clothing/glasses/nightmare_vision/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 13) + /obj/item/clothing/glasses/nightmare_vision/Destroy() QDEL_NULL(stored_hallucination) return ..() diff --git a/code/modules/clothing/gloves/bone.dm b/code/modules/clothing/gloves/bone.dm index 2c75e642ff6..761057054f9 100644 --- a/code/modules/clothing/gloves/bone.dm +++ b/code/modules/clothing/gloves/bone.dm @@ -12,6 +12,10 @@ resistance_flags = NONE armor_type = /datum/armor/gloves_bracer +/obj/item/clothing/gloves/bracer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /datum/armor/gloves_bracer melee = 15 bullet = 25 diff --git a/code/modules/clothing/gloves/botany.dm b/code/modules/clothing/gloves/botany.dm index af94a6b7bb1..144477240b2 100644 --- a/code/modules/clothing/gloves/botany.dm +++ b/code/modules/clothing/gloves/botany.dm @@ -12,6 +12,10 @@ clothing_traits = list(TRAIT_PLANT_SAFE) armor_type = /datum/armor/gloves_botanic_leather +/obj/item/clothing/gloves/botanic_leather/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /datum/armor/gloves_botanic_leather bio = 50 fire = 70 diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 021d895f69c..ab6e03ae493 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -19,6 +19,7 @@ ) AddComponent(/datum/component/martial_art_giver, style_to_give) + AddComponent(/datum/component/adjust_fishing_difficulty, 19) /obj/item/clothing/gloves/boxing/evil name = "evil boxing gloves" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 82b1eb8f379..048d575f5f0 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -44,6 +44,7 @@ /obj/item/clothing/gloves/color/fingerless/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/gripperoffbrand) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) AddElement( /datum/element/slapcrafting,\ diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm index efc5bd40b05..a2574c8d23e 100644 --- a/code/modules/clothing/gloves/combat.dm +++ b/code/modules/clothing/gloves/combat.dm @@ -25,8 +25,16 @@ greyscale_colors = null inhand_icon_state = null +/obj/item/clothing/gloves/combat/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //something something wizard casting + /obj/item/clothing/gloves/combat/floortile name = "floortile camouflage gloves" desc = "Is it just me or is there a pair of gloves on the floor?" icon_state = "ftc_gloves" inhand_icon_state = "greyscale_gloves" + +/obj/item/clothing/gloves/combat/floortiletile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm index 19109d68b9c..b04637d4c52 100644 --- a/code/modules/clothing/gloves/insulated.dm +++ b/code/modules/clothing/gloves/insulated.dm @@ -15,13 +15,19 @@ cut_type = /obj/item/clothing/gloves/cut clothing_traits = list(TRAIT_CHUNKYFINGERS) +/obj/item/clothing/gloves/color/yellow/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 10) + /obj/item/clothing/gloves/color/yellow/apply_fantasy_bonuses(bonus) . = ..() if(bonus >= 10) detach_clothing_traits(TRAIT_CHUNKYFINGERS) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) /obj/item/clothing/gloves/color/yellow/remove_fantasy_bonuses(bonus) attach_clothing_traits(TRAIT_CHUNKYFINGERS) + AddComponent(/datum/component/adjust_fishing_difficulty, 10) return ..() /datum/armor/color_yellow @@ -116,6 +122,10 @@ greyscale_colors = null clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) +/obj/item/clothing/gloves/cut/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/gloves/cut/heirloom desc = "The old gloves your great grandfather stole from Engineering, many moons ago. They've seen some tough times recently." @@ -131,3 +141,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE + +/obj/item/clothing/gloves/chief_engineer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) diff --git a/code/modules/clothing/gloves/punch_mitts.dm b/code/modules/clothing/gloves/punch_mitts.dm index 07d93d5ab02..96848731a9c 100644 --- a/code/modules/clothing/gloves/punch_mitts.dm +++ b/code/modules/clothing/gloves/punch_mitts.dm @@ -11,7 +11,7 @@ /obj/item/clothing/gloves/fingerless/punch_mitts/Initialize(mapload) . = ..() - + AddComponent(/datum/component/adjust_fishing_difficulty, -4) AddComponent(/datum/component/martial_art_giver, /datum/martial_art/boxing/hunter) /datum/armor/gloves_mitts diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm index b5c16ba4dc5..3e18a4ed2ad 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -14,6 +14,7 @@ . = ..() RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(on_glove_equip)) RegisterSignal(src, COMSIG_ITEM_POST_UNEQUIP, PROC_REF(on_glove_unequip)) + AddComponent(/datum/component/adjust_fishing_difficulty, 19) /// Called when the glove is equipped. Adds a component to the equipper and stores a weak reference to it. /obj/item/clothing/gloves/cargo_gauntlet/proc/on_glove_equip(datum/source, mob/equipper, slot) @@ -59,6 +60,7 @@ /obj/item/clothing/gloves/rapid/Initialize(mapload) . = ..() AddComponent(/datum/component/wearertargeting/punchcooldown) + AddComponent(/datum/component/adjust_fishing_difficulty, -7) /obj/item/clothing/gloves/radio name = "translation gloves" @@ -74,6 +76,10 @@ icon_state = "black" greyscale_colors = "#2f2e31" +/obj/item/clothing/gloves/race/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -7) + /obj/item/clothing/gloves/captain desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier. Swanky." name = "captain's gloves" @@ -90,6 +96,10 @@ resistance_flags = NONE clothing_traits = list(TRAIT_FAST_CUFFING) +/obj/item/clothing/gloves/captain/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /datum/armor/captain_gloves bio = 90 fire = 70 @@ -117,6 +127,10 @@ greyscale_colors = "#99eeff" clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_FASTMED) +/obj/item/clothing/gloves/latex/nitrile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/gloves/latex/coroner name = "coroner's gloves" desc = "Black gloves made from latex with a superhydrophobic coating. Useful for picking bodies up instead of dragging blood behind." @@ -156,42 +170,50 @@ clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_CHUNKYFINGERS) clothing_flags = THICKMATERIAL +/obj/item/clothing/gloves/atmos/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 6) + ///A pair of gloves that both allow the user to fish without the need of a held fishing rod and provides athletics experience. /obj/item/clothing/gloves/fishing name = "athletic fishing gloves" desc = "A pair of gloves to fish without a fishing rod but your raw athletics strength. It doubles as a good workout device. WARNING: May cause injuries when catching bigger fish." icon_state = "fishing_gloves" + ///The current fishing minigame datum the wearer is engaged in. + var/datum/fishing_challenge/challenge /obj/item/clothing/gloves/fishing/Initialize(mapload) . = ..() AddComponent(/datum/component/profound_fisher, new /obj/item/fishing_rod/mob_fisher/athletic(src)) + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //on top of the extra that you get from the athletics skill. /obj/item/clothing/gloves/fishing/equipped(mob/user, slot) . = ..() if(slot == ITEM_SLOT_GLOVES) - RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_ACTIVELY_FISHING), PROC_REF(begin_workout)) + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, PROC_REF(begin_workout)) /obj/item/clothing/gloves/fishing/dropped(mob/user) - UnregisterSignal(user, list(SIGNAL_ADDTRAIT(TRAIT_ACTIVELY_FISHING), SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING))) - STOP_PROCESSING(SSprocessing, src) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME) + if(challenge) + stop_workout(user) return ..() -/obj/item/clothing/gloves/fishing/proc/begin_workout(datum/source) +/obj/item/clothing/gloves/fishing/proc/begin_workout(datum/source, datum/fishing_challenge/challenge) SIGNAL_HANDLER - RegisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING), PROC_REF(stop_workout)) + RegisterSignal(source, COMSIG_MOB_COMPLETE_FISHING, PROC_REF(stop_workout)) if(HAS_TRAIT(source, TRAIT_PROFOUND_FISHER)) //Only begin working out if we're fishing with these gloves and not some other fishing rod.. START_PROCESSING(SSprocessing, src) + src.challenge = challenge /obj/item/clothing/gloves/fishing/proc/stop_workout(datum/source) SIGNAL_HANDLER - UnregisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING)) + UnregisterSignal(source, COMSIG_MOB_COMPLETE_FISHING) + challenge = null STOP_PROCESSING(SSprocessing, src) /obj/item/clothing/gloves/fishing/process(seconds_per_tick) var/mob/living/wearer = loc - var/list/trait_source = GET_TRAIT_SOURCES(wearer, TRAIT_ACTIVELY_FISHING) - var/datum/fishing_challenge/challenge = trait_source[1] - var/stamina_exhaustion = 2.5 + challenge.difficulty * 0.025 + var/stamina_exhaustion = 2 + challenge.difficulty * 0.02 var/is_heavy_gravity = wearer.has_gravity() > STANDARD_GRAVITY var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = wearer.get_organ_slot(ORGAN_SLOT_SPINE) if(istype(potential_spine)) @@ -227,7 +249,7 @@ return list() /obj/item/fishing_rod/mob_fisher/athletic/hook_hit(atom/atom_hit_by_hook_projectile, mob/user) - difficulty_modifier = -3 * user.mind?.get_skill_level(/datum/skill/athletics) + difficulty_modifier = -3 * (user.mind?.get_skill_level(/datum/skill/athletics) - 1) return ..() /obj/item/fishing_rod/mob_fisher/athletic/proc/noodling_is_dangerous(datum/source, atom/movable/reward, mob/living/user) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index bbe7f5dba18..d45fa8d0a90 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -22,6 +22,12 @@ var/tackle_speed = 1 /// See: [/datum/component/tackler/var/skill_mod] var/skill_mod = 1 + ///How much these gloves affect fishing difficulty + var/fishing_modifier = -5 + +/obj/item/clothing/gloves/tackler/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //fishing tackle equipment (ba dum tsh) /obj/item/clothing/gloves/tackler/Destroy() tackler = null @@ -55,6 +61,7 @@ tackle_speed = 2 min_distance = 2 skill_mod = -2 + fishing_modifier = -8 /obj/item/clothing/gloves/tackler/combat name = "gorilla gloves" @@ -106,9 +113,11 @@ base_knockdown = 1.75 SECONDS min_distance = 2 skill_mod = -1 + fishing_modifier = -3 /obj/item/clothing/gloves/tackler/football name = "football gloves" desc = "Gloves for football players! Teaches them how to tackle like a pro." icon_state = "tackle_gloves" inhand_icon_state = null + fishing_modifier = -3 diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 3cd88ffc8ed..9f7d01506f1 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -107,6 +107,10 @@ inhand_icon_state = null dog_fashion = /datum/dog_fashion/head/pirate +/obj/item/clothing/head/collectable/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels... a bit too realistic." @@ -129,6 +133,10 @@ icon_state = "wizard" dog_fashion = /datum/dog_fashion/head/blue_wizard +/obj/item/clothing/head/collectable/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -1) + /obj/item/clothing/head/collectable/hardhat name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" @@ -173,3 +181,7 @@ inhand_icon_state = "swatsyndie_helmet" clothing_flags = SNUG_FIT flags_inv = HIDEHAIR + +/obj/item/clothing/head/collectable/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) diff --git a/code/modules/clothing/head/fedora.dm b/code/modules/clothing/head/fedora.dm index cf0d23ac37f..7bf295f7455 100644 --- a/code/modules/clothing/head/fedora.dm +++ b/code/modules/clothing/head/fedora.dm @@ -36,6 +36,10 @@ icon_state = "fedora_carpskin" inhand_icon_state = null +/obj/item/clothing/head/fedora/carpskin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/head/fedora/beige/press name = "press fedora" desc = "An beige fedora with a piece of paper saying \"PRESS\" stuck in its rim." diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 1ea0e7dc825..1b86a8ea36c 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -238,6 +238,10 @@ dog_fashion = /datum/dog_fashion/head/pumpkin/unlit clothing_traits = list() +/obj/item/clothing/head/utility/hardhat/pumpkinhead/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /obj/item/clothing/head/utility/hardhat/pumpkinhead/set_light_on(new_value) . = ..() if(isnull(.)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2874a27b72b..b9b371d498c 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -201,6 +201,10 @@ visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/toggleable/riot/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /datum/armor/toggleable_riot melee = 50 bullet = 10 @@ -280,6 +284,10 @@ dog_fashion = null clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /datum/armor/helmet_swat melee = 40 bullet = 30 @@ -429,6 +437,10 @@ dog_fashion = null clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/knight/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /datum/armor/helmet_knight melee = 50 bullet = 10 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 5d5fc87d409..7b67cda761f 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -624,6 +624,10 @@ flags_inv = HIDEHAIR //Cover your head doctor! w_class = WEIGHT_CLASS_SMALL //surgery cap can be easily crumpled +/obj/item/clothing/head/utility/surgerycap/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/head/utility/surgerycap/attack_self(mob/user) . = ..() if(.) @@ -666,6 +670,10 @@ icon_state = "headmirror" body_parts_covered = NONE +/obj/item/clothing/head/utility/head_mirror/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/head/utility/head_mirror/examine(mob/user) . = ..() . += span_notice("In a properly lit room, you can use this to examine people's eyes, ears, and mouth closer.") diff --git a/code/modules/clothing/head/moth.dm b/code/modules/clothing/head/moth.dm index 58be10a1b0f..e040d834c9d 100644 --- a/code/modules/clothing/head/moth.dm +++ b/code/modules/clothing/head/moth.dm @@ -15,6 +15,7 @@ /obj/item/clothing/head/mothcap/original/Initialize(mapload) . = ..() AddComponent(/datum/component/scope, range_modifier = 1.2, zoom_method = ZOOM_METHOD_ITEM_ACTION, item_action_type = /datum/action/item_action/hands_free/moth_googles) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) /obj/item/clothing/head/mothcap/original/item_action_slot_check(slot, mob/user, datum/action/action) return (slot & ITEM_SLOT_HEAD) diff --git a/code/modules/clothing/head/pirate.dm b/code/modules/clothing/head/pirate.dm index 818478ccb7d..6d5d0a67f30 100644 --- a/code/modules/clothing/head/pirate.dm +++ b/code/modules/clothing/head/pirate.dm @@ -5,8 +5,9 @@ inhand_icon_state = null dog_fashion = /datum/dog_fashion/head/pirate -/obj/item/clothing/head/costume/pirate - var/datum/language/piratespeak/L = new +/obj/item/clothing/head/costume/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) /obj/item/clothing/head/costume/pirate/equipped(mob/user, slot) . = ..() diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index f8e7e80532f..62930574031 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -175,6 +175,7 @@ . = ..() AddComponent(/datum/component/speechmod, replacements = strings("crustacean_replacement.json", "crustacean")) //you asked for this. AddElement(/datum/element/skill_reward, /datum/skill/fishing) + AddComponent(/datum/component/adjust_fishing_difficulty, -4) #define PROPHAT_MOOD "prophat" diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm index e3f014875dd..000448fd725 100644 --- a/code/modules/clothing/head/welding.dm +++ b/code/modules/clothing/head/welding.dm @@ -18,6 +18,11 @@ resistance_flags = FIRE_PROOF clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT +/obj/item/clothing/head/utility/welding/Initialize(mapload) + . = ..() + if(!up) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /datum/armor/utility_welding melee = 10 fire = 100 @@ -26,6 +31,13 @@ /obj/item/clothing/head/utility/welding/attack_self(mob/user) adjust_visor(user) +/obj/item/clothing/head/utility/welding/adjust_visor(mob/user) + . = ..() + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/head/utility/welding/update_icon_state() . = ..() icon_state = "[initial(icon_state)][up ? "up" : ""]" diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index 05e5888168e..7b29519e12b 100644 --- a/code/modules/clothing/masks/animal_masks.dm +++ b/code/modules/clothing/masks/animal_masks.dm @@ -150,6 +150,18 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( animal_sounds_alt = list("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!") flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT +/obj/item/clothing/mask/animal/frog/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2) + +/obj/item/clothing/mask/animal/frog/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + +/obj/item/clothing/mask/animal/frog/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/mask/animal/frog/cursed cursed = TRUE @@ -227,6 +239,18 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( inhand_icon_state = null animal_sounds = list("RAWR!","Rawr!","GRR!","Growl!") +/obj/item/clothing/mask/animal/small/bear/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2) + +/obj/item/clothing/mask/animal/small/bear/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + +/obj/item/clothing/mask/animal/small/bear/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/mask/animal/small/bear/cursed cursed = TRUE @@ -275,5 +299,17 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( animal_sounds_alt = list("Eekum-bokum!", "Oomenacka!", "In mah head..... Zombi.... Zombi!") animal_sounds_alt_probability = 5 +/obj/item/clothing/mask/animal/small/tribal/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 4 : -4) + +/obj/item/clothing/mask/animal/small/tribal/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) + +/obj/item/clothing/mask/animal/small/tribal/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/mask/animal/small/tribal/cursed //adminspawn only. cursed = TRUE diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 2e75cebf5d9..46ad60e58de 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -24,6 +24,10 @@ w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/adjust) +/obj/item/clothing/mask/floortilebalaclava/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool + /obj/item/clothing/mask/floortilebalaclava/attack_self(mob/user) adjust_visor(user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index c5871d23c18..47ecf9a11f5 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -18,6 +18,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( armor_type = /datum/armor/mask_gas flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF resistance_flags = NONE + voice_filter = "lowpass=f=750,volume=2" ///Max numbers of installable filters var/max_filters = 1 ///List to keep track of each filter @@ -28,19 +29,19 @@ GLOBAL_LIST_INIT(clown_mask_options, list( var/has_fov = TRUE ///Cigarette in the mask var/obj/item/cigarette/cig - voice_filter = "lowpass=f=750,volume=2" + ///How much does this mask affect fishing difficulty + var/fishing_modifier = 2 /datum/armor/mask_gas bio = 100 -/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands) - . = ..() - if(!isinhands && cig) - . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') - /obj/item/clothing/mask/gas/Initialize(mapload) . = ..() init_fov() + + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + if(!max_filters || !starting_filter_type) return @@ -49,6 +50,11 @@ GLOBAL_LIST_INIT(clown_mask_options, list( LAZYADD(gas_filters, inserted_filter) has_filter = TRUE +/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands) + . = ..() + if(!isinhands && cig) + . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') + /obj/item/clothing/mask/gas/Destroy() QDEL_LAZYLIST(gas_filters) return..() @@ -222,6 +228,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF clothing_flags = parent_type::clothing_flags | INTERNALS_ADJUST_EXEMPT + fishing_modifier = 8 /datum/armor/gas_welding melee = 10 @@ -236,6 +243,12 @@ GLOBAL_LIST_INIT(clown_mask_options, list( . = ..() if(.) playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) + if(!fishing_modifier) + return + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/item/clothing/mask/gas/welding/update_icon_state() . = ..() @@ -266,6 +279,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( strip_delay = 60 w_class = WEIGHT_CLASS_SMALL has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/clown_hat name = "clown wig and mask" @@ -285,6 +299,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( has_fov = FALSE var/list/clownmask_designs = list() voice_filter = null // performer masks expect to be talked through + fishing_modifier = 0 /obj/item/clothing/mask/gas/clown_hat/plasmaman starting_filter_type = /obj/item/gas_filter/plasmaman @@ -327,6 +342,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/mime name = "mime mask" @@ -340,6 +356,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( actions_types = list(/datum/action/item_action/adjust) species_exception = list(/datum/species/golem) has_fov = FALSE + fishing_modifier = 0 var/list/mimemask_designs = list() /obj/item/clothing/mask/gas/mime/plasmaman @@ -384,6 +401,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" @@ -395,6 +413,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FLAMMABLE species_exception = list(/datum/species/golem) has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/cyborg name = "cyborg visor" @@ -403,6 +422,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FLAMMABLE has_fov = FALSE flags_cover = MASKCOVERSEYES + fishing_modifier = 0 /obj/item/clothing/mask/gas/owl_mask name = "owl mask" @@ -413,6 +433,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = -1 /obj/item/clothing/mask/gas/carp name = "carp mask" @@ -421,6 +442,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( inhand_icon_state = null has_fov = FALSE flags_cover = MASKCOVERSEYES + fishing_modifier = -3 /obj/item/clothing/mask/gas/tiki_mask name = "tiki mask" @@ -434,6 +456,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( max_integrity = 100 actions_types = list(/datum/action/item_action/adjust) dog_fashion = null + fishing_modifier = -2 var/list/tikimask_designs = list() /obj/item/clothing/mask/gas/tiki_mask/Initialize(mapload) @@ -476,6 +499,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FIRE_PROOF | ACID_PROOF flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT has_fov = FALSE + fishing_modifier = -2 /obj/item/clothing/mask/gas/prop name = "prop gas mask" @@ -486,6 +510,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSMOUTH resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/atmosprop name = "prop atmospheric gas mask" @@ -497,6 +522,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSMOUTH resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/driscoll name = "driscoll mask" @@ -505,3 +531,4 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_inv = HIDEFACIALHAIR w_class = WEIGHT_CLASS_NORMAL inhand_icon_state = null + fishing_modifier = 0 diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index cbfbc166cbc..c5e538d4446 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -57,6 +57,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_cover = MASKCOVERSMOUTH tint = 0 has_fov = FALSE + fishing_modifier = 0 unique_death = 'sound/voice/sec_death.ogg' COOLDOWN_DECLARE(hailer_cooldown) ///Decides the phrases available for use; defines used are the last index of a category of available phrases @@ -86,6 +87,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_inv = 0 flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + fishing_modifier = 2 /obj/item/clothing/mask/gas/sechailer/swat/spacepol name = "spacepol mask" @@ -103,6 +105,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( slot_flags = null aggressiveness = AGGR_GOOD_COP // Borgs are nicecurity! actions_types = list(/datum/action/item_action/halt) + fishing_modifier = 0 /obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I) . = ..() diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 839f3430cd9..c7cdb013a3b 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -213,6 +213,10 @@ desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" +/obj/item/clothing/neck/stethoscope/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] won't hear much!")) return OXYLOSS diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm index 03f174aa43c..68a7b1bb0ae 100644 --- a/code/modules/clothing/shoes/boots.dm +++ b/code/modules/clothing/shoes/boots.dm @@ -72,6 +72,10 @@ icon_state = "ftc_boots" inhand_icon_state = null +/obj/item/clothing/shoes/jackboots/floortile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool + /obj/item/clothing/shoes/winterboots name = "winter boots" desc = "Boots lined with 'synthetic' animal fur." @@ -175,6 +179,10 @@ icon_state = "pirateboots" inhand_icon_state = null +/obj/item/clothing/shoes/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/shoes/pirate/armored armor_type = /datum/armor/shoes_pirate strip_delay = 40 diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 699d6fa627b..c999a242a19 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -15,6 +15,7 @@ create_storage(storage_type = /datum/storage/pockets/shoes/clown) LoadComponent(/datum/component/squeak, squeak_sound, 50, falloff_exponent = 20) //die off quick please AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) + AddComponent(/datum/component/adjust_fishing_difficulty, 3) //Goofy /obj/item/clothing/shoes/clown_shoes/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index bf8000d9a08..4f2287f40d2 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -45,6 +45,7 @@ /obj/item/clothing/shoes/bronze/Initialize(mapload) . = ..() AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + AddComponent(/datum/component/adjust_fishing_difficulty, 4) /obj/item/clothing/shoes/cookflops desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" @@ -128,6 +129,7 @@ create_storage(storage_type = /datum/storage/pockets/shoes) LoadComponent(/datum/component/squeak, list('sound/effects/quack.ogg' = 1), 50, falloff_exponent = 20) + AddComponent(/datum/component/adjust_fishing_difficulty, -6) //deploy tactical duckling lure /obj/item/clothing/shoes/ducky_shoes/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/shoes/galoshes.dm b/code/modules/clothing/shoes/galoshes.dm index e743db6b742..d42b8ffddb3 100644 --- a/code/modules/clothing/shoes/galoshes.dm +++ b/code/modules/clothing/shoes/galoshes.dm @@ -12,11 +12,18 @@ can_be_bloody = FALSE custom_price = PAYCHECK_CREW * 3 can_be_tied = FALSE + ///How much these boots affect fishing difficulty + var/fishing_modifier = -3 + +/obj/item/clothing/shoes/galoshes/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." icon_state = "galoshes_dry" + fishing_modifier = -6 /datum/armor/shoes_galoshes bio = 100 diff --git a/code/modules/clothing/shoes/laceup.dm b/code/modules/clothing/shoes/laceup.dm index 7ee348ea6c4..808bf22f508 100644 --- a/code/modules/clothing/shoes/laceup.dm +++ b/code/modules/clothing/shoes/laceup.dm @@ -3,3 +3,7 @@ desc = "The height of fashion, and they're pre-polished!" icon_state = "laceups" equip_delay_other = 50 + +/obj/item/clothing/shoes/laceup/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) //You aren't going to fish with these are you? diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 2ae13924ded..38d4770244a 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -20,18 +20,30 @@ var/slowdown_active = 2 /// A list of traits we apply when we get activated var/list/active_traits = list(TRAIT_NO_SLIP_WATER, TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE, TRAIT_NEGATES_GRAVITY) + /// How much do these boots affect fishing when active + var/magpulse_fishing_modifier = 8 + /// How much do these boots affect fishing when not active + var/fishing_modifier = 4 /obj/item/clothing/shoes/magboots/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) RegisterSignal(src, COMSIG_SPEED_POTION_APPLIED, PROC_REF(on_speed_potioned)) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /// Signal handler for [COMSIG_SPEED_POTION_APPLIED]. Speed potion removes the active slowdown /obj/item/clothing/shoes/magboots/proc/on_speed_potioned(datum/source) SIGNAL_HANDLER - slowdown_active = 0 // Don't need to touch the actual slowdown here, since the speed potion does it for us + slowdown_active = 0 + + if(magpulse && magpulse_fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + magpulse_fishing_modifier = fishing_modifier /obj/item/clothing/shoes/magboots/verb/toggle() set name = "Toggle Magboots" @@ -47,7 +59,15 @@ if(magpulse) attach_clothing_traits(active_traits) slowdown += slowdown_active + if(magpulse_fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, magpulse_fishing_modifier) + else if(magpulse_fishing_modifier != fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) else + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + else if(magpulse_fishing_modifier != fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) detach_clothing_traits(active_traits) slowdown = max(initial(slowdown), slowdown - slowdown_active) // Just in case, for speed pot shenanigans @@ -71,9 +91,13 @@ base_icon_state = "advmag" slowdown_active = SHOES_SLOWDOWN // ZERO active slowdown resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + magpulse_fishing_modifier = 3 + fishing_modifier = 0 /obj/item/clothing/shoes/magboots/syndie name = "blood-red magboots" desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders." icon_state = "syndiemag0" base_icon_state = "syndiemag" + magpulse_fishing_modifier = 6 + fishing_modifier = 3 diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index caf84d9562d..124dfcee41c 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -25,6 +25,13 @@ resistance_flags = NONE dog_fashion = null slowdown = 0.5 + ///How much this helmet affects fishing difficulty + var/fishing_modifier = 3 + +/obj/item/clothing/head/helmet/space/Initialize(mapload) + . = ..() + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /datum/armor/helmet_space bio = 100 @@ -70,6 +77,8 @@ var/thermal_on = FALSE /// If this is FALSE the batery status UI will be disabled. This is used for suits that don't use bateries like the changeling's flesh suit mutation. var/show_hud = TRUE + ///How much this suit affects fishing difficulty + var/fishing_modifier = 5 /datum/armor/suit_space bio = 100 @@ -81,6 +90,9 @@ if(ispath(cell)) cell = new cell(src) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + /// Start Processing on the space suit when it is worn to heat the wearer /obj/item/clothing/suit/space/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/spacesuits/freedom.dm b/code/modules/clothing/spacesuits/freedom.dm index b0a08f4cc73..085b9c8deb7 100644 --- a/code/modules/clothing/spacesuits/freedom.dm +++ b/code/modules/clothing/spacesuits/freedom.dm @@ -9,6 +9,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF + fishing_modifier = 0 /datum/armor/space_freedom melee = 20 @@ -31,3 +32,4 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF slowdown = 0 + fishing_modifier = 0 diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm index 0fecc83ca11..8ead0aeaa66 100644 --- a/code/modules/clothing/spacesuits/pirate.dm +++ b/code/modules/clothing/spacesuits/pirate.dm @@ -7,6 +7,7 @@ armor_type = /datum/armor/space_pirate strip_delay = 40 equip_delay_other = 20 + fishing_modifier = -2 /datum/armor/space_pirate melee = 30 @@ -31,6 +32,7 @@ armor_type = /datum/armor/space_pirate strip_delay = 40 equip_delay_other = 20 + fishing_modifier = -3 /obj/item/clothing/head/helmet/space/pirate/tophat name = "designer pirate helmet" diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 09c8f5e7d08..b19e1e0f238 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -8,6 +8,7 @@ resistance_flags = FIRE_PROOF icon_state = "plasmaman_suit" inhand_icon_state = "plasmaman_suit" + fishing_modifier = 0 var/next_extinguish = 0 var/extinguish_cooldown = 100 var/extinguishes_left = 10 @@ -57,6 +58,7 @@ light_power = 0.8 light_color = "#ffcc99" light_on = FALSE + fishing_modifier = 0 var/helmet_on = FALSE var/smile = FALSE var/smile_color = COLOR_RED diff --git a/code/modules/clothing/spacesuits/santa.dm b/code/modules/clothing/spacesuits/santa.dm index f6bd1657606..08f01cc1869 100644 --- a/code/modules/clothing/spacesuits/santa.dm +++ b/code/modules/clothing/spacesuits/santa.dm @@ -8,6 +8,7 @@ flags_cover = HEADCOVERSEYES dog_fashion = /datum/dog_fashion/head/santa slowdown = 0 + fishing_modifier = 0 /obj/item/clothing/head/helmet/space/santahat/beardless icon = 'icons/obj/clothing/head/costume.dmi' @@ -26,3 +27,4 @@ inhand_icon_state = "santa" slowdown = 0 allowed = list(/obj/item) //for stuffing exta special presents + fishing_modifier = 0 diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index caaa32cc24b..dbe02400aa6 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -13,6 +13,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF + fishing_modifier = 0 /datum/armor/space_beret melee = 80 @@ -41,6 +42,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF + fishing_modifier = 0 /datum/armor/space_officer melee = 80 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6e56107173c..795eb0fea5e 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -294,6 +294,10 @@ equip_delay_other = 60 clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) +/obj/item/clothing/suit/armor/riot/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + /datum/armor/armor_riot melee = 50 bullet = 10 @@ -413,6 +417,10 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) +/obj/item/clothing/suit/armor/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + //All of the armor below is mostly unused @@ -695,6 +703,10 @@ /obj/item/gun/ballistic/bow ) +/obj/item/clothing/suit/armor/vest/military/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + /datum/armor/military melee = 45 bullet = 25 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 4ddfd31631d..4fa5eeb5a90 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -16,6 +16,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 6) /datum/armor/head_bio_hood bio = 100 @@ -40,6 +41,10 @@ equip_delay_other = 70 resistance_flags = ACID_PROOF +/obj/item/clothing/suit/bio_suit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 6) + //Standard biosuit, orange stripe /datum/armor/suit_bio_suit bio = 100 diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 566ca5557f7..a720f49b938 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -263,6 +263,10 @@ allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/rifle/boltaction/harpoon) hoodtype = /obj/item/clothing/head/hooded/carp_hood +/obj/item/clothing/suit/hooded/carp_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/head/hooded/carp_hood name = "carp hood" desc = "A hood attached to a carp costume." @@ -274,6 +278,10 @@ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/carp_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/head/hooded/carp_hood/equipped(mob/living/carbon/human/user, slot) ..() if (slot & ITEM_SLOT_HEAD) @@ -394,6 +402,10 @@ clothing_flags = THICKMATERIAL hoodtype = /obj/item/clothing/head/hooded/shark_hood +/obj/item/clothing/suit/hooded/shark_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/head/hooded/shark_hood name = "shark hood" desc = "A hood attached to a shark costume." @@ -404,6 +416,10 @@ clothing_flags = THICKMATERIAL flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/shark_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/suit/hooded/shork_costume // Oh God Why name = "shork costume" desc = "Why would you ever do this?" @@ -415,6 +431,10 @@ clothing_flags = THICKMATERIAL hoodtype = /obj/item/clothing/head/hooded/shork_hood +/obj/item/clothing/suit/hooded/shork_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /obj/item/clothing/head/hooded/shork_hood name = "shork hood" desc = "A hood attached to a shork costume." @@ -425,6 +445,10 @@ clothing_flags = THICKMATERIAL flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/shork_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!? name = "bloated human suit" desc = "A horribly bloated suit made from human skins." @@ -589,6 +613,10 @@ flags_1 = IS_PLAYER_COLORABLE_1 species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/costume/hawaiian/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/suit/costume/football_armor name = "football protective gear" desc = "Given to members of the football team!" diff --git a/code/modules/clothing/suits/ethereal.dm b/code/modules/clothing/suits/ethereal.dm index 6c53329a13e..1c86ca34094 100644 --- a/code/modules/clothing/suits/ethereal.dm +++ b/code/modules/clothing/suits/ethereal.dm @@ -14,6 +14,7 @@ /obj/item/clothing/suit/hooded/ethereal_raincoat/Initialize(mapload) . = ..() update_icon(UPDATE_OVERLAYS) + AddComponent(/datum/component/adjust_fishing_difficulty, -3) /obj/item/clothing/suit/hooded/ethereal_raincoat/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() @@ -28,6 +29,11 @@ name = "trailwarden oilcoat" desc = "A masterfully handcrafted oilslick coat, supposedly makes for excellent camouflage among Sprout's vegetation. You can hear a faint electrical buzz emanating from the luminescent pattern." greyscale_colors = "#32a87d" + hoodtype = /obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden + +/obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -5) /obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/equipped(mob/living/user, slot) . = ..() @@ -45,3 +51,9 @@ worn_icon = 'icons/mob/clothing/head/ethereal.dmi' body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR + +/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden + +/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm index 65213fd176d..965adc9b7e2 100644 --- a/code/modules/clothing/suits/ghostsheet.dm +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -16,6 +16,7 @@ . = ..() if(check_holidays(HALLOWEEN)) update_icon(UPDATE_OVERLAYS) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) /obj/item/clothing/suit/costume/ghost_sheet/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 7e6bdde01cd..2ba150ab692 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -52,6 +52,10 @@ greyscale_colors = "#313c6e" flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/suit/apron/overalls/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + //Captain /obj/item/clothing/suit/jacket/capjacket name = "captain's parade jacket" @@ -349,6 +353,10 @@ /obj/item/tank/internals/emergency_oxygen, ) +/obj/item/clothing/suit/apron/surgical/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) // FISH DOCTOR?! + //Curator /obj/item/clothing/suit/jacket/curator name = "treasure hunter's coat" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index e5cda21a78a..954fb9342e3 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -38,6 +38,10 @@ icon_state = "labcoat_cmo" inhand_icon_state = null +/obj/item/clothing/suit/toggle/labcoat/cmo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /datum/armor/toggle_labcoat bio = 50 fire = 50 @@ -55,6 +59,10 @@ icon_state = "labcoat_paramedic" inhand_icon_state = null +/obj/item/clothing/suit/toggle/labcoat/paramedic/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/suit/toggle/labcoat/mad name = "\proper The Mad's labcoat" desc = "It makes you look capable of konking someone on the noggin and shooting them into space." diff --git a/code/modules/clothing/suits/moth.dm b/code/modules/clothing/suits/moth.dm index dd0a7f016ac..076a0dd0b3c 100644 --- a/code/modules/clothing/suits/moth.dm +++ b/code/modules/clothing/suits/moth.dm @@ -16,7 +16,7 @@ /obj/item/clothing/suit/mothcoat/original/Initialize(mapload) . = ..() - + AddComponent(/datum/component/adjust_fishing_difficulty, -3) create_storage(storage_type = /datum/storage/pockets) /obj/item/clothing/suit/mothcoat/winter diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 1541c66a333..bb42fb1ed39 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -39,6 +39,10 @@ equip_delay_other = 60 resistance_flags = FIRE_PROOF +/obj/item/clothing/suit/utility/fire/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 7) + /datum/armor/utility_fire melee = 15 bullet = 5 @@ -104,6 +108,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) /datum/armor/utility_bomb_hood melee = 20 @@ -133,6 +138,10 @@ equip_delay_other = 70 resistance_flags = NONE +/obj/item/clothing/suit/utility/bomb_suit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /datum/armor/utility_bomb_suit melee = 20 laser = 20 @@ -179,6 +188,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 7) /datum/armor/utility_radiation bio = 60 @@ -212,3 +222,4 @@ /obj/item/clothing/suit/utility/radiation/Initialize(mapload) . = ..() AddElement(/datum/element/radiation_protected_clothing) + AddComponent(/datum/component/adjust_fishing_difficulty, 7) diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 53026e974bf..aa29fa47a20 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -11,6 +11,12 @@ clothing_flags = SNUG_FIT | CASTING_CLOTHES resistance_flags = FIRE_PROOF | ACID_PROOF dog_fashion = /datum/dog_fashion/head/blue_wizard + ///How much this hat affects fishing difficulty + var/fishing_modifier = -4 + +/obj/item/clothing/head/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh) /datum/armor/head_wizard melee = 30 @@ -48,6 +54,7 @@ armor_type = /datum/armor/none resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard + fishing_modifier = -1 /obj/item/clothing/head/wizard/chanterelle name = "chanterelle hat" @@ -114,6 +121,12 @@ equip_delay_other = 50 clothing_flags = CASTING_CLOTHES resistance_flags = FIRE_PROOF | ACID_PROOF + ///How much this robe affects fishing difficulty + var/fishing_modifier = -6 + +/obj/item/clothing/suit/wizrobe/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh) /datum/armor/suit_wizrobe melee = 30 @@ -181,17 +194,20 @@ inhand_icon_state = "wizrobe" armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/head/wizard/marisa/fake name = "witch hat" armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -1 /obj/item/clothing/head/wizard/tape/fake name = "tape hat" desc = "A hat designed exclusively from duct tape. You can barely see." armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -1 /obj/item/clothing/suit/wizrobe/marisa/fake name = "witch robe" @@ -200,12 +216,14 @@ inhand_icon_state = null armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/suit/wizrobe/tape/fake name = "tape robe" desc = "An outfit designed exclusively from duct tape. It was hard to put on." armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/suit/wizrobe/paper name = "papier-mache robe" // no non-latin characters! @@ -237,6 +255,7 @@ /obj/item/seeds, /obj/item/storage/bag/plants, ) + fishing_modifier = -4 /datum/armor/robe_durathread melee = 15 diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm index 8f40e623d8a..f08657cee07 100644 --- a/code/modules/clothing/under/jobs/civilian/curator.dm +++ b/code/modules/clothing/under/jobs/civilian/curator.dm @@ -28,6 +28,10 @@ inhand_icon_state = null worn_icon = 'icons/mob/clothing/under/civilian.dmi' +/obj/item/clothing/under/rank/civilian/curator/treasure_hunter/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/under/rank/civilian/curator/nasa name = "\improper NASA jumpsuit" desc = "It has a NASA logo on it and is made of space-proofed materials." diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 1574b64bbf0..2dea3324082 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -44,6 +44,10 @@ icon_state = "scrubscmo" inhand_icon_state = "w_suit" +/obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck name = "chief medical officer's turtleneck" desc = "A light blue turtleneck and tan khakis, for a chief medical officer with a superior sense of style." @@ -82,6 +86,10 @@ /obj/item/clothing/under/rank/medical/scrubs name = "medical scrubs" +/obj/item/clothing/under/rank/medical/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/under/rank/medical/scrubs/blue desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." icon_state = "scrubsblue" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 81002bd8a9e..ad5e3976206 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -58,6 +58,10 @@ can_adjust = FALSE resistance_flags = FIRE_PROOF | ACID_PROOF +/obj/item/clothing/under/misc/adminsuit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -15) + /datum/armor/clothing_under/adminsuit melee = 100 bullet = 100 diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 638b754c2b8..30f74920ef9 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -40,6 +40,10 @@ body_parts_covered = CHEST|GROIN|LEGS flags_inv = HIDESHOES +/obj/item/clothing/under/dress/wedding_dress/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/dress/eveninggown name = "evening gown" desc = "Fancy dress for space bar singers." @@ -50,6 +54,10 @@ flags_1 = IS_PLAYER_COLORABLE_1 greyscale_colors = "#e11f1f" +/obj/item/clothing/under/dress/eveninggown/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/dress/skirt name = "cardigan skirt" desc = "A nice skirt with a cute cardigan, very fancy!" diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm index 0dbf1880d7d..98f41f407ca 100644 --- a/code/modules/clothing/under/suits.dm +++ b/code/modules/clothing/under/suits.dm @@ -107,8 +107,16 @@ icon_state = "tuxedo" inhand_icon_state = null +/obj/item/clothing/under/suit/tuxedo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/suit/carpskin name = "carpskin suit" desc = "An luxurious suit made with only the finest scales, perfect for conducting dodgy business deals." icon_state = "carpskin_suit" inhand_icon_state = null + +/obj/item/clothing/under/suit/carpskin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index ff3061d3e59..e4653b1c9bd 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -34,6 +34,10 @@ can_adjust = FALSE supports_variations_flags = NONE +/obj/item/clothing/under/syndicate/bloodred/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //extra-tactical + /datum/armor/clothing_under/syndicate_bloodred melee = 10 bullet = 10 @@ -119,6 +123,10 @@ can_adjust = FALSE supports_variations_flags = NONE +/obj/item/clothing/under/syndicate/floortilecamo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) //tacticool + /obj/item/clothing/under/syndicate/soviet name = "Ratnik 5 tracksuit" desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in." @@ -160,6 +168,10 @@ supports_variations_flags = NONE armor_type = /datum/armor/clothing_under/syndicate_scrubs +/obj/item/clothing/under/syndicate/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /datum/armor/clothing_under/syndicate_scrubs melee = 10 bio = 50 diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm index 764626fddbf..c899c0c3abc 100644 --- a/code/modules/fishing/aquarium/fish_analyzer.dm +++ b/code/modules/fishing/aquarium/fish_analyzer.dm @@ -41,7 +41,7 @@ register_item_context() update_appearance() - + AddComponent(/datum/component/adjust_fishing_difficulty, -3, ITEM_SLOT_HANDS) /obj/item/fish_analyzer/examine(mob/user) . = ..() diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm index 6e0216dcb8c..4f329861ff9 100644 --- a/code/modules/fishing/fish_catalog.dm +++ b/code/modules/fishing/fish_catalog.dm @@ -6,6 +6,10 @@ custom_price = PAYCHECK_CREW * 2 starting_content = "Lot of fish stuff" //book wrappers could use cleaning so this is not necessary +/obj/item/book/manual/fish_catalog/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4, ITEM_SLOT_HANDS) + /obj/item/book/manual/fish_catalog/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/fishing/fish_movement.dm b/code/modules/fishing/fish_movement.dm index a328903617f..b288161b192 100644 --- a/code/modules/fishing/fish_movement.dm +++ b/code/modules/fishing/fish_movement.dm @@ -53,6 +53,10 @@ else long_jump_chance *= master.difficulty +/datum/fish_movement/proc/reset_difficulty_values() + short_jump_chance = initial(short_jump_chance) + long_jump_chance = initial(long_jump_chance) + ///The main proc, called by minigame every SSfishing tick while it's in the 'active' phase. /datum/fish_movement/proc/move_fish(seconds_per_tick) times_fired++ @@ -190,6 +194,12 @@ plunging_speed += round(plunging_speed * master.difficulty * 0.03) fish_idle_velocity += plunging_speed //so it can be safely subtracted if the fish starts at the bottom. +/datum/fish_movement/plunger/reset_difficulty_values() + . = ..() + if(is_plunging) + fish_idle_velocity -= plunging_speed + plunging_speed = initial(plunging_speed) + /datum/fish_movement/plunger/move_fish(seconds_per_tick) var/fish_area = FISHING_MINIGAME_AREA - master.fish_height if(is_plunging) diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index e2b4523448b..7fb33da74ff 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -288,6 +288,8 @@ inhand_icon_state = "artistic_toolbox" material_flags = NONE custom_price = PAYCHECK_CREW * 3 + ///How much holding this affects fishing difficulty + var/fishing_modifier = -2 /obj/item/storage/toolbox/fishing/Initialize(mapload) . = ..() @@ -296,6 +298,7 @@ /obj/item/fishing_rod, )) atom_storage.exception_hold = exception_cache + AddComponent(/datum/component/adjust_fishing_difficulty, -2, ITEM_SLOT_HANDS) /obj/item/storage/toolbox/fishing/PopulateContents() new /obj/item/bait_can/worm(src) @@ -326,6 +329,7 @@ desc = "Contains EVERYTHING (almost) you need for your fishing trip." icon_state = "gold" inhand_icon_state = "toolbox_gold" + fishing_modifier = -7 /obj/item/storage/toolbox/fishing/master/PopulateContents() new /obj/item/fishing_rod/telescopic/master(src) diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 0eb2d9846ab..073158b8fdc 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -32,6 +32,8 @@ ///The standard pixel height of the fish (minus a pixel on each direction for the sake of a better looking sprite) #define MINIGAME_FISH_HEIGHT 4 +GLOBAL_LIST_EMPTY(fishing_challenges_by_user) + /datum/fishing_challenge /// When the ui minigame phase started var/start_time @@ -120,8 +122,10 @@ RegisterSignal(comp.fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge)) comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, TYPE_PROC_REF(/datum/fish_source, roll_reward_minigame)) comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, TYPE_PROC_REF(/datum/fish_source, calculate_difficulty_minigame)) - comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_COMPLETED, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) + comp.fish_source.RegisterSignal(user, COMSIG_MOB_COMPLETE_FISHING, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) background = comp.fish_source.background + SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING, src) + GLOB.fishing_challenges_by_user[user] = src /// Enable special parameters if(rod.line) @@ -148,6 +152,7 @@ completion_loss += user.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER)/5 /datum/fishing_challenge/Destroy(force) + GLOB.fishing_challenges_by_user -= user if(!completed) complete(win = FALSE) if(fishing_line) @@ -192,7 +197,6 @@ active_effects = bitfield_to_list(special_effects & FISHING_MINIGAME_ACTIVE_EFFECTS) // If fishing line breaks los / rod gets dropped / deleted RegisterSignal(used_rod, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) - ADD_TRAIT(user, TRAIT_GONE_FISHING, WEAKREF(src)) user.add_mood_event("fishing", /datum/mood_event/fishing) RegisterSignal(user, COMSIG_MOB_CLICKON, PROC_REF(handle_click)) start_baiting_phase() @@ -308,8 +312,6 @@ if(phase == MINIGAME_PHASE) remove_minigame_hud() if(!QDELETED(user)) - UnregisterSignal(user, SIGNAL_REMOVETRAIT(TRAIT_GONE_FISHING)) - user.remove_traits(list(TRAIT_GONE_FISHING, TRAIT_ACTIVELY_FISHING), WEAKREF(src)) if(start_time) var/seconds_spent = (world.time - start_time) * 0.1 if(!(special_effects & FISHING_MINIGAME_RULE_NO_EXP)) @@ -319,7 +321,7 @@ if(win) if(reward_path != FISHING_DUD) playsound(location, 'sound/effects/bigsplash.ogg', 100) - SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_COMPLETED, user, win) + SEND_SIGNAL(user, COMSIG_MOB_COMPLETE_FISHING, src, win) if(!QDELETED(src)) qdel(src) @@ -419,16 +421,41 @@ var/damage = CEILING((world.time - start_time)/10 * FISH_DAMAGE_PER_SECOND, 1) reward.adjust_health(reward.health - damage) -///Get the difficulty and other variables, than start the minigame -/datum/fishing_challenge/proc/start_minigame_phase(auto_reel = FALSE) +/datum/fishing_challenge/proc/get_difficulty() var/list/difficulty_holder = list(0) SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, reward_path, used_rod, user, difficulty_holder) difficulty = difficulty_holder[1] //If you manage to be so well-equipped and skilled to completely crush the difficulty, just skip to the reward. if(difficulty <= 0) complete(TRUE) - return + return FALSE difficulty = clamp(round(difficulty), FISHING_MINIMUM_DIFFICULTY, 100) + return TRUE + +/datum/fishing_challenge/proc/update_difficulty() + if(phase != MINIGAME_PHASE) + return + var/old_difficulty = difficulty + //early return if the difficulty is the same or we crush the minigame all the way to 0 difficulty + if(!get_difficulty() || difficulty == old_difficulty) + return + bait_height = initial(bait_height) + experience_multiplier -= difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT + mover.reset_difficulty_values() + adjust_to_difficulty() + +/datum/fishing_challenge/proc/adjust_to_difficulty() + mover.adjust_to_difficulty() + bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) + bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) + experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT + fishing_hud.hud_bait.adjust_to_difficulty(src) + +///Get the difficulty and other variables, than start the minigame +/datum/fishing_challenge/proc/start_minigame_phase(auto_reel = FALSE) + SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, src) + if(!get_difficulty()) //we totalized 0 or less difficulty, instant win. + return if(difficulty > FISHING_DEFAULT_DIFFICULTY) completion -= MAX_FISH_COMPLETION_MALUS * (difficulty * 0.01) @@ -449,11 +476,6 @@ else mover = new /datum/fish_movement(src) - mover.adjust_to_difficulty() - - bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) - bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) - if(auto_reel) completion *= 1.3 else @@ -471,11 +493,14 @@ fish_position = rand(0, (FISHING_MINIGAME_AREA - fish_height) * 0.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)) + + adjust_to_difficulty() + phase = MINIGAME_PHASE deltimer(next_phase_timer) if((FISHING_MINIGAME_RULE_KILL in special_effects) && ispath(reward_path,/obj/item/fish)) @@ -483,7 +508,6 @@ var/wait_time = (initial(fish.health) / FISH_DAMAGE_PER_SECOND) SECONDS 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) @@ -709,18 +733,24 @@ icon = 'icons/hud/fishing_hud.dmi' icon_state = "bait" vis_flags = VIS_INHERIT_ID + ///The stored value we used to squish the bar based on the difficulty + var/current_vertical_transform /atom/movable/screen/hud_bait/Initialize(mapload, datum/hud/hud_owner, datum/fishing_challenge/challenge) . = ..() if(!challenge || challenge.bait_pixel_height == MINIGAME_BAIT_HEIGHT) return - var/static/icon_height - if(!icon_height) - var/list/icon_dimensions = get_icon_dimensions(icon) - icon_height = icon_dimensions["height"] - var/height_percent_diff = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT - transform = transform.Scale(1, height_percent_diff) - pixel_z = -icon_height * (1 - height_percent_diff) * 0.5 + adjust_to_difficulty(challenge) + +/atom/movable/screen/hud_bait/proc/adjust_to_difficulty(datum/fishing_challenge/challenge) + if(current_vertical_transform) + transform = transform.Scale(1, 1/current_vertical_transform) + pixel_z = 0 + var/list/icon_dimensions = get_icon_dimensions(icon) + var/icon_height = icon_dimensions["height"] + current_vertical_transform = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT + transform = transform.Scale(1, current_vertical_transform) + pixel_z = -icon_height * (1 - current_vertical_transform) * 0.5 /atom/movable/screen/hud_fish icon = 'icons/hud/fishing_hud.dmi' diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 7ee15cead66..f18637e3b35 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -79,7 +79,7 @@ /obj/item/fishing_rod/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - var/gone_fishing = HAS_TRAIT(user, TRAIT_GONE_FISHING) + var/gone_fishing = GLOB.fishing_challenges_by_user[user] if(currently_hooked || gone_fishing) context[SCREENTIP_CONTEXT_LMB] = (gone_fishing && spin_frequency) ? "Spin" : "Reel in" if(!gone_fishing) @@ -411,7 +411,7 @@ /// Ideally this will be replaced with generic slotted storage datum + display /obj/item/fishing_rod/proc/use_slot(slot, mob/user, obj/item/new_item) - if(fishing_line || HAS_TRAIT(user, TRAIT_GONE_FISHING)) + if(fishing_line || GLOB.fishing_challenges_by_user[user]) return var/obj/item/current_item switch(slot) @@ -545,7 +545,7 @@ if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return //the fishing minigame uses the attack_self signal to let the user end it early without having to drop the rod. - if(HAS_TRAIT(user, TRAIT_GONE_FISHING)) + if(GLOB.fishing_challenges_by_user[user]) return COMPONENT_BLOCK_TRANSFORM ///Gives feedback to the user, makes it show up inhand, toggles whether it can be used for fishing. diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 51ff20db513..815f3c34d23 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -222,21 +222,21 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) SEND_SIGNAL(src, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, reason) /** - * Proc called when the COMSIG_FISHING_CHALLENGE_COMPLETED signal is sent. + * Proc called when the COMSIG_MOB_COMPLETE_FISHING signal is sent. * Check if we've succeeded. If so, write into memory and dispense the reward. */ -/datum/fish_source/proc/on_challenge_completed(datum/fishing_challenge/source, mob/user, success) +/datum/fish_source/proc/on_challenge_completed(mob/user, datum/fishing_challenge/challenge, success) SIGNAL_HANDLER SHOULD_CALL_PARENT(TRUE) + UnregisterSignal(user, COMSIG_MOB_COMPLETE_FISHING) if(!success) 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.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) - source.used_rod.consume_bait(reward) + var/turf/fishing_spot = get_turf(challenge.float) + var/atom/movable/reward = dispense_reward(challenge.reward_path, user, fishing_spot) + if(reward) + user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = reward.name) + SEND_SIGNAL(challenge.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) + challenge.used_rod.consume_bait(reward) /// Gives out the reward if possible /datum/fish_source/proc/dispense_reward(reward_path, mob/fisherman, turf/fishing_spot) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 34f3de0cfa0..2a2d29bb08f 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -958,7 +958,7 @@ /obj/item/mod/module/fishing_glove name = "MOD fishing glove module" - desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one." + desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one, while also making it slightly easier." icon_state = "fishing_glove" complexity = 1 overlay_state_inactive = "fishing_glove" @@ -1013,17 +1013,20 @@ var/obj/item/gloves = mod?.get_part_from_slot(ITEM_SLOT_GLOVES) if(gloves && !QDELETED(mod)) qdel(gloves.GetComponent(/datum/component/profound_fisher)) + return ..() /obj/item/mod/module/fishing_glove/on_suit_activation() - if(!equipped) - return var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) - if(gloves) + if(!gloves) + return + gloves.AddComponent(/datum/component/adjust_fishing_difficulty, 5) + if(equipped) gloves.AddComponent(/datum/component/profound_fisher, equipped) /obj/item/mod/module/fishing_glove/on_suit_deactivation(deleting = FALSE) var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) if(gloves && !deleting) + qdel(gloves.GetComponent(/datum/component/adjust_fishing_difficulty)) qdel(gloves.GetComponent(/datum/component/profound_fisher)) /obj/item/mod/module/shock_absorber diff --git a/strings/fishing_tips.txt b/strings/fishing_tips.txt index 31d18f10196..ce8f601d375 100644 --- a/strings/fishing_tips.txt +++ b/strings/fishing_tips.txt @@ -43,4 +43,5 @@ You can get an experiscanner from science to perform fish scanning experiments, Fish is, of course, edible. Is it safe to eat raw? Well, if you've strong stomach, otherwise your best option is to cook it for a at least half a spessman minute if you don't want to catch nasty diseases. After researching the Advanced Fishing Technology Node, you can print special fishing gloves that let you fish without having to carry around a fishing rod. There's one pair that even trains athletics on top of fishing.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 to temporarily blind foes. \ No newline at end of file +Various clothing and handheld items, as well as chairs you sit on, can make fishing easier (or sometimes harder). A trained fisherman can tell what can help and what won't, so keep an eye out. +This may sound silly, but (live) squids and their ink sacs can be used as weapons to temporarily blind foes. \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index dbc982fe032..468ff56552f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1025,6 +1025,7 @@ #include "code\datums\components\_component.dm" #include "code\datums\components\acid.dm" #include "code\datums\components\action_item_overlay.dm" +#include "code\datums\components\adjust_fishing_difficulty.dm" #include "code\datums\components\admin_popup.dm" #include "code\datums\components\aggro_emote.dm" #include "code\datums\components\ai_has_target_timer.dm"