From 7c3b3c43110aabd74148a9ae8ff1f328079819ec Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 11 Jun 2017 03:58:28 -0400 Subject: [PATCH] Adds the SleeveMate 3200 **This commit prevents dead people from being backup-implanted!** But it's fine because you just use this handheld thing to back them up instead and don't waste an implant, and medical starts with 4 so don't freak out. See below. Adds the SleeveMate 3200 hand-scanner device. This device allows you to scan people to determine several things about them: - If they have a mind in them - If they have a client attached - If their mind matches their body - If they are alive/conscious All of that is represented with in-universe messages of course. The real function of it is that it provides several features: - One-time mind scan: Performs a one-time mind scan for those that don't like getting mind backup implants. This will store that one scan in the database, but you'll forget everything since then if resleeved. This is also useful for resleeving someone who died without an implant, but is not DNR/DNC. - One-time body scan: Adds someone to the body scan database, or, updates their body scan if they obtained a new body. Useful if someone has used the body designer and switched bodies, as you can update their body scan. You should probably check medical records, and LOOC around before using this to resleeve someone that didn't have a body scan originally, because they may have picked that to avoid resleeving. - Store Whole Mind: Takes the entire mind from someone, storing it into the SleeveMate 3200, rendering the patient mindless. From there, it can be backed up as many times as needed, deleted, or stored into someone with a Soulcatcher NIFSoft and run live in their VR (so now you don't have to digest/kill people for that). Four SM3200's start in medical (1 in minimed downstairs, 3 upstairs), R&D can fab more, and they occasionally show up in trash piles for those wanting to be sneaky with a Soulcatcher, but who don't like digesting people. --- .../game/objects/items/devices/scanners_vr.dm | 211 ++++++++++++++++++ code/game/objects/structures/trash_pile.dm | 3 +- .../preference_setup/vore/04_resleeving.dm | 2 +- code/modules/research/designs_vr.dm | 8 + code/modules/resleeving/implant.dm | 2 +- code/modules/resleeving/infocore.dm | 14 +- code/modules/resleeving/machines.dm | 4 + icons/obj/device_alt.dmi | Bin 54974 -> 55528 bytes maps/tether/tether-01-surface.dmm | 2 +- maps/tether/tether-03-station.dmm | 6 +- vorestation.dme | 1 + 11 files changed, 242 insertions(+), 11 deletions(-) create mode 100644 code/game/objects/items/devices/scanners_vr.dm diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm new file mode 100644 index 00000000000..c0bd1391bc9 --- /dev/null +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -0,0 +1,211 @@ +var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob + +//SleeveMate! +/obj/item/device/sleevemate + name = "\improper SleeveMate 3200" + desc = "A hand-held sleeve management tool for performing one-time backups and managing mindstates." + icon = 'icons/obj/device_alt.dmi' + icon_state = "sleevemate" + item_state = "healthanalyzer" + flags = CONDUCT + slot_flags = SLOT_BELT + throwforce = 3 + w_class = ITEMSIZE_SMALL + throw_speed = 5 + throw_range = 10 + matter = list(DEFAULT_WALL_MATERIAL = 200) + origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) + + var/datum/mind/stored_mind + +/obj/item/device/sleevemate/attack(mob/living/M, mob/living/user) + if(ishuman(M)) + scan_mob(M, user) + else + to_chat(user,"Not a compatible subject to work with!") + +/obj/item/device/sleevemate/attack_self(mob/living/user) + if(!stored_mind) + to_chat(user,"No stored mind in \the [src].") + return + + var/choice = alert(user,"What would you like to do?","Stored: [stored_mind.name]","Delete","Backup","Cancel") + if(!stored_mind || user.get_active_hand() != src) + return + switch(choice) + if("Delete") + to_chat(user,"Internal copy of [stored_mind.name] deleted.") + stored_mind = null + update_icon() + if("Backup") + to_chat(user,"Internal copy of [stored_mind.name] backed up to database.") + transcore.m_backup(stored_mind,null,one_time = TRUE) + if("Cancel") + return + +/obj/item/device/sleevemate/proc/scan_mob(mob/living/carbon/human/H, mob/living/user) + var/output = "" + + output += "

[src.name] Scan Results
" + + //Mind name + output += "Sleeved Mind: " + if(H.mind) + output += "[H.mind.name]
" + else + output += "Unknown/None
" + + //Mind status + output += "Mind Status: " + if(H.client) + output += "Healthy
" + else + output += "Space Sleep Disorder
" + + //Body status + output += "Sleeve Status: " + switch(H.stat) + if(CONSCIOUS) + output += "Alive
" + if(UNCONSCIOUS) + output += "Unconscious
" + if(DEAD) + output += "Deceased
" + else + output += "Unknown
" + + //Mind/body comparison + output += "Sleeve Pair: " + if(H.mind && ckey(H.mind.key) != H.ckey) + output += "May not be correct body
" + else if(H.mind && ckey(H.mind.key) == H.ckey) + output += "Appears to be correct mind in body
" + else + output += "Unable to perform comparison
" + + //Actions + output += "
-- Possible Actions --
" + output += "Mind-Scan (One Time): \[Perform\]
" + output += "Body-Scan (One Time): \[Perform\]
" + + //Saving a mind + output += "Store Full Mind: " + if(stored_mind) + output += "Already Stored ([stored_mind.name])
" + else if(H.mind) + output += "\[Perform\]
" + else + output += "Unable
" + + //Soulcatcher transfer + if(stored_mind && H.nif) + var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) + if(SC) + output += "Store in Soulcatcher: \[Perform\]
" + + to_chat(user,output) + +/obj/item/device/sleevemate/Topic(href, href_list) + usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + + //Sanity checking/href-hacking checking + if(usr.get_active_hand() != src) + to_chat(usr,"You're not holding \the [src].") + return + + var/target_ref = href_list["target"] + var/mob/living/target = locate(target_ref) in mob_list + if(!target) + to_chat(usr,"Unable to operate on that target.") + return + + if(!usr.Adjacent(target)) + to_chat(usr,"You are too far from that target.") + return + + //The actual options + if(href_list["mindscan"]) + if(!target.mind) + to_chat(usr,"Target seems totally braindead.") + return + + var/nif + if(ishuman(target)) + var/mob/living/carbon/human/H = target + nif = H.nif + + usr.visible_message("[usr] begins scanning [target]'s mind.","You begin scanning [target]'s mind.") + if(do_after(usr,8 SECONDS,target)) + transcore.m_backup(target.mind,nif,one_time = TRUE) + to_chat(usr,"Mind backed up!") + else + to_chat(usr,"You must remain close to your target!") + + return + + if(href_list["bodyscan"]) + if(!ishuman(target)) + to_chat(usr,"Target is not of an acceeptable body type.") + return + + var/mob/living/carbon/human/H = target + + usr.visible_message("[usr] begins scanning [target]'s body.","You begin scanning [target]'s body.") + if(do_after(usr,8 SECONDS,target)) + var/datum/transhuman/body_record/BR = new() + BR.init_from_mob(H, TRUE, TRUE) + to_chat(usr,"Body scanned!") + else + to_chat(usr,"You must remain close to your target!") + + return + + if(href_list["mindsteal"]) + if(!target.mind) + to_chat(usr,"Target seems totally braindead.") + return + + usr.visible_message("[usr] begins downloading [target]'s mind!","You begin downloading [target]'s mind!") + if(do_after(usr,35 SECONDS,target)) //This is powerful, yo. + if(!stored_mind && target.mind) + stored_mind = target.mind + target.ghostize() + stored_mind.current = null + update_icon() + to_chat(usr,"Mind downloaded!") + + return + + if(href_list["mindput"]) + if(!stored_mind) + to_chat(usr,"\The [src] no longer has a stored mind.") + return + + var/mob/living/carbon/human/H = target + + if(!istype(target)) + return //href hacking only + + if(!H.nif) + return //Lost it? or href hacking + + var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) + if(!SC) + return //Uninstalled it? + + //Lazzzyyy. + if(!sleevemate_mob) + sleevemate_mob = new() + + stored_mind.active = TRUE //Setting this causes transfer_to, to key them into the mob + stored_mind.transfer_to(sleevemate_mob) + SC.catch_mob(sleevemate_mob) + stored_mind = null + to_chat(usr,"Mind transferred into Soulcatcher!") + update_icon() + +/obj/item/device/sleevemate/update_icon() + if(stored_mind) + icon_state = "[initial(icon_state)]_on" + else + icon_state = initial(icon_state) diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index c05c22d84f6..ed230b1a16a 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -227,7 +227,8 @@ prob(2);/obj/item/weapon/grenade/anti_photon, prob(1);/obj/item/weapon/cell/hyper/empty, prob(1);/obj/item/weapon/disk/nifsoft/compliance, - prob(1);/obj/item/device/nif/bad) + prob(1);/obj/item/device/nif/bad, + prob(1);/obj/item/device/sleevemate) var/obj/item/I = new path() return I diff --git a/code/modules/client/preference_setup/vore/04_resleeving.dm b/code/modules/client/preference_setup/vore/04_resleeving.dm index 93f105195cd..9eb3dcbaf0e 100644 --- a/code/modules/client/preference_setup/vore/04_resleeving.dm +++ b/code/modules/client/preference_setup/vore/04_resleeving.dm @@ -27,7 +27,7 @@ if(deleted(character) || deleted(pref)) return // They might have been deleted during the wait if(pref.resleeve_scan) - var/datum/transhuman/body_record/BR = new() //Clearly related to size. + var/datum/transhuman/body_record/BR = new() BR.init_from_mob(character, pref.resleeve_scan, pref.resleeve_lock) if(pref.resleeve_lock) character.resleeve_lock = character.ckey diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 2d6b1c0351d..26ef3f619e5 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -37,6 +37,14 @@ build_path = /obj/item/clothing/under/bluespace sort_string = "TAAAC" +/datum/design/item/sleevemate + name = "SleeveMate 3200" + id = "sleevemate" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) + build_path = /obj/item/device/sleevemate + sort_string = "TAAAD" + /datum/design/item/item/pressureinterlock name = "APP pressure interlock" id = "pressureinterlock" diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm index e6dd47b7050..6a3628a3cfe 100644 --- a/code/modules/resleeving/implant.dm +++ b/code/modules/resleeving/implant.dm @@ -32,7 +32,7 @@ if(other_imp && other_imp.imp_in == H) qdel(other_imp) //implant fight - if(H.mind) //One out here just in case they are dead + if(H.mind && H.stat < DEAD) //One right now, on implanting. transcore.m_backup(H.mind) last_attempt = world.time diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index 6ed0730cff9..532830b4b1a 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -28,7 +28,8 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(!curr_MR) log_debug("Tried to process [N] in transcore w/o a record!") continue - + if(curr_MR.one_time) + continue var/since_backup = world.time - curr_MR.last_update if(since_backup < overdue_time) curr_MR.dead_state = MR_NORMAL @@ -40,7 +41,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore spawn(process_time) process() -/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind,var/obj/item/device/nif/nif) +/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind,var/obj/item/device/nif/nif,var/one_time = FALSE) ASSERT(mind) if(!mind.name || core_dumped) return 0 @@ -50,6 +51,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(mind.name in backed_up) MR = backed_up[mind.name] MR.last_update = world.time + MR.one_time = one_time //Pass a 0 to not change NIF status (because the elseif is checking for null) if(nif) @@ -67,7 +69,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore MR.nif_software = null else - MR = new(mind, mind.current, 1) + MR = new(mind, mind.current, TRUE, one_time) return 1 @@ -134,9 +136,13 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/nif_durability var/list/nif_software -/datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1) + var/one_time = FALSE + +/datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1,var/one_time = FALSE) ASSERT(mind) + src.one_time = one_time + //The mind! mind_ref = mind mindname = mind.name diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 4216f6fb0a0..c36f32f109a 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -503,6 +503,10 @@ occupant.identifying_gender = MR.id_gender occupant.ooc_notes = MR.mind_oocnotes occupant.apply_vore_prefs() //Cheap hack for now to give them SOME bellies. + if(MR.one_time) + var/how_long = round((world.time - MR.last_update)/10/60) + to_chat(occupant,"Your mind backup was a 'one-time' backup. \ + You will not be able to remember anything since the backup, [how_long] minutes ago.") //Re-supply a NIF if one was backed up with them. if(MR.nif_path) diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index 1a256c07b06305fe229aaedbd3d57976a32eac9f..9c4d2f6b7b35493b9eb08a17662da1fe66d6d927 100644 GIT binary patch delta 14816 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�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