You can use a fishing rod to snatch organs during organ manipulation surgery (feat organs sanity fix) (#87774)

## About The Pull Request
This allows you to use a fishing rod during the "manipulate organs" step
of the aforementioned surgery to snatch organs from a target.

Unlike other fish sources, this one has a negative fishing difficulty of
-20, which when summed with the default minigame difficulty should still
result in a negative difficulty. In layman terms, this means the
minigame is skipped here (unless you're wearing some clunky stuff like
insulated or boxing gloves). It also has a wait time of 8 to 13 seconds
versus the more random standard 3 to 25 seconds.

A small side-effect of this is that explosions during the "manipulate
organs" step will basically disembowel you, but it kinda fits anyway.

By the by, because of this, there is a tiny chance bluespace fishing
rods can yield you random organs. Worry not, they're newly generated, so
you won't be snatching it from another player by accident (at least for
now).

## Why It's Good For The Game
It adds more possible weird and rare shenanigans involving surgery.

## Changelog

🆑
Add: You can use a fishing rod to snatch organs during organ
manipulation surgery
/🆑
This commit is contained in:
Ghom
2024-11-20 23:13:18 +01:00
committed by GitHub
parent 538463ffbc
commit 6272b3680c
57 changed files with 286 additions and 215 deletions
@@ -93,8 +93,6 @@
var/datum/port/output/user_port
var/datum/weakref/user
var/obj/item/organ/cyberimp/bci/bci
/obj/item/circuit_component/bci_core/populate_ports()
@@ -111,19 +109,18 @@
/obj/item/circuit_component/bci_core/proc/update_charge_action()
CIRCUIT_TRIGGER
var/mob/living/carbon/resolved_owner = user?.resolve()
if (show_charge_meter.value)
if (charge_action)
return
charge_action = new(src)
if (resolved_owner)
charge_action.Grant(resolved_owner)
if (bci.owner)
charge_action.Grant(bci.owner)
bci.actions += charge_action
else
if (!charge_action)
return
if (resolved_owner)
charge_action.Remove(resolved_owner)
if (bci.owner)
charge_action.Remove(bci.owner)
bci.actions -= charge_action
QDEL_NULL(charge_action)
@@ -139,9 +136,8 @@
bci = shell
if (charge_action)
var/mob/living/carbon/resolved_owner = user?.resolve()
if (resolved_owner)
charge_action.Remove(resolved_owner)
if (bci.owner)
charge_action.Remove(bci.owner)
bci.actions -= charge_action
QDEL_NULL(charge_action)
@@ -158,14 +154,13 @@
if (!sent_message)
return
var/mob/living/carbon/resolved_owner = user?.resolve()
if (isnull(resolved_owner))
if (isnull(bci.owner))
return
if (resolved_owner.stat == DEAD)
if (bci.owner.stat == DEAD)
return
to_chat(resolved_owner, "<i>You hear a strange, robotic voice in your head...</i> \"[span_robot("[html_encode(sent_message)]")]\"")
to_chat(bci.owner, "<i>You hear a strange, robotic voice in your head...</i> \"[span_robot("[html_encode(sent_message)]")]\"")
/obj/item/circuit_component/bci_core/proc/on_organ_implanted(datum/source, mob/living/carbon/owner)
SIGNAL_HANDLER
@@ -173,7 +168,6 @@
update_charge_action()
user_port.set_output(owner)
user = WEAKREF(owner)
RegisterSignal(owner, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
RegisterSignal(owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(on_borg_charge))
@@ -183,7 +177,6 @@
SIGNAL_HANDLER
user_port.set_output(null)
user = null
UnregisterSignal(owner, list(
COMSIG_ATOM_EXAMINE,