diff --git a/code/modules/client/preference_setup/vore/04_resleeving.dm b/code/modules/client/preference_setup/vore/04_resleeving.dm
index 93174ad2dd..fc1b059f5e 100644
--- a/code/modules/client/preference_setup/vore/04_resleeving.dm
+++ b/code/modules/client/preference_setup/vore/04_resleeving.dm
@@ -29,6 +29,7 @@
BR.init_from_mob(character, pref.resleeve_scan, pref.resleeve_lock)
if(pref.resleeve_lock)
character.resleeve_lock = character.ckey
+ character.original_player = character.ckey
/datum/category_item/player_setup_item/vore/resleeve/content(var/mob/user)
. += "
"
diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm
index 7ca7de8912..8acfeacae1 100644
--- a/code/modules/resleeving/computers.dm
+++ b/code/modules/resleeving/computers.dm
@@ -323,6 +323,7 @@
temp = "Error: No sleevers detected."
else
var/mode = text2num(href_list["sleeve"])
+ var/override
var/obj/machinery/transhuman/resleever/sleever = sleevers[1]
if (sleevers.len > 1)
sleever = input(usr,"Select a resleeving pod to use", "Resleever selection") as anything in sleevers
@@ -337,6 +338,17 @@
if(sleever.occupant.resleeve_lock && active_mr.ckey != sleever.occupant.resleeve_lock)
temp = "Error: Mind incompatible with body."
+ var/list/subtargets = list()
+ for(var/mob/living/carbon/human/H in sleever.occupant)
+ if(H.resleeve_lock && active_mr.ckey != H.resleeve_lock)
+ continue
+ subtargets += H
+ if(subtargets.len)
+ var/oc_sanity = sleever.occupant
+ override = input(usr,"Multiple bodies detected. Select target for resleeving of [active_mr.mindname] manually. Sleeving of primary body is unsafe with sub-contents, and is not listed.", "Resleeving Target") as null|anything in subtargets
+ if(!override || oc_sanity != sleever.occupant || !(override in sleever.occupant))
+ temp = "Error: Target selection aborted."
+
if(2) //Card resleeving
if(sleever.sleevecards <= 0)
temp = "Error: No available cards in resleever."
@@ -352,7 +364,7 @@
//They were dead, or otherwise available.
if(!temp)
- sleever.putmind(active_mr,mode)
+ sleever.putmind(active_mr,mode,override)
temp = "Initiating resleeving..."
menu = 1
diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm
index 52c3a7b67b..1cc9df3682 100644
--- a/code/modules/resleeving/machines.dm
+++ b/code/modules/resleeving/machines.dm
@@ -471,7 +471,7 @@
return ..()
-/obj/machinery/transhuman/resleever/proc/putmind(var/datum/transhuman/mind_record/MR, mode = 1)
+/obj/machinery/transhuman/resleever/proc/putmind(var/datum/transhuman/mind_record/MR, mode = 1, var/mob/living/carbon/human/override = null)
if((!occupant || !istype(occupant) || occupant.stat >= DEAD) && mode == 1)
return 0
@@ -481,6 +481,12 @@
sleevecards--
return 1
+ //If we're sleeving a subtarget, briefly swap them to not need to duplicate tons of code.
+ var/mob/living/carbon/human/original_occupant
+ if(override)
+ original_occupant = occupant
+ occupant = override
+
//In case they already had a mind!
if(occupant && occupant.mind)
occupant << "You feel your mind being overwritten..."
@@ -525,6 +531,9 @@
if(occupant.mind && occupant.original_player && ckey(occupant.mind.key) != occupant.original_player)
log_and_message_admins("is now a cross-sleeved character. Body originally belonged to [occupant.real_name]. Mind is now [occupant.mind.name].",occupant)
+ if(original_occupant)
+ occupant = original_occupant
+
return 1
/obj/machinery/transhuman/resleever/proc/go_out(var/mob/M)