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"