diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 7f3867ce676..d3308a8a78f 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -20,7 +20,7 @@
/************************Hivelord core*******************/
/obj/item/organ/regenerative_core
name = "regenerative core"
- desc = "All that remains of a hivelord. It can be used to heal completely, but it will rapidly decay into uselessness."
+ desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness."
icon_state = "roro core 2"
item_flags = NOBLUDGEON
slot = "hivecore"
@@ -66,16 +66,16 @@
if(owner.health <= owner.crit_threshold)
ui_action_click()
-/obj/item/organ/regenerative_core/afterattack(atom/target, mob/user, proximity_flag)
- . = ..()
- if(proximity_flag && ishuman(target))
+///Handles applying the core, logging and status/mood events.
+/obj/item/organ/regenerative_core/proc/applyto(atom/target, mob/user)
+ if(ishuman(target))
var/mob/living/carbon/human/H = target
if(inert)
to_chat(user, "[src] has decayed and can no longer be used to heal.")
return
else
if(H.stat == DEAD)
- to_chat(user, "[src] are useless on the dead.")
+ to_chat(user, "[src] is useless on the dead.")
return
if(H != user)
H.visible_message("[user] forces [H] to apply [src]... Black tendrils entangle and reinforce [H.p_them()]!")
@@ -87,6 +87,15 @@
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "core", /datum/mood_event/healsbadman) //Now THIS is a miner buff (fixed - nerf)
qdel(src)
+/obj/item/organ/regenerative_core/afterattack(atom/target, mob/user, proximity_flag)
+ . = ..()
+ if(proximity_flag)
+ applyto(target, user)
+
+/obj/item/organ/regenerative_core/attack_self(mob/user)
+ if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ applyto(user, user)
+
/obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
. = ..()
if(!preserved && !inert)
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 861bee656ed..56dba521ebb 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -19,11 +19,15 @@
return attack_hand(user)
/obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user)
+ inject(M, user)
+
+///Handles all injection checks, injection and logging.
+/obj/item/reagent_containers/hypospray/proc/inject(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "[src] is empty!")
- return
+ return FALSE
if(!iscarbon(M))
- return
+ return FALSE
//Always log attemped injects for admins
var/list/injected = list()
@@ -35,20 +39,20 @@
if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1))) // Ignore flag should be checked first or there will be an error message.
to_chat(M, "You feel a tiny prick!")
to_chat(user, "You inject [M] with [src].")
-
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(M, INJECT, fraction)
+
if(M.reagents)
var/trans = 0
if(!infinite)
trans = reagents.trans_to(M, amount_per_transfer_from_this, transfered_by = user)
else
trans = reagents.copy_to(M, amount_per_transfer_from_this)
-
to_chat(user, "[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].")
-
-
log_combat(user, M, "injected", src, "([contained])")
+ return TRUE
+ return FALSE
+
/obj/item/reagent_containers/hypospray/CMO
list_reagents = list(/datum/reagent/medicine/omnizine = 30)
@@ -97,23 +101,16 @@
user.visible_message("[user] begins to choke on \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return OXYLOSS//ironic. he could save others from oxyloss, but not himself.
-/obj/item/reagent_containers/hypospray/medipen/attack(mob/M, mob/user)
- if(!reagents.total_volume)
- to_chat(user, "[src] is empty!")
- return
- ..()
- if(!iscyborg(user))
+/obj/item/reagent_containers/hypospray/inject(mob/living/M, mob/user)
+ . = ..()
+ if(.)
reagents.maximum_volume = 0 //Makes them useless afterwards
reagents.flags = NONE
- update_icon()
- addtimer(CALLBACK(src, .proc/cyborg_recharge, user), 80)
+ update_icon()
-/obj/item/reagent_containers/hypospray/medipen/proc/cyborg_recharge(mob/living/silicon/robot/user)
- if(!reagents.total_volume && iscyborg(user))
- var/mob/living/silicon/robot/R = user
- if(R.cell.use(100))
- reagents.add_reagent_list(list_reagents)
- update_icon()
+/obj/item/reagent_containers/hypospray/medipen/attack_self(mob/user)
+ if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ inject(user, user)
/obj/item/reagent_containers/hypospray/medipen/update_icon()
if(reagents.total_volume > 0)
@@ -161,14 +158,6 @@
amount_per_transfer_from_this = 57
list_reagents = list(/datum/reagent/medicine/salbutamol = 10, /datum/reagent/medicine/leporazine = 15, /datum/reagent/medicine/tricordrazine = 15, /datum/reagent/medicine/epinephrine = 10, /datum/reagent/medicine/lavaland_extract = 2, /datum/reagent/medicine/omnizine = 5)
-/obj/item/reagent_containers/hypospray/medipen/species_mutator
- name = "species mutator medipen"
- desc = "Embark on a whirlwind tour of racial insensitivity by \
- literally appropriating other races."
- volume = 1
- amount_per_transfer_from_this = 1
- list_reagents = list("unstablemutationtoxin" = 1)
-
/obj/item/reagent_containers/hypospray/combat/heresypurge
name = "holy water autoinjector"
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with 5 doses of a holy water mixture."