From 5cb6d250d02cc5c37291924a098be8a95cff3ebe Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 10 Apr 2017 01:16:49 -0400 Subject: [PATCH] Adds 'Subsleeving' into prey Allows the resleever to sleeve minds into people inside the resleeving pod's occupant, aka if you want you can print a new body for the person (or if you're wiping some existing person, take a living person), have someone eat them, then get in resleeving pod and revive them in a gut. That'll keep them from walking around and tripping too much, yuh. I'm sure there's a million crazy things you could do with this (eat person you want to impersonate, resleeve yourself into them while they're in your guts, then escape your own guts?) so have fun with that. For technical reasons, for now, you cannot sleeve the PRED if they have prey in them in the resleeving pod. It has to do with wiping out their bellies and forgetting where their prey are. This would happen to prey if the prey has their own prey, as well, but... don't? Also you can always just OOC escape if you get trapped like that. --- .../client/preference_setup/vore/04_resleeving.dm | 1 + code/modules/resleeving/computers.dm | 14 +++++++++++++- code/modules/resleeving/machines.dm | 11 ++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) 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)