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)