Athletic Fishing Gloves and Fishing Module to fish without a fishing rod (#85415)

## About The Pull Request
This PR adds a pair of fishing gloves that let you fish and work out at
once, and also a MODsuit module that lets you use MOD gloves to do the
same thing (without the workout, an external fishing rod has to be
inserted first). In both cases, you can equip or unequip bait, hook and
line by using the fishing rod interface which you can open by
right-clicking the gloves. To get both of them, you've to perform the
first fish scanning experiment.

I had to refactor the profound fisher component a bit to do this.

## Why It's Good For The Game
Interweaving a few different features with fishing. Fishing and
Athletics are both skills, so I thought it'd be nice if it were a way to
take advantage of both, and level them up accordingly. Also fishing
gloves with maxxed out athletics can make fishing a lot noticeably
easier at higher difficulty.

## Changelog

🆑
add: Added Athletic Fishing Gloves and Fishing Glove Module to the
advanced fishing tech node. Both can be used to fish without having to
hold a fishing rod. The athletic fishing gloves will also train your
athletics skill.
/🆑
This commit is contained in:
Ghom
2024-08-23 21:29:09 +00:00
committed by GitHub
parent 25f29b022e
commit c77c50ae3d
21 changed files with 336 additions and 70 deletions
@@ -953,6 +953,76 @@
balloon_alert(mod.wearer, "ammo box dispensed.")
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE)
/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."
icon_state = "fishing_glove"
complexity = 1
overlay_state_inactive = "fishing_glove"
incompatible_modules = (/obj/item/mod/module/fishing_glove)
required_slots = list(ITEM_SLOT_GLOVES)
var/obj/item/fishing_rod/equipped
/obj/item/mod/module/fishing_glove/Initialize(mapload)
. = ..()
register_context()
/obj/item/mod/module/fishing_glove/add_context(atom/source, list/context, obj/item/held_item, mob/user)
if(!held_item && equipped)
context[SCREENTIP_CONTEXT_RMB] = "Remove rod"
return CONTEXTUAL_SCREENTIP_SET
if(istype(held_item, /obj/item/fishing_rod))
context[SCREENTIP_CONTEXT_LMB] = "Insert rod"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/mod/module/fishing_glove/examine(mob/user)
. = ..()
. += span_info("You can [EXAMINE_HINT("right-click")] the modsuit gloves to open the fishing rod interface once attached and activated.")
if(equipped)
. += span_info("it has a [icon2html(equipped, user)] installed. [EXAMINE_HINT("Right-Click")] to remove it.")
/obj/item/mod/module/fishing_glove/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(!istype(tool, /obj/item/fishing_rod))
return ..()
if(equipped)
balloon_alert(user, "remove current rod first!")
if(!user.transferItemToLoc(tool, src))
user.balloon_alert(user, "it's stuck!")
equipped = tool
balloon_alert(user, "rod inserted")
playsound(src, 'sound/items/click.ogg', 50, TRUE)
return ITEM_INTERACT_SUCCESS
/obj/item/mod/module/fishing_glove/attack_hand_secondary(mob/user, list/modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
if(!equipped)
return
user.put_in_hands(equipped)
balloon_alert(user, "rod removed")
playsound(src, 'sound/items/click.ogg', 50, TRUE)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/mod/module/fishing_glove/Exited(atom/movable/gone)
if(gone == equipped)
equipped = null
var/obj/item/gloves = mod?.get_part_from_slot(ITEM_SLOT_GLOVES)
if(gloves && !QDELETED(mod))
qdel(gloves.GetComponent(/datum/component/profound_fisher))
/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)
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/profound_fisher))
/obj/item/mod/module/shock_absorber
name = "MOD shock absorption module"
desc = "A module that makes the user resistant to the knockdown inflicted by Stun Batons."