diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm
index feae05ae917..ddac25ee834 100644
--- a/code/controllers/subsystems/transcore_vr.dm
+++ b/code/controllers/subsystems/transcore_vr.dm
@@ -45,12 +45,18 @@ SUBSYSTEM_DEF(transcore)
current_run.len--
//Remove if not in a human anymore.
- if(!imp || !ishuman(imp.loc))
+ if(!imp || !isorgan(imp.loc))
implants -= imp
continue
- //We're in a human, at least.
- var/mob/living/carbon/human/H = imp.loc
+ //We're in an organ, at least.
+ var/obj/item/organ/external/EO = imp.loc
+ var/mob/living/carbon/human/H = EO.owner
+ if(!H)
+ implants -= imp
+ continue
+
+ //In a human
BITSET(H.hud_updateflag, BACKUP_HUD)
if(H == imp.imp_in && H.mind && H.stat < DEAD)
diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm
index 4b796cc56e6..ebcc2d9f546 100644
--- a/code/game/objects/items/weapons/implants/implant_vr.dm
+++ b/code/game/objects/items/weapons/implants/implant_vr.dm
@@ -3,43 +3,39 @@
desc = "Allows the user to understand and speak almost all known languages.."
var/uses = 1
- get_data()
- var/dat = {"
-Implant Specifications:
-Name: Language Implant
-Life: One day.
-Important Notes: Personnel with this implant can speak almost all known languages.
-
-Implant Details: Subjects injected with implant can understand and speak almost all known languages.
-Function: Contains specialized nanobots to stimulate the brain so the user can speak and understand previously unknown languages.
-Special Features: Will allow the user to understand almost all languages.
-Integrity: Implant can only be used once before the nanobots are depleted."}
- return dat
+/obj/item/weapon/implant/vrlanguage/get_data()
+ var/dat = {"
+ Implant Specifications:
+ Name: Language Implant
+ Life: One day.
+ Important Notes: Personnel with this implant can speak almost all known languages.
+
+ Implant Details: Subjects injected with implant can understand and speak almost all known languages.
+ Function: Contains specialized nanobots to stimulate the brain so the user can speak and understand previously unknown languages.
+ Special Features: Will allow the user to understand almost all languages.
+ Integrity: Implant can only be used once before the nanobots are depleted."}
+ return dat
+/obj/item/weapon/implant/vrlanguage/trigger(emote, mob/source as mob)
+ if (src.uses < 1)
+ return 0
+ if (emote == "smile")
+ src.uses--
+ to_chat(source,"You suddenly feel as if you can understand other languages!")
+ source.add_language(LANGUAGE_CHIMPANZEE)
+ source.add_language(LANGUAGE_NEAERA)
+ source.add_language(LANGUAGE_STOK)
+ source.add_language(LANGUAGE_FARWA)
+ source.add_language(LANGUAGE_UNATHI)
+ source.add_language(LANGUAGE_SIIK)
+ source.add_language(LANGUAGE_SKRELLIAN)
+ source.add_language(LANGUAGE_SCHECHI)
+ source.add_language(LANGUAGE_BIRDSONG)
+ source.add_language(LANGUAGE_SAGARU)
+ source.add_language(LANGUAGE_CANILUNZT)
+ source.add_language(LANGUAGE_SOL_COMMON) //In case they're giving a xenomorph an implant or something.
- trigger(emote, mob/source as mob)
- if (src.uses < 1) return 0
- if (emote == "smile")
- src.uses--
- source << "You suddenly feel as if you can understand other languages!"
- source.add_language(LANGUAGE_CHIMPANZEE)
- source.add_language(LANGUAGE_NEAERA)
- source.add_language(LANGUAGE_STOK)
- source.add_language(LANGUAGE_FARWA)
- source.add_language(LANGUAGE_UNATHI)
- source.add_language(LANGUAGE_SIIK)
- source.add_language(LANGUAGE_SKRELLIAN)
- source.add_language(LANGUAGE_SCHECHI)
- source.add_language(LANGUAGE_BIRDSONG)
- source.add_language(LANGUAGE_SAGARU)
- source.add_language(LANGUAGE_CANILUNZT)
- source.add_language(LANGUAGE_SOL_COMMON) //In case they're giving a xenomorph an implant or something.
-
-
- return
-
-
- implanted(mob/source)
- source.mind.store_memory("A implant can be activated by using the smile emote, say *smile to attempt to activate.", 0, 0)
- source << "The implanted language implant can be activated by using the smile emote, say *smile to attempt to activate."
- return 1
+/obj/item/weapon/implant/vrlanguage/post_implant(mob/source)
+ source.mind.store_memory("A implant can be activated by using the smile emote, say *smile to attempt to activate.", 0, 0)
+ to_chat(source,"The implanted language implant can be activated by using the smile emote, say *smile to attempt to activate.")
+ return 1
diff --git a/code/game/objects/items/weapons/implants/implantreagent_vr.dm b/code/game/objects/items/weapons/implants/implantreagent_vr.dm
index 1c4e9a9b040..83a586d2ba1 100644
--- a/code/game/objects/items/weapons/implants/implantreagent_vr.dm
+++ b/code/game/objects/items/weapons/implants/implantreagent_vr.dm
@@ -30,7 +30,7 @@
update()
return
-/obj/item/weapon/implant/reagent_generator/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
assigned_proc = new assigned_proc(source, verb_name, verb_desc)
diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm
index 0bfe571a8b9..adb3d38e1c3 100644
--- a/code/modules/resleeving/implant.dm
+++ b/code/modules/resleeving/implant.dm
@@ -27,13 +27,9 @@
SStranscore.implants -= src
return ..()
-/obj/item/weapon/implant/backup/implanted(var/mob/living/carbon/human/H)
- ..()
+/obj/item/weapon/implant/backup/post_implant(var/mob/living/carbon/human/H)
if(istype(H))
- var/obj/item/weapon/implant/backup/other_imp = locate(/obj/item/weapon/implant/backup,H)
- if(other_imp && other_imp.imp_in == H)
- qdel(other_imp) //implant fight
-
+ BITSET(H.hud_updateflag, BACKUP_HUD)
SStranscore.implants |= src
return 1
@@ -107,18 +103,10 @@
M.visible_message("[M] has been backup implanted by [user].")
var/obj/item/weapon/implant/backup/imp = imps[imps.len]
- if(imp.implanted(M))
- imp.forceMove(M)
+ if(imp.handle_implant(M,user.zone_sel.selecting))
+ imp.post_implant(M)
imps -= imp
- imp.imp_in = M
- imp.implanted = 1
add_attack_logs(user,M,"Implanted backup implant")
- if (ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- affected.implants += imp
- imp.part = affected
- BITSET(H.hud_updateflag, BACKUP_HUD)
update()
diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm
index 787d867eb89..69f0cfebd1a 100644
--- a/code/modules/resleeving/machines.dm
+++ b/code/modules/resleeving/machines.dm
@@ -538,14 +538,8 @@
//Give them a backup implant
var/obj/item/weapon/implant/backup/new_imp = new()
- if(new_imp.implanted(occupant))
- new_imp.loc = occupant
- new_imp.imp_in = occupant
- new_imp.implanted = 1
- //Put it in the head! Makes sense.
- var/obj/item/organ/external/affected = occupant.get_organ(BP_HEAD)
- affected.implants += new_imp
- new_imp.part = affected
+ if(new_imp.handle_implant(occupant, BP_HEAD))
+ new_imp.post_implant(occupant)
//Inform them and make them a little dizzy.
if(confuse_amount + blur_amount <= 16)
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index 4b0e1ece7b8..b01e3a9e2c2 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -725,7 +725,7 @@
random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_roiz
-/obj/item/weapon/implant/reagent_generator/roiz/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/roiz/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc
@@ -793,7 +793,7 @@
random_emote = list("hisses softly with a blush on her face", "bites down on her lower lip", "lets out a light huff")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_jasmine
-/obj/item/weapon/implant/reagent_generator/jasmine/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/jasmine/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc
@@ -861,7 +861,7 @@
random_emote = list("hisses softly with a blush on her face", "yelps in embarrassment", "grunts a little")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_yonra
-/obj/item/weapon/implant/reagent_generator/yonra/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/yonra/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc
@@ -945,7 +945,7 @@
random_emote = list("trembles and huffs, panting from the exertion.", "sees what has happened and covers her face with both hands!", "whimpers softly, her legs shivering, knees pointed inward from the feeling.")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_rischi
-/obj/item/weapon/implant/reagent_generator/rischi/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/rischi/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc
@@ -1011,7 +1011,7 @@
self_emote_descriptor = list("grab", "pick", "snatch")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_pumila_apple
-/obj/item/weapon/implant/reagent_generator/pumila_apple/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/pumila_apple/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc
@@ -1704,7 +1704,7 @@
random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little")
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_evian
-/obj/item/weapon/implant/reagent_generator/evian/implanted(mob/living/carbon/source)
+/obj/item/weapon/implant/reagent_generator/evian/post_implant(mob/living/carbon/source)
processing_objects += src
to_chat(source, "You implant [source] with \the [src].")
source.verbs |= assigned_proc