What you wear and on what chair you sit on can now influence fishing difficulty (#86646)

## About The Pull Request
A foreword, I had to refactor a few bits of shitcode my past self added
first. For context, the "gone fishing" and "actively fishing" traits
only had one source, which is the fishing challenge itself, ad there was
no way to access the challenge from outside its code, except for a few
weakrefs which were being used as sources for the aforementioned traits
(the shitcode in a nutshell). There were also a few signals that I
didn't like because they were being sent to the harder-to-access
challenge datum rather than the user. So I scrapped the traits for a
couple signals to send to the user, then added a global list as a mean
to easily access the challenge datum, and lastly changed the code to
accomodate the titled feature (and allow the challenge to recalculate
its difficulty DURING the minigame phase)

Moving on to the actual feature: I've added a component that can be
added to objects on which mobs can be buckled to or items. When equipped
in the right slots or buckled to, the object will adjust the difficulty
of current and future fishing challenges by a certain amount (more often
than not positive, but there're many exceptions) as long as the object
isn't equipped or the user is unbuckled.

I've been having some fun adding component to a ton of clothes in the
game as well as chairs. Way too many objects to enumerate, so I'll give
you the general idea:
- each carp-themed article provides a slight positive modifier (easier)
- some (not all) doctor-related garbs provide a marginal positive
modifier each (fish doctor jokes)
- floortile camo clothes have positive modifiers
- Tuxedo, laceups, gowns provide negative modifier (more difficult)
- utility garbs such as bio/bomb/rad hoods and suits are quite bad. Riot
armor too.
- boxing gloves are very, very bad. Insulated gloves and haul gauntlets
are also very bad, to a lesser degree.
- **tackle** gloves are good. (pun intended)
- wizard garbs are good, because wizards are good at casting. (also a
pun)
- magboots slightly bad. Space suits bad.
- Blindfolds and welding protection are also bad. Gas masks marginally
bad.
- Pirate attire is nice to have. (I just vibed a little on this one)
- plastic chairs are quite versatile because they can be carried around,
but the mime chair is the best, followed by ratvarian chairs.
- Fishing toolboxes, analyzers and the fish catalog are a plus, because
they can be held.
- And the fishing hat, obviously (not as great as you'd think)

Some of these may be subject to change depending on what people say.

## Why It's Good For The Game
A hundred lines of fishing challenge code made ever-so-slightly less
awful, and a way to modify fishing diffculty beside skills and bait.

## Changelog

🆑
add: Your current clothes and what chair you sit on can now influence
the difficulty of fishing minigames. Having a bare minimum of fishing
skill will let you distinguish which objects can help and which won't,
so keep an eye out. Holding fishing toolboxes, fish analyzers or fish
catalogs can also help.
/🆑
This commit is contained in:
Ghom
2024-09-18 00:33:04 +02:00
committed by GitHub
parent f6fa3ae4a2
commit ba4fa8fe07
72 changed files with 702 additions and 83 deletions
+8 -2
View File
@@ -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"
-5
View File
@@ -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"
-2
View File
@@ -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,
@@ -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
+1 -1
View File
@@ -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)
+5 -5
View File
@@ -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))
+1
View File
@@ -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"
@@ -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
@@ -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)
+1
View File
@@ -26,3 +26,4 @@
. = ..()
AddElement(/datum/element/earhealing)
AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
AddComponent(/datum/component/adjust_fishing_difficulty, -1)
+30 -1
View File
@@ -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 ..()
+4
View File
@@ -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
+4
View File
@@ -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
+1
View File
@@ -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"
+1
View File
@@ -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,\
+8
View File
@@ -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
+14
View File
@@ -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)
+1 -1
View File
@@ -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
+32 -10
View File
@@ -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 <b>athletics</b> strength. It doubles as a good workout device. <i><b>WARNING</b>: May cause injuries when catching bigger fish.</i>"
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)
+9
View File
@@ -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
+12
View File
@@ -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)
+4
View File
@@ -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."
+4
View File
@@ -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(.))
+12
View File
@@ -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
+8
View File
@@ -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 <i>closer</i>.")
+1
View File
@@ -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)
+3 -2
View File
@@ -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)
. = ..()
+1
View File
@@ -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"
+12
View File
@@ -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" : ""]"
@@ -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
+4
View File
@@ -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)
+33 -6
View File
@@ -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
+3
View File
@@ -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)
. = ..()
+4
View File
@@ -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
+8
View File
@@ -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
+1
View File
@@ -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)
. = ..()
+2
View File
@@ -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)
. = ..()
+7
View File
@@ -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
+4
View File
@@ -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?
+25 -1
View File
@@ -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
@@ -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)
. = ..()
@@ -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
@@ -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"
@@ -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
@@ -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
@@ -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
+12
View File
@@ -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
+5
View File
@@ -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
+28
View File
@@ -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!"
+12
View File
@@ -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)
@@ -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)
. = ..()
+8
View File
@@ -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"
+8
View File
@@ -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."
+1 -1
View File
@@ -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
+11
View File
@@ -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)
+19
View File
@@ -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
@@ -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."
@@ -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"
@@ -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
@@ -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!"
+8
View File
@@ -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)
+12
View File
@@ -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
@@ -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)
. = ..()
+4
View File
@@ -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)
+10
View File
@@ -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)
@@ -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)
+52 -22
View File
@@ -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'
+3 -3
View File
@@ -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.
+9 -9
View File
@@ -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)
+7 -4
View File
@@ -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
+2 -1
View File
@@ -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.
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.
+1
View File
@@ -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"